Merge "doc: raise doxygen lookup cache"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Sun, 16 Nov 2014 09:43:27 +0000 (09:43 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Sun, 16 Nov 2014 09:43:27 +0000 (09:43 +0000)
114 files changed:
RELEASE-NOTES-1.25
autoload.php [new file with mode: 0644]
includes/AutoLoader.php
includes/DefaultSettings.php
includes/GlobalFunctions.php
includes/Linker.php
includes/Setup.php
includes/Status.php
includes/api/ApiQuerySearch.php
includes/api/ApiQuerySiteinfo.php
includes/api/i18n/be-tarask.json
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/fr.json
includes/api/i18n/ja.json
includes/api/i18n/nl.json
includes/api/i18n/sr-ec.json [new file with mode: 0644]
includes/api/i18n/zh-hans.json
includes/db/DatabaseSqlite.php
includes/db/LoadBalancer.php
includes/filerepo/file/File.php
includes/installer/i18n/ckb.json
includes/installer/i18n/nap.json
includes/installer/i18n/nl.json
includes/libs/RunningStat.php
includes/libs/Xhprof.php [new file with mode: 0644]
includes/media/MediaTransformOutput.php
includes/objectcache/ObjectCacheSessionHandler.php
includes/parser/Parser.php
includes/profiler/Profiler.php
includes/profiler/ProfilerSimpleDB.php
includes/profiler/ProfilerSimpleUDP.php
includes/profiler/ProfilerStandard.php
includes/profiler/ProfilerStub.php
includes/profiler/ProfilerXhprof.php [new file with mode: 0644]
includes/profiler/SectionProfiler.php [new file with mode: 0644]
includes/specialpage/ImageQueryPage.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialUpload.php
includes/specials/SpecialUserlogin.php
includes/utils/AutoloadGenerator.php [new file with mode: 0644]
languages/classes/LanguageKk.php
languages/i18n/azb.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/ca.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/el.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/he.json
languages/i18n/ilo.json
languages/i18n/it.json
languages/i18n/kiu.json
languages/i18n/ko.json
languages/i18n/mai.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nl.json
languages/i18n/pl.json
languages/i18n/pms.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/ru.json
languages/i18n/rup.json
languages/i18n/scn.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/tt-cyrl.json
languages/i18n/uk.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/generateLocalAutoload.php [new file with mode: 0644]
resources/lib/oojs-ui/i18n/ka.json
resources/lib/oojs-ui/i18n/nl.json
resources/lib/oojs-ui/i18n/pl.json
resources/lib/oojs-ui/oojs-ui-apex.css
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-apex.svg.css
resources/lib/oojs-ui/oojs-ui-mediawiki.css
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui-mediawiki.svg.css
resources/lib/oojs-ui/oojs-ui.js
resources/src/mediawiki.skinning/content.css
resources/src/mediawiki.skinning/images/magnify-clip-ltr.png
resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg [new file with mode: 0644]
resources/src/mediawiki.skinning/images/magnify-clip-rtl.png
resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.changeslist.legend.css
skins/common/ajax.js [deleted symlink]
skins/common/images/bullet.gif [deleted file]
skins/common/images/magnify-clip-rtl.png [deleted file]
skins/common/images/magnify-clip.png [deleted file]
skins/common/images/redirectltr.png [deleted file]
skins/common/images/redirectrtl.png [deleted file]
skins/common/wikibits.js [deleted symlink]
tests/TestsAutoLoader.php
tests/phpunit/includes/api/ApiUploadTest.php
tests/phpunit/includes/api/query/ApiQueryBasicTest.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/db/TestORMRowTest.php
tests/phpunit/includes/diff/DiffOpTest.php
tests/phpunit/includes/exception/BadTitleErrorTest.php
tests/phpunit/includes/exception/ErrorPageErrorTest.php
tests/phpunit/includes/exception/ThrottledErrorTest.php
tests/phpunit/includes/libs/ObjectFactoryTest.php
tests/phpunit/includes/libs/XhprofTest.php [new file with mode: 0644]
tests/qunit/data/testrunner.js

index b649c2b..ea5e8b8 100644 (file)
@@ -150,6 +150,9 @@ 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.
 
+* (bug 64440) Kazakh (kk) wikis should no longer forcefully reset the user's
+  interface language to kk where unexpected.
+
 === 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
@@ -182,6 +185,9 @@ changes to languages because of Bugzilla reports.
   <https://www.mediawiki.org/xml/export-0.10.xsd>.
 * MWFunction::call() and MWFunction::callArray() were removed, having being
   deprecated in 1.22.
+* Deprecated the getInternalLinkAttributes, getInternalLinkAttributesObj,
+  and getInternalLinkAttributes methods in Linker, and removed
+  getExternalLinkAttributes method, which was deprecated in MediaWiki 1.18.
 
 == Compatibility ==
 
diff --git a/autoload.php b/autoload.php
new file mode 100644 (file)
index 0000000..c5fc22c
--- /dev/null
@@ -0,0 +1,1318 @@
+<?php
+// This file is generated, do not adjust manually
+
+global $wgAutoloadLocalClasses;
+
+$wgAutoloadLocalClasses = array(
+       'APCBagOStuff' => __DIR__ . '/includes/objectcache/APCBagOStuff.php',
+       'AbstractContent' => __DIR__ . '/includes/content/AbstractContent.php',
+       'Action' => __DIR__ . '/includes/actions/Action.php',
+       'ActiveUsersPager' => __DIR__ . '/includes/specials/SpecialActiveusers.php',
+       'AjaxDispatcher' => __DIR__ . '/includes/AjaxDispatcher.php',
+       'AjaxResponse' => __DIR__ . '/includes/AjaxResponse.php',
+       'AllMessagesTablePager' => __DIR__ . '/includes/specials/SpecialAllMessages.php',
+       'AllTrans' => __DIR__ . '/maintenance/language/alltrans.php',
+       'AlphabeticPager' => __DIR__ . '/includes/pager/AlphabeticPager.php',
+       'AlterSharedConstraints' => __DIR__ . '/maintenance/oracle/alterSharedConstraints.php',
+       'AncientPagesPage' => __DIR__ . '/includes/specials/SpecialAncientpages.php',
+       'AnsiTermColorer' => __DIR__ . '/maintenance/term/MWTerm.php',
+       'ApiBase' => __DIR__ . '/includes/api/ApiBase.php',
+       'ApiBlock' => __DIR__ . '/includes/api/ApiBlock.php',
+       'ApiClearHasMsg' => __DIR__ . '/includes/api/ApiClearHasMsg.php',
+       'ApiComparePages' => __DIR__ . '/includes/api/ApiComparePages.php',
+       'ApiCreateAccount' => __DIR__ . '/includes/api/ApiCreateAccount.php',
+       'ApiDelete' => __DIR__ . '/includes/api/ApiDelete.php',
+       'ApiDisabled' => __DIR__ . '/includes/api/ApiDisabled.php',
+       'ApiEditPage' => __DIR__ . '/includes/api/ApiEditPage.php',
+       'ApiEmailUser' => __DIR__ . '/includes/api/ApiEmailUser.php',
+       'ApiExpandTemplates' => __DIR__ . '/includes/api/ApiExpandTemplates.php',
+       'ApiFeedContributions' => __DIR__ . '/includes/api/ApiFeedContributions.php',
+       'ApiFeedRecentChanges' => __DIR__ . '/includes/api/ApiFeedRecentChanges.php',
+       'ApiFeedWatchlist' => __DIR__ . '/includes/api/ApiFeedWatchlist.php',
+       'ApiFileRevert' => __DIR__ . '/includes/api/ApiFileRevert.php',
+       'ApiFormatBase' => __DIR__ . '/includes/api/ApiFormatBase.php',
+       'ApiFormatDbg' => __DIR__ . '/includes/api/ApiFormatDbg.php',
+       'ApiFormatDump' => __DIR__ . '/includes/api/ApiFormatDump.php',
+       'ApiFormatFeedWrapper' => __DIR__ . '/includes/api/ApiFormatFeedWrapper.php',
+       'ApiFormatJson' => __DIR__ . '/includes/api/ApiFormatJson.php',
+       'ApiFormatNone' => __DIR__ . '/includes/api/ApiFormatNone.php',
+       'ApiFormatPhp' => __DIR__ . '/includes/api/ApiFormatPhp.php',
+       'ApiFormatRaw' => __DIR__ . '/includes/api/ApiFormatRaw.php',
+       'ApiFormatTxt' => __DIR__ . '/includes/api/ApiFormatTxt.php',
+       'ApiFormatWddx' => __DIR__ . '/includes/api/ApiFormatWddx.php',
+       'ApiFormatXml' => __DIR__ . '/includes/api/ApiFormatXml.php',
+       'ApiFormatXmlRsd' => __DIR__ . '/includes/api/ApiRsd.php',
+       'ApiFormatYaml' => __DIR__ . '/includes/api/ApiFormatYaml.php',
+       'ApiHelp' => __DIR__ . '/includes/api/ApiHelp.php',
+       'ApiImageRotate' => __DIR__ . '/includes/api/ApiImageRotate.php',
+       'ApiImport' => __DIR__ . '/includes/api/ApiImport.php',
+       'ApiImportReporter' => __DIR__ . '/includes/api/ApiImport.php',
+       'ApiLogin' => __DIR__ . '/includes/api/ApiLogin.php',
+       'ApiLogout' => __DIR__ . '/includes/api/ApiLogout.php',
+       'ApiMain' => __DIR__ . '/includes/api/ApiMain.php',
+       'ApiModuleManager' => __DIR__ . '/includes/api/ApiModuleManager.php',
+       'ApiMove' => __DIR__ . '/includes/api/ApiMove.php',
+       'ApiOpenSearch' => __DIR__ . '/includes/api/ApiOpenSearch.php',
+       'ApiOptions' => __DIR__ . '/includes/api/ApiOptions.php',
+       'ApiPageSet' => __DIR__ . '/includes/api/ApiPageSet.php',
+       'ApiParamInfo' => __DIR__ . '/includes/api/ApiParamInfo.php',
+       'ApiParse' => __DIR__ . '/includes/api/ApiParse.php',
+       'ApiPatrol' => __DIR__ . '/includes/api/ApiPatrol.php',
+       'ApiProtect' => __DIR__ . '/includes/api/ApiProtect.php',
+       'ApiPurge' => __DIR__ . '/includes/api/ApiPurge.php',
+       'ApiQuery' => __DIR__ . '/includes/api/ApiQuery.php',
+       'ApiQueryAllCategories' => __DIR__ . '/includes/api/ApiQueryAllCategories.php',
+       'ApiQueryAllDeletedRevisions' => __DIR__ . '/includes/api/ApiQueryAllDeletedRevisions.php',
+       'ApiQueryAllImages' => __DIR__ . '/includes/api/ApiQueryAllImages.php',
+       'ApiQueryAllLinks' => __DIR__ . '/includes/api/ApiQueryAllLinks.php',
+       'ApiQueryAllMessages' => __DIR__ . '/includes/api/ApiQueryAllMessages.php',
+       'ApiQueryAllPages' => __DIR__ . '/includes/api/ApiQueryAllPages.php',
+       'ApiQueryAllUsers' => __DIR__ . '/includes/api/ApiQueryAllUsers.php',
+       'ApiQueryBacklinks' => __DIR__ . '/includes/api/ApiQueryBacklinks.php',
+       'ApiQueryBacklinksprop' => __DIR__ . '/includes/api/ApiQueryBacklinksprop.php',
+       'ApiQueryBase' => __DIR__ . '/includes/api/ApiQueryBase.php',
+       'ApiQueryBlocks' => __DIR__ . '/includes/api/ApiQueryBlocks.php',
+       'ApiQueryCategories' => __DIR__ . '/includes/api/ApiQueryCategories.php',
+       'ApiQueryCategoryInfo' => __DIR__ . '/includes/api/ApiQueryCategoryInfo.php',
+       'ApiQueryCategoryMembers' => __DIR__ . '/includes/api/ApiQueryCategoryMembers.php',
+       'ApiQueryContributions' => __DIR__ . '/includes/api/ApiQueryUserContributions.php',
+       'ApiQueryContributors' => __DIR__ . '/includes/api/ApiQueryContributors.php',
+       'ApiQueryDeletedRevisions' => __DIR__ . '/includes/api/ApiQueryDeletedRevisions.php',
+       'ApiQueryDeletedrevs' => __DIR__ . '/includes/api/ApiQueryDeletedrevs.php',
+       'ApiQueryDisabled' => __DIR__ . '/includes/api/ApiQueryDisabled.php',
+       'ApiQueryDuplicateFiles' => __DIR__ . '/includes/api/ApiQueryDuplicateFiles.php',
+       'ApiQueryExtLinksUsage' => __DIR__ . '/includes/api/ApiQueryExtLinksUsage.php',
+       'ApiQueryExternalLinks' => __DIR__ . '/includes/api/ApiQueryExternalLinks.php',
+       'ApiQueryFileRepoInfo' => __DIR__ . '/includes/api/ApiQueryFileRepoInfo.php',
+       'ApiQueryFilearchive' => __DIR__ . '/includes/api/ApiQueryFilearchive.php',
+       'ApiQueryGeneratorBase' => __DIR__ . '/includes/api/ApiQueryBase.php',
+       'ApiQueryIWBacklinks' => __DIR__ . '/includes/api/ApiQueryIWBacklinks.php',
+       'ApiQueryIWLinks' => __DIR__ . '/includes/api/ApiQueryIWLinks.php',
+       'ApiQueryImageInfo' => __DIR__ . '/includes/api/ApiQueryImageInfo.php',
+       'ApiQueryImages' => __DIR__ . '/includes/api/ApiQueryImages.php',
+       'ApiQueryInfo' => __DIR__ . '/includes/api/ApiQueryInfo.php',
+       'ApiQueryLangBacklinks' => __DIR__ . '/includes/api/ApiQueryLangBacklinks.php',
+       'ApiQueryLangLinks' => __DIR__ . '/includes/api/ApiQueryLangLinks.php',
+       'ApiQueryLinks' => __DIR__ . '/includes/api/ApiQueryLinks.php',
+       'ApiQueryLogEvents' => __DIR__ . '/includes/api/ApiQueryLogEvents.php',
+       'ApiQueryORM' => __DIR__ . '/includes/api/ApiQueryORM.php',
+       'ApiQueryPagePropNames' => __DIR__ . '/includes/api/ApiQueryPagePropNames.php',
+       'ApiQueryPageProps' => __DIR__ . '/includes/api/ApiQueryPageProps.php',
+       'ApiQueryPagesWithProp' => __DIR__ . '/includes/api/ApiQueryPagesWithProp.php',
+       'ApiQueryPrefixSearch' => __DIR__ . '/includes/api/ApiQueryPrefixSearch.php',
+       'ApiQueryProtectedTitles' => __DIR__ . '/includes/api/ApiQueryProtectedTitles.php',
+       'ApiQueryQueryPage' => __DIR__ . '/includes/api/ApiQueryQueryPage.php',
+       'ApiQueryRandom' => __DIR__ . '/includes/api/ApiQueryRandom.php',
+       'ApiQueryRecentChanges' => __DIR__ . '/includes/api/ApiQueryRecentChanges.php',
+       'ApiQueryRevisions' => __DIR__ . '/includes/api/ApiQueryRevisions.php',
+       'ApiQueryRevisionsBase' => __DIR__ . '/includes/api/ApiQueryRevisionsBase.php',
+       'ApiQuerySearch' => __DIR__ . '/includes/api/ApiQuerySearch.php',
+       'ApiQuerySiteinfo' => __DIR__ . '/includes/api/ApiQuerySiteinfo.php',
+       'ApiQueryStashImageInfo' => __DIR__ . '/includes/api/ApiQueryStashImageInfo.php',
+       'ApiQueryTags' => __DIR__ . '/includes/api/ApiQueryTags.php',
+       'ApiQueryTokens' => __DIR__ . '/includes/api/ApiQueryTokens.php',
+       'ApiQueryUserInfo' => __DIR__ . '/includes/api/ApiQueryUserInfo.php',
+       'ApiQueryUsers' => __DIR__ . '/includes/api/ApiQueryUsers.php',
+       'ApiQueryWatchlist' => __DIR__ . '/includes/api/ApiQueryWatchlist.php',
+       'ApiQueryWatchlistRaw' => __DIR__ . '/includes/api/ApiQueryWatchlistRaw.php',
+       'ApiResult' => __DIR__ . '/includes/api/ApiResult.php',
+       'ApiRevisionDelete' => __DIR__ . '/includes/api/ApiRevisionDelete.php',
+       'ApiRollback' => __DIR__ . '/includes/api/ApiRollback.php',
+       'ApiRsd' => __DIR__ . '/includes/api/ApiRsd.php',
+       'ApiSetNotificationTimestamp' => __DIR__ . '/includes/api/ApiSetNotificationTimestamp.php',
+       'ApiTokens' => __DIR__ . '/includes/api/ApiTokens.php',
+       'ApiUnblock' => __DIR__ . '/includes/api/ApiUnblock.php',
+       'ApiUndelete' => __DIR__ . '/includes/api/ApiUndelete.php',
+       'ApiUpload' => __DIR__ . '/includes/api/ApiUpload.php',
+       'ApiUserrights' => __DIR__ . '/includes/api/ApiUserrights.php',
+       'ApiWatch' => __DIR__ . '/includes/api/ApiWatch.php',
+       'ArchivedFile' => __DIR__ . '/includes/filerepo/file/ArchivedFile.php',
+       'ArrayDiffFormatter' => __DIR__ . '/includes/diff/ArrayDiffFormatter.php',
+       'ArrayUtils' => __DIR__ . '/includes/libs/ArrayUtils.php',
+       'Article' => __DIR__ . '/includes/page/Article.php',
+       'AssembleUploadChunksJob' => __DIR__ . '/includes/jobqueue/jobs/AssembleUploadChunksJob.php',
+       'AtomFeed' => __DIR__ . '/includes/Feed.php',
+       'AttachLatest' => __DIR__ . '/maintenance/attachLatest.php',
+       'AuthPlugin' => __DIR__ . '/includes/AuthPlugin.php',
+       'AuthPluginUser' => __DIR__ . '/includes/AuthPlugin.php',
+       'AutoLoader' => __DIR__ . '/includes/AutoLoader.php',
+       'AutoloadGenerator' => __DIR__ . '/includes/utils/AutoloadGenerator.php',
+       'Autopromote' => __DIR__ . '/includes/Autopromote.php',
+       'BacklinkCache' => __DIR__ . '/includes/cache/BacklinkCache.php',
+       'BacklinkJobUtils' => __DIR__ . '/includes/jobqueue/utils/BacklinkJobUtils.php',
+       'BackupDumper' => __DIR__ . '/maintenance/backup.inc',
+       'BackupReader' => __DIR__ . '/maintenance/importDump.php',
+       'BadTitleError' => __DIR__ . '/includes/exception/BadTitleError.php',
+       'BagOStuff' => __DIR__ . '/includes/objectcache/BagOStuff.php',
+       'BaseDump' => __DIR__ . '/maintenance/backupPrefetch.inc',
+       'BaseTemplate' => __DIR__ . '/includes/skins/BaseTemplate.php',
+       'BatchedQueryRunner' => __DIR__ . '/maintenance/runBatchedQuery.php',
+       'BcryptPassword' => __DIR__ . '/includes/password/BcryptPassword.php',
+       'BenchHttpHttps' => __DIR__ . '/maintenance/benchmarks/bench_HTTP_HTTPS.php',
+       'BenchIfSwitch' => __DIR__ . '/maintenance/benchmarks/bench_if_switch.php',
+       'BenchStrtrStrReplace' => __DIR__ . '/maintenance/benchmarks/bench_strtr_str_replace.php',
+       'BenchUtf8TitleCheck' => __DIR__ . '/maintenance/benchmarks/bench_utf8_title_check.php',
+       'BenchWfBaseConvert' => __DIR__ . '/maintenance/benchmarks/bench_wfBaseConvert.php',
+       'BenchWfIsWindows' => __DIR__ . '/maintenance/benchmarks/bench_wfIsWindows.php',
+       'BenchmarkDeleteTruncate' => __DIR__ . '/maintenance/benchmarks/bench_delete_truncate.php',
+       'BenchmarkHooks' => __DIR__ . '/maintenance/benchmarks/benchmarkHooks.php',
+       'BenchmarkParse' => __DIR__ . '/maintenance/benchmarks/benchmarkParse.php',
+       'BenchmarkPurge' => __DIR__ . '/maintenance/benchmarks/benchmarkPurge.php',
+       'Benchmarker' => __DIR__ . '/maintenance/benchmarks/Benchmarker.php',
+       'BitmapHandler' => __DIR__ . '/includes/media/Bitmap.php',
+       'BitmapHandler_ClientOnly' => __DIR__ . '/includes/media/Bitmap_ClientOnly.php',
+       'BitmapMetadataHandler' => __DIR__ . '/includes/media/BitmapMetadataHandler.php',
+       'Blob' => __DIR__ . '/includes/db/DatabaseUtility.php',
+       'Block' => __DIR__ . '/includes/Block.php',
+       'BlockListPager' => __DIR__ . '/includes/specials/SpecialBlockList.php',
+       'BloomCache' => __DIR__ . '/includes/cache/bloom/BloomCache.php',
+       'BloomCacheRedis' => __DIR__ . '/includes/cache/bloom/BloomCacheRedis.php',
+       'BloomFilterTitleHasLogs' => __DIR__ . '/includes/cache/bloom/BloomFilters.php',
+       'BmpHandler' => __DIR__ . '/includes/media/BMP.php',
+       'BrokenRedirectsPage' => __DIR__ . '/includes/specials/SpecialBrokenRedirects.php',
+       'CLDRPluralRuleConverter' => __DIR__ . '/languages/utils/CLDRPluralRuleConverter.php',
+       'CLDRPluralRuleConverterExpression' => __DIR__ . '/languages/utils/CLDRPluralRuleConverterExpression.php',
+       'CLDRPluralRuleConverterFragment' => __DIR__ . '/languages/utils/CLDRPluralRuleConverterFragment.php',
+       'CLDRPluralRuleConverterOperator' => __DIR__ . '/languages/utils/CLDRPluralRuleConverterOperator.php',
+       'CLDRPluralRuleError' => __DIR__ . '/languages/utils/CLDRPluralRuleError.php',
+       'CLDRPluralRuleEvaluator' => __DIR__ . '/languages/utils/CLDRPluralRuleEvaluator.php',
+       'CLDRPluralRuleEvaluatorRange' => __DIR__ . '/languages/utils/CLDRPluralRuleEvaluatorRange.php',
+       'CLIParser' => __DIR__ . '/maintenance/parse.php',
+       'CSSMin' => __DIR__ . '/includes/libs/CSSMin.php',
+       'CacheDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
+       'CacheHelper' => __DIR__ . '/includes/cache/CacheHelper.php',
+       'CacheTime' => __DIR__ . '/includes/parser/CacheTime.php',
+       'CachedAction' => __DIR__ . '/includes/actions/CachedAction.php',
+       'CapsCleanup' => __DIR__ . '/maintenance/cleanupCaps.php',
+       'Category' => __DIR__ . '/includes/Category.php',
+       'CategoryFinder' => __DIR__ . '/includes/CategoryFinder.php',
+       'CategoryPage' => __DIR__ . '/includes/page/CategoryPage.php',
+       'CategoryPager' => __DIR__ . '/includes/specials/SpecialCategories.php',
+       'CategoryViewer' => __DIR__ . '/includes/CategoryViewer.php',
+       'CdbException' => __DIR__ . '/includes/libs/cdb/CdbException.php',
+       'CdbFunctions' => __DIR__ . '/includes/libs/cdb/CdbFunctions.php',
+       'CdbReader' => __DIR__ . '/includes/libs/cdb/CdbReader.php',
+       'CdbReaderDBA' => __DIR__ . '/includes/libs/cdb/CdbReaderDBA.php',
+       'CdbReaderPHP' => __DIR__ . '/includes/libs/cdb/CdbReaderPHP.php',
+       'CdbWriter' => __DIR__ . '/includes/libs/cdb/CdbWriter.php',
+       'CdbWriterDBA' => __DIR__ . '/includes/libs/cdb/CdbWriterDBA.php',
+       'CdbWriterPHP' => __DIR__ . '/includes/libs/cdb/CdbWriterPHP.php',
+       'CgzCopyTransaction' => __DIR__ . '/maintenance/storage/recompressTracked.php',
+       'ChangePassword' => __DIR__ . '/maintenance/changePassword.php',
+       'ChangeTags' => __DIR__ . '/includes/ChangeTags.php',
+       'ChangesFeed' => __DIR__ . '/includes/changes/ChangesFeed.php',
+       'ChangesList' => __DIR__ . '/includes/changes/ChangesList.php',
+       'ChangesListSpecialPage' => __DIR__ . '/includes/specialpage/ChangesListSpecialPage.php',
+       'ChannelFeed' => __DIR__ . '/includes/Feed.php',
+       'CheckBadRedirects' => __DIR__ . '/maintenance/checkBadRedirects.php',
+       'CheckExtensionsCLI' => __DIR__ . '/maintenance/language/checkLanguage.inc',
+       'CheckImages' => __DIR__ . '/maintenance/checkImages.php',
+       'CheckLanguageCLI' => __DIR__ . '/maintenance/language/checkLanguage.inc',
+       'CheckLess' => __DIR__ . '/maintenance/checkLess.php',
+       'CheckStorage' => __DIR__ . '/maintenance/storage/checkStorage.php',
+       'CheckSyntax' => __DIR__ . '/maintenance/checkSyntax.php',
+       'CheckUsernames' => __DIR__ . '/maintenance/checkUsernames.php',
+       'ChronologyProtector' => __DIR__ . '/includes/db/ChronologyProtector.php',
+       'ClassCollector' => __DIR__ . '/includes/utils/AutoloadGenerator.php',
+       'CleanupAncientTables' => __DIR__ . '/maintenance/cleanupAncientTables.php',
+       'CleanupBlocks' => __DIR__ . '/maintenance/cleanupBlocks.php',
+       'CleanupPreferences' => __DIR__ . '/maintenance/cleanupPreferences.php',
+       'CleanupRemovedModules' => __DIR__ . '/maintenance/cleanupRemovedModules.php',
+       'CleanupSpam' => __DIR__ . '/maintenance/cleanupSpam.php',
+       'ClearCacheStats' => __DIR__ . '/maintenance/clearCacheStats.php',
+       'ClearInterwikiCache' => __DIR__ . '/maintenance/clearInterwikiCache.php',
+       'CliInstaller' => __DIR__ . '/includes/installer/CliInstaller.php',
+       'CloneDatabase' => __DIR__ . '/includes/db/CloneDatabase.php',
+       'CodeContentHandler' => __DIR__ . '/includes/content/CodeContentHandler.php',
+       'Collation' => __DIR__ . '/includes/Collation.php',
+       'CollationCkb' => __DIR__ . '/includes/Collation.php',
+       'CollationEt' => __DIR__ . '/includes/Collation.php',
+       'CommandLineInc' => __DIR__ . '/maintenance/commandLine.inc',
+       'CommandLineInstaller' => __DIR__ . '/maintenance/install.php',
+       'CompareParserCache' => __DIR__ . '/maintenance/compareParserCache.php',
+       'CompareParsers' => __DIR__ . '/maintenance/compareParsers.php',
+       'ComposerHookHandler' => __DIR__ . '/includes/composer/ComposerHookHandler.php',
+       'ComposerPackageModifier' => __DIR__ . '/includes/composer/ComposerPackageModifier.php',
+       'ComposerVersionNormalizer' => __DIR__ . '/includes/composer/ComposerVersionNormalizer.php',
+       'CompressOld' => __DIR__ . '/maintenance/storage/compressOld.php',
+       'ConcatenatedGzipHistoryBlob' => __DIR__ . '/includes/HistoryBlob.php',
+       'Config' => __DIR__ . '/includes/config/Config.php',
+       'ConfigException' => __DIR__ . '/includes/config/ConfigException.php',
+       'ConfigFactory' => __DIR__ . '/includes/config/ConfigFactory.php',
+       'ConstantDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
+       'Content' => __DIR__ . '/includes/content/Content.php',
+       'ContentHandler' => __DIR__ . '/includes/content/ContentHandler.php',
+       'ContextSource' => __DIR__ . '/includes/context/ContextSource.php',
+       'ContribsPager' => __DIR__ . '/includes/specials/SpecialContributions.php',
+       'ConvertLinks' => __DIR__ . '/maintenance/convertLinks.php',
+       'ConvertUserOptions' => __DIR__ . '/maintenance/convertUserOptions.php',
+       'ConverterRule' => __DIR__ . '/languages/ConverterRule.php',
+       'Cookie' => __DIR__ . '/includes/libs/Cookie.php',
+       'CookieJar' => __DIR__ . '/includes/libs/Cookie.php',
+       'CopyFileBackend' => __DIR__ . '/maintenance/copyFileBackend.php',
+       'CopyFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+       'CopyJobQueue' => __DIR__ . '/maintenance/copyJobQueue.php',
+       'CoreParserFunctions' => __DIR__ . '/includes/parser/CoreParserFunctions.php',
+       'CoreTagHooks' => __DIR__ . '/includes/parser/CoreTagHooks.php',
+       'CreateAndPromote' => __DIR__ . '/maintenance/createAndPromote.php',
+       'CreateFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+       'CreditsAction' => __DIR__ . '/includes/actions/CreditsAction.php',
+       'CssContent' => __DIR__ . '/includes/content/CssContent.php',
+       'CssContentHandler' => __DIR__ . '/includes/content/CssContentHandler.php',
+       'CsvStatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
+       'CurlHttpRequest' => __DIR__ . '/includes/HttpFunctions.php',
+       'DBAccessBase' => __DIR__ . '/includes/dao/DBAccessBase.php',
+       'DBAccessError' => __DIR__ . '/includes/db/LBFactory.php',
+       'DBConnRef' => __DIR__ . '/includes/db/LoadBalancer.php',
+       'DBConnectionError' => __DIR__ . '/includes/db/DatabaseError.php',
+       'DBError' => __DIR__ . '/includes/db/DatabaseError.php',
+       'DBExpectedError' => __DIR__ . '/includes/db/DatabaseError.php',
+       'DBFileJournal' => __DIR__ . '/includes/filebackend/filejournal/DBFileJournal.php',
+       'DBLockManager' => __DIR__ . '/includes/filebackend/lockmanager/DBLockManager.php',
+       'DBMasterPos' => __DIR__ . '/includes/db/DatabaseUtility.php',
+       'DBObject' => __DIR__ . '/includes/db/DatabaseUtility.php',
+       'DBQueryError' => __DIR__ . '/includes/db/DatabaseError.php',
+       'DBUnexpectedError' => __DIR__ . '/includes/db/DatabaseError.php',
+       'DataUpdate' => __DIR__ . '/includes/deferred/DataUpdate.php',
+       'DatabaseBase' => __DIR__ . '/includes/db/Database.php',
+       'DatabaseInstaller' => __DIR__ . '/includes/installer/DatabaseInstaller.php',
+       'DatabaseLag' => __DIR__ . '/maintenance/lag.php',
+       'DatabaseLogEntry' => __DIR__ . '/includes/logging/LogEntry.php',
+       'DatabaseMssql' => __DIR__ . '/includes/db/DatabaseMssql.php',
+       'DatabaseMysql' => __DIR__ . '/includes/db/DatabaseMysql.php',
+       'DatabaseMysqlBase' => __DIR__ . '/includes/db/DatabaseMysqlBase.php',
+       'DatabaseMysqli' => __DIR__ . '/includes/db/DatabaseMysqli.php',
+       'DatabaseOracle' => __DIR__ . '/includes/db/DatabaseOracle.php',
+       'DatabasePostgres' => __DIR__ . '/includes/db/DatabasePostgres.php',
+       'DatabaseSqlite' => __DIR__ . '/includes/db/DatabaseSqlite.php',
+       'DatabaseSqliteStandalone' => __DIR__ . '/includes/db/DatabaseSqlite.php',
+       'DatabaseUpdater' => __DIR__ . '/includes/installer/DatabaseUpdater.php',
+       'DateFormats' => __DIR__ . '/maintenance/language/date-formats.php',
+       'DateFormatter' => __DIR__ . '/includes/parser/DateFormatter.php',
+       'DeadendPagesPage' => __DIR__ . '/includes/specials/SpecialDeadendpages.php',
+       'DeferrableUpdate' => __DIR__ . '/includes/deferred/DeferredUpdates.php',
+       'DeferredUpdates' => __DIR__ . '/includes/deferred/DeferredUpdates.php',
+       'DeleteAction' => __DIR__ . '/includes/actions/DeleteAction.php',
+       'DeleteArchivedFiles' => __DIR__ . '/maintenance/deleteArchivedFiles.php',
+       'DeleteArchivedFilesImplementation' => __DIR__ . '/maintenance/deleteArchivedFiles.inc',
+       'DeleteArchivedRevisions' => __DIR__ . '/maintenance/deleteArchivedRevisions.php',
+       'DeleteArchivedRevisionsImplementation' => __DIR__ . '/maintenance/deleteArchivedRevisions.inc',
+       'DeleteBatch' => __DIR__ . '/maintenance/deleteBatch.php',
+       'DeleteDefaultMessages' => __DIR__ . '/maintenance/deleteDefaultMessages.php',
+       'DeleteEqualMessages' => __DIR__ . '/maintenance/deleteEqualMessages.php',
+       'DeleteFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+       'DeleteImageCache' => __DIR__ . '/maintenance/deleteImageMemcached.php',
+       'DeleteLogFormatter' => __DIR__ . '/includes/logging/DeleteLogFormatter.php',
+       'DeleteOldRevisions' => __DIR__ . '/maintenance/deleteOldRevisions.php',
+       'DeleteOrphanedRevisions' => __DIR__ . '/maintenance/deleteOrphanedRevisions.php',
+       'DeleteRevision' => __DIR__ . '/maintenance/deleteRevision.php',
+       'DeleteSelfExternals' => __DIR__ . '/maintenance/deleteSelfExternals.php',
+       'DeletedContribsPager' => __DIR__ . '/includes/specials/SpecialDeletedContributions.php',
+       'DeletedContributionsPage' => __DIR__ . '/includes/specials/SpecialDeletedContributions.php',
+       'DependencyWrapper' => __DIR__ . '/includes/cache/CacheDependency.php',
+       'DeprecatedGlobal' => __DIR__ . '/includes/DeprecatedGlobal.php',
+       'DerivativeContext' => __DIR__ . '/includes/context/DerivativeContext.php',
+       'DerivativeRequest' => __DIR__ . '/includes/WebRequest.php',
+       'DerivativeResourceLoaderContext' => __DIR__ . '/includes/resourceloader/DerivativeResourceLoaderContext.php',
+       'DescribeFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+       'Diff' => __DIR__ . '/includes/diff/DairikiDiff.php',
+       'DiffEngine' => __DIR__ . '/includes/diff/DairikiDiff.php',
+       'DiffFormatter' => __DIR__ . '/includes/diff/DiffFormatter.php',
+       'DiffHistoryBlob' => __DIR__ . '/includes/HistoryBlob.php',
+       'DiffOp' => __DIR__ . '/includes/diff/DairikiDiff.php',
+       'DiffOpAdd' => __DIR__ . '/includes/diff/DairikiDiff.php',
+       'DiffOpChange' => __DIR__ . '/includes/diff/DairikiDiff.php',
+       'DiffOpCopy' => __DIR__ . '/includes/diff/DairikiDiff.php',
+       'DiffOpDelete' => __DIR__ . '/includes/diff/DairikiDiff.php',
+       'DifferenceEngine' => __DIR__ . '/includes/diff/DifferenceEngine.php',
+       'Digit2Html' => __DIR__ . '/maintenance/language/digit2html.php',
+       'DjVuHandler' => __DIR__ . '/includes/media/DjVu.php',
+       'DjVuImage' => __DIR__ . '/includes/media/DjVuImage.php',
+       'DoubleRedirectJob' => __DIR__ . '/includes/jobqueue/jobs/DoubleRedirectJob.php',
+       'DoubleRedirectsPage' => __DIR__ . '/includes/specials/SpecialDoubleRedirects.php',
+       'DoubleReplacer' => __DIR__ . '/includes/utils/StringUtils.php',
+       'DummyLinker' => __DIR__ . '/includes/Linker.php',
+       'DummyTermColorer' => __DIR__ . '/maintenance/term/MWTerm.php',
+       'Dump7ZipOutput' => __DIR__ . '/includes/Export.php',
+       'DumpBZip2Output' => __DIR__ . '/includes/Export.php',
+       'DumpDBZip2Output' => __DIR__ . '/maintenance/backup.inc',
+       'DumpFileOutput' => __DIR__ . '/includes/Export.php',
+       'DumpFilter' => __DIR__ . '/includes/Export.php',
+       'DumpGZipOutput' => __DIR__ . '/includes/Export.php',
+       'DumpIterator' => __DIR__ . '/maintenance/dumpIterator.php',
+       'DumpLatestFilter' => __DIR__ . '/includes/Export.php',
+       'DumpLinks' => __DIR__ . '/maintenance/dumpLinks.php',
+       'DumpMessages' => __DIR__ . '/maintenance/language/dumpMessages.php',
+       'DumpMultiWriter' => __DIR__ . '/includes/Export.php',
+       'DumpNamespaceFilter' => __DIR__ . '/includes/Export.php',
+       'DumpNotalkFilter' => __DIR__ . '/includes/Export.php',
+       'DumpOutput' => __DIR__ . '/includes/Export.php',
+       'DumpPipeOutput' => __DIR__ . '/includes/Export.php',
+       'DumpRenderer' => __DIR__ . '/maintenance/renderDump.php',
+       'DumpRev' => __DIR__ . '/maintenance/storage/dumpRev.php',
+       'DumpSisterSites' => __DIR__ . '/maintenance/dumpSisterSites.php',
+       'DuplicateJob' => __DIR__ . '/includes/jobqueue/jobs/DuplicateJob.php',
+       'EditAction' => __DIR__ . '/includes/actions/EditAction.php',
+       'EditCLI' => __DIR__ . '/maintenance/edit.php',
+       'EditPage' => __DIR__ . '/includes/EditPage.php',
+       'EditWatchlistCheckboxSeriesField' => __DIR__ . '/includes/specials/SpecialEditWatchlist.php',
+       'EditWatchlistNormalHTMLForm' => __DIR__ . '/includes/specials/SpecialEditWatchlist.php',
+       'EmailConfirmation' => __DIR__ . '/includes/specials/SpecialConfirmemail.php',
+       'EmailInvalidation' => __DIR__ . '/includes/specials/SpecialConfirmemail.php',
+       'EmailNotification' => __DIR__ . '/includes/mail/EmailNotification.php',
+       'EmaillingJob' => __DIR__ . '/includes/jobqueue/jobs/EmaillingJob.php',
+       'EmptyBagOStuff' => __DIR__ . '/includes/objectcache/EmptyBagOStuff.php',
+       'EmptyBloomCache' => __DIR__ . '/includes/cache/bloom/BloomCache.php',
+       'EncryptedPassword' => __DIR__ . '/includes/password/EncryptedPassword.php',
+       'EnhancedChangesList' => __DIR__ . '/includes/changes/EnhancedChangesList.php',
+       'EnotifNotifyJob' => __DIR__ . '/includes/jobqueue/jobs/EnotifNotifyJob.php',
+       'EraseArchivedFile' => __DIR__ . '/maintenance/eraseArchivedFile.php',
+       'ErrorPageError' => __DIR__ . '/includes/exception/ErrorPageError.php',
+       'Exif' => __DIR__ . '/includes/media/Exif.php',
+       'ExifBitmapHandler' => __DIR__ . '/includes/media/ExifBitmap.php',
+       'ExplodeIterator' => __DIR__ . '/includes/utils/StringUtils.php',
+       'ExportProgressFilter' => __DIR__ . '/maintenance/backup.inc',
+       'ExtensionLanguages' => __DIR__ . '/maintenance/language/languages.inc',
+       'ExternalStore' => __DIR__ . '/includes/externalstore/ExternalStore.php',
+       'ExternalStoreDB' => __DIR__ . '/includes/externalstore/ExternalStoreDB.php',
+       'ExternalStoreHttp' => __DIR__ . '/includes/externalstore/ExternalStoreHttp.php',
+       'ExternalStoreMedium' => __DIR__ . '/includes/externalstore/ExternalStoreMedium.php',
+       'ExternalStoreMwstore' => __DIR__ . '/includes/externalstore/ExternalStoreMwstore.php',
+       'FSFile' => __DIR__ . '/includes/filebackend/FSFile.php',
+       'FSFileBackend' => __DIR__ . '/includes/filebackend/FSFileBackend.php',
+       'FSFileBackendDirList' => __DIR__ . '/includes/filebackend/FSFileBackend.php',
+       'FSFileBackendFileList' => __DIR__ . '/includes/filebackend/FSFileBackend.php',
+       'FSFileBackendList' => __DIR__ . '/includes/filebackend/FSFileBackend.php',
+       'FSFileOpHandle' => __DIR__ . '/includes/filebackend/FSFileBackend.php',
+       'FSLockManager' => __DIR__ . '/includes/filebackend/lockmanager/FSLockManager.php',
+       'FSRepo' => __DIR__ . '/includes/filerepo/FSRepo.php',
+       'FakeConverter' => __DIR__ . '/languages/FakeConverter.php',
+       'FakeMaintenance' => __DIR__ . '/maintenance/Maintenance.php',
+       'FakeResultWrapper' => __DIR__ . '/includes/db/DatabaseUtility.php',
+       'Fallback' => __DIR__ . '/includes/Fallback.php',
+       'FatalError' => __DIR__ . '/includes/exception/FatalError.php',
+       'FauxRequest' => __DIR__ . '/includes/WebRequest.php',
+       'FauxResponse' => __DIR__ . '/includes/WebResponse.php',
+       'FeedItem' => __DIR__ . '/includes/Feed.php',
+       'FeedUtils' => __DIR__ . '/includes/FeedUtils.php',
+       'FetchText' => __DIR__ . '/maintenance/fetchText.php',
+       'FewestrevisionsPage' => __DIR__ . '/includes/specials/SpecialFewestrevisions.php',
+       'Field' => __DIR__ . '/includes/db/DatabaseUtility.php',
+       'File' => __DIR__ . '/includes/filerepo/file/File.php',
+       'FileBackend' => __DIR__ . '/includes/filebackend/FileBackend.php',
+       'FileBackendError' => __DIR__ . '/includes/filebackend/FileBackend.php',
+       'FileBackendException' => __DIR__ . '/includes/filebackend/FileBackend.php',
+       'FileBackendGroup' => __DIR__ . '/includes/filebackend/FileBackendGroup.php',
+       'FileBackendMultiWrite' => __DIR__ . '/includes/filebackend/FileBackendMultiWrite.php',
+       'FileBackendStore' => __DIR__ . '/includes/filebackend/FileBackendStore.php',
+       'FileBackendStoreOpHandle' => __DIR__ . '/includes/filebackend/FileBackendStore.php',
+       'FileBackendStoreShardDirIterator' => __DIR__ . '/includes/filebackend/FileBackendStore.php',
+       'FileBackendStoreShardFileIterator' => __DIR__ . '/includes/filebackend/FileBackendStore.php',
+       'FileBackendStoreShardListIterator' => __DIR__ . '/includes/filebackend/FileBackendStore.php',
+       'FileCacheBase' => __DIR__ . '/includes/cache/FileCacheBase.php',
+       'FileDeleteForm' => __DIR__ . '/includes/FileDeleteForm.php',
+       'FileDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
+       'FileDuplicateSearchPage' => __DIR__ . '/includes/specials/SpecialFileDuplicateSearch.php',
+       'FileJournal' => __DIR__ . '/includes/filebackend/filejournal/FileJournal.php',
+       'FileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+       'FileOpBatch' => __DIR__ . '/includes/filebackend/FileOpBatch.php',
+       'FileRepo' => __DIR__ . '/includes/filerepo/FileRepo.php',
+       'FileRepoStatus' => __DIR__ . '/includes/filerepo/FileRepoStatus.php',
+       'FindHooks' => __DIR__ . '/maintenance/findHooks.php',
+       'FindMissingFiles' => __DIR__ . '/maintenance/findMissingFiles.php',
+       'FixBug20757' => __DIR__ . '/maintenance/storage/fixBug20757.php',
+       'FixDoubleRedirects' => __DIR__ . '/maintenance/fixDoubleRedirects.php',
+       'FixExtLinksProtocolRelative' => __DIR__ . '/maintenance/fixExtLinksProtocolRelative.php',
+       'FixSlaveDesync' => __DIR__ . '/maintenance/fixSlaveDesync.php',
+       'FixTimestamps' => __DIR__ . '/maintenance/fixTimestamps.php',
+       'FixUserRegistration' => __DIR__ . '/maintenance/fixUserRegistration.php',
+       'ForeignAPIFile' => __DIR__ . '/includes/filerepo/file/ForeignAPIFile.php',
+       'ForeignAPIRepo' => __DIR__ . '/includes/filerepo/ForeignAPIRepo.php',
+       'ForeignDBFile' => __DIR__ . '/includes/filerepo/file/ForeignDBFile.php',
+       'ForeignDBRepo' => __DIR__ . '/includes/filerepo/ForeignDBRepo.php',
+       'ForeignDBViaLBRepo' => __DIR__ . '/includes/filerepo/ForeignDBViaLBRepo.php',
+       'ForkController' => __DIR__ . '/includes/ForkController.php',
+       'FormAction' => __DIR__ . '/includes/actions/FormAction.php',
+       'FormOptions' => __DIR__ . '/includes/FormOptions.php',
+       'FormSpecialPage' => __DIR__ . '/includes/specialpage/FormSpecialPage.php',
+       'FormatJson' => __DIR__ . '/includes/json/FormatJson.php',
+       'FormatMetadata' => __DIR__ . '/includes/media/FormatMetadata.php',
+       'FormlessAction' => __DIR__ . '/includes/actions/FormlessAction.php',
+       'GIFHandler' => __DIR__ . '/includes/media/GIF.php',
+       'GIFMetadataExtractor' => __DIR__ . '/includes/media/GIFMetadataExtractor.php',
+       'GanConverter' => __DIR__ . '/languages/classes/LanguageGan.php',
+       'GenderCache' => __DIR__ . '/includes/cache/GenderCache.php',
+       'GenerateCollationData' => __DIR__ . '/maintenance/language/generateCollationData.php',
+       'GenerateJsonI18n' => __DIR__ . '/maintenance/generateJsonI18n.php',
+       'GenerateNormalizerDataAr' => __DIR__ . '/maintenance/language/generateNormalizerDataAr.php',
+       'GenerateNormalizerDataMl' => __DIR__ . '/maintenance/language/generateNormalizerDataMl.php',
+       'GenerateSitemap' => __DIR__ . '/maintenance/generateSitemap.php',
+       'GenerateUtf8Case' => __DIR__ . '/maintenance/language/generateUtf8Case.php',
+       'GenericArrayObject' => __DIR__ . '/includes/libs/GenericArrayObject.php',
+       'GetConfiguration' => __DIR__ . '/maintenance/getConfiguration.php',
+       'GetLagTimes' => __DIR__ . '/maintenance/getLagTimes.php',
+       'GetSlaveServer' => __DIR__ . '/maintenance/getSlaveServer.php',
+       'GetTextMaint' => __DIR__ . '/maintenance/getText.php',
+       'GitInfo' => __DIR__ . '/includes/GitInfo.php',
+       'GlobalDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
+       'GlobalVarConfig' => __DIR__ . '/includes/config/GlobalVarConfig.php',
+       'HTMLApiField' => __DIR__ . '/includes/htmlform/HTMLApiField.php',
+       'HTMLAutoCompleteSelectField' => __DIR__ . '/includes/htmlform/HTMLAutoCompleteSelectField.php',
+       'HTMLButtonField' => __DIR__ . '/includes/htmlform/HTMLButtonField.php',
+       'HTMLCacheUpdate' => __DIR__ . '/includes/deferred/HTMLCacheUpdate.php',
+       'HTMLCacheUpdateJob' => __DIR__ . '/includes/jobqueue/jobs/HTMLCacheUpdateJob.php',
+       'HTMLCheckField' => __DIR__ . '/includes/htmlform/HTMLCheckField.php',
+       'HTMLCheckMatrix' => __DIR__ . '/includes/htmlform/HTMLCheckMatrix.php',
+       'HTMLEditTools' => __DIR__ . '/includes/htmlform/HTMLEditTools.php',
+       'HTMLFileCache' => __DIR__ . '/includes/cache/HTMLFileCache.php',
+       'HTMLFloatField' => __DIR__ . '/includes/htmlform/HTMLFloatField.php',
+       'HTMLForm' => __DIR__ . '/includes/htmlform/HTMLForm.php',
+       'HTMLFormField' => __DIR__ . '/includes/htmlform/HTMLFormField.php',
+       'HTMLFormFieldCloner' => __DIR__ . '/includes/htmlform/HTMLFormFieldCloner.php',
+       'HTMLFormFieldRequiredOptionsException' => __DIR__ . '/includes/htmlform/HTMLFormFieldRequiredOptionsException.php',
+       'HTMLHiddenField' => __DIR__ . '/includes/htmlform/HTMLHiddenField.php',
+       'HTMLInfoField' => __DIR__ . '/includes/htmlform/HTMLInfoField.php',
+       'HTMLIntField' => __DIR__ . '/includes/htmlform/HTMLIntField.php',
+       'HTMLMultiSelectField' => __DIR__ . '/includes/htmlform/HTMLMultiSelectField.php',
+       'HTMLNestedFilterable' => __DIR__ . '/includes/htmlform/HTMLNestedFilterable.php',
+       'HTMLRadioField' => __DIR__ . '/includes/htmlform/HTMLRadioField.php',
+       'HTMLSelectAndOtherField' => __DIR__ . '/includes/htmlform/HTMLSelectAndOtherField.php',
+       'HTMLSelectField' => __DIR__ . '/includes/htmlform/HTMLSelectField.php',
+       'HTMLSelectLimitField' => __DIR__ . '/includes/htmlform/HTMLSelectLimitField.php',
+       'HTMLSelectNamespace' => __DIR__ . '/includes/htmlform/HTMLSelectNamespace.php',
+       'HTMLSelectOrOtherField' => __DIR__ . '/includes/htmlform/HTMLSelectOrOtherField.php',
+       'HTMLSubmitField' => __DIR__ . '/includes/htmlform/HTMLSubmitField.php',
+       'HTMLTagFilter' => __DIR__ . '/includes/htmlform/HTMLTagFilter.php',
+       'HTMLTextAreaField' => __DIR__ . '/includes/htmlform/HTMLTextAreaField.php',
+       'HTMLTextField' => __DIR__ . '/includes/htmlform/HTMLTextField.php',
+       'HWLDFWordAccumulator' => __DIR__ . '/includes/diff/DairikiDiff.php',
+       'HashBagOStuff' => __DIR__ . '/includes/objectcache/HashBagOStuff.php',
+       'HashConfig' => __DIR__ . '/includes/config/HashConfig.php',
+       'HashRing' => __DIR__ . '/includes/libs/HashRing.php',
+       'HashtableReplacer' => __DIR__ . '/includes/utils/StringUtils.php',
+       'HistoryAction' => __DIR__ . '/includes/actions/HistoryAction.php',
+       'HistoryBlob' => __DIR__ . '/includes/HistoryBlob.php',
+       'HistoryBlobCurStub' => __DIR__ . '/includes/HistoryBlob.php',
+       'HistoryBlobStub' => __DIR__ . '/includes/HistoryBlob.php',
+       'HistoryPager' => __DIR__ . '/includes/actions/HistoryAction.php',
+       'Hooks' => __DIR__ . '/includes/Hooks.php',
+       'Html' => __DIR__ . '/includes/Html.php',
+       'HtmlFormatter' => __DIR__ . '/includes/HtmlFormatter.php',
+       'Http' => __DIR__ . '/includes/HttpFunctions.php',
+       'HttpError' => __DIR__ . '/includes/exception/HttpError.php',
+       'HttpStatus' => __DIR__ . '/includes/libs/HttpStatus.php',
+       'ICacheHelper' => __DIR__ . '/includes/cache/CacheHelper.php',
+       'IContextSource' => __DIR__ . '/includes/context/IContextSource.php',
+       'IDBAccessObject' => __DIR__ . '/includes/dao/IDBAccessObject.php',
+       'IDatabase' => __DIR__ . '/includes/db/Database.php',
+       'IEContentAnalyzer' => __DIR__ . '/includes/libs/IEContentAnalyzer.php',
+       'IEUrlExtension' => __DIR__ . '/includes/libs/IEUrlExtension.php',
+       'IJobSpecification' => __DIR__ . '/includes/jobqueue/JobSpecification.php',
+       'IORMRow' => __DIR__ . '/includes/db/IORMRow.php',
+       'IORMTable' => __DIR__ . '/includes/db/IORMTable.php',
+       'IP' => __DIR__ . '/includes/utils/IP.php',
+       'IPSet' => __DIR__ . '/includes/libs/IPSet.php',
+       'IPTC' => __DIR__ . '/includes/media/IPTC.php',
+       'IRCColourfulRCFeedFormatter' => __DIR__ . '/includes/rcfeed/IRCColourfulRCFeedFormatter.php',
+       'IcuCollation' => __DIR__ . '/includes/Collation.php',
+       'IdentityCollation' => __DIR__ . '/includes/Collation.php',
+       'ImageBuilder' => __DIR__ . '/maintenance/rebuildImages.php',
+       'ImageCleanup' => __DIR__ . '/maintenance/cleanupImages.php',
+       'ImageGallery' => __DIR__ . '/includes/gallery/TraditionalImageGallery.php',
+       'ImageGalleryBase' => __DIR__ . '/includes/gallery/ImageGalleryBase.php',
+       'ImageHandler' => __DIR__ . '/includes/media/ImageHandler.php',
+       'ImageHistoryList' => __DIR__ . '/includes/page/ImagePage.php',
+       'ImageHistoryPseudoPager' => __DIR__ . '/includes/page/ImagePage.php',
+       'ImageListPager' => __DIR__ . '/includes/specials/SpecialListfiles.php',
+       'ImagePage' => __DIR__ . '/includes/page/ImagePage.php',
+       'ImageQueryPage' => __DIR__ . '/includes/specialpage/ImageQueryPage.php',
+       'ImportReporter' => __DIR__ . '/includes/specials/SpecialImport.php',
+       'ImportSiteScripts' => __DIR__ . '/maintenance/importSiteScripts.php',
+       'ImportStreamSource' => __DIR__ . '/includes/Import.php',
+       'ImportStringSource' => __DIR__ . '/includes/Import.php',
+       'IncludableSpecialPage' => __DIR__ . '/includes/specialpage/IncludableSpecialPage.php',
+       'IndexPager' => __DIR__ . '/includes/pager/IndexPager.php',
+       'InfoAction' => __DIR__ . '/includes/actions/InfoAction.php',
+       'InitEditCount' => __DIR__ . '/maintenance/initEditCount.php',
+       'InitSiteStats' => __DIR__ . '/maintenance/initSiteStats.php',
+       'InstallDocFormatter' => __DIR__ . '/includes/installer/InstallDocFormatter.php',
+       'Installer' => __DIR__ . '/includes/installer/Installer.php',
+       'InstallerOverrides' => __DIR__ . '/mw-config/overrides.php',
+       'Interwiki' => __DIR__ . '/includes/interwiki/Interwiki.php',
+       'InvalidPassword' => __DIR__ . '/includes/password/InvalidPassword.php',
+       'IuConverter' => __DIR__ . '/languages/classes/LanguageIu.php',
+       'JSCompilerContext' => __DIR__ . '/includes/libs/jsminplus.php',
+       'JSMinPlus' => __DIR__ . '/includes/libs/jsminplus.php',
+       'JSNode' => __DIR__ . '/includes/libs/jsminplus.php',
+       'JSONRCFeedFormatter' => __DIR__ . '/includes/rcfeed/JSONRCFeedFormatter.php',
+       'JSParseHelper' => __DIR__ . '/maintenance/jsparse.php',
+       'JSParser' => __DIR__ . '/includes/libs/jsminplus.php',
+       'JSToken' => __DIR__ . '/includes/libs/jsminplus.php',
+       'JSTokenizer' => __DIR__ . '/includes/libs/jsminplus.php',
+       'JavaScriptContent' => __DIR__ . '/includes/content/JavaScriptContent.php',
+       'JavaScriptContentHandler' => __DIR__ . '/includes/content/JavaScriptContentHandler.php',
+       'JavaScriptMinifier' => __DIR__ . '/includes/libs/JavaScriptMinifier.php',
+       'Job' => __DIR__ . '/includes/jobqueue/Job.php',
+       'JobQueue' => __DIR__ . '/includes/jobqueue/JobQueue.php',
+       'JobQueueAggregator' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregator.php',
+       'JobQueueAggregatorMemc' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregatorMemc.php',
+       'JobQueueAggregatorRedis' => __DIR__ . '/includes/jobqueue/aggregator/JobQueueAggregatorRedis.php',
+       'JobQueueConnectionError' => __DIR__ . '/includes/jobqueue/JobQueue.php',
+       'JobQueueDB' => __DIR__ . '/includes/jobqueue/JobQueueDB.php',
+       'JobQueueError' => __DIR__ . '/includes/jobqueue/JobQueue.php',
+       'JobQueueFederated' => __DIR__ . '/includes/jobqueue/JobQueueFederated.php',
+       'JobQueueGroup' => __DIR__ . '/includes/jobqueue/JobQueueGroup.php',
+       'JobQueueRedis' => __DIR__ . '/includes/jobqueue/JobQueueRedis.php',
+       'JobRunner' => __DIR__ . '/includes/jobqueue/JobRunner.php',
+       'JobSpecification' => __DIR__ . '/includes/jobqueue/JobSpecification.php',
+       'JpegHandler' => __DIR__ . '/includes/media/Jpeg.php',
+       'JpegMetadataExtractor' => __DIR__ . '/includes/media/JpegMetadataExtractor.php',
+       'JsonContent' => __DIR__ . '/includes/content/JsonContent.php',
+       'JsonContentHandler' => __DIR__ . '/includes/content/JsonContentHandler.php',
+       'KkConverter' => __DIR__ . '/languages/classes/LanguageKk.php',
+       'KuConverter' => __DIR__ . '/languages/classes/LanguageKu.php',
+       'LBFactory' => __DIR__ . '/includes/db/LBFactory.php',
+       'LBFactoryFake' => __DIR__ . '/includes/db/LBFactory.php',
+       'LBFactoryMulti' => __DIR__ . '/includes/db/LBFactoryMulti.php',
+       'LBFactorySimple' => __DIR__ . '/includes/db/LBFactory.php',
+       'LBFactorySingle' => __DIR__ . '/includes/db/LBFactorySingle.php',
+       'LCStore' => __DIR__ . '/includes/cache/LocalisationCache.php',
+       'LCStoreCDB' => __DIR__ . '/includes/cache/LocalisationCache.php',
+       'LCStoreDB' => __DIR__ . '/includes/cache/LocalisationCache.php',
+       'LCStoreNull' => __DIR__ . '/includes/cache/LocalisationCache.php',
+       'LangMemUsage' => __DIR__ . '/maintenance/language/langmemusage.php',
+       'Language' => __DIR__ . '/languages/Language.php',
+       'LanguageAr' => __DIR__ . '/languages/classes/LanguageAr.php',
+       'LanguageAz' => __DIR__ . '/languages/classes/LanguageAz.php',
+       'LanguageBe_tarask' => __DIR__ . '/languages/classes/LanguageBe_tarask.php',
+       'LanguageBg' => __DIR__ . '/languages/classes/LanguageBg.php',
+       'LanguageBs' => __DIR__ . '/languages/classes/LanguageBs.php',
+       'LanguageConverter' => __DIR__ . '/languages/LanguageConverter.php',
+       'LanguageCu' => __DIR__ . '/languages/classes/LanguageCu.php',
+       'LanguageDsb' => __DIR__ . '/languages/classes/LanguageDsb.php',
+       'LanguageEo' => __DIR__ . '/languages/classes/LanguageEo.php',
+       'LanguageEs' => __DIR__ . '/languages/classes/LanguageEs.php',
+       'LanguageEt' => __DIR__ . '/languages/classes/LanguageEt.php',
+       'LanguageFi' => __DIR__ . '/languages/classes/LanguageFi.php',
+       'LanguageGa' => __DIR__ . '/languages/classes/LanguageGa.php',
+       'LanguageGan' => __DIR__ . '/languages/classes/LanguageGan.php',
+       'LanguageHe' => __DIR__ . '/languages/classes/LanguageHe.php',
+       'LanguageHsb' => __DIR__ . '/languages/classes/LanguageHsb.php',
+       'LanguageHu' => __DIR__ . '/languages/classes/LanguageHu.php',
+       'LanguageHy' => __DIR__ . '/languages/classes/LanguageHy.php',
+       'LanguageIu' => __DIR__ . '/languages/classes/LanguageIu.php',
+       'LanguageJa' => __DIR__ . '/languages/classes/LanguageJa.php',
+       'LanguageKaa' => __DIR__ . '/languages/classes/LanguageKaa.php',
+       'LanguageKk' => __DIR__ . '/languages/classes/LanguageKk.php',
+       'LanguageKk_cyrl' => __DIR__ . '/languages/classes/LanguageKk_cyrl.php',
+       'LanguageKm' => __DIR__ . '/languages/classes/LanguageKm.php',
+       'LanguageKsh' => __DIR__ . '/languages/classes/LanguageKsh.php',
+       'LanguageKu' => __DIR__ . '/languages/classes/LanguageKu.php',
+       'LanguageKu_ku' => __DIR__ . '/languages/classes/LanguageKu_ku.php',
+       'LanguageLa' => __DIR__ . '/languages/classes/LanguageLa.php',
+       'LanguageMl' => __DIR__ . '/languages/classes/LanguageMl.php',
+       'LanguageMy' => __DIR__ . '/languages/classes/LanguageMy.php',
+       'LanguageOs' => __DIR__ . '/languages/classes/LanguageOs.php',
+       'LanguagePl' => __DIR__ . '/languages/classes/LanguagePl.php',
+       'LanguageQqx' => __DIR__ . '/languages/classes/LanguageQqx.php',
+       'LanguageRu' => __DIR__ . '/languages/classes/LanguageRu.php',
+       'LanguageShi' => __DIR__ . '/languages/classes/LanguageShi.php',
+       'LanguageSl' => __DIR__ . '/languages/classes/LanguageSl.php',
+       'LanguageSr' => __DIR__ . '/languages/classes/LanguageSr.php',
+       'LanguageTg' => __DIR__ . '/languages/classes/LanguageTg.php',
+       'LanguageTr' => __DIR__ . '/languages/classes/LanguageTr.php',
+       'LanguageTyv' => __DIR__ . '/languages/classes/LanguageTyv.php',
+       'LanguageUk' => __DIR__ . '/languages/classes/LanguageUk.php',
+       'LanguageUz' => __DIR__ . '/languages/classes/LanguageUz.php',
+       'LanguageWa' => __DIR__ . '/languages/classes/LanguageWa.php',
+       'LanguageYue' => __DIR__ . '/languages/classes/LanguageYue.php',
+       'LanguageZh' => __DIR__ . '/languages/classes/LanguageZh.php',
+       'LanguageZh_hans' => __DIR__ . '/languages/classes/LanguageZh_hans.php',
+       'Languages' => __DIR__ . '/maintenance/language/languages.inc',
+       'LayeredParameterizedPassword' => __DIR__ . '/includes/password/LayeredParameterizedPassword.php',
+       'LegacyLogFormatter' => __DIR__ . '/includes/logging/LogFormatter.php',
+       'License' => __DIR__ . '/includes/Licenses.php',
+       'Licenses' => __DIR__ . '/includes/Licenses.php',
+       'LikeMatch' => __DIR__ . '/includes/db/DatabaseUtility.php',
+       'LinkBatch' => __DIR__ . '/includes/cache/LinkBatch.php',
+       'LinkCache' => __DIR__ . '/includes/cache/LinkCache.php',
+       'LinkFilter' => __DIR__ . '/includes/LinkFilter.php',
+       'LinkHolderArray' => __DIR__ . '/includes/parser/LinkHolderArray.php',
+       'LinkSearchPage' => __DIR__ . '/includes/specials/SpecialLinkSearch.php',
+       'Linker' => __DIR__ . '/includes/Linker.php',
+       'LinksDeletionUpdate' => __DIR__ . '/includes/deferred/LinksUpdate.php',
+       'LinksUpdate' => __DIR__ . '/includes/deferred/LinksUpdate.php',
+       'ListDuplicatedFilesPage' => __DIR__ . '/includes/specials/SpecialListDuplicatedFiles.php',
+       'ListVariants' => __DIR__ . '/maintenance/language/listVariants.php',
+       'ListredirectsPage' => __DIR__ . '/includes/specials/SpecialListredirects.php',
+       'LoadBalancer' => __DIR__ . '/includes/db/LoadBalancer.php',
+       'LoadBalancerSingle' => __DIR__ . '/includes/db/LBFactorySingle.php',
+       'LoadMonitor' => __DIR__ . '/includes/db/LoadMonitor.php',
+       'LoadMonitorMySQL' => __DIR__ . '/includes/db/LoadMonitor.php',
+       'LoadMonitorNull' => __DIR__ . '/includes/db/LoadMonitor.php',
+       'LocalFile' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
+       'LocalFileDeleteBatch' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
+       'LocalFileMoveBatch' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
+       'LocalFileRestoreBatch' => __DIR__ . '/includes/filerepo/file/LocalFile.php',
+       'LocalRepo' => __DIR__ . '/includes/filerepo/LocalRepo.php',
+       'LocalSettingsGenerator' => __DIR__ . '/includes/installer/LocalSettingsGenerator.php',
+       'LocalisationCache' => __DIR__ . '/includes/cache/LocalisationCache.php',
+       'LocalisationCacheBulkLoad' => __DIR__ . '/includes/cache/LocalisationCache.php',
+       'LockManager' => __DIR__ . '/includes/filebackend/lockmanager/LockManager.php',
+       'LockManagerGroup' => __DIR__ . '/includes/filebackend/lockmanager/LockManagerGroup.php',
+       'LogEntry' => __DIR__ . '/includes/logging/LogEntry.php',
+       'LogEntryBase' => __DIR__ . '/includes/logging/LogEntry.php',
+       'LogEventsList' => __DIR__ . '/includes/logging/LogEventsList.php',
+       'LogFormatter' => __DIR__ . '/includes/logging/LogFormatter.php',
+       'LogPage' => __DIR__ . '/includes/logging/LogPage.php',
+       'LogPager' => __DIR__ . '/includes/logging/LogPager.php',
+       'LoggedUpdateMaintenance' => __DIR__ . '/maintenance/Maintenance.php',
+       'LoginForm' => __DIR__ . '/includes/specials/SpecialUserlogin.php',
+       'LonelyPagesPage' => __DIR__ . '/includes/specials/SpecialLonelypages.php',
+       'LongPagesPage' => __DIR__ . '/includes/specials/SpecialLongpages.php',
+       'MIMEsearchPage' => __DIR__ . '/includes/specials/SpecialMIMEsearch.php',
+       'MWCallableUpdate' => __DIR__ . '/includes/deferred/CallableUpdate.php',
+       'MWContentSerializationException' => __DIR__ . '/includes/content/ContentHandler.php',
+       'MWCryptHKDF' => __DIR__ . '/includes/utils/MWCryptHKDF.php',
+       'MWCryptRand' => __DIR__ . '/includes/utils/MWCryptRand.php',
+       'MWDebug' => __DIR__ . '/includes/debug/MWDebug.php',
+       'MWDocGen' => __DIR__ . '/maintenance/mwdocgen.php',
+       'MWException' => __DIR__ . '/includes/exception/MWException.php',
+       'MWExceptionHandler' => __DIR__ . '/includes/exception/MWExceptionHandler.php',
+       'MWFunction' => __DIR__ . '/includes/utils/MWFunction.php',
+       'MWHookException' => __DIR__ . '/includes/Hooks.php',
+       'MWHttpRequest' => __DIR__ . '/includes/HttpFunctions.php',
+       'MWLogger' => __DIR__ . '/includes/debug/logger/Logger.php',
+       'MWLoggerLegacyLogger' => __DIR__ . '/includes/debug/logger/legacy/Logger.php',
+       'MWLoggerLegacySpi' => __DIR__ . '/includes/debug/logger/legacy/Spi.php',
+       'MWLoggerMonologHandler' => __DIR__ . '/includes/debug/logger/monolog/Handler.php',
+       'MWLoggerMonologProcessor' => __DIR__ . '/includes/debug/logger/monolog/Processor.php',
+       'MWLoggerMonologSpi' => __DIR__ . '/includes/debug/logger/monolog/Spi.php',
+       'MWLoggerNullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php',
+       'MWLoggerSpi' => __DIR__ . '/includes/debug/logger/Spi.php',
+       'MWMemcached' => __DIR__ . '/includes/objectcache/MemcachedClient.php',
+       'MWMessagePack' => __DIR__ . '/includes/libs/MWMessagePack.php',
+       'MWNamespace' => __DIR__ . '/includes/MWNamespace.php',
+       'MWOldPassword' => __DIR__ . '/includes/password/MWOldPassword.php',
+       'MWSaltedPassword' => __DIR__ . '/includes/password/MWSaltedPassword.php',
+       'MWTidy' => __DIR__ . '/includes/parser/MWTidy.php',
+       'MWTidyWrapper' => __DIR__ . '/includes/parser/MWTidy.php',
+       'MWTimestamp' => __DIR__ . '/includes/MWTimestamp.php',
+       'MachineReadableRCFeedFormatter' => __DIR__ . '/includes/rcfeed/MachineReadableRCFeedFormatter.php',
+       'MagicWord' => __DIR__ . '/includes/MagicWord.php',
+       'MagicWordArray' => __DIR__ . '/includes/MagicWord.php',
+       'MailAddress' => __DIR__ . '/includes/mail/MailAddress.php',
+       'Maintenance' => __DIR__ . '/maintenance/Maintenance.php',
+       'MaintenanceFormatInstallDoc' => __DIR__ . '/maintenance/formatInstallDoc.php',
+       'MalformedTitleException' => __DIR__ . '/includes/title/MalformedTitleException.php',
+       'ManualLogEntry' => __DIR__ . '/includes/logging/LogEntry.php',
+       'MapCacheLRU' => __DIR__ . '/includes/libs/MapCacheLRU.php',
+       'MappedDiff' => __DIR__ . '/includes/diff/DairikiDiff.php',
+       'MappedIterator' => __DIR__ . '/includes/libs/MappedIterator.php',
+       'MarkpatrolledAction' => __DIR__ . '/includes/actions/MarkpatrolledAction.php',
+       'McTest' => __DIR__ . '/maintenance/mctest.php',
+       'MediaHandler' => __DIR__ . '/includes/media/MediaHandler.php',
+       'MediaStatisticsPage' => __DIR__ . '/includes/specials/SpecialMediaStatistics.php',
+       'MediaTransformError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
+       'MediaTransformOutput' => __DIR__ . '/includes/media/MediaTransformOutput.php',
+       'MediaWiki' => __DIR__ . '/includes/MediaWiki.php',
+       'MediaWikiBagOStuff' => __DIR__ . '/includes/objectcache/SqlBagOStuff.php',
+       'MediaWikiI18N' => __DIR__ . '/includes/skins/MediaWikiI18N.php',
+       'MediaWikiPageLinkRenderer' => __DIR__ . '/includes/title/MediaWikiPageLinkRenderer.php',
+       'MediaWikiSite' => __DIR__ . '/includes/site/MediaWikiSite.php',
+       'MediaWikiTitleCodec' => __DIR__ . '/includes/title/MediaWikiTitleCodec.php',
+       'MediaWikiVersionFetcher' => __DIR__ . '/includes/MediaWikiVersionFetcher.php',
+       'MemCachedClientforWiki' => __DIR__ . '/includes/objectcache/MemcachedClient.php',
+       'MemcLockManager' => __DIR__ . '/includes/filebackend/lockmanager/MemcLockManager.php',
+       'MemcachedBagOStuff' => __DIR__ . '/includes/objectcache/MemcachedBagOStuff.php',
+       'MemcachedPeclBagOStuff' => __DIR__ . '/includes/objectcache/MemcachedPeclBagOStuff.php',
+       'MemcachedPhpBagOStuff' => __DIR__ . '/includes/objectcache/MemcachedPhpBagOStuff.php',
+       'MemoryFileBackend' => __DIR__ . '/includes/filebackend/MemoryFileBackend.php',
+       'MergeHistoryPager' => __DIR__ . '/includes/specials/SpecialMergeHistory.php',
+       'MergeLogFormatter' => __DIR__ . '/includes/logging/MergeLogFormatter.php',
+       'MergeMessageFileList' => __DIR__ . '/maintenance/mergeMessageFileList.php',
+       'Message' => __DIR__ . '/includes/Message.php',
+       'MessageBlobStore' => __DIR__ . '/includes/MessageBlobStore.php',
+       'MessageCache' => __DIR__ . '/includes/cache/MessageCache.php',
+       'MessageContent' => __DIR__ . '/includes/content/MessageContent.php',
+       'MigrateUserGroup' => __DIR__ . '/maintenance/migrateUserGroup.php',
+       'MimeMagic' => __DIR__ . '/includes/MimeMagic.php',
+       'MinifyScript' => __DIR__ . '/maintenance/minify.php',
+       'MostcategoriesPage' => __DIR__ . '/includes/specials/SpecialMostcategories.php',
+       'MostimagesPage' => __DIR__ . '/includes/specials/SpecialMostimages.php',
+       'MostinterwikisPage' => __DIR__ . '/includes/specials/SpecialMostinterwikis.php',
+       'MostlinkedCategoriesPage' => __DIR__ . '/includes/specials/SpecialMostlinkedcategories.php',
+       'MostlinkedPage' => __DIR__ . '/includes/specials/SpecialMostlinked.php',
+       'MostlinkedTemplatesPage' => __DIR__ . '/includes/specials/SpecialMostlinkedtemplates.php',
+       'MostrevisionsPage' => __DIR__ . '/includes/specials/SpecialMostrevisions.php',
+       'MoveBatch' => __DIR__ . '/maintenance/moveBatch.php',
+       'MoveFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+       'MoveLogFormatter' => __DIR__ . '/includes/logging/MoveLogFormatter.php',
+       'MovePage' => __DIR__ . '/includes/MovePage.php',
+       'MovePageForm' => __DIR__ . '/includes/specials/SpecialMovepage.php',
+       'MssqlBlob' => __DIR__ . '/includes/db/DatabaseMssql.php',
+       'MssqlField' => __DIR__ . '/includes/db/DatabaseMssql.php',
+       'MssqlInstaller' => __DIR__ . '/includes/installer/MssqlInstaller.php',
+       'MssqlResultWrapper' => __DIR__ . '/includes/db/DatabaseMssql.php',
+       'MssqlUpdater' => __DIR__ . '/includes/installer/MssqlUpdater.php',
+       'MultiConfig' => __DIR__ . '/includes/config/MultiConfig.php',
+       'MultiHttpClient' => __DIR__ . '/includes/libs/MultiHttpClient.php',
+       'MultiWriteBagOStuff' => __DIR__ . '/includes/objectcache/MultiWriteBagOStuff.php',
+       'MutableConfig' => __DIR__ . '/includes/config/MutableConfig.php',
+       'MwSql' => __DIR__ . '/maintenance/sql.php',
+       'MyLocalSettingsGenerator' => __DIR__ . '/mw-config/overrides.php',
+       'MySQLField' => __DIR__ . '/includes/db/DatabaseMysqlBase.php',
+       'MySQLMasterPos' => __DIR__ . '/includes/db/DatabaseMysqlBase.php',
+       'MySqlLockManager' => __DIR__ . '/includes/filebackend/lockmanager/DBLockManager.php',
+       'MysqlInstaller' => __DIR__ . '/includes/installer/MysqlInstaller.php',
+       'MysqlUpdater' => __DIR__ . '/includes/installer/MysqlUpdater.php',
+       'NamespaceConflictChecker' => __DIR__ . '/maintenance/namespaceDupes.php',
+       'NewFilesPager' => __DIR__ . '/includes/specials/SpecialNewimages.php',
+       'NewPagesPager' => __DIR__ . '/includes/specials/SpecialNewpages.php',
+       'NewUsersLogFormatter' => __DIR__ . '/includes/logging/NewUsersLogFormatter.php',
+       'NolinesImageGallery' => __DIR__ . '/includes/gallery/NolinesImageGallery.php',
+       'NukeNS' => __DIR__ . '/maintenance/nukeNS.php',
+       'NukePage' => __DIR__ . '/maintenance/nukePage.php',
+       'NullFileJournal' => __DIR__ . '/includes/filebackend/filejournal/FileJournal.php',
+       'NullFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+       'NullJob' => __DIR__ . '/includes/jobqueue/jobs/NullJob.php',
+       'NullLockManager' => __DIR__ . '/includes/filebackend/lockmanager/LockManager.php',
+       'NullRepo' => __DIR__ . '/includes/filerepo/NullRepo.php',
+       'ORAField' => __DIR__ . '/includes/db/DatabaseOracle.php',
+       'ORAResult' => __DIR__ . '/includes/db/DatabaseOracle.php',
+       'ORMIterator' => __DIR__ . '/includes/db/ORMIterator.php',
+       'ORMResult' => __DIR__ . '/includes/db/ORMResult.php',
+       'ORMRow' => __DIR__ . '/includes/db/ORMRow.php',
+       'ORMTable' => __DIR__ . '/includes/db/ORMTable.php',
+       'ObjectCache' => __DIR__ . '/includes/objectcache/ObjectCache.php',
+       'ObjectCacheSessionHandler' => __DIR__ . '/includes/objectcache/ObjectCacheSessionHandler.php',
+       'ObjectFactory' => __DIR__ . '/includes/libs/ObjectFactory.php',
+       'ObjectFileCache' => __DIR__ . '/includes/cache/ObjectFileCache.php',
+       'OldChangesList' => __DIR__ . '/includes/changes/OldChangesList.php',
+       'OldLocalFile' => __DIR__ . '/includes/filerepo/file/OldLocalFile.php',
+       'OracleInstaller' => __DIR__ . '/includes/installer/OracleInstaller.php',
+       'OracleUpdater' => __DIR__ . '/includes/installer/OracleUpdater.php',
+       'OrphanStats' => __DIR__ . '/maintenance/storage/orphanStats.php',
+       'Orphans' => __DIR__ . '/maintenance/orphans.php',
+       'OutputPage' => __DIR__ . '/includes/OutputPage.php',
+       'PNGHandler' => __DIR__ . '/includes/media/PNG.php',
+       'PNGMetadataExtractor' => __DIR__ . '/includes/media/PNGMetadataExtractor.php',
+       'PPCustomFrame_DOM' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+       'PPCustomFrame_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+       'PPDAccum_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+       'PPDPart' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+       'PPDPart_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+       'PPDStack' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+       'PPDStackElement' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+       'PPDStackElement_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+       'PPDStack_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+       'PPFrame' => __DIR__ . '/includes/parser/Preprocessor.php',
+       'PPFrame_DOM' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+       'PPFrame_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+       'PPFuzzTest' => __DIR__ . '/maintenance/preprocessorFuzzTest.php',
+       'PPFuzzTester' => __DIR__ . '/maintenance/preprocessorFuzzTest.php',
+       'PPFuzzUser' => __DIR__ . '/maintenance/preprocessorFuzzTest.php',
+       'PPNode' => __DIR__ . '/includes/parser/Preprocessor.php',
+       'PPNode_DOM' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+       'PPNode_Hash_Array' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+       'PPNode_Hash_Attr' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+       'PPNode_Hash_Text' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+       'PPNode_Hash_Tree' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+       'PPTemplateFrame_DOM' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+       'PPTemplateFrame_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+       'PackedHoverImageGallery' => __DIR__ . '/includes/gallery/PackedOverlayImageGallery.php',
+       'PackedImageGallery' => __DIR__ . '/includes/gallery/PackedImageGallery.php',
+       'PackedOverlayImageGallery' => __DIR__ . '/includes/gallery/PackedOverlayImageGallery.php',
+       'Page' => __DIR__ . '/includes/page/WikiPage.php',
+       'PageArchive' => __DIR__ . '/includes/specials/SpecialUndelete.php',
+       'PageExists' => __DIR__ . '/maintenance/pageExists.php',
+       'PageLangLogFormatter' => __DIR__ . '/includes/logging/PageLangLogFormatter.php',
+       'PageLinkRenderer' => __DIR__ . '/includes/title/PageLinkRenderer.php',
+       'PageQueryPage' => __DIR__ . '/includes/specialpage/PageQueryPage.php',
+       'Pager' => __DIR__ . '/includes/pager/Pager.php',
+       'ParameterizedPassword' => __DIR__ . '/includes/password/ParameterizedPassword.php',
+       'Parser' => __DIR__ . '/includes/parser/Parser.php',
+       'ParserCache' => __DIR__ . '/includes/parser/ParserCache.php',
+       'ParserDiffTest' => __DIR__ . '/includes/parser/ParserDiffTest.php',
+       'ParserOptions' => __DIR__ . '/includes/parser/ParserOptions.php',
+       'ParserOutput' => __DIR__ . '/includes/parser/ParserOutput.php',
+       'Password' => __DIR__ . '/includes/password/Password.php',
+       'PasswordError' => __DIR__ . '/includes/password/PasswordError.php',
+       'PasswordFactory' => __DIR__ . '/includes/password/PasswordFactory.php',
+       'PatchSql' => __DIR__ . '/maintenance/patchSql.php',
+       'PathRouter' => __DIR__ . '/includes/PathRouter.php',
+       'PathRouterPatternReplacer' => __DIR__ . '/includes/PathRouter.php',
+       'PatrolLog' => __DIR__ . '/includes/logging/PatrolLog.php',
+       'PatrolLogFormatter' => __DIR__ . '/includes/logging/PatrolLogFormatter.php',
+       'Pbkdf2Password' => __DIR__ . '/includes/password/Pbkdf2Password.php',
+       'PermissionsError' => __DIR__ . '/includes/exception/PermissionsError.php',
+       'PhpHttpRequest' => __DIR__ . '/includes/HttpFunctions.php',
+       'PhpXmlBugTester' => __DIR__ . '/includes/installer/PhpBugTests.php',
+       'PoolCounter' => __DIR__ . '/includes/poolcounter/PoolCounter.php',
+       'PoolCounterRedis' => __DIR__ . '/includes/poolcounter/PoolCounterRedis.php',
+       'PoolCounterWork' => __DIR__ . '/includes/poolcounter/PoolCounterWork.php',
+       'PoolCounterWorkViaCallback' => __DIR__ . '/includes/poolcounter/PoolCounterWorkViaCallback.php',
+       'PoolCounter_Stub' => __DIR__ . '/includes/poolcounter/PoolCounter.php',
+       'PoolWorkArticleView' => __DIR__ . '/includes/poolcounter/PoolWorkArticleView.php',
+       'PopulateBacklinkNamespace' => __DIR__ . '/maintenance/populateBacklinkNamespace.php',
+       'PopulateBloomFilter' => __DIR__ . '/maintenance/populateBloomCache.php',
+       'PopulateCategory' => __DIR__ . '/maintenance/populateCategory.php',
+       'PopulateFilearchiveSha1' => __DIR__ . '/maintenance/populateFilearchiveSha1.php',
+       'PopulateImageSha1' => __DIR__ . '/maintenance/populateImageSha1.php',
+       'PopulateLogSearch' => __DIR__ . '/maintenance/populateLogSearch.php',
+       'PopulateLogUsertext' => __DIR__ . '/maintenance/populateLogUsertext.php',
+       'PopulateParentId' => __DIR__ . '/maintenance/populateParentId.php',
+       'PopulateRecentChangesSource' => __DIR__ . '/maintenance/populateRecentChangesSource.php',
+       'PopulateRevisionLength' => __DIR__ . '/maintenance/populateRevisionLength.php',
+       'PopulateRevisionSha1' => __DIR__ . '/maintenance/populateRevisionSha1.php',
+       'PostgreSqlLockManager' => __DIR__ . '/includes/filebackend/lockmanager/DBLockManager.php',
+       'PostgresField' => __DIR__ . '/includes/db/DatabasePostgres.php',
+       'PostgresInstaller' => __DIR__ . '/includes/installer/PostgresInstaller.php',
+       'PostgresTransactionState' => __DIR__ . '/includes/db/DatabasePostgres.php',
+       'PostgresUpdater' => __DIR__ . '/includes/installer/PostgresUpdater.php',
+       'Preferences' => __DIR__ . '/includes/Preferences.php',
+       'PreferencesForm' => __DIR__ . '/includes/Preferences.php',
+       'PrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
+       'PreprocessDump' => __DIR__ . '/maintenance/preprocessDump.php',
+       'Preprocessor' => __DIR__ . '/includes/parser/Preprocessor.php',
+       'Preprocessor_DOM' => __DIR__ . '/includes/parser/Preprocessor_DOM.php',
+       'Preprocessor_Hash' => __DIR__ . '/includes/parser/Preprocessor_Hash.php',
+       'ProcessCacheLRU' => __DIR__ . '/includes/libs/ProcessCacheLRU.php',
+       'ProfileSection' => __DIR__ . '/includes/profiler/ProfileSection.php',
+       'Profiler' => __DIR__ . '/includes/profiler/Profiler.php',
+       'ProfilerSimpleDB' => __DIR__ . '/includes/profiler/ProfilerSimpleDB.php',
+       'ProfilerSimpleText' => __DIR__ . '/includes/profiler/ProfilerSimpleText.php',
+       'ProfilerSimpleTrace' => __DIR__ . '/includes/profiler/ProfilerSimpleTrace.php',
+       'ProfilerSimpleUDP' => __DIR__ . '/includes/profiler/ProfilerSimpleUDP.php',
+       'ProfilerStandard' => __DIR__ . '/includes/profiler/ProfilerStandard.php',
+       'ProfilerStub' => __DIR__ . '/includes/profiler/ProfilerStub.php',
+       'ProfilerXhprof' => __DIR__ . '/includes/profiler/ProfilerXhprof.php',
+       'Protect' => __DIR__ . '/maintenance/protect.php',
+       'ProtectAction' => __DIR__ . '/includes/actions/ProtectAction.php',
+       'ProtectedPagesPager' => __DIR__ . '/includes/specials/SpecialProtectedpages.php',
+       'ProtectedTitlesPager' => __DIR__ . '/includes/specials/SpecialProtectedtitles.php',
+       'ProtectionForm' => __DIR__ . '/includes/ProtectionForm.php',
+       'PruneFileCache' => __DIR__ . '/maintenance/pruneFileCache.php',
+       'PublishStashedFileJob' => __DIR__ . '/includes/jobqueue/jobs/PublishStashedFileJob.php',
+       'PurgeAction' => __DIR__ . '/includes/actions/PurgeAction.php',
+       'PurgeChangedFiles' => __DIR__ . '/maintenance/purgeChangedFiles.php',
+       'PurgeChangedPages' => __DIR__ . '/maintenance/purgeChangedPages.php',
+       'PurgeList' => __DIR__ . '/maintenance/purgeList.php',
+       'PurgeOldText' => __DIR__ . '/maintenance/purgeOldText.php',
+       'PurgeParserCache' => __DIR__ . '/maintenance/purgeParserCache.php',
+       'QueryPage' => __DIR__ . '/includes/specialpage/QueryPage.php',
+       'QuickTemplate' => __DIR__ . '/includes/skins/QuickTemplate.php',
+       'QuorumLockManager' => __DIR__ . '/includes/filebackend/lockmanager/QuorumLockManager.php',
+       'RCCacheEntry' => __DIR__ . '/includes/changes/RCCacheEntry.php',
+       'RCCacheEntryFactory' => __DIR__ . '/includes/changes/RCCacheEntryFactory.php',
+       'RCDatabaseLogEntry' => __DIR__ . '/includes/logging/LogEntry.php',
+       'RCFeedEngine' => __DIR__ . '/includes/rcfeed/RCFeedEngine.php',
+       'RCFeedFormatter' => __DIR__ . '/includes/rcfeed/RCFeedFormatter.php',
+       'RSSFeed' => __DIR__ . '/includes/Feed.php',
+       'RandomPage' => __DIR__ . '/includes/specials/SpecialRandompage.php',
+       'RangeDifference' => __DIR__ . '/includes/diff/WikiDiff3.php',
+       'RawAction' => __DIR__ . '/includes/actions/RawAction.php',
+       'RawMessage' => __DIR__ . '/includes/Message.php',
+       'ReadOnlyError' => __DIR__ . '/includes/exception/ReadOnlyError.php',
+       'ReassignEdits' => __DIR__ . '/maintenance/reassignEdits.php',
+       'RebuildAll' => __DIR__ . '/maintenance/rebuildall.php',
+       'RebuildFileCache' => __DIR__ . '/maintenance/rebuildFileCache.php',
+       'RebuildLocalisationCache' => __DIR__ . '/maintenance/rebuildLocalisationCache.php',
+       'RebuildMessages' => __DIR__ . '/maintenance/rebuildmessages.php',
+       'RebuildRecentchanges' => __DIR__ . '/maintenance/rebuildrecentchanges.php',
+       'RebuildTextIndex' => __DIR__ . '/maintenance/rebuildtextindex.php',
+       'RecentChange' => __DIR__ . '/includes/changes/RecentChange.php',
+       'RecompressTracked' => __DIR__ . '/maintenance/storage/recompressTracked.php',
+       'RedirectSpecialArticle' => __DIR__ . '/includes/specialpage/RedirectSpecialPage.php',
+       'RedirectSpecialPage' => __DIR__ . '/includes/specialpage/RedirectSpecialPage.php',
+       'RedisBagOStuff' => __DIR__ . '/includes/objectcache/RedisBagOStuff.php',
+       'RedisConnRef' => __DIR__ . '/includes/clientpool/RedisConnectionPool.php',
+       'RedisConnectionPool' => __DIR__ . '/includes/clientpool/RedisConnectionPool.php',
+       'RedisLockManager' => __DIR__ . '/includes/filebackend/lockmanager/RedisLockManager.php',
+       'RedisPubSubFeedEngine' => __DIR__ . '/includes/rcfeed/RedisPubSubFeedEngine.php',
+       'RefreshFileHeaders' => __DIR__ . '/maintenance/refreshFileHeaders.php',
+       'RefreshImageMetadata' => __DIR__ . '/maintenance/refreshImageMetadata.php',
+       'RefreshLinks' => __DIR__ . '/maintenance/refreshLinks.php',
+       'RefreshLinksJob' => __DIR__ . '/includes/jobqueue/jobs/RefreshLinksJob.php',
+       'RefreshLinksJob2' => __DIR__ . '/includes/jobqueue/jobs/RefreshLinksJob2.php',
+       'RegexlikeReplacer' => __DIR__ . '/includes/utils/StringUtils.php',
+       'RemoveUnusedAccounts' => __DIR__ . '/maintenance/removeUnusedAccounts.php',
+       'RenameDbPrefix' => __DIR__ . '/maintenance/renameDbPrefix.php',
+       'RenderAction' => __DIR__ . '/includes/actions/RenderAction.php',
+       'ReplacementArray' => __DIR__ . '/includes/utils/StringUtils.php',
+       'Replacer' => __DIR__ . '/includes/utils/StringUtils.php',
+       'RepoGroup' => __DIR__ . '/includes/filerepo/RepoGroup.php',
+       'RequestContext' => __DIR__ . '/includes/context/RequestContext.php',
+       'ResetUserTokens' => __DIR__ . '/maintenance/resetUserTokens.php',
+       'ResourceFileCache' => __DIR__ . '/includes/cache/ResourceFileCache.php',
+       'ResourceLoader' => __DIR__ . '/includes/resourceloader/ResourceLoader.php',
+       'ResourceLoaderContext' => __DIR__ . '/includes/resourceloader/ResourceLoaderContext.php',
+       'ResourceLoaderEditToolbarModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderEditToolbarModule.php',
+       'ResourceLoaderFileModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderFileModule.php',
+       'ResourceLoaderFilePageModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderFilePageModule.php',
+       'ResourceLoaderFilePath' => __DIR__ . '/includes/resourceloader/ResourceLoaderFilePath.php',
+       'ResourceLoaderLanguageDataModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLanguageDataModule.php',
+       'ResourceLoaderLanguageNamesModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderLanguageNamesModule.php',
+       'ResourceLoaderModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderModule.php',
+       'ResourceLoaderNoscriptModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderNoscriptModule.php',
+       'ResourceLoaderSiteModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSiteModule.php',
+       'ResourceLoaderSkinModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderSkinModule.php',
+       'ResourceLoaderStartUpModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderStartUpModule.php',
+       'ResourceLoaderUserCSSPrefsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserCSSPrefsModule.php',
+       'ResourceLoaderUserGroupsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserGroupsModule.php',
+       'ResourceLoaderUserModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserModule.php',
+       'ResourceLoaderUserOptionsModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserOptionsModule.php',
+       'ResourceLoaderUserTokensModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderUserTokensModule.php',
+       'ResourceLoaderWikiModule' => __DIR__ . '/includes/resourceloader/ResourceLoaderWikiModule.php',
+       'ResultWrapper' => __DIR__ . '/includes/db/DatabaseUtility.php',
+       'RevDelArchiveItem' => __DIR__ . '/includes/revisiondelete/RevDelArchiveItem.php',
+       'RevDelArchiveList' => __DIR__ . '/includes/revisiondelete/RevDelArchiveList.php',
+       'RevDelArchivedFileItem' => __DIR__ . '/includes/revisiondelete/RevDelArchivedFileItem.php',
+       'RevDelArchivedFileList' => __DIR__ . '/includes/revisiondelete/RevDelArchivedFileList.php',
+       'RevDelArchivedRevisionItem' => __DIR__ . '/includes/revisiondelete/RevDelArchivedRevisionItem.php',
+       'RevDelFileItem' => __DIR__ . '/includes/revisiondelete/RevDelFileItem.php',
+       'RevDelFileList' => __DIR__ . '/includes/revisiondelete/RevDelFileList.php',
+       'RevDelItem' => __DIR__ . '/includes/revisiondelete/RevDelItem.php',
+       'RevDelList' => __DIR__ . '/includes/revisiondelete/RevDelList.php',
+       'RevDelLogItem' => __DIR__ . '/includes/revisiondelete/RevDelLogItem.php',
+       'RevDelLogList' => __DIR__ . '/includes/revisiondelete/RevDelLogList.php',
+       'RevDelRevisionItem' => __DIR__ . '/includes/revisiondelete/RevDelRevisionItem.php',
+       'RevDelRevisionList' => __DIR__ . '/includes/revisiondelete/RevDelRevisionList.php',
+       'ReverseChronologicalPager' => __DIR__ . '/includes/pager/ReverseChronologicalPager.php',
+       'RevertAction' => __DIR__ . '/includes/actions/RevertAction.php',
+       'Revision' => __DIR__ . '/includes/Revision.php',
+       'RevisionDeleteUser' => __DIR__ . '/includes/revisiondelete/RevisionDeleteUser.php',
+       'RevisionDeleter' => __DIR__ . '/includes/revisiondelete/RevisionDeleter.php',
+       'RevisionItem' => __DIR__ . '/includes/RevisionList.php',
+       'RevisionItemBase' => __DIR__ . '/includes/RevisionList.php',
+       'RevisionList' => __DIR__ . '/includes/RevisionList.php',
+       'RevisionListBase' => __DIR__ . '/includes/RevisionList.php',
+       'RevisiondeleteAction' => __DIR__ . '/includes/actions/RevisiondeleteAction.php',
+       'RightsLogFormatter' => __DIR__ . '/includes/logging/RightsLogFormatter.php',
+       'RollbackAction' => __DIR__ . '/includes/actions/RollbackAction.php',
+       'RollbackEdits' => __DIR__ . '/maintenance/rollbackEdits.php',
+       'RunJobs' => __DIR__ . '/maintenance/runJobs.php',
+       'RunningStat' => __DIR__ . '/includes/libs/RunningStat.php',
+       'SQLiteField' => __DIR__ . '/includes/db/DatabaseSqlite.php',
+       'SVGMetadataExtractor' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
+       'SVGReader' => __DIR__ . '/includes/media/SVGMetadataExtractor.php',
+       'Sanitizer' => __DIR__ . '/includes/Sanitizer.php',
+       'SavepointPostgres' => __DIR__ . '/includes/db/DatabasePostgres.php',
+       'ScopedCallback' => __DIR__ . '/includes/libs/ScopedCallback.php',
+       'ScopedLock' => __DIR__ . '/includes/filebackend/lockmanager/ScopedLock.php',
+       'ScopedPHPTimeout' => __DIR__ . '/includes/libs/ScopedPHPTimeout.php',
+       'SearchDatabase' => __DIR__ . '/includes/search/SearchDatabase.php',
+       'SearchDump' => __DIR__ . '/maintenance/dumpIterator.php',
+       'SearchEngine' => __DIR__ . '/includes/search/SearchEngine.php',
+       'SearchEngineDummy' => __DIR__ . '/includes/search/SearchEngine.php',
+       'SearchHighlighter' => __DIR__ . '/includes/search/SearchHighlighter.php',
+       'SearchMssql' => __DIR__ . '/includes/search/SearchMssql.php',
+       'SearchMySQL' => __DIR__ . '/includes/search/SearchMySQL.php',
+       'SearchNearMatchResultSet' => __DIR__ . '/includes/search/SearchResultSet.php',
+       'SearchOracle' => __DIR__ . '/includes/search/SearchOracle.php',
+       'SearchPostgres' => __DIR__ . '/includes/search/SearchPostgres.php',
+       'SearchResult' => __DIR__ . '/includes/search/SearchResult.php',
+       'SearchResultSet' => __DIR__ . '/includes/search/SearchResultSet.php',
+       'SearchSqlite' => __DIR__ . '/includes/search/SearchSqlite.php',
+       'SearchUpdate' => __DIR__ . '/includes/deferred/SearchUpdate.php',
+       'SectionProfiler' => __DIR__ . '/includes/profiler/SectionProfiler.php',
+       'SevenZipStream' => __DIR__ . '/maintenance/7zip.inc',
+       'ShiConverter' => __DIR__ . '/languages/classes/LanguageShi.php',
+       'ShortPagesPage' => __DIR__ . '/includes/specials/SpecialShortpages.php',
+       'ShowCacheStats' => __DIR__ . '/maintenance/showCacheStats.php',
+       'ShowJobs' => __DIR__ . '/maintenance/showJobs.php',
+       'ShowSiteStats' => __DIR__ . '/maintenance/showSiteStats.php',
+       'Site' => __DIR__ . '/includes/site/Site.php',
+       'SiteArray' => __DIR__ . '/includes/site/SiteList.php',
+       'SiteConfiguration' => __DIR__ . '/includes/SiteConfiguration.php',
+       'SiteList' => __DIR__ . '/includes/site/SiteList.php',
+       'SiteObject' => __DIR__ . '/includes/site/Site.php',
+       'SiteSQLStore' => __DIR__ . '/includes/site/SiteSQLStore.php',
+       'SiteStats' => __DIR__ . '/includes/SiteStats.php',
+       'SiteStatsInit' => __DIR__ . '/includes/SiteStats.php',
+       'SiteStatsUpdate' => __DIR__ . '/includes/deferred/SiteStatsUpdate.php',
+       'SiteStore' => __DIR__ . '/includes/site/SiteStore.php',
+       'Sites' => __DIR__ . '/includes/site/SiteSQLStore.php',
+       'Skin' => __DIR__ . '/includes/skins/Skin.php',
+       'SkinApi' => __DIR__ . '/includes/skins/SkinApi.php',
+       'SkinApiTemplate' => __DIR__ . '/includes/skins/SkinApiTemplate.php',
+       'SkinException' => __DIR__ . '/includes/skins/SkinException.php',
+       'SkinFactory' => __DIR__ . '/includes/skins/SkinFactory.php',
+       'SkinFallback' => __DIR__ . '/includes/skins/SkinFallback.php',
+       'SkinFallbackTemplate' => __DIR__ . '/includes/skins/SkinFallbackTemplate.php',
+       'SkinTemplate' => __DIR__ . '/includes/skins/SkinTemplate.php',
+       'SpecialActiveUsers' => __DIR__ . '/includes/specials/SpecialActiveusers.php',
+       'SpecialAllMessages' => __DIR__ . '/includes/specials/SpecialAllMessages.php',
+       'SpecialAllMyUploads' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
+       'SpecialAllPages' => __DIR__ . '/includes/specials/SpecialAllPages.php',
+       'SpecialApiHelp' => __DIR__ . '/includes/specials/SpecialApiHelp.php',
+       'SpecialBlankpage' => __DIR__ . '/includes/specials/SpecialBlankpage.php',
+       'SpecialBlock' => __DIR__ . '/includes/specials/SpecialBlock.php',
+       'SpecialBlockList' => __DIR__ . '/includes/specials/SpecialBlockList.php',
+       'SpecialBookSources' => __DIR__ . '/includes/specials/SpecialBooksources.php',
+       'SpecialCachedPage' => __DIR__ . '/includes/specials/SpecialCachedPage.php',
+       'SpecialCategories' => __DIR__ . '/includes/specials/SpecialCategories.php',
+       'SpecialChangeEmail' => __DIR__ . '/includes/specials/SpecialChangeEmail.php',
+       'SpecialChangePassword' => __DIR__ . '/includes/specials/SpecialChangePassword.php',
+       'SpecialComparePages' => __DIR__ . '/includes/specials/SpecialComparePages.php',
+       'SpecialContributions' => __DIR__ . '/includes/specials/SpecialContributions.php',
+       'SpecialCreateAccount' => __DIR__ . '/includes/specials/SpecialCreateAccount.php',
+       'SpecialDiff' => __DIR__ . '/includes/specials/SpecialDiff.php',
+       'SpecialEditWatchlist' => __DIR__ . '/includes/specials/SpecialEditWatchlist.php',
+       'SpecialEmailUser' => __DIR__ . '/includes/specials/SpecialEmailuser.php',
+       'SpecialExpandTemplates' => __DIR__ . '/includes/specials/SpecialExpandTemplates.php',
+       'SpecialExport' => __DIR__ . '/includes/specials/SpecialExport.php',
+       'SpecialFilepath' => __DIR__ . '/includes/specials/SpecialFilepath.php',
+       'SpecialImport' => __DIR__ . '/includes/specials/SpecialImport.php',
+       'SpecialJavaScriptTest' => __DIR__ . '/includes/specials/SpecialJavaScriptTest.php',
+       'SpecialListAdmins' => __DIR__ . '/includes/specials/SpecialListusers.php',
+       'SpecialListBots' => __DIR__ . '/includes/specials/SpecialListusers.php',
+       'SpecialListFiles' => __DIR__ . '/includes/specials/SpecialListfiles.php',
+       'SpecialListGroupRights' => __DIR__ . '/includes/specials/SpecialListgrouprights.php',
+       'SpecialListUsers' => __DIR__ . '/includes/specials/SpecialListusers.php',
+       'SpecialLockdb' => __DIR__ . '/includes/specials/SpecialLockdb.php',
+       'SpecialLog' => __DIR__ . '/includes/specials/SpecialLog.php',
+       'SpecialMergeHistory' => __DIR__ . '/includes/specials/SpecialMergeHistory.php',
+       'SpecialMyLanguage' => __DIR__ . '/includes/specials/SpecialMyLanguage.php',
+       'SpecialMycontributions' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
+       'SpecialMypage' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
+       'SpecialMytalk' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
+       'SpecialMyuploads' => __DIR__ . '/includes/specials/SpecialMyRedirectPages.php',
+       'SpecialNewFiles' => __DIR__ . '/includes/specials/SpecialNewimages.php',
+       'SpecialNewpages' => __DIR__ . '/includes/specials/SpecialNewpages.php',
+       'SpecialPage' => __DIR__ . '/includes/specialpage/SpecialPage.php',
+       'SpecialPageFactory' => __DIR__ . '/includes/specialpage/SpecialPageFactory.php',
+       'SpecialPageLanguage' => __DIR__ . '/includes/specials/SpecialPageLanguage.php',
+       'SpecialPagesWithProp' => __DIR__ . '/includes/specials/SpecialPagesWithProp.php',
+       'SpecialPasswordReset' => __DIR__ . '/includes/specials/SpecialPasswordReset.php',
+       'SpecialPermanentLink' => __DIR__ . '/includes/specials/SpecialPermanentLink.php',
+       'SpecialPreferences' => __DIR__ . '/includes/specials/SpecialPreferences.php',
+       'SpecialPrefixindex' => __DIR__ . '/includes/specials/SpecialPrefixindex.php',
+       'SpecialProtectedpages' => __DIR__ . '/includes/specials/SpecialProtectedpages.php',
+       'SpecialProtectedtitles' => __DIR__ . '/includes/specials/SpecialProtectedtitles.php',
+       'SpecialRandomInCategory' => __DIR__ . '/includes/specials/SpecialRandomInCategory.php',
+       'SpecialRandomredirect' => __DIR__ . '/includes/specials/SpecialRandomredirect.php',
+       'SpecialRecentChanges' => __DIR__ . '/includes/specials/SpecialRecentchanges.php',
+       'SpecialRecentChangesLinked' => __DIR__ . '/includes/specials/SpecialRecentchangeslinked.php',
+       'SpecialRedirect' => __DIR__ . '/includes/specials/SpecialRedirect.php',
+       'SpecialRedirectToSpecial' => __DIR__ . '/includes/specialpage/RedirectSpecialPage.php',
+       'SpecialResetTokens' => __DIR__ . '/includes/specials/SpecialResetTokens.php',
+       'SpecialRevisionDelete' => __DIR__ . '/includes/specials/SpecialRevisiondelete.php',
+       'SpecialRunJobs' => __DIR__ . '/includes/specials/SpecialRunJobs.php',
+       'SpecialSearch' => __DIR__ . '/includes/specials/SpecialSearch.php',
+       'SpecialSpecialpages' => __DIR__ . '/includes/specials/SpecialSpecialpages.php',
+       'SpecialStatistics' => __DIR__ . '/includes/specials/SpecialStatistics.php',
+       'SpecialTags' => __DIR__ . '/includes/specials/SpecialTags.php',
+       'SpecialTrackingCategories' => __DIR__ . '/includes/specials/SpecialTrackingCategories.php',
+       'SpecialUnblock' => __DIR__ . '/includes/specials/SpecialUnblock.php',
+       'SpecialUndelete' => __DIR__ . '/includes/specials/SpecialUndelete.php',
+       'SpecialUnlockdb' => __DIR__ . '/includes/specials/SpecialUnlockdb.php',
+       'SpecialUpload' => __DIR__ . '/includes/specials/SpecialUpload.php',
+       'SpecialUploadStash' => __DIR__ . '/includes/specials/SpecialUploadStash.php',
+       'SpecialUploadStashTooLargeException' => __DIR__ . '/includes/specials/SpecialUploadStash.php',
+       'SpecialUserlogout' => __DIR__ . '/includes/specials/SpecialUserlogout.php',
+       'SpecialVersion' => __DIR__ . '/includes/specials/SpecialVersion.php',
+       'SpecialWatchlist' => __DIR__ . '/includes/specials/SpecialWatchlist.php',
+       'SpecialWhatLinksHere' => __DIR__ . '/includes/specials/SpecialWhatlinkshere.php',
+       'SqlBagOStuff' => __DIR__ . '/includes/objectcache/SqlBagOStuff.php',
+       'SqlDataUpdate' => __DIR__ . '/includes/deferred/SqlDataUpdate.php',
+       'SqlSearchResultSet' => __DIR__ . '/includes/search/SearchResultSet.php',
+       'Sqlite' => __DIR__ . '/maintenance/sqlite.inc',
+       'SqliteInstaller' => __DIR__ . '/includes/installer/SqliteInstaller.php',
+       'SqliteMaintenance' => __DIR__ . '/maintenance/sqlite.php',
+       'SqliteUpdater' => __DIR__ . '/includes/installer/SqliteUpdater.php',
+       'SquidPurgeClient' => __DIR__ . '/includes/SquidPurgeClient.php',
+       'SquidPurgeClientPool' => __DIR__ . '/includes/SquidPurgeClient.php',
+       'SquidUpdate' => __DIR__ . '/includes/deferred/SquidUpdate.php',
+       'SrConverter' => __DIR__ . '/languages/classes/LanguageSr.php',
+       'StatCounter' => __DIR__ . '/includes/StatCounter.php',
+       'StatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
+       'Status' => __DIR__ . '/includes/Status.php',
+       'StorageTypeStats' => __DIR__ . '/maintenance/storage/storageTypeStats.php',
+       'StoreFileOp' => __DIR__ . '/includes/filebackend/FileOp.php',
+       'StreamFile' => __DIR__ . '/includes/StreamFile.php',
+       'StringPrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
+       'StringUtils' => __DIR__ . '/includes/utils/StringUtils.php',
+       'StripState' => __DIR__ . '/includes/parser/StripState.php',
+       'StubObject' => __DIR__ . '/includes/StubObject.php',
+       'StubUserLang' => __DIR__ . '/includes/StubObject.php',
+       'SubmitAction' => __DIR__ . '/includes/actions/SubmitAction.php',
+       'SvgHandler' => __DIR__ . '/includes/media/SVG.php',
+       'SwiftFileBackend' => __DIR__ . '/includes/filebackend/SwiftFileBackend.php',
+       'SwiftFileBackendDirList' => __DIR__ . '/includes/filebackend/SwiftFileBackend.php',
+       'SwiftFileBackendFileList' => __DIR__ . '/includes/filebackend/SwiftFileBackend.php',
+       'SwiftFileBackendList' => __DIR__ . '/includes/filebackend/SwiftFileBackend.php',
+       'SwiftFileOpHandle' => __DIR__ . '/includes/filebackend/SwiftFileBackend.php',
+       'SwiftVirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/SwiftVirtualRESTService.php',
+       'SyncFileBackend' => __DIR__ . '/maintenance/syncFileBackend.php',
+       'TableCleanup' => __DIR__ . '/maintenance/cleanupTable.inc',
+       'TableCleanupTest' => __DIR__ . '/maintenance/cleanupTable.inc',
+       'TableDiffFormatter' => __DIR__ . '/includes/diff/TableDiffFormatter.php',
+       'TablePager' => __DIR__ . '/includes/pager/TablePager.php',
+       'TempFSFile' => __DIR__ . '/includes/filebackend/TempFSFile.php',
+       'TempFileRepo' => __DIR__ . '/includes/filerepo/FileRepo.php',
+       'TestFileOpPerformance' => __DIR__ . '/maintenance/fileOpPerfTest.php',
+       'TextContent' => __DIR__ . '/includes/content/TextContent.php',
+       'TextContentHandler' => __DIR__ . '/includes/content/TextContentHandler.php',
+       'TextPassDumper' => __DIR__ . '/maintenance/backupTextPass.inc',
+       'TextStatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
+       'TgConverter' => __DIR__ . '/languages/classes/LanguageTg.php',
+       'ThrottledError' => __DIR__ . '/includes/exception/ThrottledError.php',
+       'ThumbnailImage' => __DIR__ . '/includes/media/MediaTransformOutput.php',
+       'ThumbnailRenderJob' => __DIR__ . '/includes/jobqueue/jobs/ThumbnailRenderJob.php',
+       'TidyUpBug37714' => __DIR__ . '/maintenance/tidyUpBug37714.php',
+       'TiffHandler' => __DIR__ . '/includes/media/Tiff.php',
+       'TimestampException' => __DIR__ . '/includes/exception/TimestampException.php',
+       'Title' => __DIR__ . '/includes/Title.php',
+       'TitleArray' => __DIR__ . '/includes/TitleArray.php',
+       'TitleArrayFromResult' => __DIR__ . '/includes/TitleArrayFromResult.php',
+       'TitleCleanup' => __DIR__ . '/maintenance/cleanupTitles.php',
+       'TitleFormatter' => __DIR__ . '/includes/title/TitleFormatter.php',
+       'TitleParser' => __DIR__ . '/includes/title/TitleParser.php',
+       'TitlePrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
+       'TitleValue' => __DIR__ . '/includes/title/TitleValue.php',
+       'TrackBlobs' => __DIR__ . '/maintenance/storage/trackBlobs.php',
+       'TraditionalImageGallery' => __DIR__ . '/includes/gallery/TraditionalImageGallery.php',
+       'TransactionProfiler' => __DIR__ . '/includes/profiler/TransactionProfiler.php',
+       'TransformParameterError' => __DIR__ . '/includes/media/MediaTransformOutput.php',
+       'TransformationalImageHandler' => __DIR__ . '/includes/media/TransformationalImageHandler.php',
+       'UDPRCFeedEngine' => __DIR__ . '/includes/rcfeed/UDPRCFeedEngine.php',
+       'UIDGenerator' => __DIR__ . '/includes/utils/UIDGenerator.php',
+       'UcdXmlReader' => __DIR__ . '/maintenance/language/generateCollationData.php',
+       'UncategorizedCategoriesPage' => __DIR__ . '/includes/specials/SpecialUncategorizedcategories.php',
+       'UncategorizedImagesPage' => __DIR__ . '/includes/specials/SpecialUncategorizedimages.php',
+       'UncategorizedPagesPage' => __DIR__ . '/includes/specials/SpecialUncategorizedpages.php',
+       'UncategorizedTemplatesPage' => __DIR__ . '/includes/specials/SpecialUncategorizedtemplates.php',
+       'Undelete' => __DIR__ . '/maintenance/undelete.php',
+       'UnifiedDiffFormatter' => __DIR__ . '/includes/diff/UnifiedDiffFormatter.php',
+       'UnlistedSpecialPage' => __DIR__ . '/includes/specialpage/UnlistedSpecialPage.php',
+       'UnprotectAction' => __DIR__ . '/includes/actions/UnprotectAction.php',
+       'UnregisteredLocalFile' => __DIR__ . '/includes/filerepo/file/UnregisteredLocalFile.php',
+       'UnusedCategoriesPage' => __DIR__ . '/includes/specials/SpecialUnusedcategories.php',
+       'UnusedimagesPage' => __DIR__ . '/includes/specials/SpecialUnusedimages.php',
+       'UnusedtemplatesPage' => __DIR__ . '/includes/specials/SpecialUnusedtemplates.php',
+       'UnwatchAction' => __DIR__ . '/includes/actions/UnwatchAction.php',
+       'UnwatchedpagesPage' => __DIR__ . '/includes/specials/SpecialUnwatchedpages.php',
+       'UpdateArticleCount' => __DIR__ . '/maintenance/updateArticleCount.php',
+       'UpdateCollation' => __DIR__ . '/maintenance/updateCollation.php',
+       'UpdateDoubleWidthSearch' => __DIR__ . '/maintenance/updateDoubleWidthSearch.php',
+       'UpdateLogging' => __DIR__ . '/maintenance/archives/upgradeLogging.php',
+       'UpdateMediaWiki' => __DIR__ . '/maintenance/update.php',
+       'UpdateRestrictions' => __DIR__ . '/maintenance/updateRestrictions.php',
+       'UpdateSearchIndex' => __DIR__ . '/maintenance/updateSearchIndex.php',
+       'UpdateSpecialPages' => __DIR__ . '/maintenance/updateSpecialPages.php',
+       'UploadBase' => __DIR__ . '/includes/upload/UploadBase.php',
+       'UploadChunkFileException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
+       'UploadChunkVerificationException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
+       'UploadChunkZeroLengthFileException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
+       'UploadDumper' => __DIR__ . '/maintenance/dumpUploads.php',
+       'UploadForm' => __DIR__ . '/includes/specials/SpecialUpload.php',
+       'UploadFromChunks' => __DIR__ . '/includes/upload/UploadFromChunks.php',
+       'UploadFromFile' => __DIR__ . '/includes/upload/UploadFromFile.php',
+       'UploadFromStash' => __DIR__ . '/includes/upload/UploadFromStash.php',
+       'UploadFromUrl' => __DIR__ . '/includes/upload/UploadFromUrl.php',
+       'UploadFromUrlJob' => __DIR__ . '/includes/jobqueue/jobs/UploadFromUrlJob.php',
+       'UploadSourceAdapter' => __DIR__ . '/includes/Import.php',
+       'UploadSourceField' => __DIR__ . '/includes/specials/SpecialUpload.php',
+       'UploadStash' => __DIR__ . '/includes/upload/UploadStash.php',
+       'UploadStashBadPathException' => __DIR__ . '/includes/upload/UploadStash.php',
+       'UploadStashCleanup' => __DIR__ . '/maintenance/cleanupUploadStash.php',
+       'UploadStashException' => __DIR__ . '/includes/upload/UploadStash.php',
+       'UploadStashFile' => __DIR__ . '/includes/upload/UploadStash.php',
+       'UploadStashFileException' => __DIR__ . '/includes/upload/UploadStash.php',
+       'UploadStashFileNotFoundException' => __DIR__ . '/includes/upload/UploadStash.php',
+       'UploadStashNoSuchKeyException' => __DIR__ . '/includes/upload/UploadStash.php',
+       'UploadStashNotAvailableException' => __DIR__ . '/includes/upload/UploadStash.php',
+       'UploadStashNotLoggedInException' => __DIR__ . '/includes/upload/UploadStash.php',
+       'UploadStashWrongOwnerException' => __DIR__ . '/includes/upload/UploadStash.php',
+       'UploadStashZeroLengthFileException' => __DIR__ . '/includes/upload/UploadStash.php',
+       'UppercaseCollation' => __DIR__ . '/includes/Collation.php',
+       'UsageException' => __DIR__ . '/includes/api/ApiMain.php',
+       'User' => __DIR__ . '/includes/User.php',
+       'UserArray' => __DIR__ . '/includes/UserArray.php',
+       'UserArrayFromResult' => __DIR__ . '/includes/UserArrayFromResult.php',
+       'UserBlockedError' => __DIR__ . '/includes/exception/UserBlockedError.php',
+       'UserCache' => __DIR__ . '/includes/cache/UserCache.php',
+       'UserDupes' => __DIR__ . '/maintenance/userDupes.inc',
+       'UserMailer' => __DIR__ . '/includes/mail/UserMailer.php',
+       'UserNotLoggedIn' => __DIR__ . '/includes/exception/UserNotLoggedIn.php',
+       'UserOptions' => __DIR__ . '/maintenance/userOptions.inc',
+       'UserRightsProxy' => __DIR__ . '/includes/UserRightsProxy.php',
+       'UsercreateTemplate' => __DIR__ . '/includes/templates/Usercreate.php',
+       'UserloginTemplate' => __DIR__ . '/includes/templates/Userlogin.php',
+       'UserrightsPage' => __DIR__ . '/includes/specials/SpecialUserrights.php',
+       'UsersPager' => __DIR__ . '/includes/specials/SpecialListusers.php',
+       'UtfNormal' => __DIR__ . '/includes/normal/UtfNormal.php',
+       'UzConverter' => __DIR__ . '/languages/classes/LanguageUz.php',
+       'ViewAction' => __DIR__ . '/includes/actions/ViewAction.php',
+       'VirtualRESTService' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTService.php',
+       'VirtualRESTServiceClient' => __DIR__ . '/includes/libs/virtualrest/VirtualRESTServiceClient.php',
+       'WaitForSlave' => __DIR__ . '/maintenance/waitForSlave.php',
+       'WantedCategoriesPage' => __DIR__ . '/includes/specials/SpecialWantedcategories.php',
+       'WantedFilesPage' => __DIR__ . '/includes/specials/SpecialWantedfiles.php',
+       'WantedPagesPage' => __DIR__ . '/includes/specials/SpecialWantedpages.php',
+       'WantedQueryPage' => __DIR__ . '/includes/specialpage/WantedQueryPage.php',
+       'WantedTemplatesPage' => __DIR__ . '/includes/specials/SpecialWantedtemplates.php',
+       'WatchAction' => __DIR__ . '/includes/actions/WatchAction.php',
+       'WatchedItem' => __DIR__ . '/includes/WatchedItem.php',
+       'WatchlistCleanup' => __DIR__ . '/maintenance/cleanupWatchlist.php',
+       'WebInstaller' => __DIR__ . '/includes/installer/WebInstaller.php',
+       'WebInstallerComplete' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerCopying' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerDBConnect' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerDBSettings' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerDocument' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerExistingWiki' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerInstall' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerLanguage' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerName' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerOptions' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerOutput' => __DIR__ . '/includes/installer/WebInstallerOutput.php',
+       'WebInstallerPage' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerReadme' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerReleaseNotes' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerRestart' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerUpgrade' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerUpgradeDoc' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebInstallerWelcome' => __DIR__ . '/includes/installer/WebInstallerPage.php',
+       'WebRequest' => __DIR__ . '/includes/WebRequest.php',
+       'WebRequestUpload' => __DIR__ . '/includes/WebRequest.php',
+       'WebResponse' => __DIR__ . '/includes/WebResponse.php',
+       'WikiCategoryPage' => __DIR__ . '/includes/page/WikiCategoryPage.php',
+       'WikiDiff3' => __DIR__ . '/includes/diff/WikiDiff3.php',
+       'WikiExporter' => __DIR__ . '/includes/Export.php',
+       'WikiFilePage' => __DIR__ . '/includes/page/WikiFilePage.php',
+       'WikiImporter' => __DIR__ . '/includes/Import.php',
+       'WikiMap' => __DIR__ . '/includes/WikiMap.php',
+       'WikiPage' => __DIR__ . '/includes/page/WikiPage.php',
+       'WikiReference' => __DIR__ . '/includes/WikiMap.php',
+       'WikiRevision' => __DIR__ . '/includes/Import.php',
+       'WikiStatsOutput' => __DIR__ . '/maintenance/language/StatOutputs.php',
+       'WikitextContent' => __DIR__ . '/includes/content/WikitextContent.php',
+       'WikitextContentHandler' => __DIR__ . '/includes/content/WikitextContentHandler.php',
+       'WinCacheBagOStuff' => __DIR__ . '/includes/objectcache/WinCacheBagOStuff.php',
+       'WithoutInterwikiPage' => __DIR__ . '/includes/specials/SpecialWithoutinterwiki.php',
+       'WordLevelDiff' => __DIR__ . '/includes/diff/DairikiDiff.php',
+       'WrapOldPasswords' => __DIR__ . '/maintenance/wrapOldPasswords.php',
+       'XCFHandler' => __DIR__ . '/includes/media/XCF.php',
+       'XCacheBagOStuff' => __DIR__ . '/includes/objectcache/XCacheBagOStuff.php',
+       'XMLRCFeedFormatter' => __DIR__ . '/includes/rcfeed/XMLRCFeedFormatter.php',
+       'XMPInfo' => __DIR__ . '/includes/media/XMPInfo.php',
+       'XMPReader' => __DIR__ . '/includes/media/XMP.php',
+       'XMPValidate' => __DIR__ . '/includes/media/XMPValidate.php',
+       'Xhprof' => __DIR__ . '/includes/libs/Xhprof.php',
+       'Xml' => __DIR__ . '/includes/Xml.php',
+       'XmlDumpWriter' => __DIR__ . '/includes/Export.php',
+       'XmlJsCode' => __DIR__ . '/includes/Xml.php',
+       'XmlSelect' => __DIR__ . '/includes/Xml.php',
+       'XmlTypeCheck' => __DIR__ . '/includes/libs/XmlTypeCheck.php',
+       'ZhConverter' => __DIR__ . '/languages/classes/LanguageZh.php',
+       'ZipDirectoryReader' => __DIR__ . '/includes/utils/ZipDirectoryReader.php',
+       'ZipDirectoryReaderError' => __DIR__ . '/includes/utils/ZipDirectoryReader.php',
+       'lessc' => __DIR__ . '/includes/libs/lessc.inc.php',
+       'lessc_formatter_classic' => __DIR__ . '/includes/libs/lessc.inc.php',
+       'lessc_formatter_compressed' => __DIR__ . '/includes/libs/lessc.inc.php',
+       'lessc_formatter_lessjs' => __DIR__ . '/includes/libs/lessc.inc.php',
+       'lessc_parser' => __DIR__ . '/includes/libs/lessc.inc.php',
+       'profile_point' => __DIR__ . '/profileinfo.php',
+);
index af86c99..9c6f1f0 100644 (file)
  * Locations of core classes
  * Extension classes are specified with $wgAutoloadClasses
  * This array is a global instead of a static member of AutoLoader to work around a bug in APC
+ * This array is now generated by maintenance/generateLocalAutoload.php
  */
-global $wgAutoloadLocalClasses;
-
-$wgAutoloadLocalClasses = array(
-       # Includes
-       'AjaxDispatcher' => 'includes/AjaxDispatcher.php',
-       'AjaxResponse' => 'includes/AjaxResponse.php',
-       'AtomFeed' => 'includes/Feed.php',
-       'AuthPlugin' => 'includes/AuthPlugin.php',
-       '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',
-       'CategoryViewer' => 'includes/CategoryViewer.php',
-       'ChangeTags' => 'includes/ChangeTags.php',
-       'ChannelFeed' => 'includes/Feed.php',
-       'Collation' => 'includes/Collation.php',
-       'CollationCkb' => 'includes/Collation.php',
-       'CollationEt' => 'includes/Collation.php',
-       'ConcatenatedGzipHistoryBlob' => 'includes/HistoryBlob.php',
-       'CurlHttpRequest' => 'includes/HttpFunctions.php',
-       'DeprecatedGlobal' => 'includes/DeprecatedGlobal.php',
-       'DerivativeRequest' => 'includes/WebRequest.php',
-       'DiffHistoryBlob' => 'includes/HistoryBlob.php',
-       'DummyLinker' => 'includes/Linker.php',
-       'Dump7ZipOutput' => 'includes/Export.php',
-       'DumpBZip2Output' => 'includes/Export.php',
-       'DumpFileOutput' => 'includes/Export.php',
-       'DumpFilter' => 'includes/Export.php',
-       'DumpGZipOutput' => 'includes/Export.php',
-       'DumpLatestFilter' => 'includes/Export.php',
-       'DumpMultiWriter' => 'includes/Export.php',
-       'DumpNamespaceFilter' => 'includes/Export.php',
-       'DumpNotalkFilter' => 'includes/Export.php',
-       'DumpOutput' => 'includes/Export.php',
-       'DumpPipeOutput' => 'includes/Export.php',
-       'EditPage' => 'includes/EditPage.php',
-       'EmptyBloomCache' => 'includes/cache/bloom/BloomCache.php',
-       'Fallback' => 'includes/Fallback.php',
-       'FauxRequest' => 'includes/WebRequest.php',
-       'FauxResponse' => 'includes/WebResponse.php',
-       'FeedItem' => 'includes/Feed.php',
-       'FeedUtils' => 'includes/FeedUtils.php',
-       'FileDeleteForm' => 'includes/FileDeleteForm.php',
-       'ForkController' => 'includes/ForkController.php',
-       'FormOptions' => 'includes/FormOptions.php',
-       'GitInfo' => 'includes/GitInfo.php',
-       'HistoryBlob' => 'includes/HistoryBlob.php',
-       'HistoryBlobCurStub' => 'includes/HistoryBlob.php',
-       'HistoryBlobStub' => 'includes/HistoryBlob.php',
-       'Hooks' => 'includes/Hooks.php',
-       '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',
-       'HTMLFormFieldCloner' => 'includes/htmlform/HTMLFormFieldCloner.php',
-       'HTMLEditTools' => 'includes/htmlform/HTMLEditTools.php',
-       'HTMLFloatField' => 'includes/htmlform/HTMLFloatField.php',
-       'HTMLForm' => 'includes/htmlform/HTMLForm.php',
-       'HTMLFormField' => 'includes/htmlform/HTMLFormField.php',
-       'HTMLFormFieldRequiredOptionsException' =>
-               'includes/htmlform/HTMLFormFieldRequiredOptionsException.php',
-       'HTMLHiddenField' => 'includes/htmlform/HTMLHiddenField.php',
-       'HTMLInfoField' => 'includes/htmlform/HTMLInfoField.php',
-       'HTMLIntField' => 'includes/htmlform/HTMLIntField.php',
-       'HTMLNestedFilterable' => 'includes/htmlform/HTMLNestedFilterable.php',
-       'HTMLMultiSelectField' => 'includes/htmlform/HTMLMultiSelectField.php',
-       'HTMLRadioField' => 'includes/htmlform/HTMLRadioField.php',
-       'HTMLSelectAndOtherField' => 'includes/htmlform/HTMLSelectAndOtherField.php',
-       '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',
-       'Http' => 'includes/HttpFunctions.php',
-       'IcuCollation' => 'includes/Collation.php',
-       'IdentityCollation' => 'includes/Collation.php',
-       'ImportStreamSource' => 'includes/Import.php',
-       'ImportStringSource' => 'includes/Import.php',
-       'Interwiki' => 'includes/interwiki/Interwiki.php',
-       'License' => 'includes/Licenses.php',
-       'Licenses' => 'includes/Licenses.php',
-       'Linker' => 'includes/Linker.php',
-       'LinkFilter' => 'includes/LinkFilter.php',
-       'MagicWord' => 'includes/MagicWord.php',
-       'MagicWordArray' => 'includes/MagicWord.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',
-       'PhpHttpRequest' => 'includes/HttpFunctions.php',
-       'PoolCounter' => 'includes/poolcounter/PoolCounter.php',
-       'PoolCounter_Stub' => 'includes/poolcounter/PoolCounter.php',
-       'PoolCounterRedis' => 'includes/poolcounter/PoolCounterRedis.php',
-       'PoolCounterWork' => 'includes/poolcounter/PoolCounterWork.php',
-       'PoolCounterWorkViaCallback' => 'includes/poolcounter/PoolCounterWorkViaCallback.php',
-       'PoolWorkArticleView' => 'includes/poolcounter/PoolWorkArticleView.php',
-       'Preferences' => 'includes/Preferences.php',
-       'PreferencesForm' => 'includes/Preferences.php',
-       'PrefixSearch' => 'includes/PrefixSearch.php',
-       'ProtectionForm' => 'includes/ProtectionForm.php',
-       'RawMessage' => 'includes/Message.php',
-       'RevisionItem' => 'includes/RevisionList.php',
-       'RevisionItemBase' => 'includes/RevisionList.php',
-       'RevisionListBase' => 'includes/RevisionList.php',
-       'Revision' => 'includes/Revision.php',
-       'RevisionList' => 'includes/RevisionList.php',
-       'RSSFeed' => 'includes/Feed.php',
-       'Sanitizer' => 'includes/Sanitizer.php',
-       'SiteConfiguration' => 'includes/SiteConfiguration.php',
-       'SiteStats' => 'includes/SiteStats.php',
-       'SiteStatsInit' => 'includes/SiteStats.php',
-       'SquidPurgeClient' => 'includes/SquidPurgeClient.php',
-       'SquidPurgeClientPool' => 'includes/SquidPurgeClient.php',
-       'StatCounter' => 'includes/StatCounter.php',
-       'Status' => 'includes/Status.php',
-       'StreamFile' => 'includes/StreamFile.php',
-       'StringPrefixSearch' => 'includes/PrefixSearch.php',
-       'StubObject' => 'includes/StubObject.php',
-       'StubUserLang' => 'includes/StubObject.php',
-       'MWTimestamp' => 'includes/MWTimestamp.php',
-       'Title' => 'includes/Title.php',
-       'TitleArray' => 'includes/TitleArray.php',
-       'TitleArrayFromResult' => 'includes/TitleArrayFromResult.php',
-       'TitlePrefixSearch' => 'includes/PrefixSearch.php',
-       'UploadSourceAdapter' => 'includes/Import.php',
-       'UppercaseCollation' => 'includes/Collation.php',
-       'User' => 'includes/User.php',
-       'UserArray' => 'includes/UserArray.php',
-       'UserArrayFromResult' => 'includes/UserArrayFromResult.php',
-       'UserRightsProxy' => 'includes/UserRightsProxy.php',
-       'WatchedItem' => 'includes/WatchedItem.php',
-       'WebRequest' => 'includes/WebRequest.php',
-       'WebRequestUpload' => 'includes/WebRequest.php',
-       'WebResponse' => 'includes/WebResponse.php',
-       'WikiExporter' => 'includes/Export.php',
-       'WikiImporter' => 'includes/Import.php',
-       'WikiRevision' => 'includes/Import.php',
-       'WikiMap' => 'includes/WikiMap.php',
-       'WikiReference' => 'includes/WikiMap.php',
-       'Xml' => 'includes/Xml.php',
-       'XmlDumpWriter' => 'includes/Export.php',
-       'XmlJsCode' => 'includes/Xml.php',
-       'XmlSelect' => 'includes/Xml.php',
-
-       # includes/actions
-       'Action' => 'includes/actions/Action.php',
-       'CachedAction' => 'includes/actions/CachedAction.php',
-       'CreditsAction' => 'includes/actions/CreditsAction.php',
-       'DeleteAction' => 'includes/actions/DeleteAction.php',
-       'EditAction' => 'includes/actions/EditAction.php',
-       'FormlessAction' => 'includes/actions/FormlessAction.php',
-       'FormAction' => 'includes/actions/FormAction.php',
-       'HistoryAction' => 'includes/actions/HistoryAction.php',
-       'HistoryPager' => 'includes/actions/HistoryAction.php',
-       'InfoAction' => 'includes/actions/InfoAction.php',
-       'MarkpatrolledAction' => 'includes/actions/MarkpatrolledAction.php',
-       'ProtectAction' => 'includes/actions/ProtectAction.php',
-       'PurgeAction' => 'includes/actions/PurgeAction.php',
-       'RawAction' => 'includes/actions/RawAction.php',
-       'RenderAction' => 'includes/actions/RenderAction.php',
-       'RevertAction' => 'includes/actions/RevertAction.php',
-       'RevisiondeleteAction' => 'includes/actions/RevisiondeleteAction.php',
-       'RollbackAction' => 'includes/actions/RollbackAction.php',
-       'SubmitAction' => 'includes/actions/SubmitAction.php',
-       'UnprotectAction' => 'includes/actions/UnprotectAction.php',
-       'UnwatchAction' => 'includes/actions/UnwatchAction.php',
-       'ViewAction' => 'includes/actions/ViewAction.php',
-       'WatchAction' => 'includes/actions/WatchAction.php',
-
-       # 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',
-       'ApiDisabled' => 'includes/api/ApiDisabled.php',
-       'ApiEditPage' => 'includes/api/ApiEditPage.php',
-       'ApiEmailUser' => 'includes/api/ApiEmailUser.php',
-       'ApiExpandTemplates' => 'includes/api/ApiExpandTemplates.php',
-       'ApiFeedContributions' => 'includes/api/ApiFeedContributions.php',
-       'ApiFeedRecentChanges' => 'includes/api/ApiFeedRecentChanges.php',
-       'ApiFeedWatchlist' => 'includes/api/ApiFeedWatchlist.php',
-       'ApiFileRevert' => 'includes/api/ApiFileRevert.php',
-       'ApiFormatBase' => 'includes/api/ApiFormatBase.php',
-       'ApiFormatDbg' => 'includes/api/ApiFormatDbg.php',
-       'ApiFormatDump' => 'includes/api/ApiFormatDump.php',
-       'ApiFormatFeedWrapper' => 'includes/api/ApiFormatFeedWrapper.php',
-       'ApiFormatJson' => 'includes/api/ApiFormatJson.php',
-       'ApiFormatNone' => 'includes/api/ApiFormatNone.php',
-       'ApiFormatPhp' => 'includes/api/ApiFormatPhp.php',
-       'ApiFormatRaw' => 'includes/api/ApiFormatRaw.php',
-       'ApiFormatTxt' => 'includes/api/ApiFormatTxt.php',
-       'ApiFormatWddx' => 'includes/api/ApiFormatWddx.php',
-       'ApiFormatXml' => 'includes/api/ApiFormatXml.php',
-       'ApiFormatXmlRsd' => 'includes/api/ApiRsd.php',
-       'ApiFormatYaml' => 'includes/api/ApiFormatYaml.php',
-       'ApiHelp' => 'includes/api/ApiHelp.php',
-       'ApiImageRotate' => 'includes/api/ApiImageRotate.php',
-       'ApiImport' => 'includes/api/ApiImport.php',
-       'ApiImportReporter' => 'includes/api/ApiImport.php',
-       'ApiLogin' => 'includes/api/ApiLogin.php',
-       'ApiLogout' => 'includes/api/ApiLogout.php',
-       'ApiMain' => 'includes/api/ApiMain.php',
-       'ApiModuleManager' => 'includes/api/ApiModuleManager.php',
-       'ApiMove' => 'includes/api/ApiMove.php',
-       'ApiOpenSearch' => 'includes/api/ApiOpenSearch.php',
-       'ApiOptions' => 'includes/api/ApiOptions.php',
-       'ApiPageSet' => 'includes/api/ApiPageSet.php',
-       'ApiParamInfo' => 'includes/api/ApiParamInfo.php',
-       'ApiParse' => 'includes/api/ApiParse.php',
-       'ApiPatrol' => 'includes/api/ApiPatrol.php',
-       'ApiProtect' => 'includes/api/ApiProtect.php',
-       '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',
-       'ApiQueryCategoryInfo' => 'includes/api/ApiQueryCategoryInfo.php',
-       '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',
-       'ApiQueryExternalLinks' => 'includes/api/ApiQueryExternalLinks.php',
-       'ApiQueryExtLinksUsage' => 'includes/api/ApiQueryExtLinksUsage.php',
-       'ApiQueryFilearchive' => 'includes/api/ApiQueryFilearchive.php',
-       'ApiQueryGeneratorBase' => 'includes/api/ApiQueryBase.php',
-       'ApiQueryImageInfo' => 'includes/api/ApiQueryImageInfo.php',
-       'ApiQueryImages' => 'includes/api/ApiQueryImages.php',
-       'ApiQueryInfo' => 'includes/api/ApiQueryInfo.php',
-       'ApiQueryIWBacklinks' => 'includes/api/ApiQueryIWBacklinks.php',
-       'ApiQueryIWLinks' => 'includes/api/ApiQueryIWLinks.php',
-       'ApiQueryLangBacklinks' => 'includes/api/ApiQueryLangBacklinks.php',
-       'ApiQueryLangLinks' => 'includes/api/ApiQueryLangLinks.php',
-       'ApiQueryLinks' => 'includes/api/ApiQueryLinks.php',
-       'ApiQueryLogEvents' => 'includes/api/ApiQueryLogEvents.php',
-       'ApiQueryORM' => 'includes/api/ApiQueryORM.php',
-       'ApiQueryPageProps' => 'includes/api/ApiQueryPageProps.php',
-       'ApiQueryPagesWithProp' => 'includes/api/ApiQueryPagesWithProp.php',
-       'ApiQueryPagePropNames' => 'includes/api/ApiQueryPagePropNames.php',
-       'ApiQueryPrefixSearch' => 'includes/api/ApiQueryPrefixSearch.php',
-       'ApiQueryProtectedTitles' => 'includes/api/ApiQueryProtectedTitles.php',
-       'ApiQueryQueryPage' => 'includes/api/ApiQueryQueryPage.php',
-       'ApiQueryRandom' => 'includes/api/ApiQueryRandom.php',
-       'ApiQueryRecentChanges' => 'includes/api/ApiQueryRecentChanges.php',
-       'ApiQueryFileRepoInfo' => 'includes/api/ApiQueryFileRepoInfo.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',
-       'ApiQueryWatchlistRaw' => 'includes/api/ApiQueryWatchlistRaw.php',
-       'ApiResult' => 'includes/api/ApiResult.php',
-       'ApiRevisionDelete' => 'includes/api/ApiRevisionDelete.php',
-       'ApiRollback' => 'includes/api/ApiRollback.php',
-       'ApiRsd' => 'includes/api/ApiRsd.php',
-       'ApiSetNotificationTimestamp' => 'includes/api/ApiSetNotificationTimestamp.php',
-       'ApiTokens' => 'includes/api/ApiTokens.php',
-       'ApiUnblock' => 'includes/api/ApiUnblock.php',
-       'ApiUndelete' => 'includes/api/ApiUndelete.php',
-       'ApiUpload' => 'includes/api/ApiUpload.php',
-       'ApiUserrights' => 'includes/api/ApiUserrights.php',
-       'ApiWatch' => 'includes/api/ApiWatch.php',
-       'UsageException' => 'includes/api/ApiMain.php',
-
-       # includes/cache
-       'BacklinkCache' => 'includes/cache/BacklinkCache.php',
-       'CacheDependency' => 'includes/cache/CacheDependency.php',
-       'CacheHelper' => 'includes/cache/CacheHelper.php',
-       'ConstantDependency' => 'includes/cache/CacheDependency.php',
-       'DependencyWrapper' => 'includes/cache/CacheDependency.php',
-       'FileCacheBase' => 'includes/cache/FileCacheBase.php',
-       'FileDependency' => 'includes/cache/CacheDependency.php',
-       'GenderCache' => 'includes/cache/GenderCache.php',
-       'GlobalDependency' => 'includes/cache/CacheDependency.php',
-       'HTMLFileCache' => 'includes/cache/HTMLFileCache.php',
-       'ICacheHelper' => 'includes/cache/CacheHelper.php',
-       'LCStore' => 'includes/cache/LocalisationCache.php',
-       'LCStoreCDB' => 'includes/cache/LocalisationCache.php',
-       'LCStoreDB' => 'includes/cache/LocalisationCache.php',
-       'LCStoreNull' => 'includes/cache/LocalisationCache.php',
-       'LinkBatch' => 'includes/cache/LinkBatch.php',
-       'LinkCache' => 'includes/cache/LinkCache.php',
-       'LocalisationCache' => 'includes/cache/LocalisationCache.php',
-       'LocalisationCacheBulkLoad' => 'includes/cache/LocalisationCache.php',
-       'MapCacheLRU' => 'includes/libs/MapCacheLRU.php',
-       'MessageCache' => 'includes/cache/MessageCache.php',
-       'ObjectFileCache' => 'includes/cache/ObjectFileCache.php',
-       'ResourceFileCache' => 'includes/cache/ResourceFileCache.php',
-       'UserCache' => 'includes/cache/UserCache.php',
-
-       # includes/changes
-       'ChangesFeed' => 'includes/changes/ChangesFeed.php',
-       'ChangesList' => 'includes/changes/ChangesList.php',
-       'EnhancedChangesList' => 'includes/changes/EnhancedChangesList.php',
-       'OldChangesList' => 'includes/changes/OldChangesList.php',
-       'RCCacheEntry' => 'includes/changes/RCCacheEntry.php',
-       'RCCacheEntryFactory' => 'includes/changes/RCCacheEntryFactory.php',
-       'RecentChange' => 'includes/changes/RecentChange.php',
-
-       # includes/clientpool
-       'RedisConnectionPool' => 'includes/clientpool/RedisConnectionPool.php',
-       'RedisConnRef' => 'includes/clientpool/RedisConnectionPool.php',
-
-       # includes/composer
-       'ComposerPackageModifier' => 'includes/composer/ComposerPackageModifier.php',
-       'ComposerVersionNormalizer' => 'includes/composer/ComposerVersionNormalizer.php',
-
-       # includes/config
-       'Config' => 'includes/config/Config.php',
-       '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',
-       'CodeContentHandler' => 'includes/content/CodeContentHandler.php',
-       'Content' => 'includes/content/Content.php',
-       'ContentHandler' => 'includes/content/ContentHandler.php',
-       'CssContent' => 'includes/content/CssContent.php',
-       'CssContentHandler' => 'includes/content/CssContentHandler.php',
-       'JavaScriptContent' => 'includes/content/JavaScriptContent.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',
-       'TextContent' => 'includes/content/TextContent.php',
-       'TextContentHandler' => 'includes/content/TextContentHandler.php',
-       'WikitextContent' => 'includes/content/WikitextContent.php',
-       'WikitextContentHandler' => 'includes/content/WikitextContentHandler.php',
-
-       # includes/context
-       'ContextSource' => 'includes/context/ContextSource.php',
-       'DerivativeContext' => 'includes/context/DerivativeContext.php',
-       'IContextSource' => 'includes/context/IContextSource.php',
-       'RequestContext' => 'includes/context/RequestContext.php',
-
-       # includes/dao
-       'IDBAccessObject' => 'includes/dao/IDBAccessObject.php',
-       'DBAccessBase' => 'includes/dao/DBAccessBase.php',
-
-       # includes/db
-       'Blob' => 'includes/db/DatabaseUtility.php',
-       'ChronologyProtector' => 'includes/db/ChronologyProtector.php',
-       'CloneDatabase' => 'includes/db/CloneDatabase.php',
-       'DatabaseBase' => 'includes/db/Database.php',
-       'DatabaseMssql' => 'includes/db/DatabaseMssql.php',
-       'DatabaseMysql' => 'includes/db/DatabaseMysql.php',
-       'DatabaseMysqlBase' => 'includes/db/DatabaseMysqlBase.php',
-       'DatabaseMysqli' => 'includes/db/DatabaseMysqli.php',
-       'DatabaseOracle' => 'includes/db/DatabaseOracle.php',
-       'DatabasePostgres' => 'includes/db/DatabasePostgres.php',
-       'DatabaseSqlite' => 'includes/db/DatabaseSqlite.php',
-       'DatabaseSqliteStandalone' => 'includes/db/DatabaseSqlite.php',
-       'DBAccessError' => 'includes/db/LBFactory.php',
-       'DBConnectionError' => 'includes/db/DatabaseError.php',
-       'DBConnRef' => 'includes/db/LoadBalancer.php',
-       'DBError' => 'includes/db/DatabaseError.php',
-       'DBExpectedError' => 'includes/db/DatabaseError.php',
-       'DBObject' => 'includes/db/DatabaseUtility.php',
-       'IDatabase'  => 'includes/db/Database.php',
-       'IORMRow' => 'includes/db/IORMRow.php',
-       'IORMTable' => 'includes/db/IORMTable.php',
-       'DBMasterPos' => 'includes/db/DatabaseUtility.php',
-       'DBQueryError' => 'includes/db/DatabaseError.php',
-       'DBUnexpectedError' => 'includes/db/DatabaseError.php',
-       'FakeResultWrapper' => 'includes/db/DatabaseUtility.php',
-       'Field' => 'includes/db/DatabaseUtility.php',
-       'LBFactory' => 'includes/db/LBFactory.php',
-       'LBFactoryFake' => 'includes/db/LBFactory.php',
-       'LBFactoryMulti' => 'includes/db/LBFactoryMulti.php',
-       'LBFactorySimple' => 'includes/db/LBFactory.php',
-       'LBFactorySingle' => 'includes/db/LBFactorySingle.php',
-       'LikeMatch' => 'includes/db/DatabaseUtility.php',
-       'LoadBalancer' => 'includes/db/LoadBalancer.php',
-       'LoadBalancerSingle' => 'includes/db/LBFactorySingle.php',
-       'LoadMonitor' => 'includes/db/LoadMonitor.php',
-       'LoadMonitorMySQL' => 'includes/db/LoadMonitor.php',
-       'LoadMonitorNull' => 'includes/db/LoadMonitor.php',
-       'MssqlField' => 'includes/db/DatabaseMssql.php',
-       'MssqlBlob' => 'includes/db/DatabaseMssql.php',
-       'MssqlResultWrapper' => 'includes/db/DatabaseMssql.php',
-       'MySQLField' => 'includes/db/DatabaseMysqlBase.php',
-       'MySQLMasterPos' => 'includes/db/DatabaseMysqlBase.php',
-       'ORAField' => 'includes/db/DatabaseOracle.php',
-       'ORAResult' => 'includes/db/DatabaseOracle.php',
-       'ORMIterator' => 'includes/db/ORMIterator.php',
-       'ORMResult' => 'includes/db/ORMResult.php',
-       'ORMRow' => 'includes/db/ORMRow.php',
-       'ORMTable' => 'includes/db/ORMTable.php',
-       'PostgresField' => 'includes/db/DatabasePostgres.php',
-       'PostgresTransactionState' => 'includes/db/DatabasePostgres.php',
-       'ResultWrapper' => 'includes/db/DatabaseUtility.php',
-       'SavepointPostgres' => 'includes/db/DatabasePostgres.php',
-       'SQLiteField' => 'includes/db/DatabaseSqlite.php',
-
-       # 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',
-       'DeferrableUpdate' => 'includes/deferred/DeferredUpdates.php',
-       'DeferredUpdates' => 'includes/deferred/DeferredUpdates.php',
-       'HTMLCacheUpdate' => 'includes/deferred/HTMLCacheUpdate.php',
-       'LinksDeletionUpdate' => 'includes/deferred/LinksUpdate.php',
-       'LinksUpdate' => 'includes/deferred/LinksUpdate.php',
-       'MWCallableUpdate' => 'includes/deferred/CallableUpdate.php',
-       'SearchUpdate' => 'includes/deferred/SearchUpdate.php',
-       'SiteStatsUpdate' => 'includes/deferred/SiteStatsUpdate.php',
-       'SqlDataUpdate' => 'includes/deferred/SqlDataUpdate.php',
-       'SquidUpdate' => 'includes/deferred/SquidUpdate.php',
-
-       # includes/diff
-       'DiffEngine' => 'includes/diff/DairikiDiff.php',
-       'DiffOp' => 'includes/diff/DairikiDiff.php',
-       'DiffOpAdd' => 'includes/diff/DairikiDiff.php',
-       'DiffOpChange' => 'includes/diff/DairikiDiff.php',
-       'DiffOpCopy' => 'includes/diff/DairikiDiff.php',
-       'DiffOpDelete' => 'includes/diff/DairikiDiff.php',
-       'HWLDFWordAccumulator' => 'includes/diff/DairikiDiff.php',
-       'ArrayDiffFormatter' => 'includes/diff/ArrayDiffFormatter.php',
-       'Diff' => 'includes/diff/DairikiDiff.php',
-       'DifferenceEngine' => 'includes/diff/DifferenceEngine.php',
-       'DiffFormatter' => 'includes/diff/DiffFormatter.php',
-       'MappedDiff' => 'includes/diff/DairikiDiff.php',
-       'RangeDifference' => 'includes/diff/WikiDiff3.php',
-       'TableDiffFormatter' => 'includes/diff/TableDiffFormatter.php',
-       'UnifiedDiffFormatter' => 'includes/diff/UnifiedDiffFormatter.php',
-       'WikiDiff3' => 'includes/diff/WikiDiff3.php',
-       'WordLevelDiff' => 'includes/diff/DairikiDiff.php',
-
-       # includes/exception
-       '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',
-       'MWExceptionHandler' => 'includes/exception/MWExceptionHandler.php',
-       'HttpError' => 'includes/exception/HttpError.php',
-       'BadTitleError' => 'includes/exception/BadTitleError.php',
-       'ErrorPageError' => 'includes/exception/ErrorPageError.php',
-       'FatalError' => 'includes/exception/FatalError.php',
-
-       # includes/externalstore
-       'ExternalStore' => 'includes/externalstore/ExternalStore.php',
-       'ExternalStoreDB' => 'includes/externalstore/ExternalStoreDB.php',
-       'ExternalStoreHttp' => 'includes/externalstore/ExternalStoreHttp.php',
-       'ExternalStoreMedium' => 'includes/externalstore/ExternalStoreMedium.php',
-       'ExternalStoreMwstore' => 'includes/externalstore/ExternalStoreMwstore.php',
-
-       # includes/filebackend
-       'FileBackendGroup' => 'includes/filebackend/FileBackendGroup.php',
-       'FileBackend' => 'includes/filebackend/FileBackend.php',
-       'FileBackendError' => 'includes/filebackend/FileBackend.php',
-       'FileBackendException' => 'includes/filebackend/FileBackend.php',
-       'FileBackendStore' => 'includes/filebackend/FileBackendStore.php',
-       'FileBackendStoreShardListIterator' => 'includes/filebackend/FileBackendStore.php',
-       'FileBackendStoreShardDirIterator' => 'includes/filebackend/FileBackendStore.php',
-       'FileBackendStoreShardFileIterator' => 'includes/filebackend/FileBackendStore.php',
-       'FileBackendMultiWrite' => 'includes/filebackend/FileBackendMultiWrite.php',
-       'FileBackendStoreOpHandle' => 'includes/filebackend/FileBackendStore.php',
-       'FSFile' => 'includes/filebackend/FSFile.php',
-       'FSFileBackend' => 'includes/filebackend/FSFileBackend.php',
-       'FSFileBackendList' => 'includes/filebackend/FSFileBackend.php',
-       'FSFileBackendDirList' => 'includes/filebackend/FSFileBackend.php',
-       'FSFileBackendFileList' => 'includes/filebackend/FSFileBackend.php',
-       'FSFileOpHandle' => 'includes/filebackend/FSFileBackend.php',
-       'MemoryFileBackend' => 'includes/filebackend/MemoryFileBackend.php',
-       'SwiftFileBackend' => 'includes/filebackend/SwiftFileBackend.php',
-       'SwiftFileBackendList' => 'includes/filebackend/SwiftFileBackend.php',
-       'SwiftFileBackendDirList' => 'includes/filebackend/SwiftFileBackend.php',
-       'SwiftFileBackendFileList' => 'includes/filebackend/SwiftFileBackend.php',
-       'SwiftFileOpHandle' => 'includes/filebackend/SwiftFileBackend.php',
-       'TempFSFile' => 'includes/filebackend/TempFSFile.php',
-       'FileJournal' => 'includes/filebackend/filejournal/FileJournal.php',
-       'DBFileJournal' => 'includes/filebackend/filejournal/DBFileJournal.php',
-       'NullFileJournal' => 'includes/filebackend/filejournal/FileJournal.php',
-       'LockManagerGroup' => 'includes/filebackend/lockmanager/LockManagerGroup.php',
-       'LockManager' => 'includes/filebackend/lockmanager/LockManager.php',
-       'ScopedLock' => 'includes/filebackend/lockmanager/ScopedLock.php',
-       'FSLockManager' => 'includes/filebackend/lockmanager/FSLockManager.php',
-       'DBLockManager' => 'includes/filebackend/lockmanager/DBLockManager.php',
-       'MemcLockManager' => 'includes/filebackend/lockmanager/MemcLockManager.php',
-       'QuorumLockManager' => 'includes/filebackend/lockmanager/QuorumLockManager.php',
-       'MySqlLockManager' => 'includes/filebackend/lockmanager/DBLockManager.php',
-       'PostgreSqlLockManager' => 'includes/filebackend/lockmanager/DBLockManager.php',
-       'RedisLockManager' => 'includes/filebackend/lockmanager/RedisLockManager.php',
-       'NullLockManager' => 'includes/filebackend/lockmanager/LockManager.php',
-       'FileOp' => 'includes/filebackend/FileOp.php',
-       'FileOpBatch' => 'includes/filebackend/FileOpBatch.php',
-       'StoreFileOp' => 'includes/filebackend/FileOp.php',
-       'CopyFileOp' => 'includes/filebackend/FileOp.php',
-       'MoveFileOp' => 'includes/filebackend/FileOp.php',
-       'DeleteFileOp' => 'includes/filebackend/FileOp.php',
-       'CreateFileOp' => 'includes/filebackend/FileOp.php',
-       'DescribeFileOp' => 'includes/filebackend/FileOp.php',
-       'NullFileOp' => 'includes/filebackend/FileOp.php',
-
-       # includes/filerepo
-       'FileRepo' => 'includes/filerepo/FileRepo.php',
-       'FileRepoStatus' => 'includes/filerepo/FileRepoStatus.php',
-       'ForeignAPIRepo' => 'includes/filerepo/ForeignAPIRepo.php',
-       'ForeignDBRepo' => 'includes/filerepo/ForeignDBRepo.php',
-       'ForeignDBViaLBRepo' => 'includes/filerepo/ForeignDBViaLBRepo.php',
-       'FSRepo' => 'includes/filerepo/FSRepo.php',
-       'LocalRepo' => 'includes/filerepo/LocalRepo.php',
-       'NullRepo' => 'includes/filerepo/NullRepo.php',
-       'RepoGroup' => 'includes/filerepo/RepoGroup.php',
-       'TempFileRepo' => 'includes/filerepo/FileRepo.php',
-
-       # includes/filerepo/file
-       'ArchivedFile' => 'includes/filerepo/file/ArchivedFile.php',
-       'File' => 'includes/filerepo/file/File.php',
-       'ForeignAPIFile' => 'includes/filerepo/file/ForeignAPIFile.php',
-       'ForeignDBFile' => 'includes/filerepo/file/ForeignDBFile.php',
-       'LocalFile' => 'includes/filerepo/file/LocalFile.php',
-       'LocalFileDeleteBatch' => 'includes/filerepo/file/LocalFile.php',
-       'LocalFileMoveBatch' => 'includes/filerepo/file/LocalFile.php',
-       'LocalFileRestoreBatch' => 'includes/filerepo/file/LocalFile.php',
-       'OldLocalFile' => 'includes/filerepo/file/OldLocalFile.php',
-       'UnregisteredLocalFile' => 'includes/filerepo/file/UnregisteredLocalFile.php',
-
-       # includes/installer
-       'CliInstaller' => 'includes/installer/CliInstaller.php',
-       'DatabaseInstaller' => 'includes/installer/DatabaseInstaller.php',
-       'DatabaseUpdater' => 'includes/installer/DatabaseUpdater.php',
-       'InstallDocFormatter' => 'includes/installer/InstallDocFormatter.php',
-       'Installer' => 'includes/installer/Installer.php',
-       'LocalSettingsGenerator' => 'includes/installer/LocalSettingsGenerator.php',
-       'MssqlInstaller' => 'includes/installer/MssqlInstaller.php',
-       'MssqlUpdater' => 'includes/installer/MssqlUpdater.php',
-       'MysqlInstaller' => 'includes/installer/MysqlInstaller.php',
-       'MysqlUpdater' => 'includes/installer/MysqlUpdater.php',
-       'OracleInstaller' => 'includes/installer/OracleInstaller.php',
-       'OracleUpdater' => 'includes/installer/OracleUpdater.php',
-       'PhpXmlBugTester' => 'includes/installer/PhpBugTests.php',
-       'PostgresInstaller' => 'includes/installer/PostgresInstaller.php',
-       'PostgresUpdater' => 'includes/installer/PostgresUpdater.php',
-       'SqliteInstaller' => 'includes/installer/SqliteInstaller.php',
-       'SqliteUpdater' => 'includes/installer/SqliteUpdater.php',
-       'WebInstaller' => 'includes/installer/WebInstaller.php',
-       'WebInstallerComplete' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerCopying' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerDBConnect' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerDBSettings' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerDocument' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerExistingWiki' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerInstall' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerLanguage' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerName' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerOptions' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerReadme' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerReleaseNotes' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerRestart' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerUpgrade' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerUpgradeDoc' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerWelcome' => 'includes/installer/WebInstallerPage.php',
-       'WebInstallerOutput' => 'includes/installer/WebInstallerOutput.php',
-       'WebInstallerPage' => 'includes/installer/WebInstallerPage.php',
-
-       # includes/job
-       'IJobSpecification' => 'includes/jobqueue/JobSpecification.php',
-       'Job' => 'includes/jobqueue/Job.php',
-       'JobQueue' => 'includes/jobqueue/JobQueue.php',
-       'JobQueueAggregator' => 'includes/jobqueue/aggregator/JobQueueAggregator.php',
-       'JobQueueAggregatorMemc' => 'includes/jobqueue/aggregator/JobQueueAggregatorMemc.php',
-       'JobQueueAggregatorRedis' => 'includes/jobqueue/aggregator/JobQueueAggregatorRedis.php',
-       'JobQueueDB' => 'includes/jobqueue/JobQueueDB.php',
-       'JobQueueConnectionError' => 'includes/jobqueue/JobQueue.php',
-       'JobQueueError' => 'includes/jobqueue/JobQueue.php',
-       'JobQueueGroup' => 'includes/jobqueue/JobQueueGroup.php',
-       'JobQueueFederated' => 'includes/jobqueue/JobQueueFederated.php',
-       'JobQueueRedis' => 'includes/jobqueue/JobQueueRedis.php',
-       'JobRunner' => 'includes/jobqueue/JobRunner.php',
-       'JobSpecification' => 'includes/jobqueue/JobSpecification.php',
-
-       # includes/jobqueue/jobs
-       'DoubleRedirectJob' => 'includes/jobqueue/jobs/DoubleRedirectJob.php',
-       'DuplicateJob' => 'includes/jobqueue/jobs/DuplicateJob.php',
-       'EmaillingJob' => 'includes/jobqueue/jobs/EmaillingJob.php',
-       'EnotifNotifyJob' => 'includes/jobqueue/jobs/EnotifNotifyJob.php',
-       'HTMLCacheUpdateJob' => 'includes/jobqueue/jobs/HTMLCacheUpdateJob.php',
-       'NullJob' => 'includes/jobqueue/jobs/NullJob.php',
-       'RefreshLinksJob' => 'includes/jobqueue/jobs/RefreshLinksJob.php',
-       'RefreshLinksJob2' => 'includes/jobqueue/jobs/RefreshLinksJob2.php',
-       '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',
-
-       # includes/json
-       'FormatJson' => 'includes/json/FormatJson.php',
-
-       # includes/libs
-       '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',
-       'HttpStatus' => 'includes/libs/HttpStatus.php',
-       'IEContentAnalyzer' => 'includes/libs/IEContentAnalyzer.php',
-       'IEUrlExtension' => 'includes/libs/IEUrlExtension.php',
-       'MappedIterator' => 'includes/libs/MappedIterator.php',
-       'IPSet' => 'includes/libs/IPSet.php',
-       'JavaScriptMinifier' => 'includes/libs/JavaScriptMinifier.php',
-       'JSCompilerContext' => 'includes/libs/jsminplus.php',
-       'JSMinPlus' => 'includes/libs/jsminplus.php',
-       'JSNode' => 'includes/libs/jsminplus.php',
-       'JSParser' => 'includes/libs/jsminplus.php',
-       'JSToken' => 'includes/libs/jsminplus.php',
-       'JSTokenizer' => 'includes/libs/jsminplus.php',
-       'MultiHttpClient' => 'includes/libs/MultiHttpClient.php',
-       'MWMessagePack' => 'includes/libs/MWMessagePack.php',
-       'ProcessCacheLRU' => 'includes/libs/ProcessCacheLRU.php',
-       'RunningStat' => 'includes/libs/RunningStat.php',
-       'ScopedCallback' => 'includes/libs/ScopedCallback.php',
-       'ScopedPHPTimeout' => 'includes/libs/ScopedPHPTimeout.php',
-       'SwiftVirtualRESTService' => 'includes/libs/virtualrest/SwiftVirtualRESTService.php',
-       'VirtualRESTService' => 'includes/libs/virtualrest/VirtualRESTService.php',
-       'VirtualRESTServiceClient' => 'includes/libs/virtualrest/VirtualRESTServiceClient.php',
-       'XmlTypeCheck' => 'includes/libs/XmlTypeCheck.php',
-
-       # includes/libs/cdb
-       'CdbException' => 'includes/libs/cdb/CdbException.php',
-       'CdbFunctions' => 'includes/libs/cdb/CdbFunctions.php',
-       'CdbReader' => 'includes/libs/cdb/CdbReader.php',
-       'CdbReaderDBA' => 'includes/libs/cdb/CdbReaderDBA.php',
-       'CdbReaderPHP' => 'includes/libs/cdb/CdbReaderPHP.php',
-       'CdbWriter' => 'includes/libs/cdb/CdbWriter.php',
-       'CdbWriterDBA' => 'includes/libs/cdb/CdbWriterDBA.php',
-       'CdbWriterPHP' => 'includes/libs/cdb/CdbWriterPHP.php',
-
-       # includes/libs/lessphp
-       'lessc' => 'includes/libs/lessc.inc.php',
-       'lessc_parser' => 'includes/libs/lessc.inc.php',
-       'lessc_formatter_classic' => 'includes/libs/lessc.inc.php',
-       'lessc_formatter_compressed' => 'includes/libs/lessc.inc.php',
-       'lessc_formatter_lessjs' => 'includes/libs/lessc.inc.php',
-
-       # includes/logging
-       'DatabaseLogEntry' => 'includes/logging/LogEntry.php',
-       'DeleteLogFormatter' => 'includes/logging/DeleteLogFormatter.php',
-       'LegacyLogFormatter' => 'includes/logging/LogFormatter.php',
-       'LogEntry' => 'includes/logging/LogEntry.php',
-       'LogEventsList' => 'includes/logging/LogEventsList.php',
-       'LogEntryBase' => 'includes/logging/LogEntry.php',
-       'LogFormatter' => 'includes/logging/LogFormatter.php',
-       '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',
-       'PatrolLog' => 'includes/logging/PatrolLog.php',
-       'PatrolLogFormatter' => 'includes/logging/PatrolLogFormatter.php',
-       'RCDatabaseLogEntry' => 'includes/logging/LogEntry.php',
-       'RightsLogFormatter' => 'includes/logging/RightsLogFormatter.php',
-
-       # Image gallery
-
-       'ImageGallery' => 'includes/gallery/TraditionalImageGallery.php',
-       'ImageGalleryBase' => 'includes/gallery/ImageGalleryBase.php',
-       'NolinesImageGallery' => 'includes/gallery/NolinesImageGallery.php',
-       'TraditionalImageGallery' => 'includes/gallery/TraditionalImageGallery.php',
-       'PackedImageGallery' => 'includes/gallery/PackedImageGallery.php',
-       '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',
-       'BitmapMetadataHandler' => 'includes/media/BitmapMetadataHandler.php',
-       'BmpHandler' => 'includes/media/BMP.php',
-       'DjVuHandler' => 'includes/media/DjVu.php',
-       'DjVuImage' => 'includes/media/DjVuImage.php',
-       'Exif' => 'includes/media/Exif.php',
-       'ExifBitmapHandler' => 'includes/media/ExifBitmap.php',
-       'FormatMetadata' => 'includes/media/FormatMetadata.php',
-       'GIFHandler' => 'includes/media/GIF.php',
-       'GIFMetadataExtractor' => 'includes/media/GIFMetadataExtractor.php',
-       'ImageHandler' => 'includes/media/ImageHandler.php',
-       'IPTC' => 'includes/media/IPTC.php',
-       'JpegHandler' => 'includes/media/Jpeg.php',
-       'JpegMetadataExtractor' => 'includes/media/JpegMetadataExtractor.php',
-       'MediaHandler' => 'includes/media/MediaHandler.php',
-       'MediaTransformError' => 'includes/media/MediaTransformOutput.php',
-       'MediaTransformOutput' => 'includes/media/MediaTransformOutput.php',
-       'PNGHandler' => 'includes/media/PNG.php',
-       'PNGMetadataExtractor' => 'includes/media/PNGMetadataExtractor.php',
-       'SvgHandler' => 'includes/media/SVG.php',
-       'SVGMetadataExtractor' => 'includes/media/SVGMetadataExtractor.php',
-       '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',
-       'XMPReader' => 'includes/media/XMP.php',
-       'XMPValidate' => 'includes/media/XMPValidate.php',
-
-       # includes/normal
-       'UtfNormal' => 'includes/normal/UtfNormal.php',
-
-       # includes/objectcache
-       'APCBagOStuff' => 'includes/objectcache/APCBagOStuff.php',
-       'BagOStuff' => 'includes/objectcache/BagOStuff.php',
-       'EmptyBagOStuff' => 'includes/objectcache/EmptyBagOStuff.php',
-       'HashBagOStuff' => 'includes/objectcache/HashBagOStuff.php',
-       'MediaWikiBagOStuff' => 'includes/objectcache/SqlBagOStuff.php',
-       'MemCachedClientforWiki' => 'includes/objectcache/MemcachedClient.php',
-       'MemcachedBagOStuff' => 'includes/objectcache/MemcachedBagOStuff.php',
-       'MemcachedPeclBagOStuff' => 'includes/objectcache/MemcachedPeclBagOStuff.php',
-       'MemcachedPhpBagOStuff' => 'includes/objectcache/MemcachedPhpBagOStuff.php',
-       'MultiWriteBagOStuff' => 'includes/objectcache/MultiWriteBagOStuff.php',
-       'MWMemcached' => 'includes/objectcache/MemcachedClient.php',
-       'ObjectCache' => 'includes/objectcache/ObjectCache.php',
-       'ObjectCacheSessionHandler' => 'includes/objectcache/ObjectCacheSessionHandler.php',
-       'RedisBagOStuff' => 'includes/objectcache/RedisBagOStuff.php',
-       'SqlBagOStuff' => 'includes/objectcache/SqlBagOStuff.php',
-       'WinCacheBagOStuff' => 'includes/objectcache/WinCacheBagOStuff.php',
-       'XCacheBagOStuff' => 'includes/objectcache/XCacheBagOStuff.php',
-
-       # includes/page
-       'Article' => 'includes/page/Article.php',
-       'CategoryPage' => 'includes/page/CategoryPage.php',
-       'ImageHistoryList' => 'includes/page/ImagePage.php',
-       'ImageHistoryPseudoPager' => 'includes/page/ImagePage.php',
-       'ImagePage' => 'includes/page/ImagePage.php',
-       'Page' => 'includes/page/WikiPage.php',
-       'WikiCategoryPage' => 'includes/page/WikiCategoryPage.php',
-       'WikiFilePage' => 'includes/page/WikiFilePage.php',
-       'WikiPage' => 'includes/page/WikiPage.php',
-
-       # includes/pager
-       'AlphabeticPager' => 'includes/pager/AlphabeticPager.php',
-       'IndexPager' => 'includes/pager/IndexPager.php',
-       'Pager' => 'includes/pager/Pager.php',
-       'ReverseChronologicalPager' => 'includes/pager/ReverseChronologicalPager.php',
-       'TablePager' => 'includes/pager/TablePager.php',
-
-       # includes/parser
-       'CacheTime' => 'includes/parser/CacheTime.php',
-       'CoreParserFunctions' => 'includes/parser/CoreParserFunctions.php',
-       'CoreTagHooks' => 'includes/parser/CoreTagHooks.php',
-       'DateFormatter' => 'includes/parser/DateFormatter.php',
-       'LinkHolderArray' => 'includes/parser/LinkHolderArray.php',
-       'MWTidy' => 'includes/parser/MWTidy.php',
-       'MWTidyWrapper' => 'includes/parser/MWTidy.php',
-       'PPCustomFrame_DOM' => 'includes/parser/Preprocessor_DOM.php',
-       'PPCustomFrame_Hash' => 'includes/parser/Preprocessor_Hash.php',
-       'PPDAccum_Hash' => 'includes/parser/Preprocessor_Hash.php',
-       'PPDPart' => 'includes/parser/Preprocessor_DOM.php',
-       'PPDPart_Hash' => 'includes/parser/Preprocessor_Hash.php',
-       'PPDStack' => 'includes/parser/Preprocessor_DOM.php',
-       'PPDStackElement' => 'includes/parser/Preprocessor_DOM.php',
-       'PPDStackElement_Hash' => 'includes/parser/Preprocessor_Hash.php',
-       'PPDStack_Hash' => 'includes/parser/Preprocessor_Hash.php',
-       'PPFrame' => 'includes/parser/Preprocessor.php',
-       'PPFrame_DOM' => 'includes/parser/Preprocessor_DOM.php',
-       'PPFrame_Hash' => 'includes/parser/Preprocessor_Hash.php',
-       'PPNode' => 'includes/parser/Preprocessor.php',
-       'PPNode_DOM' => 'includes/parser/Preprocessor_DOM.php',
-       'PPNode_Hash_Array' => 'includes/parser/Preprocessor_Hash.php',
-       'PPNode_Hash_Attr' => 'includes/parser/Preprocessor_Hash.php',
-       'PPNode_Hash_Text' => 'includes/parser/Preprocessor_Hash.php',
-       'PPNode_Hash_Tree' => 'includes/parser/Preprocessor_Hash.php',
-       'PPTemplateFrame_DOM' => 'includes/parser/Preprocessor_DOM.php',
-       'PPTemplateFrame_Hash' => 'includes/parser/Preprocessor_Hash.php',
-       'Parser' => 'includes/parser/Parser.php',
-       'ParserCache' => 'includes/parser/ParserCache.php',
-       'ParserOptions' => 'includes/parser/ParserOptions.php',
-       'ParserOutput' => 'includes/parser/ParserOutput.php',
-       'ParserDiffTest' => 'includes/parser/ParserDiffTest.php',
-       'Preprocessor' => 'includes/parser/Preprocessor.php',
-       'Preprocessor_DOM' => 'includes/parser/Preprocessor_DOM.php',
-       'Preprocessor_Hash' => 'includes/parser/Preprocessor_Hash.php',
-       'StripState' => 'includes/parser/StripState.php',
-
-       # includes/password
-       'BcryptPassword' => 'includes/password/BcryptPassword.php',
-       'InvalidPassword' => 'includes/password/InvalidPassword.php',
-       'LayeredParameterizedPassword' => 'includes/password/LayeredParameterizedPassword.php',
-       'MWSaltedPassword' => 'includes/password/MWSaltedPassword.php',
-       'MWOldPassword' => 'includes/password/MWOldPassword.php',
-       'ParameterizedPassword' => 'includes/password/ParameterizedPassword.php',
-       'Password' => 'includes/password/Password.php',
-       'PasswordError' => 'includes/password/PasswordError.php',
-       'PasswordFactory' => 'includes/password/PasswordFactory.php',
-       'Pbkdf2Password' => 'includes/password/Pbkdf2Password.php',
-       'EncryptedPassword' => 'includes/password/EncryptedPassword.php',
-
-       # includes/profiler
-       'Profiler' => 'includes/profiler/Profiler.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/ProfileSection.php',
-       'TransactionProfiler' => 'includes/profiler/TransactionProfiler.php',
-
-       # includes/rcfeed
-       'RCFeedEngine' => 'includes/rcfeed/RCFeedEngine.php',
-       'RedisPubSubFeedEngine' => 'includes/rcfeed/RedisPubSubFeedEngine.php',
-       'UDPRCFeedEngine' => 'includes/rcfeed/UDPRCFeedEngine.php',
-       'RCFeedFormatter' => 'includes/rcfeed/RCFeedFormatter.php',
-       'IRCColourfulRCFeedFormatter' => 'includes/rcfeed/IRCColourfulRCFeedFormatter.php',
-       'JSONRCFeedFormatter' => 'includes/rcfeed/JSONRCFeedFormatter.php',
-       'XMLRCFeedFormatter' => 'includes/rcfeed/XMLRCFeedFormatter.php',
-       'MachineReadableRCFeedFormatter' => 'includes/rcfeed/MachineReadableRCFeedFormatter.php',
-
-       # includes/resourceloader
-       'DerivativeResourceLoaderContext' =>
-               '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',
-       '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',
-       'ResourceLoaderUserGroupsModule' => 'includes/resourceloader/ResourceLoaderUserGroupsModule.php',
-       'ResourceLoaderUserModule' => 'includes/resourceloader/ResourceLoaderUserModule.php',
-       'ResourceLoaderUserOptionsModule' => 'includes/resourceloader/ResourceLoaderUserOptionsModule.php',
-       'ResourceLoaderUserTokensModule' => 'includes/resourceloader/ResourceLoaderUserTokensModule.php',
-       'ResourceLoaderLanguageDataModule' =>
-               'includes/resourceloader/ResourceLoaderLanguageDataModule.php',
-       'ResourceLoaderLanguageNamesModule' =>
-               'includes/resourceloader/ResourceLoaderLanguageNamesModule.php',
-       'ResourceLoaderWikiModule' => 'includes/resourceloader/ResourceLoaderWikiModule.php',
-
-       # includes/revisiondelete
-       'RevDelArchivedFileItem' => 'includes/revisiondelete/RevDelArchivedFileItem.php',
-       'RevDelArchivedFileList' => 'includes/revisiondelete/RevDelArchivedFileList.php',
-       'RevDelArchivedRevisionItem' => 'includes/revisiondelete/RevDelArchivedRevisionItem.php',
-       'RevDelArchiveItem' => 'includes/revisiondelete/RevDelArchiveItem.php',
-       'RevDelArchiveList' => 'includes/revisiondelete/RevDelArchiveList.php',
-       'RevDelFileItem' => 'includes/revisiondelete/RevDelFileItem.php',
-       'RevDelFileList' => 'includes/revisiondelete/RevDelFileList.php',
-       'RevDelItem' => 'includes/revisiondelete/RevDelItem.php',
-       'RevDelList' => 'includes/revisiondelete/RevDelList.php',
-       'RevDelLogItem' => 'includes/revisiondelete/RevDelLogItem.php',
-       'RevDelLogList' => 'includes/revisiondelete/RevDelLogList.php',
-       'RevDelRevisionItem' => 'includes/revisiondelete/RevDelRevisionItem.php',
-       'RevDelRevisionList' => 'includes/revisiondelete/RevDelRevisionList.php',
-       'RevisionDeleter' => 'includes/revisiondelete/RevisionDeleter.php',
-       'RevisionDeleteUser' => 'includes/revisiondelete/RevisionDeleteUser.php',
-
-       # includes/search
-       'SearchDatabase' => 'includes/search/SearchDatabase.php',
-       'SearchEngine' => 'includes/search/SearchEngine.php',
-       'SearchEngineDummy' => 'includes/search/SearchEngine.php',
-       'SearchHighlighter' => 'includes/search/SearchHighlighter.php',
-       'SearchMssql' => 'includes/search/SearchMssql.php',
-       'SearchMySQL' => 'includes/search/SearchMySQL.php',
-       'SearchNearMatchResultSet' => 'includes/search/SearchResultSet.php',
-       'SearchOracle' => 'includes/search/SearchOracle.php',
-       'SearchPostgres' => 'includes/search/SearchPostgres.php',
-       'SearchResult' => 'includes/search/SearchResult.php',
-       'SearchResultSet' => 'includes/search/SearchResultSet.php',
-       'SearchSqlite' => 'includes/search/SearchSqlite.php',
-       'SqlSearchResultSet' => 'includes/search/SearchResultSet.php',
-
-       # includes/site
-       'MediaWikiSite' => 'includes/site/MediaWikiSite.php',
-       'Site' => 'includes/site/Site.php',
-       'SiteObject' => 'includes/site/Site.php',
-       'SiteArray' => 'includes/site/SiteList.php',
-       'SiteList' => 'includes/site/SiteList.php',
-       'SiteSQLStore' => 'includes/site/SiteSQLStore.php',
-       'Sites' => 'includes/site/SiteSQLStore.php',
-       'SiteStore' => 'includes/site/SiteStore.php',
-
-       # includes/skins
-       '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',
-       'SkinFallbackTemplate' => 'includes/skins/SkinFallbackTemplate.php',
-       'SkinTemplate' => 'includes/skins/SkinTemplate.php',
-
-       # includes/specialpage
-       'ChangesListSpecialPage' => 'includes/specialpage/ChangesListSpecialPage.php',
-       'FormSpecialPage' => 'includes/specialpage/FormSpecialPage.php',
-       'ImageQueryPage' => 'includes/specialpage/ImageQueryPage.php',
-       'IncludableSpecialPage' => 'includes/specialpage/IncludableSpecialPage.php',
-       'PageQueryPage' => 'includes/specialpage/PageQueryPage.php',
-       'QueryPage' => 'includes/specialpage/QueryPage.php',
-       'RedirectSpecialArticle' => 'includes/specialpage/RedirectSpecialPage.php',
-       'RedirectSpecialPage' => 'includes/specialpage/RedirectSpecialPage.php',
-       'SpecialPage' => 'includes/specialpage/SpecialPage.php',
-       'SpecialPageFactory' => 'includes/specialpage/SpecialPageFactory.php',
-       'SpecialRedirectToSpecial' => 'includes/specialpage/RedirectSpecialPage.php',
-       'UnlistedSpecialPage' => 'includes/specialpage/UnlistedSpecialPage.php',
-       'WantedQueryPage' => 'includes/specialpage/WantedQueryPage.php',
-
-       # includes/specials
-       'ActiveUsersPager' => 'includes/specials/SpecialActiveusers.php',
-       'AllMessagesTablePager' => 'includes/specials/SpecialAllMessages.php',
-       'AncientPagesPage' => 'includes/specials/SpecialAncientpages.php',
-       'BlockListPager' => 'includes/specials/SpecialBlockList.php',
-       'BrokenRedirectsPage' => 'includes/specials/SpecialBrokenRedirects.php',
-       'CategoryPager' => 'includes/specials/SpecialCategories.php',
-       'ContribsPager' => 'includes/specials/SpecialContributions.php',
-       'DeadendPagesPage' => 'includes/specials/SpecialDeadendpages.php',
-       'DeletedContribsPager' => 'includes/specials/SpecialDeletedContributions.php',
-       'DeletedContributionsPage' => 'includes/specials/SpecialDeletedContributions.php',
-       'DoubleRedirectsPage' => 'includes/specials/SpecialDoubleRedirects.php',
-       'EditWatchlistCheckboxSeriesField' => 'includes/specials/SpecialEditWatchlist.php',
-       'EditWatchlistNormalHTMLForm' => 'includes/specials/SpecialEditWatchlist.php',
-       'EmailConfirmation' => 'includes/specials/SpecialConfirmemail.php',
-       'EmailInvalidation' => 'includes/specials/SpecialConfirmemail.php',
-       'FewestrevisionsPage' => 'includes/specials/SpecialFewestrevisions.php',
-       'FileDuplicateSearchPage' => 'includes/specials/SpecialFileDuplicateSearch.php',
-       'ImageListPager' => 'includes/specials/SpecialListfiles.php',
-       'ImportReporter' => 'includes/specials/SpecialImport.php',
-       'LinkSearchPage' => 'includes/specials/SpecialLinkSearch.php',
-       'ListredirectsPage' => 'includes/specials/SpecialListredirects.php',
-       'ListDuplicatedFilesPage' => 'includes/specials/SpecialListDuplicatedFiles.php',
-       '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',
-       'MostimagesPage' => 'includes/specials/SpecialMostimages.php',
-       'MostinterwikisPage' => 'includes/specials/SpecialMostinterwikis.php',
-       'MostlinkedCategoriesPage' => 'includes/specials/SpecialMostlinkedcategories.php',
-       'MostlinkedPage' => 'includes/specials/SpecialMostlinked.php',
-       'MostlinkedTemplatesPage' => 'includes/specials/SpecialMostlinkedtemplates.php',
-       'MostrevisionsPage' => 'includes/specials/SpecialMostrevisions.php',
-       'MovePageForm' => 'includes/specials/SpecialMovepage.php',
-       'NewFilesPager' => 'includes/specials/SpecialNewimages.php',
-       'NewPagesPager' => 'includes/specials/SpecialNewpages.php',
-       'PageArchive' => 'includes/specials/SpecialUndelete.php',
-       'ProtectedPagesPager' => 'includes/specials/SpecialProtectedpages.php',
-       'ProtectedTitlesPager' => 'includes/specials/SpecialProtectedtitles.php',
-       'RandomPage' => 'includes/specials/SpecialRandompage.php',
-       'ShortPagesPage' => 'includes/specials/SpecialShortpages.php',
-       'SpecialActiveUsers' => 'includes/specials/SpecialActiveusers.php',
-       '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',
-       'SpecialBookSources' => 'includes/specials/SpecialBooksources.php',
-       'SpecialCachedPage' => 'includes/specials/SpecialCachedPage.php',
-       'SpecialCategories' => 'includes/specials/SpecialCategories.php',
-       'SpecialChangeEmail' => 'includes/specials/SpecialChangeEmail.php',
-       'SpecialChangePassword' => 'includes/specials/SpecialChangePassword.php',
-       'SpecialComparePages' => 'includes/specials/SpecialComparePages.php',
-       'SpecialContributions' => 'includes/specials/SpecialContributions.php',
-       'SpecialCreateAccount' => 'includes/specials/SpecialCreateAccount.php',
-       'SpecialDiff' => 'includes/specials/SpecialDiff.php',
-       'SpecialEditWatchlist' => 'includes/specials/SpecialEditWatchlist.php',
-       'SpecialEmailUser' => 'includes/specials/SpecialEmailuser.php',
-       'SpecialExpandTemplates' => 'includes/specials/SpecialExpandTemplates.php',
-       'SpecialExport' => 'includes/specials/SpecialExport.php',
-       'SpecialFilepath' => 'includes/specials/SpecialFilepath.php',
-       'SpecialImport' => 'includes/specials/SpecialImport.php',
-       'SpecialJavaScriptTest' => 'includes/specials/SpecialJavaScriptTest.php',
-       'SpecialListAdmins' => 'includes/specials/SpecialListusers.php',
-       'SpecialListBots' => 'includes/specials/SpecialListusers.php',
-       'SpecialListFiles' => 'includes/specials/SpecialListfiles.php',
-       'SpecialListGroupRights' => 'includes/specials/SpecialListgrouprights.php',
-       'SpecialListUsers' => 'includes/specials/SpecialListusers.php',
-       'SpecialLockdb' => 'includes/specials/SpecialLockdb.php',
-       'SpecialLog' => 'includes/specials/SpecialLog.php',
-       'SpecialMergeHistory' => 'includes/specials/SpecialMergeHistory.php',
-       'SpecialMycontributions' => 'includes/specials/SpecialMyRedirectPages.php',
-       'SpecialMyLanguage' => 'includes/specials/SpecialMyLanguage.php',
-       'SpecialMypage' => 'includes/specials/SpecialMyRedirectPages.php',
-       'SpecialMytalk' => 'includes/specials/SpecialMyRedirectPages.php',
-       'SpecialMyuploads' => 'includes/specials/SpecialMyRedirectPages.php',
-       'SpecialNewFiles' => 'includes/specials/SpecialNewimages.php',
-       'SpecialNewpages' => 'includes/specials/SpecialNewpages.php',
-       'SpecialPageLanguage' => 'includes/specials/SpecialPageLanguage.php',
-       'SpecialPasswordReset' => 'includes/specials/SpecialPasswordReset.php',
-       'SpecialPagesWithProp' => 'includes/specials/SpecialPagesWithProp.php',
-       'SpecialPermanentLink' => 'includes/specials/SpecialPermanentLink.php',
-       'SpecialPreferences' => 'includes/specials/SpecialPreferences.php',
-       'SpecialPrefixindex' => 'includes/specials/SpecialPrefixindex.php',
-       'SpecialProtectedpages' => 'includes/specials/SpecialProtectedpages.php',
-       'SpecialProtectedtitles' => 'includes/specials/SpecialProtectedtitles.php',
-       'SpecialRandomInCategory' => 'includes/specials/SpecialRandomInCategory.php',
-       'SpecialRandomredirect' => 'includes/specials/SpecialRandomredirect.php',
-       'SpecialRecentChanges' => 'includes/specials/SpecialRecentchanges.php',
-       'SpecialRecentChangesLinked' => 'includes/specials/SpecialRecentchangeslinked.php',
-       'SpecialRedirect' => 'includes/specials/SpecialRedirect.php',
-       'SpecialResetTokens' => 'includes/specials/SpecialResetTokens.php',
-       'SpecialRevisionDelete' => 'includes/specials/SpecialRevisiondelete.php',
-       'SpecialRunJobs' => 'includes/specials/SpecialRunJobs.php',
-       'SpecialSearch' => 'includes/specials/SpecialSearch.php',
-       'SpecialSpecialpages' => 'includes/specials/SpecialSpecialpages.php',
-       'SpecialStatistics' => 'includes/specials/SpecialStatistics.php',
-       'SpecialTags' => 'includes/specials/SpecialTags.php',
-       'SpecialTrackingCategories' => 'includes/specials/SpecialTrackingCategories.php',
-       'SpecialUnblock' => 'includes/specials/SpecialUnblock.php',
-       'SpecialUndelete' => 'includes/specials/SpecialUndelete.php',
-       'SpecialUnlockdb' => 'includes/specials/SpecialUnlockdb.php',
-       'SpecialUpload' => 'includes/specials/SpecialUpload.php',
-       'SpecialUploadStash' => 'includes/specials/SpecialUploadStash.php',
-       'SpecialUploadStashTooLargeException' => 'includes/specials/SpecialUploadStash.php',
-       'SpecialUserlogout' => 'includes/specials/SpecialUserlogout.php',
-       'SpecialVersion' => 'includes/specials/SpecialVersion.php',
-       'SpecialWatchlist' => 'includes/specials/SpecialWatchlist.php',
-       'SpecialWhatLinksHere' => 'includes/specials/SpecialWhatlinkshere.php',
-       'UncategorizedCategoriesPage' => 'includes/specials/SpecialUncategorizedcategories.php',
-       'UncategorizedImagesPage' => 'includes/specials/SpecialUncategorizedimages.php',
-       'UncategorizedPagesPage' => 'includes/specials/SpecialUncategorizedpages.php',
-       'UncategorizedTemplatesPage' => 'includes/specials/SpecialUncategorizedtemplates.php',
-       'UnusedCategoriesPage' => 'includes/specials/SpecialUnusedcategories.php',
-       'UnusedimagesPage' => 'includes/specials/SpecialUnusedimages.php',
-       'UnusedtemplatesPage' => 'includes/specials/SpecialUnusedtemplates.php',
-       'UnwatchedpagesPage' => 'includes/specials/SpecialUnwatchedpages.php',
-       'UploadChunkFileException' => 'includes/upload/UploadFromChunks.php',
-       'UploadChunkZeroLengthFileException' => 'includes/upload/UploadFromChunks.php',
-       'UploadChunkVerificationException' => 'includes/upload/UploadFromChunks.php',
-       'UploadForm' => 'includes/specials/SpecialUpload.php',
-       'UploadSourceField' => 'includes/specials/SpecialUpload.php',
-       'UserrightsPage' => 'includes/specials/SpecialUserrights.php',
-       'UsersPager' => 'includes/specials/SpecialListusers.php',
-       'WantedCategoriesPage' => 'includes/specials/SpecialWantedcategories.php',
-       'WantedFilesPage' => 'includes/specials/SpecialWantedfiles.php',
-       'WantedPagesPage' => 'includes/specials/SpecialWantedpages.php',
-       'WantedTemplatesPage' => 'includes/specials/SpecialWantedtemplates.php',
-       'WithoutInterwikiPage' => 'includes/specials/SpecialWithoutinterwiki.php',
-
-       # includes/templates
-       'UserloginTemplate' => 'includes/templates/Userlogin.php',
-       'UsercreateTemplate' => 'includes/templates/Usercreate.php',
-
-       # includes/title
-       'PageLinkRenderer' => 'includes/title/PageLinkRenderer.php',
-       'TitleFormatter' => 'includes/title/TitleFormatter.php',
-       'TitleParser' => 'includes/title/TitleParser.php',
-       'TitleValue' => 'includes/title/TitleValue.php',
-       'MalformedTitleException' => 'includes/title/MalformedTitleException.php',
-       'MediaWikiPageLinkRenderer' => 'includes/title/MediaWikiPageLinkRenderer.php',
-       'MediaWikiTitleCodec' => 'includes/title/MediaWikiTitleCodec.php',
-
-       # includes/upload
-       'UploadBase' => 'includes/upload/UploadBase.php',
-       'UploadFromFile' => 'includes/upload/UploadFromFile.php',
-       'UploadFromChunks' => 'includes/upload/UploadFromChunks.php',
-       'UploadFromStash' => 'includes/upload/UploadFromStash.php',
-       'UploadFromUrl' => 'includes/upload/UploadFromUrl.php',
-       'UploadStash' => 'includes/upload/UploadStash.php',
-       'UploadStashBadPathException' => 'includes/upload/UploadStash.php',
-       'UploadStashException' => 'includes/upload/UploadStash.php',
-       'UploadStashFile' => 'includes/upload/UploadStash.php',
-       'UploadStashFileException' => 'includes/upload/UploadStash.php',
-       'UploadStashFileNotFoundException' => 'includes/upload/UploadStash.php',
-       'UploadStashNotAvailableException' => 'includes/upload/UploadStash.php',
-       'UploadStashZeroLengthFileException' => 'includes/upload/UploadStash.php',
-       'UploadStashNotLoggedInException' => 'includes/upload/UploadStash.php',
-       'UploadStashWrongOwnerException' => 'includes/upload/UploadStash.php',
-       'UploadStashNoSuchKeyException' => 'includes/upload/UploadStash.php',
-
-       # includes/utils
-       'DoubleReplacer' => 'includes/utils/StringUtils.php',
-       'ExplodeIterator' => 'includes/utils/StringUtils.php',
-       'HashtableReplacer' => 'includes/utils/StringUtils.php',
-       'IP' => 'includes/utils/IP.php',
-       'MWCryptRand' => 'includes/utils/MWCryptRand.php',
-       'MWCryptHKDF' => 'includes/utils/MWCryptHKDF.php',
-       'MWFunction' => 'includes/utils/MWFunction.php',
-       'RegexlikeReplacer' => 'includes/utils/StringUtils.php',
-       'ReplacementArray' => 'includes/utils/StringUtils.php',
-       'Replacer' => 'includes/utils/StringUtils.php',
-       'StringUtils' => 'includes/utils/StringUtils.php',
-       'UIDGenerator' => 'includes/utils/UIDGenerator.php',
-       'ZipDirectoryReader' => 'includes/utils/ZipDirectoryReader.php',
-       'ZipDirectoryReaderError' => 'includes/utils/ZipDirectoryReader.php',
-
-       # languages
-       'ConverterRule' => 'languages/ConverterRule.php',
-       'FakeConverter' => 'languages/FakeConverter.php',
-       'Language' => 'languages/Language.php',
-       'LanguageConverter' => 'languages/LanguageConverter.php',
-       'CLDRPluralRuleConverter' => 'languages/utils/CLDRPluralRuleConverter.php',
-       'CLDRPluralRuleConverterExpression' => 'languages/utils/CLDRPluralRuleConverterExpression.php',
-       'CLDRPluralRuleConverterFragment' => 'languages/utils/CLDRPluralRuleConverterFragment.php',
-       'CLDRPluralRuleConverterOperator' => 'languages/utils/CLDRPluralRuleConverterOperator.php',
-       'CLDRPluralRuleEvaluator' => 'languages/utils/CLDRPluralRuleEvaluator.php',
-       'CLDRPluralRuleEvaluatorRange' => 'languages/utils/CLDRPluralRuleEvaluatorRange.php',
-       'CLDRPluralRuleError' => 'languages/utils/CLDRPluralRuleError.php',
-
-       # maintenance
-       'BackupDumper' => 'maintenance/backup.inc',
-       'ConvertLinks' => 'maintenance/convertLinks.php',
-       'DeleteArchivedFilesImplementation' => 'maintenance/deleteArchivedFiles.inc',
-       'DeleteArchivedRevisionsImplementation' => 'maintenance/deleteArchivedRevisions.inc',
-       'DeleteDefaultMessages' => 'maintenance/deleteDefaultMessages.php',
-       'DumpDBZip2Output' => 'maintenance/backup.inc',
-       'ExportProgressFilter' => 'maintenance/backup.inc',
-       'FakeMaintenance' => 'maintenance/Maintenance.php',
-       'FixExtLinksProtocolRelative' => 'maintenance/fixExtLinksProtocolRelative.php',
-       'LoggedUpdateMaintenance' => 'maintenance/Maintenance.php',
-       'Maintenance' => 'maintenance/Maintenance.php',
-       'PopulateBacklinkNamespace' => 'maintenance/populateBacklinkNamespace.php',
-       'PopulateCategory' => 'maintenance/populateCategory.php',
-       'PopulateImageSha1' => 'maintenance/populateImageSha1.php',
-       'PopulateFilearchiveSha1' => 'maintenance/populateFilearchiveSha1.php',
-       'PopulateLogSearch' => 'maintenance/populateLogSearch.php',
-       'PopulateLogUsertext' => 'maintenance/populateLogUsertext.php',
-       'PopulateParentId' => 'maintenance/populateParentId.php',
-       'PopulateRevisionLength' => 'maintenance/populateRevisionLength.php',
-       'PopulateRevisionSha1' => 'maintenance/populateRevisionSha1.php',
-       'RefreshLinks' => 'maintenance/refreshLinks.php',
-       'SevenZipStream' => 'maintenance/7zip.inc',
-       'Sqlite' => 'maintenance/sqlite.inc',
-       'UpdateCollation' => 'maintenance/updateCollation.php',
-       'UpdateRestrictions' => 'maintenance/updateRestrictions.php',
-       'UserDupes' => 'maintenance/userDupes.inc',
-
-       # maintenance/language
-       'CsvStatsOutput' => 'maintenance/language/StatOutputs.php',
-       'ExtensionLanguages' => 'maintenance/language/languages.inc',
-       'Languages' => 'maintenance/language/languages.inc',
-       'StatsOutput' => 'maintenance/language/StatOutputs.php',
-       'TextStatsOutput' => 'maintenance/language/StatOutputs.php',
-       'WikiStatsOutput' => 'maintenance/language/StatOutputs.php',
-
-       # maintenance/term
-       'AnsiTermColorer' => 'maintenance/term/MWTerm.php',
-       'DummyTermColorer' => 'maintenance/term/MWTerm.php',
-
-       # mw-config
-       'InstallerOverrides' => 'mw-config/overrides.php',
-       'MyLocalSettingsGenerator' => 'mw-config/overrides.php',
-);
+require_once __DIR__ . '/../autoload.php';
 
 class AutoLoader {
        static protected $autoloadLocalClassesLower = null;
index b779c01..e822655 100644 (file)
@@ -1702,6 +1702,9 @@ $wgAllDBsAreLocalhost = false;
  * $wgSharedPrefix is the table prefix for the shared database. It defaults to
  * $wgDBprefix.
  *
+ * $wgSharedSchema is the table schema for the shared database. It defaults to
+ * $wgDBmwschema.
+ *
  * @deprecated since 1.21 In new code, use the $wiki parameter to wfGetLB() to
  *   access remote databases. Using wfGetLB() allows the shared database to
  *   reside on separate servers to the wiki's own database, with suitable
@@ -1719,6 +1722,12 @@ $wgSharedPrefix = false;
  */
 $wgSharedTables = array( 'user', 'user_properties' );
 
+/**
+ * @see $wgSharedDB
+ * @since 1.23
+ */
+$wgSharedSchema = false;
+
 /**
  * Database load balancer
  * This is a two-dimensional array, an array of server info structures
@@ -2715,8 +2724,8 @@ $wgBrowserBlackList = array(
 $wgLegacySchemaConversion = false;
 
 /**
- * Enable dates like 'May 12' instead of '12 May', this only takes effect if
- * the interface is set to English.
+ * Enable dates like 'May 12' instead of '12 May', if the default date format
+ * is 'dmy or mdy'.
  */
 $wgAmericanDates = false;
 
index eab8031..81f767d 100644 (file)
@@ -1789,52 +1789,37 @@ function wfDebugBacktrace( $limit = 0 ) {
 /**
  * Get a debug backtrace as a string
  *
+ * @param bool|null $raw If true, the return value is plain text. If false, HTML.
+ *   Defaults to $wgCommandLineMode if unset.
  * @return string
+ * @since 1.25 Supports $raw parameter.
  */
-function wfBacktrace() {
+function wfBacktrace( $raw = null ) {
        global $wgCommandLineMode;
 
-       if ( $wgCommandLineMode ) {
-               $msg = '';
-       } else {
-               $msg = "<ul>\n";
+       if ( $raw === null ) {
+               $raw = $wgCommandLineMode;
        }
-       $backtrace = wfDebugBacktrace();
-       foreach ( $backtrace as $call ) {
-               if ( isset( $call['file'] ) ) {
-                       $f = explode( DIRECTORY_SEPARATOR, $call['file'] );
-                       $file = $f[count( $f ) - 1];
-               } else {
-                       $file = '-';
-               }
-               if ( isset( $call['line'] ) ) {
-                       $line = $call['line'];
-               } else {
-                       $line = '-';
-               }
-               if ( $wgCommandLineMode ) {
-                       $msg .= "$file line $line calls ";
-               } else {
-                       $msg .= '<li>' . $file . ' line ' . $line . ' calls ';
-               }
-               if ( !empty( $call['class'] ) ) {
-                       $msg .= $call['class'] . $call['type'];
-               }
-               $msg .= $call['function'] . '()';
 
-               if ( $wgCommandLineMode ) {
-                       $msg .= "\n";
-               } else {
-                       $msg .= "</li>\n";
-               }
-       }
-       if ( $wgCommandLineMode ) {
-               $msg .= "\n";
+       if ( $raw ) {
+               $frameFormat = "%s line %s calls %s()\n";
+               $traceFormat = "%s";
        } else {
-               $msg .= "</ul>\n";
+               $frameFormat = "<li>%s line %s calls %s()</li>\n";
+               $traceFormat = "<ul>\n%s</ul>\n";
        }
 
-       return $msg;
+       $frames = array_map( function ( $frame ) use ( $frameFormat ) {
+               $file = !empty( $frame['file'] ) ? basename( $frame['file'] ) : '-';
+               $line = $frame['line'] ?: '-';
+               $call = $frame['function'];
+               if ( !empty( $frame['class'] ) ) {
+                       $call = $frame['class'] . $frame['type'] . $call;
+               }
+               return sprintf( $frameFormat, $file, $line, $call );
+       }, wfDebugBacktrace() );
+
+       return sprintf( $traceFormat, implode( '', $frames ) );
 }
 
 /**
index 40ebaea..0e9ef2b 100644 (file)
@@ -36,24 +36,11 @@ class Linker {
        const TOOL_LINKS_NOBLOCK = 1;
        const TOOL_LINKS_EMAIL = 2;
 
-       /**
-        * Get the appropriate HTML attributes to add to the "a" element of an
-        * external link, as created by [wikisyntax].
-        *
-        * @param string $class The contents of the class attribute; if an empty
-        *   string is passed, which is the default value, defaults to 'external'.
-        * @return string
-        * @deprecated since 1.18 Just pass the external class directly to something
-        *   using Html::expandAttributes.
-        */
-       static function getExternalLinkAttributes( $class = 'external' ) {
-               wfDeprecated( __METHOD__, '1.18' );
-               return self::getLinkAttributesInternal( '', $class );
-       }
-
        /**
         * Get the appropriate HTML attributes to add to the "a" element of an interwiki link.
         *
+        * @deprecated since 1.25
+        *
         * @param string $title The title text for the link, URL-encoded (???) but
         *   not HTML-escaped
         * @param string $unused Unused
@@ -64,6 +51,8 @@ class Linker {
        static function getInterwikiLinkAttributes( $title, $unused = null, $class = 'external' ) {
                global $wgContLang;
 
+               wfDeprecated( __METHOD__, '1.25' );
+
                # @todo FIXME: We have a whole bunch of handling here that doesn't happen in
                # getExternalLinkAttributes, why?
                $title = urldecode( $title );
@@ -76,6 +65,8 @@ class Linker {
        /**
         * Get the appropriate HTML attributes to add to the "a" element of an internal link.
         *
+        * @deprecated since 1.25
+        *
         * @param string $title The title text for the link, URL-encoded (???) but
         *   not HTML-escaped
         * @param string $unused Unused
@@ -83,6 +74,8 @@ class Linker {
         * @return string
         */
        static function getInternalLinkAttributes( $title, $unused = null, $class = '' ) {
+               wfDeprecated( __METHOD__, '1.25' );
+
                $title = urldecode( $title );
                $title = str_replace( '_', ' ', $title );
                return self::getLinkAttributesInternal( $title, $class );
@@ -92,6 +85,8 @@ class Linker {
         * Get the appropriate HTML attributes to add to the "a" element of an internal
         * link, given the Title object for the page we want to link to.
         *
+        * @deprecated since 1.25
+        *
         * @param Title $nt
         * @param string $unused Unused
         * @param string $class The contents of the class attribute, default none
@@ -100,6 +95,8 @@ class Linker {
         * @return string
         */
        static function getInternalLinkAttributesObj( $nt, $unused = null, $class = '', $title = false ) {
+               wfDeprecated( __METHOD__, '1.25' );
+
                if ( $title === false ) {
                        $title = $nt->getPrefixedText();
                }
@@ -109,12 +106,16 @@ class Linker {
        /**
         * Common code for getLinkAttributesX functions
         *
+        * @deprecated since 1.25
+        *
         * @param string $title
         * @param string $class
         *
         * @return string
         */
        private static function getLinkAttributesInternal( $title, $class ) {
+               wfDeprecated( __METHOD__, '1.25' );
+
                $title = htmlspecialchars( $title );
                $class = htmlspecialchars( $class );
                $r = '';
index 2faf196..f61de7e 100644 (file)
@@ -306,6 +306,11 @@ if ( $wgSharedPrefix === false ) {
        $wgSharedPrefix = $wgDBprefix;
 }
 
+// Set default shared schema
+if ( $wgSharedSchema === false ) {
+       $wgSharedSchema = $wgDBmwschema;
+}
+
 if ( !$wgCookiePrefix ) {
        if ( $wgSharedDB && $wgSharedPrefix && in_array( 'user', $wgSharedTables ) ) {
                $wgCookiePrefix = $wgSharedDB . '_' . $wgSharedPrefix;
index 0a8062c..265eae1 100644 (file)
@@ -369,14 +369,14 @@ class Status {
        }
 
        /**
-        * Returns a list of status messages of the given type
+        * Returns a list of status messages of the given type (or all if false)
         * @param string $type
         * @return array
         */
-       protected function getStatusArray( $type ) {
+       protected function getStatusArray( $type = false ) {
                $result = array();
                foreach ( $this->errors as $error ) {
-                       if ( $error['type'] === $type ) {
+                       if ( $type === false || $error['type'] === $type ) {
                                if ( $error['message'] instanceof Message ) {
                                        $result[] = array_merge(
                                                array( $error['message']->getKey() ),
@@ -462,4 +462,45 @@ class Status {
        public function getValue() {
                return $this->value;
        }
+
+       /**
+        * @return string
+        */
+       public function __toString() {
+               $status = $this->isOK() ? "OK" : "Error";
+               if ( count( $this->errors ) ) {
+                       $errorcount = "collected " . ( count($this->errors) ) . " error(s) on the way";
+               } else {
+                       $errorcount = "no errors detected";
+               }
+               if ( isset( $this->value ) ) {
+                       $valstr = gettype( $this->value ) . " value set";
+                       if ( is_object( $this->value ) ) {
+                               $valstr .= "\"" . get_class( $this->value ) . "\" instance";
+                       }
+               } else {
+                       $valstr = "no value set";
+               }
+               $out = sprintf( "<%s, %s, %s>",
+                       $status,
+                       $errorcount,
+                       $valstr
+               );
+               if ( count ($this->errors ) > 0 ) {
+                       $hdr = sprintf( "+-%'-4s-+-%'-25s-+-%'-40s-+\n", "", "", "" );
+                       $i = 1;
+                       $out .= "\n";
+                       $out .= $hdr;
+                       foreach( $this->getStatusArray() as $stat ) {
+                               $out .= sprintf( "| %4d | %-25.25s | %-40.40s |\n",
+                                       $i,
+                                       $stat[0],
+                                       implode(" ", array_slice( $stat, 1 ) )
+                               );
+                               $i += 1;
+                       }
+                       $out .= $hdr;
+               };
+               return $out;
+       }
 }
index cc9f9aa..0f33d07 100644 (file)
@@ -116,19 +116,21 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                        $this->dieUsage( $matches->getWikiText(), 'search-error' );
                }
 
-               $apiResult = $this->getResult();
-               // Add search meta data to result
-               if ( isset( $searchInfo['totalhits'] ) ) {
-                       $totalhits = $matches->getTotalHits();
-                       if ( $totalhits !== null ) {
+               if ( $resultPageSet === null ) {
+                       $apiResult = $this->getResult();
+                       // Add search meta data to result
+                       if ( isset( $searchInfo['totalhits'] ) ) {
+                               $totalhits = $matches->getTotalHits();
+                               if ( $totalhits !== null ) {
+                                       $apiResult->addValue( array( 'query', 'searchinfo' ),
+                                               'totalhits', $totalhits );
+                               }
+                       }
+                       if ( isset( $searchInfo['suggestion'] ) && $matches->hasSuggestion() ) {
                                $apiResult->addValue( array( 'query', 'searchinfo' ),
-                                       'totalhits', $totalhits );
+                                       'suggestion', $matches->getSuggestionQuery() );
                        }
                }
-               if ( isset( $searchInfo['suggestion'] ) && $matches->hasSuggestion() ) {
-                       $apiResult->addValue( array( 'query', 'searchinfo' ),
-                               'suggestion', $matches->getSuggestionQuery() );
-               }
 
                // Add the search results to the result
                $terms = $wgContLang->convertForSearchResult( $matches->termMatches() );
@@ -151,7 +153,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                        }
 
                        $title = $result->getTitle();
-                       if ( is_null( $resultPageSet ) ) {
+                       if ( $resultPageSet === null ) {
                                $vals = array();
                                ApiQueryBase::addTitleInfo( $vals, $title );
 
@@ -207,7 +209,7 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                        $hasInterwikiResults = true;
 
                        // Include number of results if requested
-                       if ( isset( $searchInfo['totalhits'] ) ) {
+                       if ( $resultPageSet === null && isset( $searchInfo['totalhits'] ) ) {
                                $totalhits = $matches->getTotalHits();
                                if ( $totalhits !== null ) {
                                        $apiResult->addValue( array( 'query', 'interwikisearchinfo' ),
@@ -218,30 +220,35 @@ class ApiQuerySearch extends ApiQueryGeneratorBase {
                        $result = $matches->next();
                        while ( $result ) {
                                $title = $result->getTitle();
-                               $vals = array(
-                                       'namespace' => $result->getInterwikiNamespaceText(),
-                                       'title' => $title->getText(),
-                                       'url' => $title->getFullUrl(),
-                               );
-
-                               // Add item to results and see whether it fits
-                               $fit = $apiResult->addValue(
-                                       array( 'query', 'interwiki' . $this->getModuleName(), $result->getInterwikiPrefix()  ),
-                                       null,
-                                       $vals
-                               );
 
-                               if ( !$fit ) {
-                                       // We hit the limit. We can't really provide any meaningful
-                                       // pagination info so just bail out
-                                       break;
+                               if ( $resultPageSet === null ) {
+                                       $vals = array(
+                                               'namespace' => $result->getInterwikiNamespaceText(),
+                                               'title' => $title->getText(),
+                                               'url' => $title->getFullUrl(),
+                                       );
+
+                                       // Add item to results and see whether it fits
+                                       $fit = $apiResult->addValue(
+                                               array( 'query', 'interwiki' . $this->getModuleName(), $result->getInterwikiPrefix()  ),
+                                               null,
+                                               $vals
+                                       );
+
+                                       if ( !$fit ) {
+                                               // We hit the limit. We can't really provide any meaningful
+                                               // pagination info so just bail out
+                                               break;
+                                       }
+                               } else {
+                                       $titles[] = $title;
                                }
 
                                $result = $matches->next();
                        }
                }
 
-               if ( is_null( $resultPageSet ) ) {
+               if ( $resultPageSet === null ) {
                        $apiResult->setIndexedTagName_internal( array(
                                'query', $this->getModuleName()
                        ), 'p' );
index 18bbc5a..3b8a514 100644 (file)
@@ -183,6 +183,8 @@ class ApiQuerySiteinfo extends ApiQueryBase {
                        $data['linktrail'] = '';
                }
 
+               $data['legaltitlechars'] = Title::legalChars();
+
                global $IP;
                $git = SpecialVersion::getGitHeadSha1( $IP );
                if ( $git ) {
index 09d2086..1beb8e7 100644 (file)
@@ -4,5 +4,8 @@
                        "Red Winged Duck"
                ]
        },
-       "apihelp-main-param-action": "Дзеяньне для выкананьня."
+       "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 Памылкі і запыты]\n</div>\n<strong>Статус:</strong> усе магчымасьці на гэтай старонцы павінны працаваць, але API знаходзіцца ў актыўнай распрацоўцы і можа зьмяняцца ў любы момант. Падпісвайцеся на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ рассылку mediawiki-api-announce] дзеля паведамленьняў пра абнаўленьні.\n\n<strong>Памылковыя запыты:</strong> калі да API дасылаюцца памылковыя запыты, HTTP-загаловак будзе дасланы з ключом «MediaWiki-API-Error», а потым і значэньне загалоўка і код памылкі будуць выстаўленыя на аднолькавае значэньне. Дзеля дадатковай інфармацыі глядзіце https://www.mediawiki.org/wiki/API:Errors_and_warnings.",
+       "apihelp-main-param-action": "Дзеяньне для выкананьня.",
+       "apihelp-main-param-format": "Фармат вываду.",
+       "apihelp-main-param-smaxage": "Выстаўце загаловак s-maxage на зададзеную колькасьць сэкундаў. Памылкі ніколі не кэшуюцца."
 }
index acef17d..302738f 100644 (file)
        "apihelp-parse-param-preview": "Im Vorschaumodus parsen.",
        "apihelp-parse-example-page": "Eine Seite parsen.",
        "apihelp-parse-example-text": "Wikitext parsen.",
+       "apihelp-patrol-description": "Kontrolliert eine Seite oder Version.",
+       "apihelp-patrol-example-revid": "Kontrolliert eine Version",
        "apihelp-protect-example-protect": "Schützt eine Seite",
        "apihelp-purge-param-forcelinkupdate": "Aktualisiert die Linktabellen.",
+       "apihelp-query-param-list": "Welche Listen abgerufen werden sollen.",
        "apihelp-query+allcategories-description": "Alle Kategorien aufzählen.",
        "apihelp-query+allcategories-param-limit": "Wie viele Kategorien zurückgegeben werden sollen.",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "Darf nur mit $3user verwendet werden.",
+       "apihelp-query+alldeletedrevisions-param-user": "Nur Versionen von diesem Benutzer auflisten.",
+       "apihelp-query+alldeletedrevisions-param-namespace": "Nur Seiten in diesem Namensraum auflisten.",
        "apihelp-query+allfileusages-param-limit": "Wie viele Gesamtobjekte zurückgegeben werden sollen.",
        "apihelp-query+allfileusages-example-unique": "Einheitliche Dateititel auflisten",
        "apihelp-query+allfileusages-example-generator": "Seiten abrufen, die die Dateien enthalten",
        "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+allpages-param-filterredir": "Welche Seiten aufgelistet werden sollen.",
        "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-param-limit": "Wie viele Benutzernamen insgesamt zurückgegeben werden sollen.",
        "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+contributors-param-limit": "Wie viele Spender zurückgegeben werden sollen.",
+       "apihelp-query+deletedrevisions-param-user": "Nur Versionen von diesem Benutzer auflisten.",
+       "apihelp-query+deletedrevisions-param-limit": "Die Maximalmenge der aufzulistenden Versionen.",
        "apihelp-query+deletedrevs-param-from": "Auflistung bei diesem Titel beginnen.",
        "apihelp-query+deletedrevs-param-to": "Auflistung bei diesem Titel beenden.",
        "apihelp-query+extlinks-param-limit": "Wie viele Links zurückgegeben werden sollen.",
+       "apihelp-query+exturlusage-param-limit": "Wie viele Seiten zurückgegeben werden sollen.",
+       "apihelp-query+filearchive-example-simple": "Eine Liste aller gelöschten Dateien auflisten",
        "apihelp-query+imageinfo-param-limit": "Wie viele Dateiversionen pro Datei zurückgegeben werden sollen.",
        "apihelp-query+imageinfo-param-start": "Zeitstempel, von dem die Liste beginnen soll.",
        "apihelp-query+imageinfo-param-end": "Zeitstempel, an dem die Liste enden soll.",
index 4fbfb40..17b79ff 100644 (file)
        "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-stash": "If set, the server will stash the file temporarily instead of adding it to the repository.",
        "apihelp-upload-param-filesize": "Filesize of entire upload.",
        "apihelp-upload-param-offset": "Offset of chunk in bytes.",
        "apihelp-upload-param-chunk": "Chunk contents.",
index 2077c85..5a9e66b 100644 (file)
@@ -2,10 +2,11 @@
        "@metadata": {
                "authors": [
                        "Gomoko",
-                       "Windes"
+                       "Windes",
+                       "Orlodrim"
                ]
        },
-       "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-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>Requêtes erronées :</strong> Si des requêtes erronées sont envoyées à l’API, un en-tête HTTP sera renvoyé avec la clé « MediaWiki-API-Error ». La valeur de cet en-tête et le code d’erreur renvoyé prendront la même valeur. Pour plus d’information, voyez 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-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-query+info-param-prop": "Quelles propriétés supplémentaires récupérer :\n;protection:Liste de niveau de protection de chaque page.\n;talkid:L’ID de la page de discussion pour chaque page qui n’est pas une page de discussion.\n;watched:Liste de l’état de suivi de chaque page.\n;watchers:Le nombre d’observateurs, si c&est autorisé.\n;notificationtimestamp:L’horodatage de notification de la liste de suivi de chaque page.\n;subjectid:L’ID de la page parente de chaque page de discussion.\n;url:Fournit une URL complète, une URL de modification, et l’URL canonique pour chaque page.\n;readable:Si l’utilisateur peut lire cette page.\n;preload:Fournit le texte renvoyé par EditFormPreloadText.\n;displaytitle:Fournit la manière dont le titre de la page est vraiment affiché.",
+       "apihelp-query+info-param-token": "Utiliser plutôt [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-query+info-example-simple": "Obtenir des informations sur [[Main Page]]",
+       "apihelp-query+info-example-protection": "Obtenir des informations générale et de protection sur [[Main Page]]",
+       "apihelp-query+iwbacklinks-description": "Trouver toutes les pages qui ont un lien vers le lien interwiki indiqué.\n\nPeut être utilisé pour trouver tous les liens avec un préfixe, ou tous les liens vers un titre (avec un préfixe donné). N’utiliser aucun paramètre revient en pratique à « tous les liens interwiki ».",
+       "apihelp-query+iwbacklinks-param-prefix": "Préfixe pour l’interwiki.",
+       "apihelp-query+iwbacklinks-param-title": "Lien interwiki à rechercher. Doit être utilisé avec $1blprefix.",
+       "apihelp-query+iwbacklinks-param-limit": "Combien de pages renvoyer.",
+       "apihelp-query+iwbacklinks-param-prop": "Quelles propriétés obtenir :\n;iwprefix:Ajoute le préfixe de l’interwiki.\n;iwtitle:Ajoute le titre de l’interwiki.",
+       "apihelp-query+iwbacklinks-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+iwbacklinks-example-simple": "Obtenir les pages ayant un lien vers [[wikibooks:Test]]",
+       "apihelp-query+iwbacklinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers [[wikibooks:Test]]",
+       "apihelp-query+iwlinks-description": "Renvoie tous les liens interwiki des pages indiquées.",
+       "apihelp-query+iwlinks-param-url": "S&il faut obtenir l’URL complète (impossible à utiliser avec $1prop).",
+       "apihelp-query+iwlinks-param-prop": "Quelles propriétés supplémentaires obtenir pour chaque lien interlangue :\n;url:Ajoute l’URL complète.",
+       "apihelp-query+iwlinks-param-limit": "Combien de liens interwiki renvoyer.",
+       "apihelp-query+iwlinks-param-prefix": "Renvoyer uniquement les liens interwiki avec ce préfixe.",
+       "apihelp-query+iwlinks-param-title": "Lien interwiki à rechercher. Doit être utilisé avec $1prefix.",
+       "apihelp-query+iwlinks-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+iwlinks-example-simple": "Obtenir les liens interwiki de [[Main Page]]",
+       "apihelp-query+langbacklinks-description": "Trouver toutes les pages qui ont un lien vers le lien de langue indiqué.\n\nPeut être utilisé pour trouver tous les liens avec un code de langue, ou tous les liens vers un titre (avec une langue donnée). N’utiliser aucun paramètre revient à « tous les liens de langue ».\n\nNotez que cela peut ne pas prendre en compte les liens de langue ajoutés par les extensions.",
+       "apihelp-query+langbacklinks-param-lang": "Langue pour le lien de langue.",
+       "apihelp-query+langbacklinks-param-title": "Lien interlangue à rechercher. Doit être utilisé avec $1lang.",
+       "apihelp-query+langbacklinks-param-limit": "Combien de pages renvoyer au total.",
+       "apihelp-query+langbacklinks-param-prop": "Quelles propriétés obtenir :\n;lllang:Ajoute le code de langue du lien de langue.\n;lltitle:Ajoute le titre du lien de langue.",
+       "apihelp-query+langbacklinks-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+langbacklinks-example-simple": "Obtenir les pages avec un lien avec [[:fr:Test]]",
+       "apihelp-query+langbacklinks-example-generator": "Obtenir des informations sur les pages ayant un lien vers [[:fr:Test]]",
+       "apihelp-query+langlinks-description": "Renvoie tous les liens interlangue des pages fournies.",
+       "apihelp-query+langlinks-param-limit": "Combien de liens interlangue renvoyer.",
+       "apihelp-query+langlinks-param-url": "S’il faut récupérer l’URL complète (impossible à utiliser avec $1prop).",
+       "apihelp-query+langlinks-param-prop": "Quelles propriétés supplémentaires obtenir pour chaque lien interlangue :\n;url:Ajoute l’URL complète.\n;langname:Ajoute le nom localisé de la langue (au mieux). Utiliser $1inlanguagecode pour contrôler la langue.\n;autonym:Ajoute le nom natif de la langue.",
+       "apihelp-query+langlinks-param-lang": "Renvoyer uniquement les liens interlangue avec ce code de langue.",
+       "apihelp-query+langlinks-param-title": "Lien à rechercher. Doit être utilisé avec $1lang.",
+       "apihelp-query+langlinks-param-dir": "La direction dans laquelle énumérer.",
+       "apihelp-query+langlinks-param-inlanguagecode": "Code de langue pour les noms de langue localisés.",
+       "apihelp-query+langlinks-example-simple": "Obtenir les liens interlangue de [[Main Page]]",
+       "apihelp-query+links-description": "Renvoie tous les liens des pages fournies.",
+       "apihelp-query+links-param-namespace": "Afficher les liens uniquement dans ces espaces de nom.",
+       "apihelp-query+links-param-limit": "Combien de liens renvoyer.",
+       "apihelp-query+links-param-titles": "Lister uniquement les liens vers ces titres. Utile pour vérifier si une certaine page a un lien vers un titre donné.",
+       "apihelp-query+links-param-dir": "La direction dans laquelle lister.",
+       "apihelp-query+links-example-simple": "Obtenir les liens de [[Main Page]]",
+       "apihelp-query+links-example-generator": "Obtenir des informations sur tous les liens de page dans [[Main Page]]",
+       "apihelp-query+links-example-namespaces": "Obtenir les liens de [[Main Page]] dans les espaces de nom Utilisateur et Modèle",
+       "apihelp-query+linkshere-description": "Trouver toutes les pages ayant un lien vers les pages données.",
+       "apihelp-query+linkshere-param-prop": "Quelles propriétés obtenir :\n;pageid:ID de chaque page.\n;title:Titre de chaque page.\n;redirect:Indique si la page est une redirection.",
+       "apihelp-query+linkshere-param-namespace": "Inclure uniquement les pages dans ces espaces de nom.",
+       "apihelp-query+linkshere-param-limit": "Combien de résultats renvoyer.",
+       "apihelp-query+linkshere-param-show": "Afficher uniquement les éléments qui correspondent à ces critères :\n;redirect:Afficher uniquement les redirections.\n;!redirects:Afficher uniquement les non-redirections.",
+       "apihelp-query+linkshere-example-simple": "Obtenir une liste des pages liées à  [[Main Page]]",
+       "apihelp-query+linkshere-example-generator": "Obtenir des informations sur les pages liées à [[Main Page]]",
+       "apihelp-query+logevents-description": "Obtenir des événements des journaux.",
+       "apihelp-query+logevents-param-prop": "Quelles propriétés obtenir :\n;ids:Ajoute l’ID de l’événement.\n;title:Ajoute le titre de la page pour l’événement.\n;type:Ajoute le type de l’événement.\n;user:Ajoute l’utilisateur responsable de l’événement.\n;userid:Ajoute l’ID de l’utilisateur responsable de l’événement.\n;timestamp:Ajoute l’horodatage de l’événement.\n;comment:Ajoute le commentaire de l’événement.\n;parsedcomment:Ajoute le commentaire analysé de l’événement.\n;details:Liste les détails supplémentaires sur l’événement.\n;tags:Liste les balises de l’événement.",
+       "apihelp-query+logevents-param-type": "Filtrer les entrées du journal à ce seul type.",
+       "apihelp-query+logevents-param-action": "Filtrer les actions du journal à cette seule action. Écrase $1type. Des actions avec une astérisque de la forme « action/* » sont autorisées pour spécifier n’importe quelle chaîne à la place de l’astérisque.",
+       "apihelp-query+logevents-param-start": "L’horodatage auquel démarrer l’énumération.",
+       "apihelp-query+logevents-param-end": "L’horodatage auquel arrêter l’énumération.",
+       "apihelp-query+logevents-param-user": "Restreindre aux entrées générées par l’utilisateur spécifié.",
+       "apihelp-query+logevents-param-title": "Restreindre aux entrées associées à une page donnée.",
+       "apihelp-query+logevents-param-namespace": "Restreindre aux entrées dans l’espace de nom spécifié.",
+       "apihelp-query+logevents-param-prefix": "Restreindre aux entrées commençant par ce préfixe.",
+       "apihelp-query+logevents-param-tag": "Lister seulement les entrées ayant cette balise.",
+       "apihelp-query+logevents-param-limit": "Combien d'entrées renvoyer au total.",
+       "apihelp-query+logevents-example-simple": "Liste les entrées de journal récentes.",
+       "apihelp-query+pagepropnames-description": "Lister les noms de toutes les propriétés de page utilisées sur le wiki.",
+       "apihelp-query+pagepropnames-param-limit": "Le nombre maximal de noms à renvoyer.",
+       "apihelp-query+pagepropnames-example-simple": "Obtenir les 10 premiers noms de propriété",
+       "apihelp-query+pageprops-description": "Obtenir diverses propriétés définies dans le contenu de la page.",
+       "apihelp-query+pageprops-param-prop": "Lister uniquement ces propriétés. Utile pour vérifier si une certaine page utilise une certaine propriété de page.",
+       "apihelp-query+pageprops-example-simple": "Obtenir les propriétés de [[:Category:Foo]]",
+       "apihelp-query+pageswithprop-description": "Lister toutes les pages utilisant une propriété de page donnée.",
+       "apihelp-query+pageswithprop-param-propname": "Propriété de page pour laquelle énumérer les pages.",
+       "apihelp-query+pageswithprop-param-prop": "Quelles informations inclure :\n;ids:Ajoute l’ID de la page.\n;title:Ajoute le titre et l’ID de l’espace de noms de la page.\n;value:Ajoute la valeur de la propriété de page.",
+       "apihelp-query+pageswithprop-param-limit": "Le nombre maximal de pages à renvoyer.",
+       "apihelp-query+pageswithprop-param-dir": "Dans quelle direction trier.",
+       "apihelp-query+pageswithprop-example-simple": "Lister les 10 premières pages en utilisant &#123;&#123;DISPLAYTITLE:&#125;&#125;",
+       "apihelp-query+pageswithprop-example-generator": "Obtenir des informations sur les 10 premières pages utilisant _&#95;NOTOC_&#95;",
+       "apihelp-query+prefixsearch-description": "Effectuer une recherche de préfixe sur les titres de page.",
+       "apihelp-query+prefixsearch-param-search": "Chaîne de recherche.",
+       "apihelp-query+prefixsearch-param-namespace": "Espaces de nom à rechercher.",
+       "apihelp-query+prefixsearch-param-limit": "Nombre maximal de résultats à renvoyer.",
+       "apihelp-query+prefixsearch-example-simple": "Rechercher les titres de page commençant par « meaning »",
+       "apihelp-query+protectedtitles-description": "Lister tous les titres protégés en création.",
+       "apihelp-query+protectedtitles-param-namespace": "Lister uniquement les titres dans ces espaces de nom.",
+       "apihelp-query+protectedtitles-param-level": "Lister uniquement les titres avec ces niveaux de protection.",
+       "apihelp-query+protectedtitles-param-limit": "Combien de pages renvoyer au total.",
+       "apihelp-query+protectedtitles-param-start": "Démarrer la liste à cet horodatage de protection.",
+       "apihelp-query+protectedtitles-param-end": "Arrêter la liste à cet horodatage de protection.",
+       "apihelp-query+protectedtitles-param-prop": "Quelles propriétés obtenir :\n;timestamp:Ajoute l’horodatage de l’ajout de la protection.\n;user:Ajoute l’utilisateur ayant ajouté la protection.\n;userid:Ajoute l’ID de l’utilisateur ayant ajouté la protection.\n;comment:Ajoute le commentaire de la protection.\n;parsedcomment:Ajoute le commentaire analysé de la protection.\n;expiry:Ajoute l’horodatage de levée de la protection.\n;level:Ajoute le niveau de protection.",
+       "apihelp-query+protectedtitles-example-simple": "Lister les titres protégés",
+       "apihelp-query+protectedtitles-example-generator": "Trouver les liens vers les titres protégés dans l’espace de noms principal",
+       "apihelp-query+querypage-description": "Obtenir une liste fournie par une page spéciale basée sur QueryPage",
+       "apihelp-query+querypage-param-page": "Le nom de la page spéciale. Remarque, ce nom est sensible à la casse.",
+       "apihelp-query+querypage-param-limit": "Nombre de résultats à renvoyer.",
+       "apihelp-query+querypage-example-ancientpages": "Renvoyer les résultats de [[Special:Ancientpages]].",
+       "apihelp-query+random-description": "Obtenir un ensemble de pages au hasard.\n\nLes pages sont listées dans un ordre prédéterminé, seul le point de départ est aléatoire. Par exemple, cela signifie que si la première page sur votre liste est « Accueil », la seconde sera *toujours* « Liste des singes de fiction », la troisième « Liste de personnes figurant sur les timbres de Vanuatu », etc.\n\nSi le nombre de page dans l’espace de nom est inférieur à $1limit, vous obtiendrez moins de page. Vous n'obtiendrez jamais deux fois la même page.",
+       "apihelp-query+random-param-namespace": "Renvoyer seulement des pages de ces espaces de noms.",
+       "apihelp-query+random-param-limit": "Limite sur le nombre de pages aléatoires renvoyées.",
+       "apihelp-query+random-param-redirect": "Charger une redirection aléatoire plutôt qu’une page aléatoire.",
+       "apihelp-query+random-example-simple": "Obtenir deux pages aléatoires de l’espace principal",
+       "apihelp-query+random-example-generator": "Renvoyer les informations de la page sur deux pages au hasard de l’espace de noms principal",
+       "apihelp-query+recentchanges-description": "Énumérer les modifications récentes.",
+       "apihelp-query+recentchanges-param-start": "L’horodatage auquel démarrer l’énumération.",
+       "apihelp-query+recentchanges-param-end": "L’horodatage auquel arrêter l’énumération.",
+       "apihelp-query+recentchanges-param-namespace": "Filtrer les modifications uniquement sur ces espaces de nom.",
+       "apihelp-query+recentchanges-param-user": "Lister uniquement les modifications par cet utilisateur.",
+       "apihelp-query+recentchanges-param-excludeuser": "Ne pas lister les modifications par cet utilisateur.",
+       "apihelp-query+recentchanges-param-tag": "Lister uniquement les modifications marquées avec cette balise.",
+       "apihelp-query+recentchanges-param-prop": "Inclure des informations supplémentaires :\n;user:Ajoute l’utilisateur responsable de la modification et marque si c’est une adresse IP.\n;userid:Ajoute l’ID de l’utilisateur responsable de la modification.\n;comment:Ajoute le commentaire de la modification.\n;parsedcomment:Ajoute le commentaire analysé pour la modification.\n;flags:Ajoute les balises de la modification.\n;timestamp:Ajoute l’horodatage de la modification.\n;title:Ajoute le titre de la page modifiée.\n;ids:Ajoute l’ID de la page, l’ID des modifications récentes et l’ID de l’ancienne et la nouvelle révisions.\n;sizes:Ajoute l’ancienne et la nouvelle tailles de la page en octets.\n;redirect:Marque la modification si la page est une redirection.\n;patrolled:Marque les modifications patrouillables comme patrouillées ou non.\n;loginfo:Ajoute les informations du journal (Id du journal, type de trace, etc.) aux entrées du journal.\n;tags:Liste les balises de l’entrée.\n;sha1:Ajoute la somme de contrôle du contenu pour les entrées associées à une révision.",
+       "apihelp-query+recentchanges-param-token": "Utiliser plutôt [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-query+recentchanges-param-show": "Afficher uniquement les éléments correspondant à ces critères. Par exemple, pour voir uniquement les modifications mineures par des utilisateurs connectés, mettre $1show=minor|!anon.",
+       "apihelp-query+recentchanges-param-limit": "Combien de modifications renvoyer au total.",
+       "apihelp-query+recentchanges-param-type": "Quels types de modification afficher.",
+       "apihelp-query+recentchanges-param-toponly": "Lister uniquement les modifications qui sont de la dernière révision.",
+       "apihelp-query+recentchanges-example-simple": "Lister les modifications récentes",
+       "apihelp-query+recentchanges-example-generator": "Obtenir l’information de page sur les modifications récentes non patrouillées",
+       "apihelp-query+redirects-description": "Renvoie toutes les redirections vers les pages données.",
+       "apihelp-query+redirects-param-prop": "Quelles propriétés récupérer :\n;pageid:ID de page de chaque redirection.\n;title:Titre de chaque redirection.\n;fragment:Fragment de chaque redirection, s’il y en a un.",
+       "apihelp-query+redirects-param-namespace": "Inclure uniquement les pages dans ces espaces de nom.",
+       "apihelp-query+redirects-param-limit": "Combien de redirections renvoyer.",
+       "apihelp-query+redirects-param-show": "Afficher uniquement les éléments correspondant à ces critères :\n;fragment:Afficher uniquement les redirections avec un fragment.\n;!fragment:Afficher uniquement les redirections sans fragment.",
+       "apihelp-query+redirects-example-simple": "Obtenir une liste des redirections vers [[Main Page]]",
+       "apihelp-query+redirects-example-generator": "Obtenir des informations sur toutes les redirections vers [[Main Page]]",
+       "apihelp-query+revisions-description": "Obtenir des informations sur la révision.\n\nPeut être utilisé de différentes manières :\n# Obtenir des données sur un ensemble de pages (dernière révision), en mettant les titres ou les ids de page.\n# Obtenir les révisions d’une page donnée, en utilisant les titres ou les ids de page avec début, fin ou limite.\n# Obtenir des données sur un ensemble de révisions en donnant leurs IDs et leurs ids de révision.",
+       "apihelp-query+revisions-paraminfo-singlepageonly": "Utilisable uniquement avec une seule page (mode #2).",
+       "apihelp-query+revisions-param-startid": "À quel ID de révision démarrer l’énumération.",
+       "apihelp-query+revisions-param-endid": "Arrêter l’énumération des révisions à cet ID.",
+       "apihelp-query+revisions-param-start": "À quel horodatage de révision démarrer l’énumération.",
+       "apihelp-query+revisions-param-end": "Énumérer jusqu’à cet horodatage.",
+       "apihelp-query+revisions-param-user": "Inclure uniquement les révisions faites par l’utilisateur.",
+       "apihelp-query+revisions-param-excludeuser": "Exclure les révisions faites par l’utilisateur.",
+       "apihelp-query+revisions-param-tag": "Lister uniquement les révisions marquées avec cette balise.",
+       "apihelp-query+revisions-param-token": "Quels jetons obtenir pour chaque révision.",
+       "apihelp-query+revisions-example-content": "Obtenir des données avec le contenu pour la dernière révision des titres « API » et « Page principale »",
+       "apihelp-query+revisions-example-last5": "Obtenir les 5 dernières révisions de la « Page principale »",
+       "apihelp-query+revisions-example-first5": "Obtenir les 5 premières révisions de la « Page principale »",
+       "apihelp-query+revisions-example-first5-after": "Obtenir les 5 premières révisions de la « Page principale » faites après le 01/05/2006",
+       "apihelp-query+revisions-example-first5-not-localhost": "Obtenir les 5 premières révisions de la « Page principale » qui n’ont pas été faites par l’utilisateur anonyme « 127.0.0.1 »",
+       "apihelp-query+revisions-example-first5-user": "Obtenir les 5 premières révisions de la « Page principale » qui ont été faites par l’utilisateur « MédiaWiki par défaut »",
+       "apihelp-query+revisions+base-param-prop": "Quelles propriétés obtenir pour chaque révision :\n;ids:L’ID de la révision.\n;flags:Marques de la révision (mineure).\n;timestamp:L’horodatage de la révision.\n;user:Utilisateur ayant fait la révision.\n;userid:ID de l’utilisateur ayant créé la révision.\n;size:Taille (en octets) de la révision.\n;sha1:SHA-1 (base 16) de la révision.\n;contentmodel:ID du modèle de contenu de la révision.\n;comment:Commentaire par l’utilisateur de la révision.\n;parsedcomment:Commentaire analysé par l’utilisateur de la révision.\n;content:Texte de la révision.\n;tags:Balises de la révision.",
+       "apihelp-query+revisions+base-param-limit": "Limiter le nombre de révisions retournées.",
+       "apihelp-query+revisions+base-param-expandtemplates": "Développer les modèles dans le contenu de la révision (nécessite $1prop=content).",
+       "apihelp-query+revisions+base-param-generatexml": "Générer l’arbre d’analyse XML pour le contenu de la révision (nécessite $1prop=content).",
+       "apihelp-query+revisions+base-param-parse": "Analyser le contenu de la révision (nécessite $1prop=content). Pour des raisons de performance, si cette option est utilisée, $1limit est forcé à 1.",
+       "apihelp-query+revisions+base-param-section": "Récupérer uniquement le contenu de ce numéro de section.",
+       "apihelp-query+revisions+base-param-diffto": "ID de révision à comparer à chaque révision. Utiliser « prev », « next » et « cur » pour la version précédente, suivante et actuelle respectivement.",
+       "apihelp-query+revisions+base-param-difftotext": "Texte auquel comparer chaque révision. Compare uniquement un nombre limité de révisions. Écrase $1diffto. Si $1section est positionné, seule cette section sera comparée avec ce texte",
+       "apihelp-query+revisions+base-param-contentformat": "Format de sérialisation utilisé pour $1difftotext et attendu pour la sortie du contenu.",
+       "apihelp-query+search-description": "Effectuer une recherche en texte intégral.",
+       "apihelp-query+search-param-search": "Rechercher les titres (ou le contenu) de toutes les pages ayant cette valeur.",
+       "apihelp-query+search-param-namespace": "Rechercher uniquement dans ces espaces de nom.",
+       "apihelp-query+search-param-what": "Quel type de recherche effectuer.",
+       "apihelp-query+search-param-info": "Quelles métadonnées renvoyer.",
+       "apihelp-query+search-param-prop": "Quelles propriétés renvoyer :\n;size:Ajoute la taille de la page en octets.\n;wordcount:Ajoute le nombre de mots de la page.\n;timestamp:Ajoute l’horodatage de la dernière modification de la page.\n;snippet:Ajoute un extrait analysé de la page.\n;titlesnippet:Ajoute un extrait analysé du titre de la page.\n;redirectsnippet:Ajoute un extrait analysé du titre de la redirection.\n;redirecttitle:Ajoute le titre de la redirection correspondante.\n;sectionsnippet:Ajoute un extrait analysé du titre de la section correspondante.\n;sectiontitle:Ajoute le titre de la section correspondante.\n;score:<span class=\"apihelp-deprecated\">Obsolète et ignoré.</span>\n;hasrelated:<span class=\"apihelp-deprecated\">Obsolète et ignoré.</span>",
+       "apihelp-query+search-param-limit": "Combien de pages renvoyer au total.",
+       "apihelp-query+search-param-interwiki": "Inclure les résultats interwiki dans la recherche, s’ils sont disponibles.",
+       "apihelp-query+search-param-backend": "Quel serveur de recherche utiliser, si ce n’est pas celui par défaut.",
+       "apihelp-query+search-example-simple": "Rechercher « signification »",
+       "apihelp-query+search-example-text": "Rechercher des textes pour « signification »",
+       "apihelp-query+search-example-generator": "Obtenir les informations sur les pages renvoyées par une recherche de « signification »",
+       "apihelp-query+siteinfo-description": "Renvoyer les informations générales sur le site.",
        "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-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-title": "Aide de l’API de MediaWiki",
        "api-help-lead": "Ceci est une page d’aide de l’API de MédiaWiki générée automatiquement.\n\nDocumentation et exemples : https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "Module principal",
        "api-help-flag-deprecated": "Ce module est obsolète.",
index 46da945..a06db94 100644 (file)
@@ -1,7 +1,8 @@
 {
        "@metadata": {
                "authors": [
-                       "Shirayuki"
+                       "Shirayuki",
+                       "2nd-player"
                ]
        },
        "apihelp-main-param-action": "実行する操作です。",
        "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-block-description": "利用者をブロックします。",
+       "apihelp-block-param-nocreate": "アカウントの作成を禁止します。",
+       "apihelp-createaccount-description": "新しい利用者アカウントを作成します。",
+       "apihelp-createaccount-param-password": "パスワード ($1mailpassword が設定されると無視されます)。",
+       "apihelp-createaccount-param-token": "最初のリクエストで得られたアカウント作成用トークンです。",
+       "apihelp-createaccount-param-email": "利用者の電子メールアドレス (任意)。",
+       "apihelp-createaccount-param-mailpassword": "設定されると (その値を問わず)、ランダムなパスワードがその利用者に電子メールで送られます。",
+       "apihelp-createaccount-example-mail": "利用者「testuser」を作成し、ランダムに生成されたパスワードをメールで送る",
+       "apihelp-delete-description": "ページを削除します。",
+       "apihelp-delete-param-title": "削除するページ名です。 $1pageid とは同時に使用できません。",
+       "apihelp-delete-param-pageid": "削除するページIDです。 $1title とは同時に使用できません。",
+       "apihelp-delete-param-watch": "そのページをウォッチリストに追加します。",
+       "apihelp-delete-param-unwatch": "そのページをウォッチリストから除去します。",
+       "apihelp-delete-example-simple": "「Main Page」を削除する",
+       "apihelp-disabled-description": "このモジュールは無効化されています。",
+       "apihelp-edit-param-title": "編集するページ名です。$1pageid とは同時に使用できません。",
+       "apihelp-edit-param-pageid": "編集するページIDです。$1title とは同時に使用できません。",
+       "apihelp-edit-param-text": "ページの本文。",
+       "apihelp-edit-param-createonly": "すでにそのページが存在する場合は編集を行いません。",
+       "apihelp-edit-param-nocreate": "そのページが存在しない場合にエラーを返します。",
+       "apihelp-edit-param-watch": "そのページをウォッチリストに追加します。",
+       "apihelp-edit-param-unwatch": "そのページをウォッチリストから除去します。",
+       "apihelp-edit-param-token": "このトークンは常に最後のパラメーターとして、または少なくとも $1text パラメーターより後に送信されるべきです。",
+       "apihelp-emailuser-description": "利用者に電子メールを送信します。",
+       "apihelp-emailuser-param-target": "送信先の利用者名。",
+       "apihelp-emailuser-param-text": "電子メールの本文。",
+       "apihelp-emailuser-param-ccme": "電子メールの複製を自分にも送信します。",
        "apihelp-help-description": "指定したモジュールのヘルプを表示します。",
        "apihelp-help-param-modules": "ヘルプを表示するモジュールです (action= パラメーターおよび format= パラメーターの値、または \"main\")。\"+\" を使用して下位モジュールを指定できます。",
        "apihelp-help-param-submodules": "指定したモジュールの下位モジュールのヘルプを含めます。",
        "apihelp-help-example-recursive": "すべてのヘルプを1つのページに",
        "apihelp-help-example-help": "ヘルプ モジュール自身のヘルプ",
        "apihelp-help-example-query": "2つの下位モジュールのヘルプ",
+       "apihelp-login-param-name": "利用者名。",
+       "apihelp-login-param-password": "パスワード。",
+       "apihelp-move-description": "ページを移動します。",
+       "apihelp-move-param-from": "移動するページのページ名です。 $1fromid とは同時に使用できません。",
+       "apihelp-move-param-fromid": "移動するページのページIDです。 $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-example-move": "「Badtitle」を「Goodtitle」に転送ページを残さず移動",
        "apihelp-format-example-generic": "クエリの結果を $1 形式に整形します",
        "apihelp-dbg-description": "データを PHP の var_export() 形式で出力します。",
        "apihelp-dbgfm-description": "データを PHP の var_export() 形式 (HTML に埋め込んだ形式) で出力します。",
index 8ead891..a259495 100644 (file)
@@ -17,9 +17,9 @@
        "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-emailuser-param-subject": "Onderwerpkoptekst.",
+       "apihelp-emailuser-param-text": "E-mailtekst.",
+       "apihelp-expandtemplates-param-title": "Paginanaam.",
        "apihelp-feedcontributions-param-year": "Van jaar (en eerder).",
        "apihelp-feedcontributions-param-month": "Van maand (en eerder).",
        "apihelp-login-param-name": "Gebruikersnaam.",
diff --git a/includes/api/i18n/sr-ec.json b/includes/api/i18n/sr-ec.json
new file mode 100644 (file)
index 0000000..32a6765
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Milicevic01"
+               ]
+       },
+       "apihelp-block-param-reason": "Разлог блокирање."
+}
index 411a1f3..87e1648 100644 (file)
@@ -4,7 +4,8 @@
                        "Gaoxuewei",
                        "Linforest",
                        "Liuxinyu970226",
-                       "Papapasan"
+                       "Papapasan",
+                       "LNDDYL"
                ]
        },
        "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 程序错误与功能请求]\n</div>\n<strong>状态信息:</strong> 本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n<strong>错误请求:</strong> 当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅https://www.mediawiki.org/wiki/API:Errors_and_warnings 。",
@@ -71,6 +72,7 @@
        "apihelp-edit-param-contentmodel": "新内容的内容模型。",
        "apihelp-edit-example-edit": "编辑一个页面",
        "apihelp-edit-example-prepend": "页面中预置_&#95;NOTOC_&#95;",
+       "apihelp-edit-example-undo": "通过13585撤销修订版本13579并自动填写编辑摘要",
        "apihelp-emailuser-description": "电子邮件联系一位用户。",
        "apihelp-emailuser-param-target": "电子邮件的目标用户。",
        "apihelp-emailuser-param-subject": "主题页眉。",
        "apihelp-login-param-domain": "域名(可选)。",
        "apihelp-login-example-gettoken": "检索登录令牌",
        "apihelp-login-example-login": "登录",
+       "apihelp-logout-example-logout": "退出当前用户",
        "apihelp-move-description": "移动一个页面。",
        "apihelp-move-param-reason": "移动原因。",
        "apihelp-move-param-movetalk": "移动讨论页,如果存在。",
        "apihelp-move-param-noredirect": "不要创建重定向。",
        "apihelp-move-param-ignorewarnings": "忽略任何警告。",
        "apihelp-opensearch-param-search": "搜索字符串。",
+       "apihelp-opensearch-param-limit": "要返回的结果最大数。",
        "apihelp-opensearch-param-namespace": "搜索的名字空间。",
        "apihelp-opensearch-param-suggest": "如果[https://www.mediawiki.org/wiki/Manual:$wgEnableOpenSearchSuggest $wgEnableOpenSearchSuggest]设置为false则不做任何事情。",
        "apihelp-opensearch-param-format": "输出格式。",
        "apihelp-query+allcategories-param-from": "要作为枚举起始点的类别。",
        "apihelp-query+allcategories-param-to": "要作为枚举终止点的类别。",
        "apihelp-query+allcategories-param-limit": "要返回多少个类别。",
+       "apihelp-query+alldeletedrevisions-paraminfo-useronly": "只可以与$3user一起使用。",
+       "apihelp-query+alldeletedrevisions-paraminfo-nonuseronly": "不能与$3user一起使用。",
+       "apihelp-query+alldeletedrevisions-param-from": "从此标题开始列出。",
+       "apihelp-query+alldeletedrevisions-param-to": "列出至此标题为止。",
        "apihelp-query+alldeletedrevisions-param-namespace": "只列出此名字空间的页面。",
        "apihelp-query+alldeletedrevisions-param-miser-user-namespace": "'''注意:'''由于[https://www.mediawiki.org/wiki/Manual:$wgMiserMode miser模式],同时使用$1user和$1namespace将导致继续前返回少于“$1limit”个结果,在极端条件下可能不返回任何结果。",
        "apihelp-query+allfileusages-param-dir": "罗列所采用的方向。",
        "apihelp-query+allpages-param-minsize": "限于至少这么多字节的页面。",
        "apihelp-query+allpages-param-maxsize": "限于至多这么多字节的页面。",
        "apihelp-query+allpages-param-prtype": "仅限于受保护页面。",
+       "apihelp-query+allpages-param-limit": "返回的总计页面数。",
        "apihelp-query+allredirects-description": "列出至一个名字空间的重定向。",
        "apihelp-query+allredirects-param-namespace": "要列举的名字空间。",
+       "apihelp-query+allredirects-param-limit": "返回的总计项目数。",
        "apihelp-query+allredirects-example-unique-generator": "获得所有目标页面,标记丢失的",
        "apihelp-query+allredirects-example-generator": "获得包含重定向的页面",
        "apihelp-query+alltransclusions-param-namespace": "要列举的名字空间。",
+       "apihelp-query+allusers-param-group": "只包含指定组中的用户。",
+       "apihelp-query+allusers-param-excludegroup": "排除指定组中的用户。",
        "apihelp-query+allusers-param-witheditsonly": "只列出有编辑的用户。",
        "apihelp-query+allusers-param-activeusers": "只列出最近$1天内活跃的用户。",
        "apihelp-query+allusers-example-Y": "列出以Y开头的用户",
+       "apihelp-query+backlinks-param-title": "要搜索的标题。不能与$1pageid一起使用。",
+       "apihelp-query+backlinks-param-pageid": "要搜索的页面ID。不能与$1title一起使用。",
+       "apihelp-query+backlinks-param-namespace": "要列举的名字空间。",
        "apihelp-query+backlinks-example-simple": "显示至[[首页]]的链接",
        "apihelp-query+backlinks-example-generator": "获取关于链接至[[首页]]的页面的信息",
        "apihelp-query+blocks-description": "列出所有被封禁的用户和IP地址。",
        "apihelp-query+categorymembers-example-simple": "获取[[:Category:Physics]]中的前10个页面。",
        "apihelp-query+categorymembers-example-generator": "获取关于[[:Category:Physics]]中的前10个页面的页面信息。",
        "apihelp-query+contributors-example-simple": "显示[[首页]]的贡献",
+       "apihelp-query+deletedrevisions-example-titles": "列出[[首页]]和[[Talk:首页]]的已删除修订,包含内容",
        "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|模式}}:$2",
+       "apihelp-query+deletedrevs-param-from": "从此标题开始列出。",
+       "apihelp-query+deletedrevs-param-to": "列出至此标题为止。",
        "apihelp-query+deletedrevs-param-namespace": "只列出此名字空间的页面。",
        "apihelp-query+deletedrevs-example-mode1": "列出最近已删除的对首页和Talk:首页的贡献,带内容(模式1)",
        "apihelp-query+deletedrevs-example-mode2": "列出由Bob作出的最近50次已删除贡献(模式2)",
        "apihelp-query+images-param-limit": "返回多少文件。",
        "apihelp-query+images-example-simple": "获取[[首页]]使用的文件列表",
        "apihelp-query+images-example-generator": "获取有关[[首页]]使用的文件的信息",
+       "apihelp-query+imageusage-param-title": "要搜索的标题。不能与$1pageid一起使用。",
+       "apihelp-query+imageusage-param-pageid": "要搜索的页面ID。不能与$1title一起使用。",
+       "apihelp-query+imageusage-param-namespace": "要列举的名字空间。",
        "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+recentchanges-example-simple": "最近更改列表",
        "apihelp-query+redirects-param-namespace": "只包含这些名字空间的页面。",
        "apihelp-query+redirects-param-limit": "返回多少重定向。",
-       "apihelp-query+redirects-example-simple": "获取至[[首页]]的重定向列表",
+       "apihelp-query+redirects-example-simple": "获取至[[Project:首页]]的重定向列表",
        "apihelp-query+redirects-example-generator": "获取所有重定向至[[首页]]的信息",
        "apihelp-query+revisions-example-last5": "获取“首页”的最近5次修订",
        "apihelp-query+revisions-example-first5": "获取“首页”的前5次修订版本",
        "apihelp-query+siteinfo-example-interwiki": "获取本地跨wiki前缀列表",
        "apihelp-query+tags-description": "列出更改标签。",
        "apihelp-query+tags-example-simple": "可用标签列表",
+       "apihelp-query+templates-param-namespace": "只显示此名字空间的模板。",
        "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+tokens-param-type": "要请求的令牌类型。",
        "apihelp-query+transcludedin-param-namespace": "至包含这些名字空间的页面。",
        "apihelp-query+transcludedin-param-limit": "返回多少。",
        "apihelp-query+transcludedin-example-simple": "获取嵌入[[首页]]的页面列表",
        "apihelp-query+watchlistraw-description": "获取登录用户的监视列表的所有页面。",
        "apihelp-query+watchlistraw-param-namespace": "只列出指定名字空间的页面。",
        "apihelp-revisiondelete-description": "删除和恢复修订版本。",
+       "apihelp-revisiondelete-param-hide": "每次修订要隐藏的东西。",
+       "apihelp-revisiondelete-param-show": "每次修订要恢复显示的东西。",
        "apihelp-revisiondelete-param-reason": "删除或恢复的原因。",
        "apihelp-rollback-example-simple": "回退由用户Example对[[首页]]做出的最近编辑",
        "apihelp-rollback-example-summary": "回退由IP用户192.0.2.5对[[首页]]做出的最近编辑,带编辑摘要“回退破坏”,并将这些编辑和回退标记为“机器人”",
        "apihelp-upload-param-watch": "监视页面。",
        "apihelp-upload-param-ignorewarnings": "忽略任何警告。",
        "apihelp-upload-param-file": "文件内容。",
+       "apihelp-upload-param-stash": "如果设置,服务器将不会添加文件至存储库并暂时藏匿。",
        "apihelp-upload-param-chunk": "大块内容。",
        "apihelp-upload-example-url": "从URL上传",
        "apihelp-userrights-param-user": "用户名。",
        "apihelp-userrights-param-userid": "用户ID。",
+       "apihelp-userrights-param-add": "将用户加入至这些组中。",
+       "apihelp-userrights-param-remove": "将用户从这些组中移除。",
        "apihelp-userrights-param-reason": "更改原因。",
        "apihelp-userrights-example-user": "将用户FooBot添加至“机器人”用户组,并从“管理员”和“行政员”组移除",
        "apihelp-watch-example-watch": "监视页面“首页”",
        "apihelp-watch-example-unwatch": "取消监视页面“首页”",
+       "apihelp-dbg-description": "输出数据为PHP的var_export()格式。",
+       "apihelp-dump-description": "输出数据为PHP的var_dump()格式。",
+       "apihelp-json-description": "输出数据为JSON格式。",
        "apihelp-none-description": "不输出任何东西。",
-       "apihelp-yaml-description": "以YAML格式输出数据。",
+       "apihelp-php-description": "输出数据为序列化PHP格式。",
+       "apihelp-txt-description": "输出数据为PHP的print_r()格式。",
+       "apihelp-wddx-description": "输出数据为WDDX格式。",
+       "apihelp-xml-description": "输出数据为XML格式。",
+       "apihelp-yaml-description": "输出数据为YAML格式。",
        "api-format-title": "MediaWiki API 结果",
        "api-orm-param-props": "要查询的字段。",
        "api-help-title": "MediaWiki API 帮助",
index dd2e813..9257ffe 100644 (file)
@@ -787,6 +787,10 @@ class DatabaseSqlite extends DatabaseBase {
                        // https://bugs.php.net/bug.php?id=63419
                        // There was already a similar report for SQLite3::escapeString, bug #62361:
                        // https://bugs.php.net/bug.php?id=62361
+                       // There is an additional bug regarding sorting this data after insert
+                       // on older versions of sqlite shipped with ubuntu 12.04
+                       // https://bugzilla.wikimedia.org/show_bug.cgi?id=72367
+                       wfDebugLog( __CLASS__, __FUNCTION__ . ': Quoting value containing null byte. For consistency all binary data should have been first processed with self::encodeBlob()' );
                        return "x'" . bin2hex( $s ) . "'";
                } else {
                        return $this->mConn->quote( $s );
index eeb2fec..0fb2d09 100644 (file)
@@ -410,7 +410,10 @@ 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" );
+                       $server = $this->mServers[$index];
+                       $msg = __METHOD__ . ": Timed out waiting on $server pos {$this->mWaitForPos}";
+                       wfDebug( "$msg\n" );
+                       wfDebugLog( 'DBPerformance', "$msg:\n" . wfBacktrace( true ) );
                        $ok = false;
                } else {
                        wfDebug( __METHOD__ . ": Done\n" );
index 7563d64..c82be50 100644 (file)
@@ -471,6 +471,8 @@ abstract class File {
        public function getThumbnailBucket( $desiredWidth, $page = 1 ) {
                global $wgThumbnailBuckets, $wgThumbnailMinimumBucketDistance;
 
+               wfDebugLog( 'thumbnail', 'thumbnail buckets ' . json_encode( $wgThumbnailBuckets ) );
+
                $imageWidth = $this->getWidth( $page );
 
                if ( $imageWidth === false ) {
index d0db084..202edef 100644 (file)
@@ -6,11 +6,13 @@
                        "Muhammed taha"
                ]
        },
+       "config-desc": "دامەزرێنەرەکە بۆ میدیاویکی",
+       "config-title": "دامەزرانی میدیاویکی $1",
        "config-information": "زانیاری",
        "config-your-language": "زمانەکەت:",
        "config-wiki-language": "زمانی ویکی:",
        "config-back": "→ گەڕانەوە",
-       "config-continue": "بەردەوامبوون ←",
+       "config-continue": "بەردەوام بە ←",
        "config-page-language": "زمان",
        "config-page-welcome": "بەخێربێیت بۆ میدیاویکی!",
        "config-page-dbconnect": "پەیوەندی دەکات بەبنکەی زانیارییەکان",
        "config-page-upgradedoc": "نوێدەکرێتەوە",
        "config-page-existingwiki": "ویکی پێشوو",
        "config-restart": "بەڵێ، دەستی پێ بکەرەوە",
-       "config-env-php": "PHP $1 دابەزێندرا.",
-       "config-env-php-toolow": "PHP $1 دابەزێندرا.\nھەرچۆنێک بێت میدیاویکی پێویستی بە PHP $2 یان بەرزتر ھەیە.",
+       "config-env-php": "PHP $1 دامەزراوە.",
+       "config-apc": "[http://www.php.net/apc APC] دامەزراوە",
+       "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] دامەزراوە",
+       "config-db-type": "جۆری داتابەیس:",
+       "config-db-host": "خانەخوێی داتابەیس:",
        "config-db-name": "ناوی بنکەدراوە:",
+       "config-db-install-account": "ھەژماری بەکارھێنەری بۆ دامەزراندن",
        "config-db-username": "ناوی بەکارھێنەری بنکەدراوە:",
        "config-db-password": "تێپەڕوشەی بنکەدراوە",
        "config-site-name": "ناوی ویکی:",
        "config-ns-generic": "پرۆژە",
+       "config-admin-name": "ناوی بەکارھێنەرییەکەت:",
        "config-admin-password": "تێپەڕوشە:",
+       "config-admin-password-confirm": "دووبارە تێپەڕوشە:",
        "config-admin-email": "ناونیشانی ئیمەیل:",
+       "config-profile-wiki": "ویکیی کراوە",
+       "config-profile-no-anon": "دروستکردنی ھەژمارە پێویستە",
+       "config-profile-fishbowl": "تەنھا دەستکاریکەری ڕێگەپێدراوە",
+       "config-license-pd": "پاوانی گشتی",
+       "config-email-settings": "ڕێکخستنەکانی ئیمەیڵ",
        "config-install-step-done": "کرا",
        "config-help": "یارمەتی",
        "mainpagetext": "'''میدیاویکی بە سەرکەوتوویی دامەزرا.'''",
index 05b0eca..17e0d50 100644 (file)
@@ -93,6 +93,7 @@
        "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-prefix": "Prefisso d' 'a tavolozza d' 'o database:",
        "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-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' '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.",
+       "config-install-updates": "Mpiccià ll'agghiurnamiente ca nun fossero necessarie"
 }
index 9cf7006..bf6cf04 100644 (file)
        "config-mysql-myisam": "MyISAM",
        "config-mysql-myisam-dep": "'''Waarschuwing''': u hebt MyISAM geselecteerd als opslagengine voor MySQL. Dit is niet aan te raden voor MediaWiki omdat:\n* het nauwelijks ondersteuning biedt voor gebruik door meerdere gebruikers tegelijkertijd door het locken van tabellen;\n* het meer vatbaar is voor corruptie dan andere engines;\n* de code van MediaWiki niet alstijd omgaat met MyISAM zoals dat zou moeten.\n\nAls uw installatie van MySQL InnoDB ondersteunt, gebruik dat dan vooral.\nAls uw installatie van MySQL geen ondersteuning heeft voor InnoDB, denk dan na over upgraden.",
        "config-mysql-only-myisam-dep": "'''Waarschuwing:''' MyISAM is enige beschikbare opslagmethode voor MySQL in deze omgeving, en deze wordt niet aangeraden voor gebruik met MediaWiki, omdat:\n* er nauwelijks ondersteuning is voor meerdere gelijktijdige transacties omdat tabellen op slot gezet worden;\n* tabellen makkelijker stuk kunnen gaan;\n* de code van MediaWiki niet altijd op de juiste wijze omgaat met MyISAM.\n\nUw installatie van MySQL heeft geen ondersteuning voor InnoDB. We raden u aan om een meer recente versie te gebruiken.",
-       "config-mysql-engine-help": "'''InnoDB''' is vrijwel altijd de beste instelling, omdat deze goed omgaat met meerdere verzoeken tegelijkertijd.\n\n'''MyISAM''' is bij een zeer beperkt aantal gebruikers mogelijk sneller, of als de wiki alleen-lezen is.\nMyISAM-databases raken vaker corrupt dan InnoDB-databases.",
+       "config-mysql-engine-help": "'''InnoDB''' is vrijwel altijd de beste instelling, omdat deze goed omgaat met meerdere verzoeken tegelijkertijd.\n\n'''MyISAM''' is bij een zeer beperkt aantal gebruikers mogelijk sneller, of als de wiki alleen-lezen is.\nMyISAM-databases raken vaker beschadigd dan InnoDB-databases.",
        "config-mysql-charset": "Tekenset voor de database:",
        "config-mysql-binary": "Binair",
        "config-mysql-utf8": "UTF-8",
index dda5254..f09d101 100644 (file)
@@ -126,7 +126,7 @@ class RunningStat implements Countable {
        }
 
        /**
-        * Get the estimated stanard deviation.
+        * Get the estimated standard deviation.
         *
         * The standard deviation of a statistical population is the square root of
         * its variance. It shows shows how much variation from the mean exists. In
diff --git a/includes/libs/Xhprof.php b/includes/libs/Xhprof.php
new file mode 100644 (file)
index 0000000..1ad01cc
--- /dev/null
@@ -0,0 +1,443 @@
+<?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
+ */
+
+/**
+ * Convenience class for working with XHProf
+ * <https://github.com/phacility/xhprof>. XHProf can be installed as a PECL
+ * package for use with PHP5 (Zend PHP) and is built-in to HHVM 3.3.0.
+ *
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ * @since 1.25
+ */
+class Xhprof {
+
+       /**
+        * @var array $config
+        */
+       protected $config;
+
+       /**
+        * Hierarchical profiling data returned by xhprof.
+        * @var array $hieraData
+        */
+       protected $hieraData;
+
+       /**
+        * Per-function inclusive data.
+        * @var array $inclusive
+        */
+       protected $inclusive;
+
+       /**
+        * Per-function inclusive and exclusive data.
+        * @var array $complete
+        */
+       protected $complete;
+
+       /**
+        * Configuration data can contain:
+        * - flags:   Optional flags to add additional information to the
+        *            profiling data collected.
+        *            (XHPROF_FLAGS_NO_BUILTINS, XHPROF_FLAGS_CPU,
+        *            XHPROF_FLAGS_MEMORY)
+        * - exclude: Array of function names to exclude from profiling.
+        * - include: Array of function names to include in profiling.
+        * - sort:    Key to sort per-function reports on.
+        *
+        * Note: When running under HHVM, xhprof will always behave as though the
+        * XHPROF_FLAGS_NO_BUILTINS flag has been used unless the
+        * Eval.JitEnableRenameFunction option is enabled for the HHVM process.
+        *
+        * @param array $config
+        */
+       public function __construct( array $config = array() ) {
+               $this->config = array_merge(
+                       array(
+                               'flags' => 0,
+                               'exclude' => array(),
+                               'include' => null,
+                               'sort' => 'wt',
+                       ),
+                       $config
+               );
+
+               xhprof_enable( $this->config['flags'], array(
+                       'ignored_functions' => $this->config['exclude']
+               ) );
+       }
+
+       /**
+        * Stop collecting profiling data.
+        *
+        * Only the first invocation of this method will effect the internal
+        * object state. Subsequent calls will return the data collected by the
+        * initial call.
+        *
+        * @return array Collected profiling data (possibly cached)
+        */
+       public function stop() {
+               if ( $this->hieraData === null ) {
+                       $this->hieraData = $this->pruneData( xhprof_disable() );
+               }
+               return $this->hieraData;
+       }
+
+       /**
+        * Load raw data from a prior run for analysis.
+        * Stops any existing data collection and clears internal caches.
+        *
+        * Any 'include' filters configured for this Xhprof instance will be
+        * enforced on the data as it is loaded. 'exclude' filters will however
+        * not be enforced as they are an XHProf intrinsic behavior.
+        *
+        * @param array $data
+        * @see getRawData()
+        */
+       public function loadRawData( array $data ) {
+               $this->stop();
+               $this->inclusive = null;
+               $this->complete = null;
+               $this->hieraData = $this->pruneData( $data );
+       }
+
+       /**
+        * Get raw data collected by xhprof.
+        *
+        * If data collection has not been stopped yet this method will halt
+        * collection to gather the profiling data.
+        *
+        * Each key in the returned array is an edge label for the call graph in
+        * the form "caller==>callee". There is once special case edge labled
+        * simply "main()" which represents the global scope entry point of the
+        * application.
+        *
+        * XHProf will collect different data depending on the flags that are used:
+        * - ct:    Number of matching events seen.
+        * - wt:    Inclusive elapsed wall time for this event in microseconds.
+        * - cpu:   Inclusive elapsed cpu time for this event in microseconds.
+        *          (XHPROF_FLAGS_CPU)
+        * - mu:    Delta of memory usage from start to end of callee in bytes.
+        *          (XHPROF_FLAGS_MEMORY)
+        * - pmu:   Delta of peak memory usage from start to end of callee in
+        *          bytes. (XHPROF_FLAGS_MEMORY)
+        * - alloc: Delta of amount memory requested from malloc() by the callee,
+        *          in bytes. (XHPROF_FLAGS_MALLOC)
+        * - free:  Delta of amount of memory passed to free() by the callee, in
+        *          bytes. (XHPROF_FLAGS_MALLOC)
+        *
+        * @return array
+        * @see stop()
+        * @see getInclusiveMetrics()
+        * @see getCompleteMetrics()
+        */
+       public function getRawData() {
+               return $this->stop();
+       }
+
+       /**
+        * Convert an xhprof data key into an array of ['parent', 'child']
+        * function names.
+        *
+        * The resulting array is left padded with nulls, so a key
+        * with no parent (eg 'main()') will return [null, 'function'].
+        *
+        * @return array
+        */
+       public static function splitKey( $key ) {
+               return array_pad( explode( '==>', $key, 2 ), -2, null );
+       }
+
+       /**
+        * Remove data for functions that are not included in the 'include'
+        * configuration array.
+        *
+        * @param array $data Raw xhprof data
+        * @return array
+        */
+       protected function pruneData( $data ) {
+               if ( !$this->config['include'] ) {
+                       return $data;
+               }
+
+               $want = array_fill_keys( $this->config['include'], true );
+               $want['main()'] = true;
+
+               $keep = array();
+               foreach ( $data as $key => $stats ) {
+                       list( $parent, $child ) = self::splitKey( $key );
+                       if ( isset( $want[$parent] ) || isset( $want[$child] ) ) {
+                               $keep[$key] = $stats;
+                       }
+               }
+               return $keep;
+       }
+
+       /**
+        * Get the inclusive metrics for each function call. Inclusive metrics
+        * for given function include the metrics for all functions that were
+        * called from that function during the measurement period.
+        *
+        * If data collection has not been stopped yet this method will halt
+        * collection to gather the profiling data.
+        *
+        * See getRawData() for a description of the metric that are returned for
+        * each funcition call. The values for the wt, cpu, mu and pmu metrics are
+        * arrays with these values:
+        * - total: Cumulative value
+        * - min: Minimum value
+        * - mean: Mean (average) value
+        * - max: Maximum value
+        * - variance: Variance (spread) of the values
+        *
+        * @return array
+        * @see getRawData()
+        * @see getCompleteMetrics()
+        */
+       public function getInclusiveMetrics() {
+               if ( $this->inclusive === null ) {
+                       // Make sure we have data to work with
+                       $this->stop();
+
+                       $main = $this->hieraData['main()'];
+                       $hasCpu = isset( $main['cpu'] );
+                       $hasMu = isset( $main['mu'] );
+                       $hasAlloc = isset( $main['alloc'] );
+
+                       $this->inclusive = array();
+                       foreach ( $this->hieraData as $key => $stats ) {
+                               list( $parent, $child ) = self::splitKey( $key );
+                               if ( !isset( $this->inclusive[$child] ) ) {
+                                       $this->inclusive[$child] = array(
+                                               'ct' => 0,
+                                               'wt' => new RunningStat(),
+                                       );
+                                       if ( $hasCpu ) {
+                                               $this->inclusive[$child]['cpu'] = new RunningStat();
+                                       }
+                                       if ( $hasMu ) {
+                                               $this->inclusive[$child]['mu'] = new RunningStat();
+                                               $this->inclusive[$child]['pmu'] = new RunningStat();
+                                       }
+                                       if ( $hasAlloc ) {
+                                               $this->inclusive[$child]['alloc'] = new RunningStat();
+                                               $this->inclusive[$child]['free'] = new RunningStat();
+                                       }
+                               }
+
+                               $this->inclusive[$child]['ct'] += $stats['ct'];
+                               foreach ( $stats as $stat => $value ) {
+                                       if ( $stat === 'ct' ) {
+                                               continue;
+                                       }
+
+                                       if ( !isset( $this->inclusive[$child][$stat] ) ) {
+                                               // Ignore unknown stats
+                                               continue;
+                                       }
+
+                                       for ( $i = 0; $i < $stats['ct']; $i++ ) {
+                                               $this->inclusive[$child][$stat]->push(
+                                                       $value / $stats['ct']
+                                               );
+                                       }
+                               }
+                       }
+
+                       // Convert RunningStat instances to static arrays and add
+                       // percentage stats.
+                       foreach ( $this->inclusive as $func => $stats ) {
+                               foreach ( $stats as $name => $value ) {
+                                       if ( $value instanceof RunningStat ) {
+                                               $total = $value->m1 * $value->n;
+                                               $this->inclusive[$func][$name] = array(
+                                                       'total' => $total,
+                                                       'min' => $value->min,
+                                                       'mean' => $value->m1,
+                                                       'max' => $value->max,
+                                                       'variance' => $value->m2,
+                                                       'percent' => 100 * $total / $main[$name],
+                                               );
+                                       }
+                               }
+                       }
+
+                       uasort( $this->inclusive, self::makeSortFunction(
+                               $this->config['sort'], 'total'
+                       ) );
+               }
+               return $this->inclusive;
+       }
+
+       /**
+        * Get the inclusive and exclusive metrics for each function call.
+        *
+        * If data collection has not been stopped yet this method will halt
+        * collection to gather the profiling data.
+        *
+        * In addition to the normal data contained in the inclusive metrics, the
+        * metrics have an additional 'exclusive' measurement which is the total
+        * minus the totals of all child function calls.
+        *
+        * @return array
+        * @see getRawData()
+        * @see getInclusiveMetrics()
+        */
+       public function getCompleteMetrics() {
+               if ( $this->complete === null ) {
+                       // Start with inclusive data
+                       $this->complete = $this->getInclusiveMetrics();
+
+                       foreach ( $this->complete as $func => $stats ) {
+                               foreach ( $stats as $stat => $value ) {
+                                       if ( $stat === 'ct' ) {
+                                               continue;
+                                       }
+                                       // Initialize exclusive data with inclusive totals
+                                       $this->complete[$func][$stat]['exclusive'] = $value['total'];
+                               }
+                               // Add sapce for call tree information to be filled in later
+                               $this->complete[$func]['calls'] = array();
+                               $this->complete[$func]['subcalls'] = array();
+                       }
+
+                       foreach( $this->hieraData as $key => $stats ) {
+                               list( $parent, $child ) = self::splitKey( $key );
+                               if ( $parent !== null ) {
+                                       // Track call tree information
+                                       $this->complete[$child]['calls'][$parent] = $stats;
+                                       $this->complete[$parent]['subcalls'][$child] = $stats;
+                               }
+
+                               if ( isset( $this->complete[$parent] ) ) {
+                                       // Deduct child inclusive data from exclusive data
+                                       foreach ( $stats as $stat => $value ) {
+                                               if ( $stat === 'ct' ) {
+                                                       continue;
+                                               }
+
+                                               if ( !isset( $this->complete[$parent][$stat] ) ) {
+                                                       // Ignore unknown stats
+                                                       continue;
+                                               }
+
+                                               $this->complete[$parent][$stat]['exclusive'] -= $value;
+                                       }
+                               }
+                       }
+
+                       uasort( $this->complete, self::makeSortFunction(
+                               $this->config['sort'], 'exclusive'
+                       ) );
+               }
+               return $this->complete;
+       }
+
+       /**
+        * Get a list of all callers of a given function.
+        *
+        * @param string $function Function name
+        * @return array
+        * @see getEdges()
+        */
+       public function getCallers( $function ) {
+               $edges = $this->getCompleteMetrics();
+               if ( isset( $edges[$function]['calls'] ) ) {
+                       return array_keys( $edges[$function]['calls'] );
+               } else {
+                       return array();
+               }
+       }
+
+       /**
+        * Get a list of all callees from a given function.
+        *
+        * @param string $function Function name
+        * @return array
+        * @see getEdges()
+        */
+       public function getCallees( $function ) {
+               $edges = $this->getCompleteMetrics();
+               if ( isset( $edges[$function]['subcalls'] ) ) {
+                       return array_keys( $edges[$function]['subcalls'] );
+               } else {
+                       return array();
+               }
+       }
+
+       /**
+        * Find the critical path for the given metric.
+        *
+        * @param string $metric Metric to find critical path for
+        * @return array
+        */
+       public function getCriticalPath( $metric = 'wt' ) {
+               $this->stop();
+               $func = 'main()';
+               $path = array(
+                       $func => $this->hieraData[$func],
+               );
+               while ( $func ) {
+                       $callees = $this->getCallees( $func );
+                       $maxCallee = null;
+                       $maxCall = null;
+                       foreach ( $callees as $callee ) {
+                               $call = "{$func}==>{$callee}";
+                               if ( $maxCall === null ||
+                                       $this->hieraData[$call][$metric] >
+                                               $this->hieraData[$maxCall][$metric]
+                               ) {
+                                       $maxCallee = $callee;
+                                       $maxCall = $call;
+                               }
+                       }
+                       if ( $maxCall !== null ) {
+                               $path[$maxCall] = $this->hieraData[$maxCall];
+                       }
+                       $func = $maxCallee;
+               }
+               return $path;
+       }
+
+       /**
+        * Make a closure to use as a sort function. The resulting function will
+        * sort by descending numeric values (largest value first).
+        *
+        * @param string $key Data key to sort on
+        * @param string $sub Sub key to sort array values on
+        * @return Closure
+        */
+       public static function makeSortFunction( $key, $sub ) {
+               return function ( $a, $b ) use ( $key, $sub ) {
+                       if ( isset( $a[$key] ) && isset( $b[$key] ) ) {
+                               // Descending sort: larger values will be first in result.
+                               // Assumes all values are numeric.
+                               // Values for 'main()' will not have sub keys
+                               $valA = is_array( $a[$key] ) ? $a[$key][$sub] : $a[$key];
+                               $valB = is_array( $b[$key] ) ? $b[$key][$sub] : $b[$key];
+                               return $valB - $valA;
+                       } else {
+                               // Sort datum with the key before those without
+                               return isset( $a[$key] ) ? -1 : 1;
+                       }
+               };
+       }
+}
index bc9e917..d9327fb 100644 (file)
@@ -348,9 +348,9 @@ class ThumbnailImage extends MediaTransformOutput {
                        throw new MWException( __METHOD__ . ' called in the old style' );
                }
 
-               $alt = empty( $options['alt'] ) ? '' : $options['alt'];
+               $alt = isset( $options['alt'] ) ? $options['alt'] : '';
 
-               $query = empty( $options['desc-query'] ) ? '' : $options['desc-query'];
+               $query = isset( $options['desc-query'] ) ? $options['desc-query'] : '';
 
                if ( !empty( $options['custom-url-link'] ) ) {
                        $linkAttribs = array( 'href' => $options['custom-url-link'] );
index cdf8da1..40b40d1 100644 (file)
@@ -49,7 +49,7 @@ class ObjectCacheSessionHandler {
 
        /**
         * Get the cache storage object to use for session storage
-        * @return ObjectCache
+        * @return BagOStuff
         */
        static function getCache() {
                global $wgSessionCacheType;
index cd804b5..d310836 100644 (file)
@@ -224,6 +224,9 @@ class Parser {
         */
        public $mInParse = false;
 
+       /** @var SectionProfiler */
+       protected $mProfiler;
+
        /**
         * @param array $conf
         */
@@ -365,6 +368,8 @@ class Parser {
                        $this->mPreprocessor = null;
                }
 
+               $this->mProfiler = new SectionProfiler();
+
                wfRunHooks( 'ParserClearState', array( &$this ) );
                wfProfileOut( __METHOD__ );
        }
@@ -526,6 +531,19 @@ class Parser {
                        $limitReport = str_replace( array( '-', '&' ), array( '‐', '&amp;' ), $limitReport );
                        $text .= "\n<!-- \n$limitReport-->\n";
 
+                       // Add on template profiling data
+                       $dataByFunc = $this->mProfiler->getFunctionStats();
+                       uasort( $dataByFunc, function( $a, $b ) {
+                               return $a['elapsed'] < $b['elapsed']; // descending order
+                       } );
+                       $profileReport = "Top template expansion time report (%,ms,calls,template)\n";
+                       foreach ( array_slice( $dataByFunc, 0, 10 ) as $item ) {
+                               $profileReport .= sprintf( "%6.2f%% %3.6f %6d - %s\n",
+                                       $item['percent'], $item['elapsed'], $item['calls'],
+                                       htmlspecialchars($item['name'] ) );
+                       }
+                       $text .= "\n<!-- \n$profileReport-->\n";
+
                        if ( $this->mGeneratedPPNodeCount > $this->mOptions->getMaxGeneratedPPNodeCount() / 10 ) {
                                wfDebugLog( 'generated-pp-node-count', $this->mGeneratedPPNodeCount . ' ' .
                                        $this->mTitle->getPrefixedDBkey() );
@@ -3473,7 +3491,7 @@ class Parser {
                $args = ( null == $piece['parts'] ) ? array() : $piece['parts'];
                wfProfileOut( __METHOD__ . '-setup' );
 
-               $titleProfileIn = null; // profile templates
+               $profileSection = null; // profile templates
 
                # SUBST
                wfProfileIn( __METHOD__ . '-modifiers' );
@@ -3594,11 +3612,7 @@ class Parser {
 
                # Load from database
                if ( !$found && $title ) {
-                       if ( !Profiler::instance()->isPersistent() ) {
-                               # Too many unique items can kill profiling DBs/collectors
-                               $titleProfileIn = __METHOD__ . "-title-" . $title->getPrefixedDBkey();
-                               wfProfileIn( $titleProfileIn ); // template in
-                       }
+                       $profileSection = $this->mProfiler->scopedProfileIn( $title->getPrefixedDBkey() );
                        wfProfileIn( __METHOD__ . '-loadtpl' );
                        if ( !$title->isExternal() ) {
                                if ( $title->isSpecialPage()
@@ -3680,8 +3694,8 @@ class Parser {
                # Recover the source wikitext and return it
                if ( !$found ) {
                        $text = $frame->virtualBracketedImplode( '{{', '|', '}}', $titleWithSpaces, $args );
-                       if ( $titleProfileIn ) {
-                               wfProfileOut( $titleProfileIn ); // template out
+                       if ( $profileSection ) {
+                               $this->mProfiler->scopedProfileOut( $profileSection );
                        }
                        wfProfileOut( __METHOD__ );
                        return array( 'object' => $text );
@@ -3707,8 +3721,8 @@ class Parser {
                        $isLocalObj = false;
                }
 
-               if ( $titleProfileIn ) {
-                       wfProfileOut( $titleProfileIn ); // template out
+               if ( $profileSection ) {
+                       $this->mProfiler->scopedProfileOut( $profileSection );
                }
 
                # Replace raw HTML by a placeholder
index 4c12b10..078b66b 100644 (file)
@@ -80,18 +80,6 @@ abstract class Profiler {
         */
        abstract public function isStub();
 
-       /**
-        * Return whether this profiler stores data
-        *
-        * Called by Parser::braceSubstitution. If true, the parser will not
-        * generate per-title profiling sections, to avoid overloading the
-        * profiling data collector.
-        *
-        * @see Profiler::logData()
-        * @return bool
-        */
-       abstract public function isPersistent();
-
        /**
         * @param string $id
         */
@@ -159,6 +147,8 @@ abstract class Profiler {
        abstract public function getOutput();
 
        /**
+        * Get data for the debugging toolbar.
+        *
         * @return array
         */
        abstract public function getRawData();
index 3625db6..911b926 100644 (file)
  * @ingroup Profiler
  */
 class ProfilerSimpleDB extends ProfilerStandard {
-       public function isPersistent() {
-               return true;
-       }
-
        /**
         * Log the whole profiling data into the database.
         */
index 2671376..ad16a18 100644 (file)
  * @ingroup Profiler
  */
 class ProfilerSimpleUDP extends ProfilerStandard {
-       public function isPersistent() {
-               return true;
-       }
-
        public function logData() {
                global $wgUDPProfilerHost, $wgUDPProfilerPort, $wgUDPProfilerFormatString;
 
index 4825f7a..b873806 100644 (file)
@@ -47,11 +47,14 @@ class ProfilerStandard extends Profiler {
 
        /**
         * @param array $params
+        *   - initTotal : set to false to omit -total/-setup entries (which use request start time)
         */
        public function __construct( array $params ) {
                parent::__construct( $params );
 
-               $this->addInitialStack();
+               if ( !isset( $params['initTotal'] ) || $params['initTotal'] ) {
+                       $this->addInitialStack();
+               }
        }
 
        /**
@@ -63,16 +66,6 @@ class ProfilerStandard extends Profiler {
                return false;
        }
 
-       /**
-        * Return whether this profiler stores data
-        *
-        * @see Profiler::logData()
-        * @return bool
-        */
-       public function isPersistent() {
-               return false;
-       }
-
        /**
         * Add the inital item in the stack.
         */
index e81f579..43e2193 100644 (file)
@@ -31,10 +31,6 @@ class ProfilerStub extends Profiler {
                return true;
        }
 
-       public function isPersistent() {
-               return false;
-       }
-
        public function profileIn( $fn ) {
        }
 
diff --git a/includes/profiler/ProfilerXhprof.php b/includes/profiler/ProfilerXhprof.php
new file mode 100644 (file)
index 0000000..5e70aa9
--- /dev/null
@@ -0,0 +1,477 @@
+<?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
+ */
+
+/**
+ * Profiler wrapper for XHProf extension.
+ *
+ * Mimics the output of ProfilerSimpleText, ProfilerSimpleUDP or
+ * ProfilerSimpleTrace but using data collected via the XHProf PHP extension.
+ * This Profiler also produces data compatable with the debugging toolbar.
+ *
+ * To mimic ProfilerSimpleText results:
+ * @code
+ * $wgProfiler['class'] = 'ProfilerXhprof';
+ * $wgProfiler['flags'] = XHPROF_FLAGS_NO_BUILTINS;
+ * $wgProfiler['log'] = 'text';
+ * $wgProfiler['visible'] = true;
+ * @endcode
+ *
+ * To mimic ProfilerSimpleUDP results:
+ * @code
+ * $wgProfiler['class'] = 'ProfilerXhprof';
+ * $wgProfiler['flags'] = XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_NO_BUILTINS;
+ * $wgProfiler['log'] = 'udpprofile';
+ * @endcode
+ *
+ * Similar to ProfilerSimpleTrace results, report the most expensive path
+ * through the application:
+ * @code
+ * $wgProfiler['class'] = 'ProfilerXhprof';
+ * $wgProfiler['flags'] = XHPROF_FLAGS_NO_BUILTINS;
+ * $wgProfiler['log'] = 'critpath';
+ * $wgProfiler['visible'] = true;
+ * @endcode
+ *
+ * Rather than obeying wfProfileIn() and wfProfileOut() calls placed in the
+ * application code, ProfilerXhprof profiles all functions using the XHProf
+ * PHP extenstion. For PHP5 users, this extension can be installed via PECL or
+ * your operating system's package manager. XHProf support is built into HHVM.
+ *
+ * To restrict the functions for which profiling data is collected, you can
+ * use either a whitelist ($wgProfiler['include']) or a blacklist
+ * ($wgProfiler['exclude']) containing an array of function names. The
+ * blacklist funcitonality is built into HHVM and will completely exclude the
+ * named functions from profiling collection. The whitelist is implemented by
+ * Xhprof class and will filter the data collected by XHProf before reporting.
+ * See documentation for the Xhprof class and the XHProf extension for
+ * additional information.
+ *
+ * Data reported to debug toolbar via getRawData() can be restricted by
+ * setting $wgProfiler['toolbarCutoff'] to a minumum cumulative wall clock
+ * percentage. Functions in the call graph which contribute less than this
+ * percentage to the total wall clock time measured will be excluded from the
+ * data sent to debug toolbar. The default cutoff is 0.1 (1/1000th of the
+ * total time measured).
+ *
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ * @ingroup Profiler
+ * @see Xhprof
+ * @see https://php.net/xhprof
+ * @see https://github.com/facebook/hhvm/blob/master/hphp/doc/profiling.md
+ */
+class ProfilerXhprof extends Profiler {
+
+       /**
+        * @var Xhprof $xhprof
+        */
+       protected $xhprof;
+
+       /**
+        * Type of report to send when logData() is called.
+        * @var string $logType
+        */
+       protected $logType;
+
+       /**
+        * Should profile report sent to in page content be visible?
+        * @var bool $visible
+        */
+       protected $visible;
+
+       /**
+        * Minimum wall time precentage for a fucntion to be reported to the debug
+        * toolbar via getRawData().
+        * @var float $toolbarCutoff
+        */
+       protected $toolbarCutoff;
+
+       /**
+        * @param array $params
+        * @see Xhprof::__construct()
+        */
+       public function __construct( array $params = array() ) {
+               $params = array_merge(
+                       array(
+                               'log' => 'text',
+                               'visible' => false,
+                               'toolbarCutoff' => 0.1,
+                       ),
+                       $params
+               );
+               parent::__construct( $params );
+               $this->logType = $params['log'];
+               $this->visible = $params['visible'];
+               $this->xhprof = new Xhprof( $params );
+       }
+
+       public function isStub() {
+               return false;
+       }
+
+       /**
+        * No-op for xhprof profiling.
+        *
+        * Use the 'include' configuration key instead if you need to constrain
+        * the functions that are profiled.
+        *
+        * @param string $functionname
+        */
+       public function profileIn( $functionname ) {
+               global $wgDebugFunctionEntry;
+               if ( $wgDebugFunctionEntry ) {
+                       $this->debug( "Entering {$functionname}" );
+               }
+       }
+
+       /**
+        * No-op for xhprof profiling.
+        *
+        * Use the 'include' configuration key instead if you need to constrain
+        * the functions that are profiled.
+        *
+        * @param string $functionname
+        */
+       public function profileOut( $functionname ) {
+               global $wgDebugFunctionEntry;
+               if ( $wgDebugFunctionEntry ) {
+                       $this->debug( "Exiting {$functionname}" );
+               }
+       }
+
+       /**
+        * No-op for xhprof profiling.
+        */
+       public function close() {
+       }
+
+       /**
+        * Get data for the debugging toolbar.
+        *
+        * @return array
+        * @see https://www.mediawiki.org/wiki/Debugging_toolbar
+        */
+       public function getRawData() {
+               $metrics = $this->xhprof->getCompleteMetrics();
+               $endEpoch = $this->getTime();
+               $profile = array();
+
+               foreach ( $metrics as $fname => $stats ) {
+                       if ( $stats['wt']['percent'] < $this->toolbarCutoff ) {
+                               // Ignore functions which are not significant contributors
+                               // to the total elapsed time.
+                               continue;
+                       }
+
+                       $record = array(
+                               'name' => $fname,
+                               'calls' => $stats['ct'],
+                               'elapsed' => $stats['wt']['total'] / 1000,
+                               'percent' => $stats['wt']['percent'],
+                               'memory' => isset( $stats['mu'] ) ? $stats['mu']['total'] : 0,
+                               'min' => $stats['wt']['min'] / 1000,
+                               'max' => $stats['wt']['max'] / 1000,
+                               'overhead' => array_reduce(
+                                       $stats['subcalls'],
+                                       function( $carry, $item ) {
+                                               return $carry + $item['ct'];
+                                       },
+                                       0
+                               ),
+                               'periods' => array(),
+                       );
+
+                       // We are making up periods based on the call segments we have.
+                       // What we don't have is the start time for each call (which
+                       // actually may be a collection of multiple calls from the
+                       // caller). We will pretend that all the calls happen sequentially
+                       // and finish at the end of the end of the request.
+                       foreach ( $stats['calls'] as $call ) {
+                               $avgElapsed = $call['wt'] / 1000 / $call['ct'];
+                               $avgMem = isset( $call['mu'] ) ? $call['mu'] / $call['ct'] : 0;
+                               $start = $endEpoch - $avgElapsed;
+                               for ( $i = 0; $i < $call['ct']; $i++ ) {
+                                       $callStart = $start + ( $avgElapsed * $i );
+                                       $record['periods'][] = array(
+                                               'start' => $callStart,
+                                               'end' => $callStart + $avgElapsed,
+                                               'memory' => $avgMem,
+                                               'subcalls' => 0,
+                                       );
+                               }
+                       }
+
+                       $profile[] = $record;
+               }
+               return $profile;
+       }
+
+       /**
+        * Log the data to some store or even the page output.
+        */
+       public function logData() {
+               if ( $this->logType === 'text' ) {
+                       $this->logText();
+               } elseif ( $this->logType === 'udpprofile' ) {
+                       $this->logToUdpprofile();
+               } elseif ( $this->logType === 'critpath' ){
+                       $this->logCriticalPath();
+               } else {
+                       wfLogWarning(
+                               "Unknown ProfilerXhprof log type '{$this->logType}'"
+                       );
+               }
+       }
+
+       /**
+        * Write a brief profile report to stdout.
+        */
+       protected function logText() {
+               if ( $this->templated ) {
+                       $ct = $this->getContentType();
+                       if ( $ct === 'text/html' && $this->visible ) {
+                               $prefix = '<pre>';
+                               $suffix = '</pre>';
+                       } elseif ( $ct === 'text/javascript' || $ct === 'text/css' ) {
+                               $prefix = "\n/*";
+                               $suffix = "*/\n";
+                       } else {
+                               $prefix = "<!--";
+                               $suffix = "-->\n";
+                       }
+
+                       print $this->getSummaryReport( $prefix, $suffix );
+               }
+       }
+
+       /**
+        * Send collected information to a udpprofile daemon.
+        *
+        * @see http://git.wikimedia.org/tree/operations%2Fsoftware.git/master/udpprofile
+        * @see $wgUDPProfilerHost
+        * @see $wgUDPProfilerPort
+        * @see $wgUDPProfilerFormatString
+        */
+       protected function logToUdpprofile() {
+               global $wgUDPProfilerHost, $wgUDPProfilerPort;
+               global $wgUDPProfilerFormatString;
+
+               if ( !function_exists( 'socket_create' ) ) {
+                       return;
+               }
+
+               $metrics = $this->xhprof->getInclusiveMetrics();
+
+               $sock = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
+               $buffer = '';
+               $bufferSize = 0;
+               foreach ( $metrics as $func => $data ) {
+                       if ( strpos( $func, '@' ) !== false ) {
+                               continue; // ignore cyclic re-entries to functions
+                       }
+                       $line = sprintf( $wgUDPProfilerFormatString,
+                               $this->getProfileID(),
+                               $data['ct'],
+                               isset( $data['cpu'] ) ? $data['cpu']['total'] : 0,
+                               isset( $data['cpu'] ) ? $data['cpu']['variance'] : 0,
+                               $data['wt']['total'] / 1000,
+                               $data['wt']['variance'],
+                               $func,
+                               isset( $data['mu'] ) ? $data['mu']['total'] : 0
+                       );
+                       $lineLength = strlen( $line );
+                       if ( $lineLength + $bufferSize > 1400 ) {
+                               // Line would exceed max packet size, send packet before
+                               // appending to buffer.
+                               socket_sendto( $sock, $buffer, $bufferSize, 0,
+                                       $wgUDPProfilerHost, $wgUDPProfilerPort
+                               );
+                               $buffer = '';
+                               $bufferSize = 0;
+                       }
+                       $buffer .= $line;
+                       $bufferSize += $lineLength;
+               }
+               // Send final buffer
+               socket_sendto( $sock, $buffer, $bufferSize, 0x100 /* EOF */,
+                       $wgUDPProfilerHost, $wgUDPProfilerPort
+               );
+       }
+
+       /**
+        * Write a critical path report to stdout.
+        */
+       protected function logCriticalPath() {
+               if ( $this->templated ) {
+                       $ct = $this->getContentType();
+                       if ( $ct === 'text/html' && $this->visible ) {
+                               $prefix = '<pre>Critical path:';
+                               $suffix = '</pre>';
+                       } elseif ( $ct === 'text/javascript' || $ct === 'text/css' ) {
+                               $prefix = "\n/* Critical path:";
+                               $suffix = "*/\n";
+                       } else {
+                               $prefix = "<!-- Critical path:";
+                               $suffix = "-->\n";
+                       }
+
+                       print $this->getCriticalPathReport( $prefix, $suffix );
+               }
+       }
+
+       /**
+        * Get the content type of the current request.
+        * @return string
+        */
+       protected function getContentType() {
+               foreach ( headers_list() as $header ) {
+                       if ( preg_match( '#^content-type: (\w+/\w+);?#i', $header, $m ) ) {
+                               return $m[1];
+                       }
+               }
+               return 'application/octet-stream';
+       }
+
+       /**
+        * Returns a profiling output to be stored in debug file
+        *
+        * @return string
+        */
+       public function getOutput() {
+               return $this->getFunctionReport();
+       }
+
+       /**
+        * Get a report of profiled functions sorted by inclusive wall clock time
+        * in descending order.
+        *
+        * Each line of the report includes this data:
+        * - Function name
+        * - Number of times function was called
+        * - Total wall clock time spent in function in microseconds
+        * - Minimum wall clock time spent in function in microseconds
+        * - Average wall clock time spent in function in microseconds
+        * - Maximum wall clock time spent in function in microseconds
+        * - Percentage of total wall clock time spent in function
+        * - Total delta of memory usage from start to end of function in bytes
+        *
+        * @return string
+        */
+       protected function getFunctionReport() {
+               $data = $this->xhprof->getInclusiveMetrics();
+               uasort( $data, Xhprof::makeSortFunction( 'wt', 'total' ) );
+
+               $width = 140;
+               $nameWidth = $width - 65;
+               $format = "%-{$nameWidth}s %6d %9d %9d %9d %9d %7.3f%% %9d";
+               $out = array();
+               $out[] = sprintf( "%-{$nameWidth}s %6s %9s %9s %9s %9s %7s %9s",
+                       'Name', 'Calls', 'Total', 'Min', 'Each', 'Max', '%', 'Mem'
+               );
+               foreach ( $data as $func => $stats ) {
+                       $out[] = sprintf( $format,
+                               $func,
+                               $stats['ct'],
+                               $stats['wt']['total'],
+                               $stats['wt']['min'],
+                               $stats['wt']['mean'],
+                               $stats['wt']['max'],
+                               $stats['wt']['percent'],
+                               isset( $stats['mu'] ) ? $stats['mu']['total'] : 0
+                       );
+               }
+               return implode( "\n", $out );
+       }
+
+       /**
+        * Get a brief report of profiled functions sorted by inclusive wall clock
+        * time in descending order.
+        *
+        * Each line of the report includes this data:
+        * - Percentage of total wall clock time spent in function
+        * - Total wall clock time spent in function in seconds
+        * - Number of times function was called
+        * - Function name
+        *
+        * @param string $header Header text to prepend to report
+        * @param string $footer Footer text to append to report
+        * @return string
+        */
+       protected function getSummaryReport( $header = '', $footer = '' ) {
+               $data = $this->xhprof->getInclusiveMetrics();
+               uasort( $data, Xhprof::makeSortFunction( 'wt', 'total' ) );
+
+               $format = '%6.2f%% %3.6f %6d - %s';
+               $out = array( $header );
+               foreach ( $data as $func => $stats ) {
+                       $out[] = sprintf( $format,
+                               $stats['wt']['percent'],
+                               $stats['wt']['total'] / 1e6,
+                               $stats['ct'],
+                               $func
+                       );
+               }
+               $out[] = $footer;
+               return implode( "\n", $out );
+       }
+
+       /**
+        * Get a brief report of the most costly code path by wall clock time.
+        *
+        * Each line of the report includes this data:
+        * - Total wall clock time spent in function in seconds
+        * - Function name
+        *
+        * @param string $header Header text to prepend to report
+        * @param string $footer Footer text to append to report
+        * @return string
+        */
+       protected function getCriticalPathReport( $header = '', $footer = '' ) {
+               $data = $this->xhprof->getCriticalPath();
+
+               $out = array( $header );
+               $out[] = sprintf( "%7s %9s %9s %6s %4s",
+                       'Time%', 'Time', 'Mem', 'Calls', 'Name'
+               );
+
+               $format = '%6.2f%% %9.6f %9d %6d %s%s';
+               $total = null;
+               $nest = 0;
+               foreach ( $data as $key => $stats ) {
+                       list( $parent, $child ) = Xhprof::splitKey( $key );
+                       if ( $total === null ) {
+                               $total = $stats;
+                       }
+                       $out[] = sprintf( $format,
+                               100 * $stats['wt'] / $total['wt'],
+                               $stats['wt'] / 1e6,
+                               isset( $stats['mu'] ) ? $stats['mu'] : 0,
+                               $stats['ct'],
+                               //$nest ? str_repeat( ' ', $nest - 1 ) . '┗ ' : '',
+                               $nest ? str_repeat( ' ', $nest - 1 ) . '└─' : '',
+                               $child
+                       );
+                       $nest++;
+               }
+               $out[] = $footer;
+               return implode( "\n", $out );
+       }
+}
diff --git a/includes/profiler/SectionProfiler.php b/includes/profiler/SectionProfiler.php
new file mode 100644 (file)
index 0000000..a418d30
--- /dev/null
@@ -0,0 +1,108 @@
+<?php
+/**
+ * Arbitrary section name based PHP 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
+ */
+
+/**
+ * Custom PHP profiler for parser/DB type section names that xhprof/xdebug can't handle
+ *
+ * @TODO: refactor implementation by moving Profiler code to here when non-automatic
+ * profiler support is dropped.
+ *
+ * @since 1.25
+ */
+class SectionProfiler {
+       /** @var ProfilerStandard */
+       protected $profiler;
+
+       public function __construct() {
+               // This does *not* care about PHP request start time
+               $this->profiler = new ProfilerStandard( array( 'initTotal' => false ) );
+       }
+
+       /**
+        * @param string $section
+        * @return ScopedCallback
+        */
+       public function scopedProfileIn( $section ) {
+               $profiler = $this->profiler;
+               $sc = new ScopedCallback( function() use ( $profiler, $section ) {
+                       $profiler->profileOut( $section );
+               } );
+               $profiler->profileIn( $section );
+
+               return $sc;
+       }
+
+       /**
+        * @param ScopedCallback $section
+        */
+       public function scopedProfileOut( ScopedCallback &$section ) {
+               $section = null;
+       }
+
+       /**
+        * Get the raw and collated breakdown data for each method
+        *
+        * The percent time for each time is based on the current "total" time
+        * used is based on all methods so far. This method can therefore be
+        * called several times in between several profiling calls without the
+        * delays in usage of the profiler skewing the results. A "-total" entry
+        * is always included in the results.
+        *
+        * @return array List of method entries arrays, each having:
+        *   - name     : method name
+        *   - calls    : the number of method calls
+        *   - elapsed  : real time ellapsed (ms)
+        *   - percent  : percent real time
+        *   - memory   : memory used (bytes)
+        *   - min      : min real time of all calls (ms)
+        *   - max      : max real time of all calls (ms)
+        */
+       public function getFunctionStats() {
+               $data = $this->profiler->getRawData();
+
+               $memoryTotal = 0;
+               $elapsedTotal = 0;
+               foreach ( $data as $item ) {
+                       $memoryTotal += $item['memory'];
+                       $elapsedTotal += $item['elapsed'];
+               }
+
+               foreach ( $data as &$item ) {
+                       $item['percent'] = $item['elapsed'] / $elapsedTotal * 100;
+               }
+               unset( $item );
+
+               $data[] = array(
+                       'name' => '-total',
+                       'calls' => 1,
+                       'elapsed' => $elapsedTotal,
+                       'percent' => 100,
+                       'memory' => $memoryTotal,
+                       'min' => $elapsedTotal,
+                       'max' => $elapsedTotal
+               );
+
+               return $data;
+       }
+}
index 272d533..c837d1a 100644 (file)
@@ -59,7 +59,7 @@ abstract class ImageQueryPage extends QueryPage {
                                }
                        }
 
-                       $out->addHTML( $gallery->toHtml() );
+                       $out->addHTML( $gallery->toHTML() );
                }
        }
 
index 2d6213a..05c89c2 100644 (file)
@@ -285,24 +285,6 @@ class LinkSearchPage extends QueryPage {
                return $this->msg( 'linksearch-line' )->rawParams( $urlLink, $pageLink )->escaped();
        }
 
-       /**
-        * Override to check query validity.
-        *
-        * @param mixed $offset Numerical offset or false for no offset
-        * @param mixed $limit Numerical limit or false for no limit
-        */
-       function doQuery( $offset = false, $limit = false ) {
-               list( $this->mMungedQuery, ) = LinkSearchPage::mungeQuery( $this->mQuery, $this->mProt );
-               if ( $this->mMungedQuery === false ) {
-                       $this->getOutput()->addWikiMsg( 'linksearch-error' );
-               } else {
-                       // For debugging
-                       // Generates invalid xhtml with patterns that contain --
-                       //$this->getOutput()->addHTML( "\n<!-- " . htmlspecialchars( $this->mMungedQuery ) . " -->\n" );
-                       parent::doQuery( $offset, $limit );
-               }
-       }
-
        /**
         * Override to squash the ORDER BY.
         * We do a truncated index search, so the optimizer won't trust
index e6d8f1c..58b51b3 100644 (file)
@@ -440,11 +440,11 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                $message = $this->msg( 'recentchangestext' )->inContentLanguage();
                if ( !$message->isDisabled() ) {
                        $this->getOutput()->addWikiText(
-                               Html::rawElement( 'p',
-                                       array( 'lang' => $wgContLang->getCode(), 'dir' => $wgContLang->getDir() ),
+                               Html::rawElement( 'div',
+                                       array( 'lang' => $wgContLang->getHtmlCode(), 'dir' => $wgContLang->getDir() ),
                                        "\n" . $message->plain() . "\n"
                                ),
-                               /* $lineStart */ false,
+                               /* $lineStart */ true,
                                /* $interface */ false
                        );
                }
index 77ad9aa..ccc5dea 100644 (file)
@@ -732,7 +732,7 @@ class SpecialUpload extends SpecialPage {
 
                return '<li>' .
                        wfMessage( 'file-exists-duplicate' )->numParams( count( $dupes ) )->parse() .
-                       $gallery->toHtml() . "</li>\n";
+                       $gallery->toHTML() . "</li>\n";
        }
 
        protected function getGroupName() {
index b6a3be2..2eefd0a 100644 (file)
@@ -527,20 +527,8 @@ class LoginForm extends SpecialPage {
                        return Status::newFatal( 'sorbs_create_account_reason' );
                }
 
-               // Normalize the name so that silly things don't cause "invalid username"
-               // errors. User::newFromName does some rather strict checking, rejecting
-               // e.g. leading/trailing/multiple spaces. But first we need to reject
-               // usernames that would be treated as titles with a fragment part.
-               if ( strpos( $this->mUsername, '#' ) !== false ) {
-                       return Status::newFatal( 'noname' );
-               }
-               $title = Title::makeTitleSafe( NS_USER, $this->mUsername );
-               if ( !is_object( $title ) ) {
-                       return Status::newFatal( 'noname' );
-               }
-
                # Now create a dummy user ($u) and check if it is valid
-               $u = User::newFromName( $title->getText(), 'creatable' );
+               $u = User::newFromName( $this->mUsername, 'creatable' );
                if ( !is_object( $u ) ) {
                        return Status::newFatal( 'noname' );
                } elseif ( 0 != $u->idForName() ) {
diff --git a/includes/utils/AutoloadGenerator.php b/includes/utils/AutoloadGenerator.php
new file mode 100644 (file)
index 0000000..7cf05bc
--- /dev/null
@@ -0,0 +1,272 @@
+<?php
+
+/**
+ * Accepts a list of files and directories to search for
+ * php files and generates $wgAutoloadLocalClasses or $wgAutoloadClasses
+ * lines for all detected classes. These lines are written out
+ * to an autoload.php file in the projects provided basedir.
+ *
+ * Usage:
+ *
+ *     $gen = new AutoloadGenerator( __DIR__ );
+ *     $gen->readDir( __DIR__ . '/includes' );
+ *     $gen->readFile( __DIR__ . '/foo.php' )
+ *     $gen->generateAutoload();
+ */
+class AutoloadGenerator {
+       /**
+        * @var string Root path of the project being scanned for classes
+        */
+       protected $basepath;
+
+       /**
+        * @var ClassCollector Helper class extracts class names from php files
+        */
+       protected $collector;
+
+       /**
+        * @var array Map of file shortpath to list of FQCN detected within file
+        */
+       protected $classes = array();
+
+       /**
+        * @var string The global variable to write output to
+        */
+       protected $variableName = 'wgAutoloadClasses';
+
+       /**
+        * @var array Map of FQCN to relative path(from self::$basepath)
+        */
+       protected $overrides = array();
+
+       /**
+        * @param string $basepath Root path of the project being scanned for classes
+        * @param array|string $flags
+        *
+        *  local - If this flag is set $wgAutoloadLocalClasses will be build instead
+        *          of $wgAutoloadClasses
+        */
+       public function __construct( $basepath, $flags = array() ) {
+               if ( !is_array( $flags ) ) {
+                       $flags = array( $flags );
+               }
+               $this->basepath = realpath( $basepath );
+               $this->collector = new ClassCollector;
+               if ( in_array( 'local', $flags ) ) {
+                       $this->variableName = 'wgAutoloadLocalClasses';
+               }
+       }
+
+       /**
+        * Force a class to be autoloaded from a specific path, regardless of where
+        * or if it was detected.
+        *
+        * @param string $fqcn FQCN to force the location of
+        * @param string $inputPath Full path to the file containing the class
+        */
+       public function forceClassPath( $fqcn, $inputPath ) {
+               $path = realpath( $inputPath );
+               if ( !$path ) {
+                       throw new \Exception( "Invalid path: $inputPath" );
+               }
+               $len = strlen( $this->basepath );
+               if ( substr( $path, 0, $len ) !== $this->basepath ) {
+                       throw new \Exception( "Path is not within basepath: $inputPath" );
+               }
+               $shortpath = substr( $path, $len );
+               $this->overrides[$fqcn] = $shortpath;
+       }
+
+       /**
+        * @var string $inputPath Path to a php file to find classes within
+        */
+       public function readFile( $inputPath ) {
+               $path = realpath( $inputPath );
+               if ( !$path ) {
+                       throw new \Exception( "Invalid path: $inputPath" );
+               }
+               $len = strlen( $this->basepath );
+               if ( substr( $path, 0, $len ) !== $this->basepath ) {
+                       throw new \Exception( "Path is not within basepath: $inputPath" );
+               }
+               $result = $this->collector->getClasses(
+                       file_get_contents( $path )
+               );
+               if ( $result ) {
+                       $shortpath = substr( $path, $len );
+                       $this->classes[$shortpath] = $result;
+               }
+       }
+
+       /**
+        * @param string $dir Path to a directory to recursively search
+        *  for php files with either .php or .inc extensions
+        */
+       public function readDir( $dir ) {
+               $it = new RecursiveDirectoryIterator( realpath( $dir ) );
+               $it = new RecursiveIteratorIterator( $it );
+
+               foreach ( $it as $path => $file ) {
+                       $ext = pathinfo( $path, PATHINFO_EXTENSION );
+                       // some older files in mw use .inc
+                       if ( $ext === 'php' || $ext === 'inc' ) {
+                               $this->readFile( $path );
+                       }
+               }
+       }
+
+       /**
+        * Write out all known classes to autoload.php in
+        * the provided basedir
+        */
+       public function generateAutoload() {
+               $content = array();
+
+               // We need to generate a line each rather than exporting the
+               // full array so __DIR__ can be prepended to all the paths
+               $format = "%s => __DIR__ . %s,";
+               foreach ( $this->classes as $path => $contained ) {
+                       $exportedPath = var_export( $path, true );
+                       foreach ( $contained as $fqcn ) {
+                               $content[$fqcn] = sprintf(
+                                       $format,
+                                       var_export( $fqcn, true ),
+                                       $exportedPath
+                               );
+                       }
+               }
+
+               foreach ( $this->overrides as $fqcn => $path ) {
+                       $content[$fqcn] = sprintf(
+                               $format,
+                               var_export( $fqcn, true ),
+                               var_export( $path, true )
+                       );
+               }
+
+               // sort for stable output
+               ksort( $content );
+
+               $output = implode( "\n\t", $content );
+               file_put_contents(
+                       $this->basepath . '/autoload.php',
+                       <<<EOD
+<?php
+// This file is generated, do not adjust manually
+
+global \${$this->variableName};
+
+\${$this->variableName} = array(
+       {$output}
+);
+
+EOD
+               );
+       }
+}
+
+/**
+ * Reads PHP code and returns the FQCN of every class defined within it.
+ */
+class ClassCollector {
+
+       /**
+        * @var string Current namespace
+        */
+       protected $namespace = '';
+
+       /**
+        * @var array List of FQCN detected in this pass
+        */
+       protected $classes;
+
+       /**
+        * @var array Token from token_get_all() that started an expect sequence
+        */
+       protected $startToken;
+
+       /**
+        * @var array List of tokens that are members of the current expect sequence
+        */
+       protected $tokens;
+
+       /**
+        * @var string $code PHP code (including <?php) to detect class names from
+        * @return array List of FQCN detected within the tokens
+        */
+       public function getClasses( $code ) {
+               $this->namespace = '';
+               $this->classes = array();
+               $this->startToken = null;
+               $this->tokens = array();
+
+               foreach ( token_get_all( $code ) as $token ) {
+                       if ( $this->startToken === null ) {
+                               $this->tryBeginExpect( $token );
+                       } else {
+                               $this->tryEndExpect( $token );
+                       }
+               }
+
+               return $this->classes;
+       }
+
+       /**
+        * Determine if $token begins the next expect sequence.
+        *
+        * @param array $token
+        */
+       protected function tryBeginExpect( $token ) {
+               if ( is_string( $token ) ) {
+                       return;
+               }
+               switch( $token[0] ) {
+               case T_NAMESPACE:
+               case T_CLASS:
+               case T_INTERFACE:
+                       $this->startToken = $token;
+               }
+       }
+
+       /**
+        * Accepts the next token in an expect sequence
+        *
+        * @param array
+        */
+       protected function tryEndExpect( $token ) {
+               switch( $this->startToken[0] ) {
+               case T_NAMESPACE:
+                       if ( $token === ';' || $token === '{' ) {
+                               $this->namespace = $this->implodeTokens() . '\\';
+                       } else {
+                               $this->tokens[] = $token;
+                       }
+                       break;
+
+               case T_CLASS:
+               case T_INTERFACE:
+                       $this->tokens[] = $token;
+                       if ( is_array( $token ) && $token[0] === T_STRING ) {
+                               $this->classes[] = $this->namespace . $this->implodeTokens();
+                       }
+               }
+       }
+
+       /**
+        * Returns the string representation of the tokens within the
+        * current expect sequence and resets the sequence.
+        *
+        * @return string
+        */
+       protected function implodeTokens() {
+               $content = array();
+               foreach ( $this->tokens as $token ) {
+                       $content[] = is_string( $token ) ? $token : $token[1];
+               }
+
+               $this->tokens = array();
+               $this->startToken = null;
+
+               return trim( implode( '', $content ), " \n\t" );
+       }
+}
index 1a09818..39e62f5 100644 (file)
@@ -279,27 +279,22 @@ class KkConverter extends LanguageConverter {
         * @return string
         */
        function translate( $text, $toVariant ) {
-               global $wgLanguageCode;
                $text = parent::translate( $text, $toVariant );
 
                switch ( $toVariant ) {
                        case 'kk-cyrl':
                        case 'kk-kz':
                                $letters = KK_L_UC . KK_L_LC . 'ʺʹ#0123456789';
-                               $wgLanguageCode = 'kk';
                                break;
                        case 'kk-latn':
                        case 'kk-tr':
                                $letters = KK_C_UC . KK_C_LC . '№0123456789';
-                               $wgLanguageCode = 'kk-Latn';
                                break;
                        case 'kk-arab':
                        case 'kk-cn':
                                $letters = KK_C_UC . KK_C_LC . /*KK_L_UC.KK_L_LC.'ʺʹ'.*/',;\?%\*№0123456789';
-                               $wgLanguageCode = 'kk-Arab';
                                break;
                        default:
-                               $wgLanguageCode = 'kk';
                                return $text;
                }
                // disable conversion variables like $1, $2...
index 493f818..c74cfe8 100644 (file)
        "hidetoc": "گیزلت",
        "collapsible-collapse": "ییغیشلات",
        "collapsible-expand": "گئنیشلت",
+       "confirmable-yes": "هن",
+       "confirmable-no": "یوْخ",
        "thisisdeleted": "$1-نا باخ یا اوْنو قایتار؟",
        "viewdeleted": "$1 گؤستریلسین؟",
        "restorelink": "{{PLURAL:$1|بیر|$1}} سیلینمیش دَییشیکلیک",
        "gotaccount": "اؤنجه‌دن حسابینیز وارمی؟ $1.",
        "gotaccountlink": "گیریش",
        "userlogin-resetlink": "گیریش بیلگیلرینیزی اونوتموسونوز؟",
-       "userlogin-resetpassword-link": "رمزینیزی صیفیرلایین",
+       "userlogin-resetpassword-link": "رمزینیزی اونوتموسوز مو؟",
+       "userlogin-createanother": "بیر باشقا حساب یارات",
        "createacct-emailrequired": "ایمیل آدرسی",
        "createacct-emailoptional": "ایمیل آدرسی (ایستگه باغلی)",
        "createacct-email-ph": "ایمیل آدرسینیزی داخیل ائدین",
+       "createacct-another-email-ph": "ایمیل آدرسینیزی داخیل ائدین",
        "createaccountmail": "بیر گئچیجی راست‌گله رمز ایشلت و اونو آشاغیدا بللندیرن ایمیل آدرسینه گؤندر",
        "createacct-realname": "دوغرو آد (ایستگه باغلی)",
        "createaccountreason": "نَدَن‌لیک:",
        "createacct-captcha": "امنیت یوخلاماسی",
        "createacct-imgcaptcha-ph": "اوست‌ده‌کی گؤردوگونوز یازی‌نی داخیل ائدین",
        "createacct-submit": "حسابینیزی یارادین",
+       "createacct-another-submit": "بیر باشقا حساب یارات",
        "createacct-benefit-heading": "{{SITENAME}} سیزین کیمی آدام‌لارین الی ایله یارانیب‌دیر.",
        "createacct-benefit-body1": "{{PLURAL:$1|دَییشیکلیک}}",
        "createacct-benefit-body2": "{{PLURAL:$1|صحیفه}}",
        "edit-gone-missing": "صحیفنی یئنی لمک مومکون دئییل.\nچوخ گومان کی، صحیفه سیلینمیش‌دیر.",
        "edit-conflict": "سیزله برابر دییشدیرمه",
        "edit-no-change": "سیزین دییشدیر قئیده آلینمامیش‌دیر. بئله کی، متنده هئچ بیر دییشدیر ائدیلممیش‌دیر.",
+       "postedit-confirmation-created": "به صفحه یارانیب‌دیر.",
        "postedit-confirmation-saved": "سیزین دَییشدیرمه‌نیز قئید اولونوب‌دور.",
        "edit-already-exists": "یئنی صحیفنی یاراتماق مومکون دئییل.\nبئله کی، بو آددا صحیفه آرتیق مؤوجوددور.",
        "defaultmessagetext": "دفالت دانیشیق متنی",
        "revdelete-hide-user": "دَییشدیرن یازارین ایستیفاده‌چی آدینی/آی‌پی اونوانینی گیزله",
        "revdelete-hide-restricted": "بیلگی‌لری ایدارچی‌لردن ده گیزله",
        "revdelete-radio-same": "(ديَیشدیرمه)",
-       "revdelete-radio-set": "بلی",
-       "revdelete-radio-unset": "یوخ",
+       "revdelete-radio-set": "گیزلی",
+       "revdelete-radio-unset": "گؤرونن",
        "revdelete-suppress": "بیلگی‌لری ایداره‌چیلردن ده گیزله",
        "revdelete-unsuppress": "برپا اولونان وئرسیا‌لار اوزرین‌دن محدودیت‌لری قال‌دیر",
        "revdelete-log": "ندن:",
        "prefs-email": "ایمیل ترجیحلری",
        "prefs-rendering": "گؤرونوش",
        "saveprefs": "قئید ائت",
-       "restoreprefs": "بوتون ایلک ترجیحلری قایتار",
+       "restoreprefs": "بوتون ایلک ترجیحلری قایتار",
        "prefs-editing": "دَییشدیرمک‌ده",
        "rows": "سطرلر:",
        "columns": "سوتونلار",
        "badsiglength": "ایمضانیز چوخ اوزون‌دور.\nاو گرک {{PLURAL:$1|بیر|$1}} حرف‌دن اوزون اولمایا.",
        "yourgender": "جینس:",
        "gender-unknown": "بیلیندیرمه‌میش",
-       "gender-male": "آقا",
-       "gender-female": "خانیم",
+       "gender-male": "کیشی",
+       "gender-female": "قادین",
        "prefs-help-gender": "ایستگه یاغلی: یازیلیم‌لا، دوزگون جنسیته ایلگی‌لی آدرس وئرمک اوچون ایشنیر.\nبو بیلگی، عمومی اولاجاق‌دیر.",
        "email": "ایمیل",
        "prefs-help-realname": "اصلی آد ایستگه باغلی‌دیر.\nاگر اونو وئرماغی سئچسز، سیزین ایشلرینیزی سیزه مونتسب ائدن‌ده، بو اصلی آد ایشلنه‌جک‌دیر.",
        "prefs-signature": "ایمضا",
        "prefs-dateformat": "تاریخ فورمتی",
        "prefs-timeoffset": "ساعات قورشاغینین فرقی",
-       "prefs-advancedediting": "عمومی",
+       "prefs-advancedediting": "گنل تنظیم‌لر",
        "prefs-editor": "دَییشدیرن",
        "prefs-preview": "اؤن‌گؤستریش",
        "prefs-advancedrc": "گلیشمیش سئچَنکلر",
        "license-nopreview": "(اؤن‌گؤستریش یوخدور)",
        "upload_source_url": "(بیر گئچرلی و عموم گؤره بیلن اینترنت آدرسی)",
        "upload_source_file": "(بیلگی‌سایارینیزدا بیر فایل)",
+       "listfiles-delete": "سیل",
        "listfiles-summary": "بۇ اؤزل صحیفه، بۆتون یۆکله‌نیلن فایل‌لاری گؤستریر.",
        "listfiles_search_for": "مئدیا آدی اوچون آختار:",
        "imgfile": "فایل",
        "randomincategory": "بؤلمه‌ده راست‌گله صحیفه",
        "randomincategory-invalidcategory": "«$1» بیر گئچرلی بؤلمه آدی دئییل.",
        "randomincategory-nopages": "[[:Category:$1|$1]] بؤلمه‌سین‌ده، هئچ صحیفه یوخدور.",
+       "randomincategory-category": "بؤلمه:",
+       "randomincategory-legend": "بؤلمه‌ده راست‌گله صفحه",
        "randomredirect": "راست‌گله یول‌لاندیرما",
        "randomredirect-nopages": "«$1» آدفضاسیندا هئچ بیر یول‌لاندیرما یوخدور.",
        "statistics": "آمارلار",
        "querypage-disabled": "پِرفورمانس اوچون بو اؤزل صحیفه باغلانیب‌دیر.",
        "booksources": "کیتاب قایناقلاری",
        "booksources-search-legend": "کیتاب قایناقلارین آختار",
+       "booksources-search": "آختار",
        "booksources-text": "آشاغیدا یئنی و ایشلنمیش کیتاب‌لار ساتان خاریجی کئچیدلرده سیز آختاردیغینیز کیتاب حاقیندا علاوه معلومات آلا بیلرسیز:",
        "booksources-invalid-isbn": "وئریلن ISBN اعتبارسیز کیمی گؤرونور؛ اورجینال قایناق‌دان کوپیالاما اشکالار اوچون نظارت ائدین.",
        "specialloguserlabel": "ایجراچی",
        "autoblockid": "اوتوماتیک باغلانما #$1",
        "block": "ایستیفادچینی باغلاما",
        "unblock": "ایستیفاده‌چی‌نین باغلانماسین گؤتور",
-       "blockip": "ایستیفاده چی نی باغلا",
+       "blockip": " {{GENDER:$1|ایشلدن}}ی باغلا",
        "blockip-legend": "ایستیفادچی نی باغلا",
        "blockiptext": "آشاغی‌داکی فورمو ایستیفاده ائده‌رک مویین بیر ایپنین و یا قئیدیات‌دان کئچمیش ایستیفاده‌چی‌نین دییشیک‌لیک ائتمه‌سینی مانعه تؤره‌ده بیلرسینیز. بو یالنیز واندالیزمی قارشی‌سینی آلماق اوچون و [[{{MediaWiki:Policy-url}}|قایدا‌لارا]] اویغون اولا‌راق ائدیلمه‌لی. آشاغییا موتلق قاداغا ایله علاقه‌دار بیر شرح یازین. (نومونه:-بو-صحیفه‌لرده واندالیزم ائتمیش‌دیر).",
        "ipaddressorusername": "آی-پی عونوانی و یا ایستیفاده‌چی آدی",
        "import": "صحیفه‌لری ایدخال ائت",
        "importinterwiki": "ویکیلر اراسی چیخارما",
        "import-interwiki-text": "ایچه کؤچورمک اوچون بیر wiki و صحیفه باش‌لیغی سئچین.\nرئویزیون تاریخ‌لری و یازارلارین آدلاری قورونا‌جاق.\nبوتون ویکیلئراراسی ایچه کؤچورمه حرکت‌لری [[Special:Log/import|ایچه کؤچورمه گوندلیگینده]] یازیلماقدا‌دیر.",
+       "import-interwiki-sourcepage": "قایناق صفحه:",
        "import-interwiki-history": "صحیفه‌نین دییشمه تاریخچه‌لری‌نین هامی‌سینی کؤچور",
        "import-interwiki-templates": "بوتون شابلون‌لارلا بیرلیکده",
        "import-interwiki-submit": "ایچری توکمه اولسون",
        "watchlistedit-raw-done": "ایزله‌دیکلرینیز گونجل‌لندی.",
        "watchlistedit-raw-added": "{{PLURAL:$1|بیر|$1}} باشلیق آرلیریلدی:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|بیر|$1}} باشلیق چیخاریلدی:",
+       "watchlistedit-clear-titles": "باشلیق‌لار:",
        "watchlisttools-view": "ایلگیلی دَییشیکلیکلره باخین",
        "watchlisttools-edit": "ایزله‌دیکلره باخ و اونلاری دَییشدیر",
        "watchlisttools-raw": "چیی ایزله‌دیکلری دَییشدیر",
        "duplicate-defaultsort": "'''دیقت:''' احتیمال ائدیلن «$2» دفالت آچاری، قاباقکی «$1» دفالت آچارینی گئچرسیز ائدیر.",
        "version": "نوسخه‌",
        "version-extensions": "قورولموش گنیشلندیرمه‌لر",
-       "version-skins": "قابیقلار",
+       "version-skins": "یوکلنمیش قابیق‌لار",
        "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-skin-colheader-name": "قابیق",
+       "version-ext-colheader-version": "سۆروم",
+       "version-ext-colheader-license": "لیسانس",
+       "version-ext-colheader-description": "آچیقلاما",
+       "version-ext-colheader-credits": "یازیچی‌لار",
        "version-poweredby-credits": "بو wیکی ' ''[https://www.mediawiki.org/ مئدیاwیکی]'ع' پروقرامی ایستیفاده ائدیله‌رک يارادیلمیشدیر، یاازارلار © 2001-$1 $2.",
        "version-poweredby-others": "آیریلار",
        "version-credits-summary": "بو ایستفاده چیلر دییشدیر لرینه گوره [[Special:Version|مئدیاویکی]] تانیش ائدیرم.",
        "htmlform-no": "یوخ",
        "htmlform-yes": "بلی",
        "htmlform-chosen-placeholder": "بیر سئچمه سئچین",
+       "htmlform-cloner-create": "چوْخراق آرتیر",
+       "htmlform-cloner-delete": "سیل",
        "sqlite-has-fts": "$1 بوتون یازی آختارما دستگی‌له",
        "sqlite-no-fts": "$1 بوتون یازی آختارماماق‌لا",
        "logentry-delete-delete": "$1، $3 صحیفه‌سینی {{GENDER:$2|سیلدی}}",
        "duration-centuries": "{{PLURAL:$1|بیر|$1}} یوز-ایل",
        "duration-millennia": "{{PLURAL:$1|بیر|$1}} مین‌ایل",
        "rotate-comment": "عکس $1 {{PLURAL:$1|درجه}} ساعات عقربه‌لری ایستیقامتینده فیرلاندیریلب‌دیر",
+       "expand_templates_output": "سوْنوج",
+       "expand_templates_ok": "اوْلسون",
+       "expand_templates_remove_comments": "باخیش‌لاری سیل",
        "expand_templates_generate_rawhtml": "چیی اچ‌تی‌ام‌ال گؤستر",
-       "expand_templates_preview": "اؤن‌گؤستریش"
+       "expand_templates_preview": "اؤن‌گؤستریش",
+       "pagelang-name": "صفحه",
+       "pagelang-language": "دیل",
+       "pagelang-select-lang": "دیل سئچمه‌سی",
+       "mediastatistics-table-count": "فایل‌لارین سایی",
+       "mediastatistics-header-unknown": "بیلینمه‌ین",
+       "mediastatistics-header-bitmap": "بیت‌مپ گؤرونتولر",
+       "mediastatistics-header-audio": "سس",
+       "mediastatistics-header-video": "ویدیولار",
+       "mediastatistics-header-office": "دفتر"
 }
index 622494c..59b80c2 100644 (file)
        "nstab-help": "Старонка дапамогі",
        "nstab-category": "Катэгорыя",
        "nosuchaction": "Няма такога дзеяньня",
-       "nosuchactiontext": "Ð\94зеÑ\8fнÑ\8cне, Ð¿Ð°Ð·Ð½Ð°Ñ\87анае Ñ\9e URL, Ð·Ñ\8cÑ\8fÑ\9eлÑ\8fеÑ\86Ñ\86а Ð½Ñ\8fÑ\81лÑ\83Ñ\88нÑ\8bм.\nÐ\9cагÑ\87Ñ\8bма, Ð²Ñ\8b Ñ\9eвÑ\8fлÑ\96 Ð½Ñ\8fÑ\81лÑ\83Ñ\88нÑ\8b URL Ð°Ð±Ð¾ Ð¿ÐµÑ\80айÑ\88лÑ\96 Ð¿Ð° Ð½Ñ\8fÑ\81лÑ\83Ñ\88най Ñ\81паÑ\81Ñ\8bлÑ\86Ñ\8b.\nÐ\93Ñ\8dÑ\82а Ð¼Ð¾Ð¶Ð° Ð±Ñ\8bÑ\86Ñ\8c Ñ\96 Ð¿Ð°Ð¼Ñ\8bлкай Ñ\83 Ð°Ð¿Ñ\80агÑ\80амаваньні {{GRAMMAR:родны|{{SITENAME}}}}.",
+       "nosuchactiontext": "Ð\94зеÑ\8fнÑ\8cне, Ð¿Ð°Ð·Ð½Ð°Ñ\87анае Ñ\9e URL, Ð·Ñ\8cÑ\8fÑ\9eлÑ\8fеÑ\86Ñ\86а Ð½Ñ\8fÑ\81лÑ\83Ñ\88нÑ\8bм.\nÐ\9cагÑ\87Ñ\8bма, Ð²Ñ\8b Ñ\9eвÑ\8fлÑ\96 Ð½Ñ\8fÑ\81лÑ\83Ñ\88нÑ\8b URL Ð°Ð±Ð¾ Ð¿ÐµÑ\80айÑ\88лÑ\96 Ð¿Ð° Ð½Ñ\8fÑ\81лÑ\83Ñ\88най Ñ\81паÑ\81Ñ\8bлÑ\86Ñ\8b.\nÐ\93Ñ\8dÑ\82а Ð¼Ð¾Ð¶Ð° Ð±Ñ\8bÑ\86Ñ\8c Ñ\96 Ð¿Ð°Ð¼Ñ\8bлкай Ñ\83 Ð¿Ñ\80агÑ\80амнÑ\8bм Ð·Ð°Ð±ÐµÑ\81Ñ\8cпÑ\8fÑ\87Ñ\8dньні {{GRAMMAR:родны|{{SITENAME}}}}.",
        "nosuchspecialpage": "Такой спэцыяльнай старонкі не існуе",
        "nospecialpagetext": "<strong>Спэцыяльная старонка, да якой Вы зьвярнуліся, не існуе.</strong>\n\nСьпіс дзейных спэцыяльных старонак можна знайсьці на [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Памылка",
        "filedeleteerror": "Немагчыма выдаліць файл «$1».",
        "directorycreateerror": "Немагчыма стварыць дырэкторыю «$1».",
        "directoryreadonlyerror": "Тэчка «$1» толькі для чытаньня.",
+       "directorynotreadableerror": "Тэчка «$1» не чытаецца.",
        "filenotfound": "Немагчыма знайсьці файл «$1».",
        "unexpected": "Нечаканае значэньне: «$1»=«$2».",
        "formerror": "Памылка: не атрымалася адаслаць зьвесткі формы",
index 1415b2c..fc86b50 100644 (file)
        "content-model-text": "обикновен текст",
        "content-model-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:$1|$1 обръщение|$1 обръщения}} към такива функции, а трябва да {{PLURAL:$1|е|са}} по-малко от $2.",
        "expensive-parserfunction-category": "Страници, които прекалено много пъти използват ресурсоемки парсерни функции",
        "post-expand-template-inclusion-warning": "Внимание: Размерът за включване на този шаблон е твърде голям.\nНякои шаблони няма да бъдат включени.",
        "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": "Открито е ''unstrip'' зацикляне",
+       "parser-unstrip-recursion-limit": "''Unstrip'' лимита на рекурсия превишава ($1)",
        "undo-success": "Редакцията може да бъде върната. Прегледайте долното сравнение и се уверете, че наистина искате да го направите. След това съхранете страницата, за да извършите връщането.",
        "undo-failure": "Редакцията не може да бъде върната поради конфликтни междинни редакции.",
        "undo-norev": "Редакцията не може да бъде върната тъй като не съществува или е била изтрита.",
index 880f255..adfc915 100644 (file)
        "filerenameerror": "No s'ha pogut reanomenar el fitxer «$1» com «$2».",
        "filedeleteerror": "No s'ha pogut eliminar el fitxer «$1».",
        "directorycreateerror": "No s'ha pogut crear el directori «$1».",
+       "directoryreadonlyerror": "Directory \"$1\" is read-only.",
        "filenotfound": "No s'ha pogut trobar el fitxer «$1».",
        "unexpected": "S'ha trobat un valor imprevist: «$1»=«$2».",
        "formerror": "Error: no s'ha pogut enviar les dades del formulari",
index fa20694..fdde405 100644 (file)
        "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.",
-       "userrights": "Benutzerrechteverwaltung",
+       "userrights": "Benutzerrechte verwalten",
        "userrights-lookup-user": "Gruppenzugehörigkeit verwalten",
        "userrights-user-editname": "Benutzername:",
        "editusergroup": "Benutzerrechte bearbeiten",
index 95472a5..f36a000 100644 (file)
        "november-date": "Tışrino Peyên $1",
        "december-date": "Kanun $1",
        "pagecategories": "{{PLURAL:$1|Kategoriye|Kategoriy}}",
-       "category_header": "Pelê ke kategoriya \"$1\" miyan derê",
+       "category_header": "Pelê ke kategoriya \"$1\" derê",
        "subcategories": "Kategoriyê bınêni",
-       "category-media-header": "Dosyeyê ke kategoriya \"$1\" miyan derê",
+       "category-media-header": "Dosyeyê ke kategoriya \"$1\" derê",
        "category-empty": "''Ena kategoriye de hewna qet nuştey ya zi medya çıniyê.''",
        "hidden-categories": "{{PLURAL:$1|Kategoriya nımıtiye|Kategoriyê nımıtey}}",
        "hidden-category-category": "Kategoriyê nımıtey",
index c18adfc..5d4a2bf 100644 (file)
        "otherlanguages": "Σε άλλες γλώσσες",
        "redirectedfrom": "(Ανακατεύθυνση από $1)",
        "redirectpagesub": "Σελίδα ανακατεύθυνσης",
+       "redirectto": "Ανακατεύθυνση σε:",
        "lastmodifiedat": "Η σελίδα αυτή τροποποιήθηκε τελευταία φορά στις $1, στις $2.",
        "viewcount": "Αυτή η σελίδα έχει προσπελαστεί {{PLURAL:$1|μια φορά|$1 φορές}}.",
        "protectedpage": "Προστατευμένη σελίδα",
        "pool-timeout": "Χρόνος αναμονής για το κλείδωμα",
        "pool-queuefull": "Η ουρά της δεξαμενής διεργασιών είναι πλήρης",
        "pool-errorunknown": "Άγνωστο σφάλμα",
+       "pool-servererror": "Η υπηρεσία καταμετρητή ομαδοποίησης δεν είναι διαθέσιμη ($1).",
        "aboutsite": "Σχετικά με {{SITENAME}}",
        "aboutpage": "Project:Σχετικά",
        "copyright": "Το περιεχόμενο είναι διαθέσιμο σύμφωνα με την $1 εκτός αν αναφέρεται διαφορετικά.",
        "viewyourtext": "Μπορείτε να προβάλετε και να αντιγράψετε τον κώδικα των '''επεξεργασιών σας''' σε αυτήν τη σελίδα:",
        "protectedinterface": "Αυτή η σελίδα παρέχει κείμενο διεπαφής για το λογισμικό σε αυτό το wiki, και έχει κλειδωθεί για αποτροπή τυχόν βανδαλισμού.\n\nΓια να προσθέσετε ή να αλλάξετε τις μεταφράσεις για όλα τα wikis, παρακαλούμε χρησιμοποιήστε  [//translatewiki.net/ translatewiki.net], το εγχείρημα τοπικοποίησης του  MediaWiki.",
        "editinginterface": "<strong>Προειδοποίηση:</strong> Επεξεργάζεστε μια σελίδα η οποία χρησιμοποιείται για να παρέχει κείμενο διεπαφής για το λογισμικό. Αλλαγές σε αυτήν τη σελίδα θα επηρεάσουν την εμφάνιση της διεπαφής χρήστη για άλλους χρήστες αυτού του wiki.",
+       "translateinterface": "Για να προσθέσετε ή να αλλάξετε τις μεταφράσεις για όλα τα wiki, παρακαλούμε χρησιμοποιήστε το [//translatewiki.net/ translatewiki.net], το έργο τοπικοποίησης του MediaWiki.",
        "cascadeprotected": "Αυτή η σελίδα έχει προστατευθεί από επεξεργασία, επειδή περιλαμβάνεται {{PLURAL:$1|στην ακόλουθη σελίδα, που είναι προστατευμένη|στις ακόλουθες σελίδες, που είναι προστατευμένες}} με ενεργοποιημένη τη «διαδοχική» προστασία στο:\n$2",
        "namespaceprotected": "Δεν έχετε άδεια να επεξεργάζεστε σελίδες στον τομέα '''$1'''.",
        "customcssprotected": "Δεν έχετε δικαιώματα για να επεξεργαστείτε αυτή τη σελίδα CSS, επειδή περιέχει προσωπικές ρυθμίσεις άλλου χρήστη.",
        "createaccount-text": "Κάποιος δημιούργησε έναν λογαριασμό για τη διεύθυνση email σας στο {{SITENAME}} ($4) με το όνομα \"$2\", με κωδικό πρόσβασης \"$3\". Θα πρέπει να συνδεθείτε και να αλλάξετε τον κωδικό πρόσβασής σας τώρα.\n\nΜπορείτε να αγνοήσετε αυτό το μήνυμα, αν αυτός ο λογαριασμός δημιουργήθηκε εσφαλμένα.",
        "login-throttled": "Κάνατε πάρα πολλές πρόσφατες απόπειρες σύνδεσης.\nΠαρακαλούμε περιμένετε $1 προτού ξαναδοκιμάσετε.",
        "login-abort-generic": "Η είσοδος δεν πέτυχε - Ματαιώθηκε",
+       "login-migrated-generic": "Ο λογαριασμός σας έχει μεταναστεύσει, και το όνομα χρήστη σας δεν υπάρχει πλέον σε αυτό το wiki.",
        "loginlanguagelabel": "Γλώσσα: $1",
        "suspicious-userlogout": "Το αίτημα αποσύνδεσής σας απερρίφθη επειδή φαίνεται ότι στάλθηκε από ένα λανθασμένο φυλλομετρητή (browser) ή διακομιστή προσωρινής αποθήκευσης.",
        "createacct-another-realname-tip": "Το πραγματικό όνομα είναι προαιρετικό\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> or <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Κάποια πρότυπα δεν θα συμπεριληφθούν.",
        "revdelete-show-file-confirm": "Είστε σίγουροι ότι θέλετε να δείτε μία διεγραμμένη αναθεώρηση του αρχείου \"<nowiki>$1</nowiki>\" από τις $2 στις $3;",
        "revdelete-show-file-submit": "Ναι",
        "revdelete-selected-text": "{{PLURAL:$1|Επιλεγμένη έκδοση|Επιλεγμένες εκδόσεις}} της [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Επιλεγμένη έκδοση αρχείου|Επιλεγμένες εκδόσεις αρχείου}} του [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Επιλεγμένο γεγονός αρχείου καταγραφής|Επιλεγμένα γεγονότα αρχείου καταγραφής}}:",
        "revdelete-confirm": "Παρακαλούμε επιβεβαιώστε ότι σκοπεύετε να το κάνετε αυτό, ότι αντιλαμβάνεσθε τις συνέπειες, και ότι το κάνετε σύμφωνα με την [[{{MediaWiki:Policy-url}}|πολιτική]].",
        "revdelete-suppress-text": "Η καταστολή μπορεί να χρησιμοποιηθεί <strong> μόνο </strong> για τις ακόλουθες περιπτώσεις:\n* Ενδεχόμενη συκοφαντική δυσφήμιση\n* Ακατάλληλες προσωπικές πληροφορίες\n*: <em>διευθύνσεις κατοικίας και αριθμοί τηλεφώνου, αριθμοί ταυτότητας, κλπ. </em>",
        "shown-title": "Εμφάνιση $1 {{PLURAL:$1|αποτελέσματος|αποτελεσμάτων}} ανά σελίδα",
        "viewprevnext": "Εμφάνιση ($1 {{int:pipe-separator}} $2) ($3).",
        "searchmenu-exists": "'''Υπάρχει μια σελίδα που ονομάζεται «[[:$1]]» σε αυτό το wiki.'''",
-       "searchmenu-new": "'''Δημιουργήστε τη σελίδα «[[:$1]]» σε αυτό το wiki!'''",
+       "searchmenu-new": "<strong>Δημιουργήστε τη σελίδα «[[:$1]]» σε αυτό το wiki!</strong>\n{{PLURAL:$2|0=|Δείτε επίσης τη σελίδα που βρέθηκε με την αναζήτησή σας.|Δείτε επίσης τα αποτελέσματα της αναζήτησης που βρέθηκαν.}}",
        "searchprofile-articles": "Σελίδες περιεχομένου",
        "searchprofile-images": "Πολυμέσα",
        "searchprofile-everything": "Οτιδήποτε",
        "searchall": "όλα",
        "showingresults": "Παρακάτω {{PLURAL:$1|εμφανίζεται μέχρι <strong>1</strong> αποτέλεσμα|εμφανίζονται μέχρι <strong>$1</strong> αποτελέσματα}} ξεκινώντας από το Νο <strong>$2</strong>.",
        "showingresultsinrange": "Παρακάτω {{PLURAL:$1|εμφανίζεται μέχρι <strong>1</strong> αποτέλεσμα|εμφανίζονται μέχρι <strong>$1</strong> αποτελέσματα}} σε εύρος από το Νο <strong>$2</strong> μέχρι το Νο <strong>$3</strong>.",
+       "search-showingresults": "{{PLURAL:$5|Αποτέλεσμα <strong>$1</strong> από <strong>$3</strong>|Αποτελέσματα <strong>$1 - $2</strong> από <strong>$3</strong>}}",
        "search-nonefound": "Δεν υπάρχουν αποτελέσματα που να ικανοποιούν το ερώτημα.",
        "powersearch-legend": "Αναλυτική αναζήτηση",
        "powersearch-ns": "Αναζήτηση στις περιοχές ονομάτων:",
        "powersearch-togglelabel": "Έλεγχος:",
        "powersearch-toggleall": "Όλες",
        "powersearch-togglenone": "Καμία",
+       "powersearch-remember": "Διατήρηση επιλογής για μελλοντικές αναζητήσεις",
        "search-external": "Εξωτερική αναζήτηση",
        "searchdisabled": "Η αναζήτηση για τον ιστότοπο \"{{SITENAME}}\" είναι απενεργοποιημένη. Μπορείτε να αναζητήσετε μέσω του Google εν τω μεταξύ. Σημειώστε ότι οι κατάλογοί τους για το περιεχόμενο του ιστοτόπου \"{{SITENAME}}\" μπορεί να είναι απαρχαιωμένοι.",
        "search-error": "Παρουσιάστηκε σφάλμα κατά την αναζήτηση:$1",
        "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": "Î\95Ï\80ιθεÏ\8eÏ\81ηÏ\83η ÎºÎ±Î¹ Î±Ï\80οκαÏ\84άÏ\83Ï\84αÏ\83η Î±Î½Î±Î¸ÎµÏ\89Ï\81ήÏ\83εÏ\89ν ÎºÏ\81Ï\85μμένÏ\89ν Î±Ï\80Ï\8c Ï\84οÏ\85Ï\82 Î´Î¹Î±Ï\87ειÏ\81ιÏ\83Ï\84έÏ\82",
+       "right-suppressrevision": "ΠÏ\81οβολή, Î±Ï\80Ï\8cκÏ\81Ï\85Ï\88η ÎºÎ±Î¹ ÎµÏ\80ανεμÏ\86άνιÏ\83η Ï\83Ï\85γκεκÏ\81ιμένÏ\89ν Î±Î½Î±Î¸ÎµÏ\89Ï\81ήÏ\83εÏ\89ν Ï\83ελίδÏ\89ν Î±Ï\80Ï\8c ÎºÎ¬Î¸Îµ Ï\87Ï\81ήÏ\83Ï\84η",
        "right-viewsuppressed": "Προβολή αναθεωρήσεων κρυμμένων από κάθε χρήστη",
        "right-suppressionlog": "Προβολή ιδιωτικών καταγραφών",
        "right-block": "Φραγή άλλων χρηστών από την επεξεργασία",
        "right-editmyusercss": "Επεξεργασία των ιδιωτικών αρχείων CSS χρήστη",
        "right-editmyuserjs": "Επεξεργασία των ιδιωτικών αρχείων JavaScript χρήστη",
        "right-viewmywatchlist": "Προβολή της δικής σας λίστα παρακολούθησης",
+       "right-editmywatchlist": "Επεξεργασία της δικής σας λίστας παρακολούθησής. Σημειώστε ότι κάποιες ενέργειες θα εξακολουθούν να προσθέτουν σελίδες, ακόμα και χωρίς αυτό το δικαίωμα.",
        "right-viewmyprivateinfo": "Δείτε τα προσωπικά σας δεδομένα (π.χ. διεύθυνση ηλεκτρονικού ταχυδρομείου, πραγματικό όνομα)",
        "right-editmyprivateinfo": "Επεξεργαστείτε τα προσωπικά σας δεδομένα (π.χ. διεύθυνση ηλεκτρονικού ταχυδρομείου, πραγματικό όνομα)",
        "right-editmyoptions": "Επεξεργασία των προτιμήσεών σας",
        "action-createpage": "να δημιουργήσετε σελίδες",
        "action-createtalk": "να δημιουργήσετε σελίδες συζήτησης",
        "action-createaccount": "να δημιουργήσετε αυτό το λογαριασμό χρήστη",
+       "action-history": "προβολή ιστορικού αυτή της σελίδας",
        "action-minoredit": "να σημειώσετε αυτή την επεξεργασία σαν «μικρής κλίμακας»",
        "action-move": "να μετακινήσετε αυτή τη σελίδα",
        "action-move-subpages": "να μετακινήσετε αυτή τη σελίδα, καθώς και τις υποσελίδες της",
        "recentchanges-label-plusminus": "Μεταβολή του μεγέθους της σελίδας σε bytes",
        "recentchanges-legend-heading": "'''Υπόμνημα:'''",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (δείτε [[Special:NewPages|κατάλογος νέων σελίδων]])",
-       "rcnotefrom": "Παρακάτω είναι οι αλλαγές από τις <strong>$2</strong>  (εμφανίζονται μέχρι <strong>$1</strong> ).",
+       "rcnotefrom": "Παρακάτω {{PLURAL:$5|είναι η αλλαγή|είναι οι αλλαγές}} από <strong>$3, $4</strong> (έως <strong>$1</strong> που εμφανίζεται).",
        "rclistfrom": "Εμφάνιση νέων αλλαγών αρχίζοντας από τις $3 στις $2",
        "rcshowhideminor": "$1 μικροεπεξεργασιών",
        "rcshowhideminor-show": "Εμφάνιση",
        "booksources": "Πηγές βιβλίων",
        "booksources-search-legend": "Αναζήτηση για πηγές βιβλίων",
        "booksources-isbn": "ISBN:",
+       "booksources-search": "Αναζήτηση",
        "booksources-text": "Παρακάτω είναι μια λίστα συνδέσμων σε άλλους ιστοτόπους οι οποίοι πωλούν νέα και μεταχειρισμένα βιβλία, και μπορεί επίσης να έχουν περισσότερες πληροφορίες για βιβλία για τα οποία ψάχνετε:",
        "booksources-invalid-isbn": "Το δοσμένο ISBN δεν φαίνεται να είναι έγκυρο· ελέγξτε για λάθη κατά την αντιγραφή από την αρχική πηγή.",
        "specialloguserlabel": "",
        "listgrouprights-namespaceprotection-namespace": "Ονοματοχώρος",
        "listgrouprights-namespaceprotection-restrictedto": "Δικαίωμα(τα) που επιτρέπει(ουν) σε χρήστη να επεξεργαστεί",
        "trackingcategories": "Παρακολούθηση κατηγοριών",
+       "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>).",
+       "broken-file-category-desc": "Η σελίδα περιέχει ένα σπασμένο σύνδεσμο αρχείου (σύνδεσμο για να ενσωμάτωση ενός αρχείου, ενώ το αρχείο δεν υπάρχει).",
        "hidden-category-category-desc": "Η κατηγορία περιέχει <code><nowiki>__HIDDENCAT__</nowiki></code> στο περιεχόμενο της σελίδας της, που την εμποδίζει εκ προεπιλογής να εμφανίζεται στο πλαίσιο συνδέσμων κατηγοριών των σελίδων.",
        "trackingcategories-nodesc": "Καμία διαθέσιμη περιγραφή.",
        "trackingcategories-disabled": "Η κατηγορία είναι απενεργοποιημένη",
        "delete-toobig": "Αυτή η σελίδα έχει μεγάλο ιστορικό τροποποιήσεων, πάνω από $1 {{PLURAL:$1|τροποποίηση|τροποποιήσεις}}.\nΗ διαγραφή τέτοιων σελίδων έχει περιοριστεί για την αποφυγή τυχαίας αναστάτωσης του {{SITENAME}}.",
        "delete-warning-toobig": "Αυτή η σελίδα έχει μεγάλο ιστορικό τροποποιήσεων, πάνω από $1 {{PLURAL:$1|τροποποίηση|τροποποιήσεις}}.\nΗ διαγραφή της μπορεί να αναστατώσει τη λειτουργία της βάσης δεδομένων του {{SITENAME}}. Συνιστούμε μεγάλη προσοχή.",
        "deleteprotected": "Δεν μπορείτε να διαγράψετε αυτή τη σελίδα επειδή είναι προστατευόμενη.",
+       "deleting-backlinks-warning": "\"'Προσοχή:\"' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Άλλες σελίδες]] συνδέουν ή ενσωματώνουν τη σελίδα που πρόκειται να διαγράψετε.",
        "rollback": "Επαναφορά επεξεργασιών",
        "rollback_short": "Επαναφορά",
        "rollbacklink": "αναστροφή",
index 6cccd40..b68d477 100644 (file)
        "filerenameerror": "Tiedostoa <b>$1</b> ei voitu nimetä uudelleen nimellä <b>$2</b>.",
        "filedeleteerror": "Tiedostoa <b>$1</b> ei voitu poistaa.",
        "directorycreateerror": "Hakemiston ”$1” luominen epäonnistui.",
+       "directoryreadonlyerror": "Hakemistoa \"$1\" voi vain lukea.",
+       "directorynotreadableerror": "Hakemisto \"$1\" ei ole luettavissa.",
        "filenotfound": "Tiedostoa <b>$1</b> ei löytynyt.",
        "unexpected": "Odottamaton arvo: ”$1” on ”$2”.",
        "formerror": "Lomakkeen tiedot eivät kelpaa",
        "api-error-stashfailed": "Sisäinen virhe: Väliaikaisen tiedoston tallentaminen epäonnistui.",
        "api-error-publishfailed": "Sisäinen virhe: Väliaikaisen tiedoston julkaiseminen epäonnistui.",
        "api-error-stasherror": "Tiedostoa ladattaessa tapahtui virhe.",
+       "api-error-stashedfilenotfound": "Säilöttyä tiedostoa ei löytynyt kun sitä yritettiin ladata säilöstä.",
+       "api-error-stashpathinvalid": "Hakupolku, jossa säilötyn tiedoston olisi pitänyt olla, oli virheellinen.",
+       "api-error-stashfilestorage": "Tapahtui virhe kun tiedostoa tallennettiin säilöön.",
+       "api-error-stashzerolength": "Palvelin ei voinut säilöä tiedostoa, koska sen pituus oli nolla.",
+       "api-error-stashnotloggedin": "Sinun täytyy kirjautua sisään, jotta voit tallentaa tiedostoja lataussäilöön.",
+       "api-error-stashwrongowner": "Tiedosto, jota yritit käyttää säilössä, ei ole sinun omasi.",
+       "api-error-stashnosuchfilekey": "Tiedoston avainta, jota yritit käyttää säilössä, ei ole olemassa.",
        "api-error-timeout": "Palvelin ei vastannut odotetun ajan kuluessa.",
        "api-error-unclassified": "Tapahtui tuntematon virhe.",
        "api-error-unknown-code": "Tuntematon virhe: $1.",
index 15eeca8..236c94a 100644 (file)
        "filerenameerror": "Impossible de renommer le fichier « $1 » en « $2 ».",
        "filedeleteerror": "Impossible de supprimer le fichier « $1 ».",
        "directorycreateerror": "Impossible de créer le dossier « $1 ».",
+       "directoryreadonlyerror": "Le répertoire « $1 » est en lecture seule.",
+       "directorynotreadableerror": "Le répertoire « $1 » n’est pas lisible.",
        "filenotfound": "Impossible de trouver le fichier « $1 ».",
        "unexpected": "Valeur inattendue : « $1 » = « $2 ».",
        "formerror": "Erreur : Impossible de soumettre le formulaire.",
        "delete_and_move_reason": "Page supprimée pour permettre le renommage depuis « [[$1]] »",
        "selfmove": "Les titres d'origine et de destination sont les mêmes ;\nimpossible de renommer une page sur elle-même.",
        "immobile-source-namespace": "Vous ne pouvez pas renommer les pages dans l'espace de noms « $1 »",
-       "immobile-target-namespace": "Vous ne pouvez pas renommer des pages vers l'espace de noms « $1 »",
+       "immobile-target-namespace": "Vous ne pouvez pas renommer des pages vers l’espace de noms « $1 ».",
        "immobile-target-namespace-iw": "Les destinations interwikis ne sont pas une cible valide pour les déplacements.",
        "immobile-source-page": "Cette page n'est pas renommable.",
        "immobile-target-page": "Il n'est pas possible de renommer la page vers ce titre.",
        "bad-target-model": "La destination souhaitée utilise un autre modèle de contenu. Impossible de convertir de $1 vers $2.",
        "imagenocrossnamespace": "Impossible de renommer un fichier vers un espace de noms autre que fichier.",
-       "nonfile-cannot-move-to-file": "Impossible de renommer quelque chose d'autre qu'un fichier vers l'espace de noms fichier.",
+       "nonfile-cannot-move-to-file": "Impossible de renommer quelque chose d'autre qu’un fichier vers l’espace de noms fichier.",
        "imagetypemismatch": "La nouvelle extension de ce fichier ne correspond pas à son type.",
        "imageinvalidfilename": "Le nom du fichier cible est incorrect",
        "fix-double-redirects": "Mettre à jour les redirections pointant vers le titre original",
        "logentry-delete-delete": "$1 {{GENDER:$2|a supprimé}} la page $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|a restauré}} la page $3",
        "logentry-delete-event": "$1 {{GENDER:$2|a modifié}} la visibilité {{PLURAL:$5|d'un événement du journal|de $5 événements du journal}} sur $3: $4",
-       "logentry-delete-revision": "$1 {{GENDER:$2|a modifié}} la visibilité {{PLURAL:$5|d'une révision|de $5 révisions}} sur la page $3: $4",
+       "logentry-delete-revision": "$1 {{GENDER:$2|a modifié}} la visibilité {{PLURAL:$5|d'une révision|de $5 révisions}} sur la page $3 : $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|a modifié}} la visibilité des événements du journal sur $3",
        "logentry-delete-revision-legacy": "$1 {{GENDER:$2|a modifié}} la visibilité des révisions sur la page $3",
        "logentry-suppress-delete": "$1 {{GENDER:$2|a supprimé}} la page $3",
index 0cb20a6..85fc18e 100644 (file)
        "excontent": "התוכן היה: \"$1\"",
        "excontentauthor": "התוכן היה: \"$1\" ({{GENDER:$2|והתורם היחיד היה|והתורמת היחידה הייתה}} \"[[Special:Contributions/$2|$2]]\")",
        "exbeforeblank": "התוכן לפני שרוקן היה: \"$1\"",
-       "delete-confirm": "מחיקת $1",
+       "delete-confirm": "מחיקת \"$1\"",
        "delete-legend": "מחיקה",
        "historywarning": "<strong>אזהרה:</strong> לדף שאתם עומדים למחוק יש היסטוריית שינויים של {{PLURAL:$1|גרסה אחת|$1 גרסאות}}:",
        "confirmdeletetext": "אתם עומדים למחוק דף יחד עם כל ההיסטוריה שלו.\n\nאנא אשרו שזה אכן מה שאתם מתכוונים לעשות, שאתם מבינים את התוצאות של מעשה כזה, ושהמעשה מבוצע בהתאם ל[[{{MediaWiki:Policy-url}}|נוהלי האתר]].",
index 685de7b..bbc474d 100644 (file)
        "filerenameerror": "Saan a managanan manen ti papeles \"$1\" iti \"$2\".",
        "filedeleteerror": "Saan a maikkat ti papeles \"$1\".",
        "directorycreateerror": "Saan a mapartuat ti direktorio \"$1\".",
+       "directoryreadonlyerror": "Ti direktorio ti \"$1\" ket mabasa laeng.",
+       "directorynotreadableerror": "Ti direktorio ti \"$1\" ket saan a mabasa.",
        "filenotfound": "Saan a mabirukan ti papeles \"$1\".",
        "unexpected": "Di nanamnama a pateg: \"$1\"=\"$2\".",
        "formerror": "Biddut: saan a maited ti porma.",
index 6f9dd52..09825c3 100644 (file)
@@ -75,7 +75,8 @@
                        "Lucas2",
                        "Taxandru",
                        "C.R.",
-                       "Elitre"
+                       "Elitre",
+                       "Laurentius"
                ]
        },
        "tog-underline": "Sottolinea i collegamenti:",
        "deadendpagestext": "Le pagine indicate di seguito sono prive di collegamenti verso altre pagine di {{SITENAME}}.",
        "protectedpages": "Pagine protette",
        "protectedpages-indef": "Solo protezioni infinite",
-       "protectedpages-summary": "Questa pagina elenca le pagine esistenti che sono attualmente protette. Per un'elenco di titoli protetti dalla creazione, vedi [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+       "protectedpages-summary": "Questa pagina elenca le pagine esistenti che sono attualmente protette. Per un elenco di titoli protetti dalla creazione, vedi [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
        "protectedpages-cascade": "Solo protezioni ricorsive",
        "protectedpages-noredirect": "Nascondi redirect",
        "protectedpagesempty": "Al momento non vi sono pagine protette",
        "protectedpages-unknown-timestamp": "Sconosciuto",
        "protectedpages-unknown-performer": "Utente sconosciuto",
        "protectedtitles": "Titoli protetti",
-       "protectedtitles-summary": "Questa pagina elenca i titoli che sono attualmente protetti dalla creazione. Per un'elenco di pagine esistenti che sono protette, vedi [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+       "protectedtitles-summary": "Questa pagina elenca i titoli che sono attualmente protetti dalla creazione. Per un elenco di pagine esistenti che sono protette, vedi [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "Al momento non esistono titoli protetti con i parametri specificati.",
        "listusers": "Elenco degli utenti",
        "listusers-editsonly": "Mostra solo utenti con dei contributi",
index f422a47..dd14b35 100644 (file)
        "nov": "Teş",
        "dec": "Gağ",
        "pagecategories": "{{PLURAL:$1|Kategoriye|Kategoriy}}",
-       "category_header": "Pelê ke kategoriya \"$1\" miyan derê",
+       "category_header": "Pelê ke kategoriya \"$1\" derê",
        "subcategories": "Kategoriyê bınêni",
        "category-media-header": "Medyawa ke kategoriya \"$1\" dera",
        "category-empty": "''Na kategoriye de hona qet nustey ya ki medya çinê.''",
index 0d2af85..c5d9c99 100644 (file)
        "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": "자매 프로젝트",
        "tooltip-feed-atom": "이 문서의 Atom 피드",
        "tooltip-t-contributions": "이 사용자의 기여 목록",
        "tooltip-t-emailuser": "이 사용자에게 이메일 보내기",
+       "tooltip-t-info": "이 문서에 대한 자세한 정보",
        "tooltip-t-upload": "파일 올리기",
        "tooltip-t-specialpages": "모든 특수 문서의 목록",
        "tooltip-t-print": "이 문서의 인쇄용 판",
index 2040d3e..54f0cb3 100644 (file)
@@ -19,7 +19,8 @@
                        "Vinitutpal",
                        "아라",
                        "बिप्लब आनन्द",
-                       "सरोज कुमार ढकाल"
+                       "सरोज कुमार ढकाल",
+                       "Bijay chaurasia"
                ]
        },
        "tog-underline": "लिंककेँ रेखांकित करू:",
@@ -45,9 +46,9 @@
        "tog-enotifminoredits": "छोट परिवर्त्तनक हेतु सेहो हमरा ई-मेल पठाऊ",
        "tog-enotifrevealaddr": "हमर ई-पत्र संकेत सूचना ई-पत्रमे देखाउ",
        "tog-shownumberswatching": "ध्यान राखैबला प्रयोक्ताक संख्या",
-       "tog-oldsig": "अखुनका दस्खत",
-       "tog-fancysig": "हसà¥\8dताà¤\95à¥\8dषरकें विकिटेक्सटक रूपमे देखू (स्वचालित श्रृंखला हीन)",
-       "tog-uselivepreview": "à¤\95रà¥\82 à¤\9aल à¤ªà¥\82रà¥\8dवावलà¥\8bà¤\95न (à¤\9cावासà¥\8dà¤\95à¥\8dरिपà¥\8dà¤\9f à¤\9aाहà¥\80) (पà¥\8dरायà¥\8bà¤\97िà¤\95)",
+       "tog-oldsig": "अखुनका दस्खत:",
+       "tog-fancysig": "दसà¥\8dà¤\96तकें विकिटेक्सटक रूपमे देखू (स्वचालित श्रृंखला हीन)",
+       "tog-uselivepreview": "करू चल पूर्वावलोकन (प्रायोगिक)",
        "tog-forceeditsummary": "हमरा सचेत करू जखन हम खाली सम्पादम सारांशमे जाइ",
        "tog-watchlisthideown": "हमर साकांक्ष सूचीसँ हमर सम्पादन नुकाउ",
        "tog-watchlisthidebots": "हमर साकांक्ष सूचीसँ स्वचालित सम्पादन हटाउ",
        "qbfind": "ताकू",
        "qbbrowse": "गवेषण करू",
        "qbedit": "सम्पादन करू",
-       "qbpageoptions": "à¤\88 à¤ªà¤¨à¥\8dना",
-       "qbmyoptions": "हमर à¤ªà¤¨à¥\8dना सभ",
+       "qbpageoptions": "à¤\88 à¤ªà¥\83षà¥\8dठ",
+       "qbmyoptions": "हमर à¤ªà¥\83षà¥\8dठ सभ",
        "faq": "त्वरित प्रश्नोत्तरी",
        "faqpage": "Project: त्वरित प्रश्नोत्तरी",
        "actions": "क्रिया सभ",
        "badaccess": "आज्ञा गल्ती",
        "badaccess-group0": "अहाँकेँ आग्रह कएल क्रियाकेँ करबाक अनुमति नै अछि।",
        "badaccess-groups": "जइ क्रियाक अहाँ आग्रह केने छी से मात्र किछु प्रयोक्ता लेल सुरक्षित अछि {{PLURAL:$2|संवर्ग|संवर्ग सभमे एकटा}}: $1",
-       "versionrequired": "मà¥\80डियाविà¤\95à¥\80à¤\95 संस्करण $1 चाही",
-       "versionrequiredtext": "à¤\90 à¤ªà¤¨à¥\8dनाà¤\95 à¤ªà¥\8dरयà¥\8bà¤\97 à¤²à¥\87ल à¤®à¥\80डियाविà¤\95à¥\80à¤\95 à¤¸à¤\82सà¥\8dà¤\95रण $1 à¤\9aाहà¥\80।\nदà¥\87à¤\96à¥\82 ee [[Special:Version|version page]]",
+       "versionrequired": "मिडियाविà¤\95à¥\80à¤\95ऽ संस्करण $1 चाही",
+       "versionrequiredtext": "à¤\90 à¤ªà¤¨à¥\8dनाà¤\95 à¤ªà¥\8dरयà¥\8bà¤\97 à¤²à¥\87ल à¤®à¤¿à¤¡à¤¿à¤¯à¤¾à¤µà¤¿à¤\95à¥\80à¤\95ऽ à¤¸à¤\82सà¥\8dà¤\95रण $1 à¤\9aाहà¥\80।\nदà¥\87à¤\96à¥\82 [[Special:Version|पà¥\83षà¥\8dठ à¤­à¤°à¥\8dसन]]",
        "ok": "ठीक अछि",
        "pagetitle-view-mainpage": "{{अन्तर्जाल}}",
        "backlinksubtitle": "← $1",
        "retrievedfrom": "प्राप्ति स्थल \"$1\"",
        "youhavenewmessages": "अहाँ लग अछि $1 ($2).",
-       "youhavenewmessagesfromusers": "अहाके लेल {{PLURAL:$3|एक अन्य सदस्य|$3 अन्य सदस्यसभ}} के $1 छि । ($2)",
-       "youhavenewmessagesmanyusers": "à¤\85हाà¤\95à¥\87 $1 à¤\9bि à¥¤ ($2)",
-       "newmessageslinkplural": "{{PLURAL:$1|एगो नया पत्र|999=नया पत्र}}",
-       "newmessagesdifflinkplural": "$1 {{PLURAL:$1|परिवर्तन|परिवर्तन सभ}}",
-       "youhavenewmessagesmulti": "$1 à¤ªà¤° à¤\85हाà¤\81 à¤²à¥\87ल à¤¨à¤µ à¤¸à¤¨à¥\8dदà¥\87श अछि",
-       "editsection": "सà¤\82पादन करू",
+       "youhavenewmessagesfromusers": "{{PLURAL:$4|अहाँके लेल}} $1 सँ {{PLURAL:$3|अन्य प्रयोक्ता|$3 प्रयोक्तासभ}} ($2)।",
+       "youhavenewmessagesmanyusers": "à¤\85हाà¤\81à¤\95à¥\87 $1 à¤¸à¤\81 à¤¬à¤¹à¥\81त à¤ªà¥\8dरयà¥\8bà¤\95à¥\8dता à¤¸à¤­ ($2)।",
+       "newmessageslinkplural": "{{PLURAL:$1|एगो नयाँ पत्र|999=नयाँ पत्र}}",
+       "newmessagesdifflinkplural": "अन्तिम {{PLURAL:$1|परिवर्त्तन|999=परिवर्त्तन सभ}}",
+       "youhavenewmessagesmulti": "$1 à¤ªà¤° à¤\85हाà¤\81 à¤²à¥\87ल à¤¨à¤µ à¤ªà¤¤à¥\8dर अछि",
+       "editsection": "समà¥\8dपादन करू",
        "editold": "सम्पादित करू",
        "viewsourceold": "जड़ि देखू",
        "editlink": "सम्पादन करू",
        "viewsourcelink": "जड़ि देखू",
-       "editsectionhint": "सà¤\82पादन शाखा: $1",
+       "editsectionhint": "समà¥\8dपादन शाखा: $1",
        "toc": "विषय-सूची",
        "showtoc": "देखाऊ",
        "hidetoc": "नुकाऊ",
        "confirmable-confirm": "कि {{GENDER:$1|अहाँ}} छी?",
        "confirmable-yes": "हँ",
        "confirmable-no": "नै",
-       "thisisdeleted": "देखू वा जाउ $1?",
-       "viewdeleted": "देखू $1?",
+       "thisisdeleted": "$1 देखू वा फेर सँ आनु?",
+       "viewdeleted": "$1 के देखाऊ?",
        "restorelink": "{{PLURAL:$1|एकटा मेटाएल सम्पादन|$1 मेटाएल सम्पादन सभ}}",
        "feedlinks": "सूचक:",
        "feed-invalid": "अमान्य सूचक प्रकार मासुल",
        "feed-unavailable": "अधिकृत सूचक उपलब्ध नै अछि",
-       "site-rss-feed": "$1 आरएसएस फीड",
-       "site-atom-feed": "$1 à¤\85णà¥\81 à¤«à¥\80ड",
-       "page-rss-feed": "\"$1\" à¤\86र.à¤\8fस.à¤\8fस. à¤¸à¥\82à¤\9aना",
-       "page-atom-feed": "\"$1\" à¤\85णà¥\81 à¤¸à¥\82़à¤\9aना",
+       "site-rss-feed": "$1 आर.एस.एस. सूचक",
+       "site-atom-feed": "$1 à¤\85णà¥\81 à¤¸à¥\82à¤\9aà¤\95",
+       "page-rss-feed": "\"$1\" à¤\86र.à¤\8fस.à¤\8fस. à¤¸à¥\82à¤\9aà¤\95",
+       "page-atom-feed": "\"$1\" à¤\85णà¥\81 à¤¸à¥\82à¤\9aà¤\95",
        "feed-atom": "अणु",
        "feed-rss": "आर.एस.एस.",
-       "red-link-title": "$1 (पनà¥\8dना उपलब्ध नै अछि)",
+       "red-link-title": "$1 (पà¥\83षà¥\8dठ उपलब्ध नै अछि)",
        "sort-descending": "घटैत क्रममे छाँटू",
        "sort-ascending": "बढ़ैत क्रममे छाँटू",
-       "nstab-main": "पà¥\83षà¥\8dठ",
-       "nstab-user": "à¤\89पयà¥\8bà¤\97à¤\95रà¥\8dताà¤\95 पृष्ठ",
-       "nstab-media": "मà¥\80डिया à¤ªà¤¨à¥\8dना",
-       "nstab-special": "विशिषà¥\8dà¤\9f à¤ªà¤¨à¥\8dना",
-       "nstab-project": "परियà¥\8bà¤\9cना à¤ªà¤¨à¥\8dना",
-       "nstab-image": "फाà¤\87ल",
-       "nstab-mediawiki": "सà¤\82दà¥\87श",
-       "nstab-template": "नमà¥\82ना",
-       "nstab-help": "सहायता à¤ªà¤¨à¥\8dना",
+       "nstab-main": "पनà¥\8dना",
+       "nstab-user": "पà¥\8dरयà¥\8bà¤\95à¥\8dता पृष्ठ",
+       "nstab-media": "मिडिया à¤ªà¥\83षà¥\8dठ",
+       "nstab-special": "विशà¥\87ष à¤ªà¥\83षà¥\8dठ",
+       "nstab-project": "परियà¥\8bà¤\9cना à¤ªà¥\83षà¥\8dठ",
+       "nstab-image": "सà¤\82à¤\9aिà¤\95ा",
+       "nstab-mediawiki": "पतà¥\8dर",
+       "nstab-template": "à¤\86à¤\95à¥\83ति",
+       "nstab-help": "सहायता à¤ªà¥\83षà¥\8dठ",
        "nstab-category": "संवर्ग",
-       "nosuchaction": "एहेन कोनो क्रिया नै",
+       "nosuchaction": "एहेन कोनो क्रिया नै अछि",
        "nosuchactiontext": "ऐ सार्वत्रिक विभव संकेत द्वारा निर्दिष्ट क्रिया अमान्य अछि।\nअहाँ सार्वत्रिक विभव संकेतक गलत टंकण केने हएब, वा कोनो गलत लिंकक पाछाँ गेल हएब।\nई {{अन्तर्जाल}} प्रयोक्ता द्वारा प्रयुक्त तंत्रांशमे स्थित कोनो दोषक संकेत सेहो कऽ सकैए।",
-       "nosuchspecialpage": "à¤\8fहà¥\87न à¤\95à¥\8bनà¥\8b à¤µà¤¿à¤¶à¥\87ष à¤ªà¤¨à¥\8dना à¤¨à¥\88",
+       "nosuchspecialpage": "à¤\8fहà¥\87न à¤\95à¥\8bनà¥\8b à¤µà¤¿à¤¶à¥\87ष à¤ªà¥\83षà¥\8dठ à¤¨à¥\88 à¤\85à¤\9bि",
        "nospecialpagetext": "<strong> अहाँ एकटा अमान्य पन्नाक आग्रह केने छी। </strong>\nमान्य विशेष पन्नाक सूची एतए अछि [[Special:SpecialPages|{{int:specialpages}}]]।",
        "error": "भ्रम",
        "databaseerror": "दत्तनिधि भ्रम",
        "blocked-mailpassword": "अहाँक अनिकेत सम्पादन लेल प्रतिबन्धित अछि, आ दुरुपयोग रोकबा लेल कूटशब्द प्रत्याहरण सेवा ऐ लेल उपलब्ध नै अछि।",
        "eauthentsent": "एकटा पावती ई-पत्र निर्धारित ई-पत्र संकेतपर पठा देल गेल अछि।\nऐ खातापर कोनो दोसर ई-पत्र पठाएल जएबासँ पहिने, अहाँकेँ ऐ ई-पत्रक निर्देशक पालन करए पड़त, जइसँ ई पुष्ट भऽ सकए जे ई खाता वास्तवमे अहींक अछि।",
        "throttled-mailpassword": "एकटा कूटशब्द स्मारक पहिनहिये पठाएल गेल अछि, {{PLURAL:$1|घण्टा|$1 घण्टा}}क भीतर।\nदुरुपयोग रोकबा लेल, मात्र एकटा कूटशब्द {{PLURAL:$1|घण्टा|$1 घण्टा}}मे पठाएल जाएत।",
-       "mailerror": "à¤\88-पतà¥\8dर à¤ªà¤ à¥\87बामà¥\87 à¤¦à¤¿à¤\95à¥\8dà¤\95त: $1",
-       "acct_creation_throttle_hit": "à¤\90 à¤µà¤¿à¤\95à¥\80à¤\95 à¤\86à¤\97नà¥\8dतà¥\81à¤\95 à¤\85हाà¤\81à¤\95 à¤\85निà¤\95à¥\87तà¤\95 à¤ªà¥\8dरयà¥\8bà¤\97सà¤\81 à¤\95ालà¥\8dहि à¤¬à¤¨à¥\87लनà¥\8dहि à¤\85à¤\9bि {{PLURAL:$1|1 à¤\96ाता|$1 à¤\96ाता}}",
-       "emailauthenticated": "à¤\85हाà¤\81à¤\95 à¤\88-पतà¥\8dर à¤¸à¤\82à¤\95à¥\87त $2 à¤\95à¥\87à¤\81 $3 à¤ªà¤° सत्यापित भेल।",
-       "emailnotauthenticated": "अहाँक ई-पत्र संकेत अखन धरि सत्यापित नै भेल अछि।",
-       "noemailprefs": "à¤\88 à¤¸à¤­ à¤\89तà¥\8dपाद à¤\95ाà¤\9c à¤\95ऽ à¤¸à¤\95à¤\8f à¤¤à¥\88 à¤²à¥\87ल à¤\8fà¤\95à¤\9fा à¤\88-पतà¥\8dर à¤¸à¤\82à¤\95à¥\87तà¤\95 à¤¨à¤¿à¤°à¥\8dदà¥\87श à¤\85पन à¤µà¤¿à¤\95लà¥\8dपमà¥\87 à¤\95रà¥\82।",
-       "emailconfirmlink": "à¤\85पन à¤\88-पतà¥\8dर à¤¸à¤\82à¤\95à¥\87त à¤¸à¤¤à¥\8dयापित à¤\95रà¥\82",
-       "invalidemailaddress": "à¤\85मानà¥\8dय à¤ªà¥\8dरारà¥\82पà¤\95 à¤\95ारण à¤\90 à¤\88-पतà¥\8dर à¤¸à¤\82à¤\95à¥\87तà¤\95à¥\87à¤\81 à¤¸à¥\8dवà¥\80à¤\95ार à¤¨à¥\88 à¤\95à¤\8fल à¤\9cा à¤¸à¤\95à¥\88à¤\8f।\nà¤\8fà¤\95à¤\9fा à¤®à¤¾à¤¨à¥\8dय à¤\88-पतà¥\8dर à¤¸à¤\82à¤\95à¥\87त à¤²à¤¿à¤\96à¥\82 à¤µà¤¾ à¤\93à¤\87 à¤¸à¥\8dथानà¤\95à¥\87à¤\81 à¤\96ालà¥\80 à¤\95रà¥\82।",
-       "cannotchangeemail": "à¤\96ाता à¤\88-पतà¥\8dर à¤¸à¤\82à¤\95à¥\87त à¤\90 à¤µà¤¿à¤\95à¥\80पर बदलल नै जा सकैए।",
-       "emaildisabled": "à¤\88 à¤¸à¤¾à¤\87à¤\9f ई-पत्र नै पठाएत।",
+       "mailerror": "à¤\88-पतà¥\8dर à¤ªà¤ à¥\87बामà¥\87 à¤¤à¥\8dरà¥\81à¤\9fà¥\80: $1",
+       "acct_creation_throttle_hit": "à¤\85हाà¤\81à¤\95à¥\87 à¤\86à¤\87॰पि. à¤ªà¤¤à¤¾à¤¸à¤\81 à¤\86à¤\8fल à¤\86à¤\97à¤\82तà¥\81à¤\95 à¤\9aà¥\8cबà¥\80स à¤\98णà¥\8dà¤\9fा à¤¸à¤\81 à¤¬à¥\88सà¥\80 à¤\88 à¤µà¤¿à¤\95िमà¥\87 {{PLURAL:$1|à¤\8fà¤\95 à¤\96ाता|$1 à¤\96ाता}} à¤¬à¤¨à¥\8cलà¤\95 à¤\85à¤\9bि, à¤\87 à¤¸à¤®à¤¯à¤¾à¤µà¤§à¤¿à¤®à¥\87 à¤\88 à¤\85धिà¤\95तम à¤¸à¤¿à¤®à¤¾ à¤\9bà¥\80। à¤\85तà¤\83 à¤\85à¤\96न à¤\88 à¤\86à¤\87॰पि. à¤ªà¤¤à¤¾à¤\95à¥\87 à¤ªà¥\8dरयà¥\8bà¤\97 à¤\95रà¤\8f à¤µà¤¾à¤²à¤¾ à¤\86à¤\97à¤\82तà¥\81à¤\95 à¤\86र à¤\95à¥\8bनà¥\8b à¤\96ाता à¤¨à¥\88 à¤\96à¥\8bà¤\87ल à¤¸à¤\95à¤\8fत à¤\85à¤\9bि à¥¤",
+       "emailauthenticated": "à¤\85हाà¤\81à¤\95 à¤\88-पतà¥\8dर à¤¸à¤\82à¤\95à¥\87त $2 à¤\95à¥\87à¤\81 $3 à¤¬à¤\9cà¥\87 सत्यापित भेल।",
+       "emailnotauthenticated": "अहाँक ई-पत्र संकेत अखन धरि सत्यापित नै भेल अछि।\nनिचा देल गेल कोनो सुविधा के लेल अहाँके ई-पत्र नै भेजल जाएत।",
+       "noemailprefs": "à¤\87 à¤¸à¥\81विधा à¤¸à¤­ à¤\95ऽ à¤ªà¥\8dरयà¥\8bà¤\97 à¤\95रà¤\8f à¤\95à¥\87 à¤²à¥\87ल à¤\85पन à¤µà¤¿à¤\95लà¥\8dपमà¥\87 à¤\88-पतà¥\8dर à¤ªà¤¤à¤¾ à¤°à¤¾à¤\96à¥\81।",
+       "emailconfirmlink": "à¤\85पन à¤\88-पतà¥\8dर à¤¸à¤\82à¤\95à¥\87त à¤¸à¤¤à¥\8dयापित à¤\95रà¥\81",
+       "invalidemailaddress": "à¤\85मानà¥\8dय à¤ªà¥\8dरारà¥\82पà¤\95 à¤\95ारण à¤\90 à¤\88-पतà¥\8dर à¤¸à¤\82à¤\95à¥\87तà¤\95à¥\87à¤\81 à¤¸à¥\8dवà¥\80à¤\95ार à¤¨à¥\88 à¤\95à¤\8fल à¤\9cा à¤¸à¤\95à¥\88à¤\8f।\nà¤\8fà¤\95à¤\9fा à¤®à¤¾à¤¨à¥\8dय à¤\88-पतà¥\8dर à¤¸à¤\82à¤\95à¥\87त à¤²à¤¿à¤\96à¥\82 à¤µà¤¾ à¤\93à¤\87 à¤¸à¥\8dथानà¤\95à¥\87à¤\81 à¤\96ालà¥\80 à¤\95रà¥\81।",
+       "cannotchangeemail": "à¤\96ाता à¤\88-पतà¥\8dर à¤¸à¤\82à¤\95à¥\87त à¤\90 à¤µà¤¿à¤\95िपर बदलल नै जा सकैए।",
+       "emaildisabled": "à¤\88 à¤\85नà¥\8dतरà¥\8dà¤\9cाल ई-पत्र नै पठाएत।",
        "accountcreated": "खाता खुजि गेल",
-       "accountcreatedtext": "$1 लेल प्रयोक्ता खाता खुजि गेल।",
+       "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|वार्ता]]) के लेल खाता खोलल गेल अछि।",
        "createaccount-title": "{{अन्तर्जाल}} लेल खाता निर्माण",
        "createaccount-text": "कियो अहाँक ई-पत्र संकेत लेल एकटा खाता {{अन्तर्जाल}} पर खोललन्हि ($4) नाम भेल \"$2\", कूटशब्द भेल \"$3\"।\nअहाँ सम्प्रवेश करू आ अपन कूटशब्द बदलू।\n\nअहाँ ऐ संदेशकेँ बिसरि सकै छी, जँ ई खाता भ्रमवश बनल हुअए।",
        "login-throttled": "अहाँ ढ़ेर रास सम्प्रवेश प्रयास केलहुँ।\nफेर प्रयास करबासँ पहिने कने काल थम्हू।",
        "login-abort-generic": "अहाँक सम्प्रवेश सफल नै भेल- खतम",
+       "login-migrated-generic": "अहाँके खाता माइग्रेट कएल गेल अछि, आर अहाँके प्रयोक्ता नाम आब ई विकिमे नै अछि।",
        "loginlanguagelabel": "भाषा : $1",
        "suspicious-userlogout": "अहाँक निष्क्रमणक अनुरोध नै मानल गेल कारण ई लागल जे ई पुरान गवेषकक लागि वा दोसराइत उपस्मृति द्वारा पठाओल गेल छल।",
        "createacct-another-realname-tip": "मूल नाम वैकल्पिक अछि।\nजँ अहाँ एकरा देबा लेल प्रयोग करै छी, ई अहाँकेँ काजक श्रेय देबा लेल एकर प्रयोग कएल जाएत।",
        "pt-login-button": "सम्प्रवेश",
        "pt-createaccount": "खाता खोलू",
        "pt-userlogout": "निष्क्रमण",
-       "php-mail-error-unknown": "पी.एच.पी.क संदेश कार्य() मे अज्ञात दोष",
-       "user-mail-no-addy": "बिन ई-पत्र संकेतक ई-पत्र पठेबाक प्रयास",
-       "user-mail-no-body": "एकटा खाली वा बहुत कनिका ई-पत्र भेजवाक प्रयास कल गेल ।",
+       "php-mail-error-unknown": "पी.एच.पी.कऽ समाद कार्य() मे अज्ञात दोष भेल।",
+       "user-mail-no-addy": "बिन ई-पत्र संकेतक ई-पत्र पठेबाक प्रयास कएल गेल।",
+       "user-mail-no-body": "एकटा खाली वा बहुत कनिका ई-पत्र भेजवाक प्रयास कल गेल।",
        "changepassword": "कूटशब्द बदलू",
-       "resetpass_announce": "à¤\85हाà¤\81à¤\95 à¤\85सà¥\8dथायà¥\80 à¤\88-पतà¥\8dर à¤µà¤¿à¤§à¥\8dयादà¥\87शसà¤\81 à¤¸à¤®à¥\8dपà¥\8dरवà¥\87श à¤\95à¥\87नà¥\87 à¤\9bà¥\80।\nसमà¥\8dपà¥\8dरवà¥\87श à¤¸à¤®à¥\8dपà¥\82रà¥\8dण à¤\95रबा à¤²à¥\87ल, à¤\85हाà¤\81 à¤\8fà¤\95à¤\9fा à¤¨à¤µ à¤\95à¥\82à¤\9fशबà¥\8dद à¤\8fतà¤\8f à¤¨à¤¿à¤°à¥\8dधारित à¤\95रà¥\82:",
+       "resetpass_announce": "समà¥\8dपà¥\8dरवà¥\87श à¤¸à¤®à¥\8dपà¥\82रà¥\8dण à¤\95रबा à¤²à¥\87ल, à¤\85हाà¤\81 à¤\8fà¤\95à¤\9fा à¤¨à¤µ à¤\95à¥\82à¤\9fशबà¥\8dद à¤\8fतà¤\8f à¤¨à¤¿à¤°à¥\8dधारित à¤\95रà¥\81।",
        "resetpass_text": "<!-- पाठ एतऽ लिखू -->",
        "resetpass_header": "खाता कूटशब्द बदलू",
        "oldpassword": "पुरान कूटशब्द",
        "retypenew": "नव कूटशब्द फेरसँ टंकित करू",
        "resetpass_submit": "कूटशब्द बनाउ आ सम्प्रवेश करू",
        "changepassword-success": "अहाँक कूटशब्द सफलतासँ बदलि देल गेल!",
-       "changepassword-throttled": "अहाँ ढ़ेर रास सम्प्रवेश प्रयास केलहुँ।\nफेर प्रयास करबासँ पहिने कने काल थम्हू।",
-       "resetpass_forbidden": "à¤\95à¥\82à¤\9fशबà¥\8dद à¤¸à¤­ à¤¨à¥\88 à¤¬à¤¦à¤²à¤² à¤\9cा à¤¸à¤\95à¥\88à¤\8f।",
-       "resetpass-no-info": "à¤\85हाà¤\81à¤\95à¥\87à¤\81 à¤\90 à¤ªà¤¨à¥\8dनाà¤\95à¥\87à¤\81 à¤ªà¤¢à¤¼à¤¬à¤¾à¤²à¥\87 सम्प्रवेशित हुअए पड़त।",
+       "changepassword-throttled": "अहाँ ढ़ेर रास सम्प्रवेश प्रयास केलहुँ।\nफेर प्रयास $1 करबासँ पहिने कने काल थम्हू।",
+       "resetpass_forbidden": "कूटशब्द नै बदलल जा सकैए।",
+       "resetpass-no-info": "à¤\85हाà¤\81à¤\95à¥\87à¤\81 à¤\90 à¤ªà¤¨à¥\8dनाà¤\95à¥\87à¤\81 à¤¸à¥\8bà¤\9dà¥\87 à¤ªà¥\8dरयà¥\8bà¤\97 à¤\95रबालà¥\87ल सम्प्रवेशित हुअए पड़त।",
        "resetpass-submit-loggedin": "कूटशब्द बदलू",
        "resetpass-submit-cancel": "खतम करू",
        "resetpass-wrong-oldpass": "अमान्य अस्थायी वा अखुनका कूटशब्द।\nअहाँ पहिनहिये सफलतासँ कूटशब्द बदलि लेने छी वा एकटा नव अस्थायी कूटशब्द लेल आग्रह केने छी।",
-       "resetpass-recycled": "रीसेट करएके लेल नयाँ कूटशब्दमे कृपया अपन वर्तमान कूटशब्द नै द के नयाँ देल जाउ।",
-       "resetpass-temp-password": "तात्कालिक कूटशब्द",
-       "resetpass-abort-generic": "कूटशब्दमें बदलाव कोनो एक्सटेंशन द्वारा रोक देल गएल अछि ।",
-       "resetpass-expired": "अहाँके कूटशब्दक वैधता अवधि खत्तम भ गेल अछि । कृपया सम्प्रवेशित करवाक लेल नयाँ कूटशब्द राखु।",
+       "resetpass-recycled": "रीसेट करएके लेल नयाँ कूटशब्दमे कृपया अपन वर्तमान कूटशब्द नै द के नयाँ कूटशब्द देल जाउ।",
+       "resetpass-temp-emailed": "अहाँ अखन एकटा अस्थायी ई-पत्र कोड सँ सम्प्रवेशित केनए छी। सम्प्रवेश पूर्ण करए के लेल अहाँ के एतए नयाँ कूटशब्द राखए पडत:",
+       "resetpass-temp-password": "तात्कालिक कूटशब्द:",
+       "resetpass-abort-generic": "कूटशब्दमे बदलाव कोनो एक्सटेंशनद्वारा रोकल गएल अछि।",
+       "resetpass-expired": "अहाँके कूटशब्दक वैधता अवधि खत्तम भऽ गेल अछि । कृपया सम्प्रवेशित करवाक लेल नयाँ कूटशब्द राखु।",
+       "resetpass-expired-soft": "अहाँके कूटशब्दकऽ वैधता अवधि समाप्त भऽ गेल आर कूटशब्द परिवार्तान करवाक आवश्यकता अछि। कृपया एगो नव कूटशब्द राखु, वा पाछु रिसेट करवाक लेल \"{{int:resetpass-submit-cancel}}\" क्लिक करु।",
        "passwordreset": "कूटशब्द फेरसँ बनाउ",
        "passwordreset-text-one": "अपन कूटशब्द रीसेट करवाक लेल इ फारम भरु ।",
        "passwordreset-text-many": "{{PLURAL:$1|ई-पत्रके माध्यमसऽ एकटा अस्थायी कूटशब्द पावैलेल कोनो एकटा डिब्बा भरु ।}}",
        "parser-template-loop-warning": "नमूना परिक्रम भेटल: [[$1]]",
        "parser-template-recursion-depth-warning": "नमूना प्रत्यावर्तन गहीर सीमा पार केलक ($1)",
        "language-converter-depth-warning": "भाषान्तर गहीर सीमा पार केलक ($1)",
+       "node-count-exceeded-category": "पन्ना नोड गिनती पार क्या गेल अछि",
+       "node-count-exceeded-category-desc": "ई पन्ना अधिकतम नोड गिनती पार केन अछि",
+       "node-count-exceeded-warning": "पन्ना नोड गिनती पार केन अछि",
+       "expansion-depth-exceeded-category": "ई पन्ना विस्तार गहिराई पार केन",
+       "expansion-depth-exceeded-category-desc": "ई पन्ना अधिकतमरुपमे विस्तार गहिराई पार के अछि",
+       "expansion-depth-exceeded-warning": "पन्ना विस्तार गहिराई पार केन अछि",
+       "parser-unstrip-loop-warning": "Unstrip लूप पता लाग्ल अछि",
        "undo-success": "ई सम्पादन पूर्ववत बदलल जा सकैए।\nकृपा क' नीचाँक तुलनाक जाँच करू ई देखैले जे ई वएह भेल अछि जे अहाँ चाहै छलहुँ, आ तखन सम्पादन ख़तम करबा लेल नीचाँक परिवर्तन सुरक्षित करू ।",
        "undo-failure": "मध्यवर्ती विरोधी सम्पादनक कारण ऐ सम्पादनकेँ खतम नै कएल जा सकैए।",
        "undo-norev": "ई सम्पादन खतम नै कएला जा सकैए कारण ई अछि नै वा मेटा देल गेल अछि।",
        "tooltip-feed-atom": "ऐ पन्ना लेल अणु समदिया",
        "tooltip-t-contributions": "ऐ प्रयोक्ताक योगदानक सूची देखू",
        "tooltip-t-emailuser": "ऐ प्रयोक्ताकेँ ई-पत्र पठाउ",
+       "tooltip-t-info": "ई पन्ना के बारेमे थप जानकारी",
        "tooltip-t-upload": "चित्र आकि मीडिया फाइलकेँ अपलोड करू",
        "tooltip-t-specialpages": "सभटा विशेष पन्नाक सूची",
        "tooltip-t-print": "ऐ पृष्ठक छपैबला रूप",
index 7f81062..f762469 100644 (file)
        "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\".",
+       "directoryreadonlyerror": "'A cartella \"$1\" è de lettura surtanto.",
+       "directorynotreadableerror": "'A cartella \"$1\" nun se può liegge.",
        "filenotfound": "Nun se può truvà 'o file \"$1\".",
        "unexpected": "Valore imprevisto: \"$1\"=\"$2\".",
        "formerror": "Sbàglio: nun se può mannà 'o modulo",
index edf5578..f0b4437 100644 (file)
        "filerenameerror": "Klarte ikke å døpe om filen «$1» til «$2».",
        "filedeleteerror": "Klarte ikke å slette filen «$1».",
        "directorycreateerror": "Klarte ikke å opprette mappe «$1».",
+       "directoryreadonlyerror": "Folder \"$1\" er skrivebeskyttet.",
+       "directorynotreadableerror": "Folder \"$1\" er ikke lesbar.",
        "filenotfound": "Klarte ikke å finne filen «$1».",
        "unexpected": "Uventet verdi: «$1»=«$2».",
        "formerror": "Feil: klarte ikke å sende skjema",
        "unknown_extension_tag": "Ukjent tilleggsmerking «$1»",
        "duplicate-defaultsort": "Advarsel: Standardsorteringen «$2» tar over for den tidligere sorteringen «$1».",
        "duplicate-displaytitle": "<strong>Advarsel:</strong> Visningstittel \"$2\" erstatter tidligere visningstittel \"$1\".",
+       "invalid-indicator-name": "<p>Feil:</strong> Sidestatus-indikatornes <code>navn</code>-attributt kan ikke være tomt.",
        "version": "Versjon",
        "version-extensions": "Installerte utvidelser",
        "version-skins": "Installerte drakter",
        "revdelete-uname-unhid": "brukernavn synlig",
        "revdelete-restricted": "begrensninger gjelder også administratorer",
        "revdelete-unrestricted": "fjernet begrensninger for administratorer",
+       "logentry-merge-merge": "$1 {{GENDER:$2|slo sammen}} $3 i $4 (versjonene t.o.m. $5)",
        "logentry-move-move": "$1 {{GENDER:$2|flyttet}} siden $3 til $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|flyttet}} siden $3 til $4 uten å etterlate en omdirigering",
        "logentry-move-move_redir": "$1 {{GENDER:$2|flyttet}} siden $3 til $4 over en omdirigering",
        "api-error-stashfailed": "Internal error: tjeneren greide ikke å lagre midlertidig fil.",
        "api-error-publishfailed": "Intern feil: Tjeneren greide ikke å publisere midlertidig fil.",
        "api-error-stasherror": "Det oppstod en feil mens filen ble lastet opp til stash.",
+       "api-error-stashedfilenotfound": "Den temporære filen ble ikke funnet ved forsøk på å laste den opp fra lageret.",
+       "api-error-stashpathinvalid": "Stien som den temporære filen skulle vært funnet via var ugyldig.",
+       "api-error-stashfilestorage": "Det oppsto en feil når filen skulle lastes opp til lageret.",
+       "api-error-stashzerolength": "Tjenermaskinen kunne i lagre den temporære filen fordi den hadde null lengde.",
+       "api-error-stashnotloggedin": "Du må være innlogget for å lagre filene i opplastingslageret.",
        "api-error-timeout": "Serveren svarte ikke innenfor forventet tid.",
        "api-error-unclassified": "En ukjent feil har oppstått",
        "api-error-unknown-code": "Ukjent feil: \"$1\"",
index 87a6aea..6a69d18 100644 (file)
@@ -78,7 +78,7 @@
        "tog-watchmoves": "Pagina’s en bestanden die ik hernoem automatisch volgen",
        "tog-watchdeletion": "Pagina’s en bestanden die ik verwijder automatisch volgen",
        "tog-watchrollback": "Pagina's waarop ik heb teruggedraaid automatisch volgen",
-       "tog-minordefault": "Mijn bewerkingen standaard als ‘klein’ markeren",
+       "tog-minordefault": "Mijn bewerkingen standaard als kleine bewerking markeren",
        "tog-previewontop": "Voorvertoning boven bewerkingsveld weergeven",
        "tog-previewonfirst": "Voorvertoning bij eerste bewerking weergeven",
        "tog-enotifwatchlistpages": "Mij e-mailen bij bewerkingen van pagina’s of bestanden op mijn volglijst",
        "qbmyoptions": "Mijn pagina's",
        "faq": "Veelgestelde vragen",
        "faqpage": "Project:Veelgestelde vragen",
-       "actions": "Acties",
+       "actions": "Handelingen",
        "namespaces": "Naamruimten",
        "variants": "Varianten",
        "navigation-heading": "Navigatiemenu",
        "filerenameerror": "\"$1\" kon niet hernoemd worden naar \"$2\".",
        "filedeleteerror": "Bestand \"$1\" kon niet verwijderd worden.",
        "directorycreateerror": "De map \"$1\" kon niet aangemaakt worden.",
+       "directoryreadonlyerror": "De map \"$1\" is alleen-lezen.",
+       "directorynotreadableerror": "De map \"$1\" kan niet gelezen worden.",
        "filenotfound": "Bestand \"$1\" kon niet gevonden worden.",
        "unexpected": "Onverwachte waarde: \"$1\"=\"$2\".",
        "formerror": "Fout: formulier kon niet verzonden worden",
        "cannotchangeemail": "Het e-mailadres voor een gebruiker kan op deze wiki niet gewijzigd worden.",
        "emaildisabled": "Deze site kan geen e-mails verzenden.",
        "accountcreated": "Gebruiker aangemaakt",
-       "accountcreatedtext": "Het gebruikersaccount voor [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|overleg]]) is aangemaakt.",
+       "accountcreatedtext": "De gebruiker [[{{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.",
        "user-mail-no-addy": "Geprobeerd een e-mail te verzenden zonder een e-mailadres.",
        "user-mail-no-body": "Er is geprobeerd een e-mail te verzenden zonder inhoud of met een hele korte inhoud.",
        "changepassword": "Wachtwoord wijzigen",
-       "resetpass_announce": "Voer een nieuw wachtwoord in om het aanmelden te voltooien:",
+       "resetpass_announce": "Voer een nieuw wachtwoord in om het aanmelden te voltooien.",
        "resetpass_text": "<!-- Voeg hier tekst toe -->",
        "resetpass_header": "Wachtwoord wijzigen",
        "oldpassword": "Huidige wachtwoord:",
        "resetpass-submit-loggedin": "Wachtwoord wijzigen",
        "resetpass-submit-cancel": "Annuleren",
        "resetpass-wrong-oldpass": "Het huidige of tijdelijke wachtwoord is ongeldig.\nMogelijk hebt u uw wachtwoord al gewijzigd of een nieuw tijdelijk wachtwoord aangevraagd.",
-       "resetpass-recycled": "Gelieve uw wachtwoord op iets anders dan uw huidige wachtwoord in te stellen.",
-       "resetpass-temp-emailed": "U bent aangemeld met een tijdelijk code die u per e-mail hebt ontvangen.\nOm het inloggen te voltooien moet u hier een nieuw wachtwoord instellen:",
+       "resetpass-recycled": "Wijzig uw wachtwoord naar iets anders dan uw huidige wachtwoord.",
+       "resetpass-temp-emailed": "U bent aangemeld met een tijdelijk code die u per e-mail hebt ontvangen.\nOm het aanmelden te voltooien moet u hier een nieuw wachtwoord instellen:",
        "resetpass-temp-password": "Tijdelijk wachtwoord:",
        "resetpass-abort-generic": "De wachtwoordwijziging is afgebroken door een uitbreiding.",
        "resetpass-expired": "Uw wachtwoord is verlopen. Stel een nieuw wachtwoord om aan te melden.",
        "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 ontvangt u hier berichten die niet voor u bedoeld zijn.\nAls u dat wilt voorkomen, [[Special:UserLogin/signup|registreer u]] of [[Special:UserLogin|meld u aan]] om verwarring met andere anonieme gebruikers te voorkomen.''",
        "noarticletext": "Deze pagina bevat geen tekst.\nU 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.\nU 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 u mag de pagina niet aanmaken.",
-       "missing-revision": "De versie #$1 van de pagina \"{{FULLPAGENAME}} bestaat niet.\n\nDit wordt meestal veroorzaakt door het volgen van een verouderde koppeling naar een pagina die is verwijderd.\nMeer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
+       "missing-revision": "De versie #$1 van de pagina \"{{FULLPAGENAME}}\" bestaat niet.\n\nDit wordt meestal veroorzaakt door het volgen van een verouderde koppeling naar een pagina die is verwijderd.\nMeer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
        "userpage-userdoesnotexist": "U bewerkt een gebruikerspagina van een gebruiker die niet bestaat (gebruiker \"$1\").\nControleer of u deze pagina wel wilt aanmaken of bewerken.",
        "userpage-userdoesnotexist-view": "De gebruiker \"$1\" is niet geregistreerd.",
        "blocked-notice-logextract": "Deze gebruiker is op het moment geblokkeerd.\nDe laatste regel uit het blokkeerlogboek wordt hieronder ter referentie weergegeven:",
        "content-not-allowed-here": "De inhoud \"$1\" is niet toegestaan op pagina [[$2]].",
        "editwarning-warning": "Als u deze pagina verlaat verliest u mogelijk wijzigingen die u hebt gemaakt.\nAls u bent aangemeld, kunt u deze waarschuwing uitschakelen in het tabblad \"{{int:prefs-editing}}\" in uw voorkeuren.",
        "editpage-notsupportedcontentformat-title": "Inhoudsformaat niet ondersteund",
-       "editpage-notsupportedcontentformat-text": "Het inhoudsformaat $1 wordt niet ondersteund door het inhoudsmodel $2.",
+       "editpage-notsupportedcontentformat-text": "Het inhoudstype $1 wordt niet ondersteund door het inhoudsmodel $2.",
        "content-model-wikitext": "wikitekst",
        "content-model-text": "tekst zonder opmaak",
        "content-model-javascript": "JavaScript",
        "currentrev": "Huidige versie",
        "currentrev-asof": "Huidige versie van $2 om $3",
        "revisionasof": "Versie van $2 om $3",
-       "revision-info": "Versie door {{GENDER:$6|$2}} op $4 om $5 $7",
+       "revision-info": "Versie door {{GENDER:$6|$2}} op $4 om $5$7",
        "previousrevision": "← Oudere versie",
        "nextrevision": "Nieuwere versie →",
        "currentrevisionlink": "Huidige versie",
        "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-suppressed-text-permission": "Deze paginaversie is <strong>verwijderd</strong>. Meer gegevens zijn mogelijk te vinden in het  [{{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].",
        "rev-suppressed-no-diff": "U kunt de verschillen niet bekijken, omdat een van de versies is '''verwijderd'''.",
        "rev-deleted-unhide-diff": "Een van de bewerkingen voor de verschillen die u hebt opgevraagd is '''verwijderd'''.\nEr kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].\nAls u wilt kunt u [$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 u wilt kunt u [$1 deze versie bekijken].",
-       "rev-deleted-diff-view": "Een van de versies voor de verschillen die u hebt opgevraagd, is '''verwijderd'''.\nU kunt deze verschillen bekijken. Er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
+       "rev-deleted-diff-view": "Een van de versies voor de verschillen die u hebt opgevraagd, is '''verwijderd'''.\nU kunt deze verschillen bekijken. Meer gegevens zijn mogelijk te vinden 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'''.\nU kunt deze verschillen bekijken. Er kunnen details te vinden zijn in het [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} verbergingslogboek].",
        "rev-delundel": "weergeven/verbergen",
        "rev-showdeleted": "weergeven",
        "logdelete-text": "Verwijderde logboekregels zijn nog zichtbaar in de logboeken, maar delen van de inhoud zijn niet openbaar.",
        "revdelete-text-others": "Andere beheerders kunnen de verborgen inhoud nog steeds inzien en weer zichtbaar maken, tenzij er aanvullende beperkingen zijn ingesteld.",
        "revdelete-confirm": "Bevestig dat u dit wilde doen, dat u de consequenties begrijpt en dat u dit doet in overeenstemming met het geldende [[{{MediaWiki:Policy-url}}|beleid]].",
-       "revdelete-suppress-text": "Gebruik versies verbergen '''alleen''' in de volgende gevallen:\n* Mogelijk smadelijke informatie;\n* Ongepaste persoonlijke gegevens, zoals:\n*: ''adres, telefoonnummers, identificatienummer, enzovoort.''",
+       "revdelete-suppress-text": "Gebruik versies verbergen <strong>alleen</strong> in de volgende gevallen:\n* Mogelijk smadelijke informatie;\n* Ongepaste persoonlijke gegevens, zoals:\n*: <em>adres, telefoonnummers, nationaal identificatienummer, enzovoort.</em>",
        "revdelete-legend": "Zichtbaarheidsbeperkingen instellen",
        "revdelete-hide-text": "Versietekst",
        "revdelete-hide-image": "Bestandsinhoud verbergen",
        "mergehistory-empty": "Er zijn geen versies die samengevoegd kunnen worden.",
        "mergehistory-success": "$3 {{PLURAL:$3|versie|versies}} van [[:$1]] zijn succesvol samengevoegd naar [[:$2]].",
        "mergehistory-fail": "Kan geen geschiedenis samenvoegen, controleer opnieuw de pagina- en tijdinstellingen.",
-       "mergehistory-fail-toobig": "Niet in staat om geschiedenis samen te voegen omdat meer dan de limiet van $1 {{PLURAL:$1|revisie zou|revisies zouden}} worden verplaatst.",
+       "mergehistory-fail-toobig": "Niet in staat om geschiedenis samen te voegen omdat meer dan de limiet van $1 {{PLURAL:$1|versie wordt|versie worden}} verplaatst.",
        "mergehistory-no-source": "De bronpagina $1 bestaat niet.",
        "mergehistory-no-destination": "De bestemmingspagina $1 bestaat niet.",
        "mergehistory-invalid-source": "De bronpagina moet een geldige paginanaam zijn.",
        "showhideselectedversions": "Geselecteerde versies weergeven/verbergen",
        "editundo": "ongedaan maken",
        "diff-empty": "(geen verschil)",
-       "diff-multi-sameuser": "({{PLURAL:$1|Een tussenliggende revisie|$1 tussenliggende revisies}} door dezelfde gebruiker niet weergegeven)",
-       "diff-multi-otherusers": "({{PLURAL:$1|Een tussenliggende revisie|$1 tussenliggende revisies}} door {{PLURAL:$2|een andere gebruiker|$2 gebruikers}} niet weergegeven)",
+       "diff-multi-sameuser": "({{PLURAL:$1|Een tussenliggende versie|$1 tussenliggende versies}} door dezelfde gebruiker niet weergegeven)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Een tussenliggende versie|$1 tussenliggende versies}} door {{PLURAL:$2|een andere gebruiker|$2 gebruikers}} niet weergegeven)",
        "diff-multi-manyusers": "($1 tussenliggende {{PLURAL:$1|versie|versies}} door meer dan $2 {{PLURAL:$2|gebruiker|gebruikers}}  worden niet weergegeven)",
        "difference-missing-revision": "{{PLURAL:$2|Eén versie|$2 versies}} van deze verschillen ($1) {{PLURAL:$2|is|zijn}} niet aangetroffen.\n\nDit wordt meestal veroorzaakt door het volgen van een verouderde koppeling verschillen voor een pagina die is verwijderd.\nMeer gegevens zijn mogelijk te vinden in het [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} verwijderingslogboek].",
        "searchresults": "Zoekresultaten",
        "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>.",
-       "search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> van <strong>$2</strong>|Resultaten <strong>$1 - $2</strong> van de <strong>$3</strong>}}",
+       "search-showingresults": "{{PLURAL:$4|Resultaat <strong>$1</strong> van <strong>$2</strong>|Resultaten <strong>$1 - $2</strong> van <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.",
-       "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.",
+       "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 worden uw voorkeuren niet bijgewerkt.",
        "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",
        "right-browsearchive": "Verwijderde pagina's zoeken",
        "right-undelete": "Verwijderde pagina's terugplaatsen",
        "right-suppressrevision": "Specifieke versies bekijken, verbergen en weer zichtbaar maken op pagina's van elke gebruiker",
-       "right-viewsuppressed": "Bekijk versies verborgen door elke gebruiker",
+       "right-viewsuppressed": "Versies verborgen door elke gebruiker bekijken",
        "right-suppressionlog": "Niet-openbare logboeken bekijken",
        "right-block": "Andere gebruikers de mogelijkheid ontnemen te bewerken",
        "right-blockemail": "Een gebruiker het recht ontnemen om e-mail te versturen",
        "php-uploaddisabledtext": "Het uploaden van bestanden is uitgeschakeld in PHP.\nControleer de instelling \"file_uploads\".",
        "uploadscripted": "Dit bestand bevat HTML- of scriptcode die foutief door uw browser kan worden weergegeven.",
        "uploadscriptednamespace": "Dit SVG-bestand bevat een ongeldige naamruimte \"$1\".",
-       "uploadinvalidxml": "De XML in het geüploade bestand kon niet worden geparst.",
+       "uploadinvalidxml": "De XML in het geüploade bestand kon niet worden verwerkt.",
        "uploadvirus": "Het bestand bevat een virus! Details: $1",
        "uploadjava": "Het bestand is een ZIP-bestand dat een Java .class-bestand bevat.\nHet uploaden van Java-bestanden is niet toegestaan omdat hiermee beveiligingsinstellingen omzeild kunnen worden.",
        "upload-source": "Bronbestand",
        "upload-proto-error": "Verkeerd protocol",
        "upload-proto-error-text": "Uploads via deze methode vereisen URL's die beginnen met <code>http://</code> of <code>ftp://</code>.",
        "upload-file-error": "Interne fout",
-       "upload-file-error-text": "Er is een interne fout opgetreden tijdens het aanmaken van een tijdelijk bestaan op de server.\nNeem contact op met een [[Special:ListUsers/sysop|moderator]].",
+       "upload-file-error-text": "Er is een interne fout opgetreden tijdens het aanmaken van een tijdelijk bestaan op de server.\nNeem contact op met een [[Special:ListUsers/sysop|beheerder]].",
        "upload-misc-error": "Onbekende uploadfout",
-       "upload-misc-error-text": "Er is tijdens het uploaden een onbekende fout opgetreden.\nControleer of de URL correct en beschikbaar is en probeer het opnieuw.\nAls het probleem aanhoudt, neem dan contact op met een [[Special:ListUsers/sysop|moderator]].",
+       "upload-misc-error-text": "Er is tijdens het uploaden een onbekende fout opgetreden.\nControleer of de URL correct en beschikbaar is en probeer het opnieuw.\nAls het probleem aanhoudt, neem dan contact op met een [[Special:ListUsers/sysop|beheerder]].",
        "upload-too-many-redirects": "De URL bevatte te veel doorverwijzingen",
        "upload-http-error": "Er is een HTTP-fout opgetreden: $1",
        "upload-copy-upload-invalid-domain": "Uploaden per kopie is niet beschikbaar vanuit dit domein.",
        "lockmanager-fail-svr-release": "Het was niet mogelijk om de vergrendeling voor de server $1 op te heffen.",
        "zip-file-open-error": "Er is een fout opgetreden bij het openen van het bestand voor de ZIP-controle.",
        "zip-wrong-format": "Het opgegeven bestand was geen ZIP-bestand.",
-       "zip-bad": "Het bestand is een corrupt of onleesbare ZIP-bestand.\nDe veiligheid kan niet worden gecontroleerd.",
+       "zip-bad": "Het bestand is een beschadigd of onleesbaar ZIP-bestand.\nDe veiligheid kan niet worden gecontroleerd.",
        "zip-unsupported": "Het bestand is een ZIP-bestand dat gebruik maakt van ZIP-mogelijkheden die MediaWiki niet ondersteunt.\nDe veiligheid kan niet worden gecontroleerd.",
        "uploadstash": "Verborgen uploads",
        "uploadstash-summary": "Deze pagina biedt toegang tot bestanden die geüpload zijn of nog geüpload worden maar nog niet beschikbaar gemaakt zijn in de wiki. Deze bestanden zijn alleen zichtbaar voor de gebruiker die ze uploadt.",
        "nolicense": "Maak een keuze",
        "licenses-edit": "Licentieopties bewerken",
        "license-nopreview": "(Voorvertoning niet beschikbaar)",
-       "upload_source_url": "(een bestand van een geldige, publiek toegankelijke URL)",
+       "upload_source_url": "(een bestand van een geldige, openbare URL)",
        "upload_source_file": "(een bestand op uw computer)",
        "listfiles-delete": "verwijderen",
        "listfiles-summary": "Op deze speciale pagina zijn alle toegevoegde bestanden te bekijken.",
        "listduplicatedfiles-summary": "Dit is een lijst met bestanden waarvan de laatste versie een duplicaat is van de meest recente versie van een ander bestand. Er wordt alleen gerapporteerd over lokale bestanden.",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] heeft [[$3|{{PLURAL:$2|één duplicaat|$2 duplicaten}}]].",
        "unusedtemplates": "Ongebruikte sjablonen",
-       "unusedtemplatestext": "Deze pagina geeft alle pagina's weer in de naamruimte {{ns:template}} die op geen enkele pagina gebruikt worden.\nVergeet niet de \"Koppelingen naar deze pagina\" te controleren alvorens dit sjabloon te verwijderen.",
+       "unusedtemplatestext": "Deze pagina geeft alle pagina's weer in de naamruimte {{ns:template}} die op geen enkele pagina gebruikt worden.\nVergeet niet de koppelingen naar deze pagina te controleren alvorens deze sjabloon te verwijderen.",
        "unusedtemplateswlh": "andere koppelingen",
        "randompage": "Willekeurige pagina",
        "randompage-nopages": "Er zijn geen pagina's in de volgende {{PLURAL:$2|naamruimte|naamruimten}}: $1.",
        "protectedpagesempty": "Er zijn momenteel geen pagina's beveiligd die aan deze voorwaarden voldoen.",
        "protectedpages-timestamp": "Tijdstip",
        "protectedpages-page": "Pagina",
-       "protectedpages-expiry": "Verloopt",
+       "protectedpages-expiry": "Vervalt",
        "protectedpages-performer": "Beveiligd door",
        "protectedpages-params": "Beveiligingsopties",
        "protectedpages-reason": "Reden",
        "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": "Het jokerteken gebruiken, zoals \"*.wikipedia.org\" of \"*.org\" is toegestaan.\nHeeft tenminste een topleveldomein nodig, zoals bijvoorbeeld \"*.org\".<br />\n{{PLURAL:$2|Ondersteund protocol|Ondersteunde protocollen}}: <code>$1</code> (wordt \"http://\" als er geen protocol wordt opgegeven).",
        "linksearch-line": "$1 heeft een koppeling in $2",
        "linksearch-error": "Wildcards zijn alleen toegestaan aan het begin van een hostnaam.",
        "listusersfrom": "Gebruikers bekijken vanaf:",
        "viewdeletedpage": "Verwijderde pagina's bekijken",
        "undeletepagetext": "Hieronder {{PLURAL:$1|staat de pagina die verwijderd is|staan pagina's die zijn verwijderd}} en vanuit het archief teruggeplaatst {{PLURAL:$1|kan|kunnen}} worden.",
        "undelete-fieldset-title": "Versies terugplaatsen",
-       "undeleteextrahelp": "Laat alle vakjes leeg en klik op '''''Terugplaatsen''''' om de hele pagina inclusief alle eerdere versies terug te plaatsen.\nVink de terug te plaatsen versies aan en klik op '''''Terugplaatsen''''' om bepaalde versies terug te plaatsen.",
+       "undeleteextrahelp": "Laat alle vakjes leeg en klik op <strong><em>Terugplaatsen</em></strong> om de hele pagina inclusief alle eerdere versies terug te plaatsen.\nVink de terug te plaatsen versies aan en klik op <strong><em>Terugplaatsen</em></strong> om bepaalde versies terug te plaatsen.",
        "undeleterevisions": "$1 {{PLURAL:$1|versie|versies}} gearchiveerd",
        "undeletehistory": "Als u 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.",
        "undeleterevdel": "Herstellen is niet mogelijk als daardoor de meest recente versie van de pagina of het bestand gedeeltelijk wordt verwijderd.\nVerwijder in die gevallen de meest recent verwijderde versie uit de selectie.",
        "range_block_disabled": "De mogelijkheid voor beheerders om een groep IP-adressen te blokkeren is uitgeschakeld.",
        "ipb_expiry_invalid": "Ongeldige duur.",
        "ipb_expiry_temp": "Blokkades voor verborgen gebruikers moeten permanent zijn.",
-       "ipb_hide_invalid": "Het is niet mogelijk deze gebruiker te verbergen;  deze heeft meer dan {{PLURAL:$1|een bewerking|$1 bewerkingen}} gedaan.",
+       "ipb_hide_invalid": "Het is niet mogelijk deze gebruiker te verbergen; deze heeft meer dan {{PLURAL:$1|een bewerking|$1 bewerkingen}} uitgevoerd.",
        "ipb_already_blocked": "\"$1\" is al geblokkeerd",
        "ipb-needreblock": "$1 is al geblokkeerd.\nWilt u de instellingen wijzigen?",
        "ipb-otherblocks-header": "Andere {{PLURAL:$1|blokkade|blokkades}}",
        "movepagetalktext": "De bijbehorende overlegpagina krijgt automatisch een andere naam, '''tenzij''':\n* De overlegpagina onder de nieuwe naam al bestaat;\n* U het onderstaande vinkje deselecteert.\n\nIn die gevallen moet u de pagina handmatig hernoemen of samenvoegen.",
        "movearticle": "Te hernoemen pagina:",
        "moveuserpage-warning": "'''Waarschuwing:''' u gaat een gebruikerspagina hernoemen. Houd er rekening mee dat alleen de pagina wordt hernoemd, ''niet'' de gebruiker.",
-       "movecategorypage-warning": "<strong>Waarschuwing:</strong> U staat op het punt een categoriepagina te hernoemen. Houdt u er rekening mee dat alleen de categoriepagina zelf hernoemd zal worden; pagina's in de oude categorie zullen <em>niet</em> automatisch naar de nieuwe worden verplaatst.",
+       "movecategorypage-warning": "<strong>Waarschuwing:</strong> U staat op het punt een categoriepagina te hernoemen. Houdt u er rekening mee dat alleen de categoriepagina zelf hernoemd wordt; pagina's in de oude categorie worden <em>niet</em> automatisch naar de nieuwe verplaatst.",
        "movenologintext": "U moet [[Special:UserLogin|aangemeld]] zijn om een pagina te hernoemen.",
        "movenotallowed": "U hebt geen rechten om pagina's te hernoemen.",
        "movenotallowedfile": "U hebt geen rechten om bestanden te hernoemen.",
        "allmessagesname": "Naam",
        "allmessagesdefault": "Standaardinhoud",
        "allmessagescurrent": "Huidige inhoud",
-       "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 u wilt bijdragen aan de algemene vertaling voor MediaWiki.",
+       "allmessagestext": "Hieronder staan de systeemberichten uit de MediaWikinaamruimte.\nGa naar [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWikilokalisatie] en [https://translatewiki.net translatewiki.net] als u wilt bijdragen aan de algemene vertaling voor MediaWiki.",
        "allmessagesnotsupportedDB": "Deze pagina kan niet worden gebruikt, omdat '''$wgUseDatabaseMessages''' is uitgeschakeld.",
        "allmessages-filter-legend": "Filter",
        "allmessages-filter": "Filteren op aangepast:",
        "importuploaderrortemp": "Upload van het importbestand in mislukt.\nEen tijdelijke map is niet aanwezig.",
        "import-parse-failure": "Fout bij het verwerken van de XML-import",
        "import-noarticle": "Er zijn geen te importeren pagina's!",
-       "import-nonewrevisions": "Geen revisies geïmporteerd (alle waren al aanwezig, of overgeslagen vanwege fouten).",
+       "import-nonewrevisions": "Geen versies geïmporteerd (alle waren al aanwezig, of overgeslagen vanwege fouten).",
        "xml-error-string": "$1 op regel $2, kolom $3 (byte $4): $5",
        "import-upload": "XML-gegevens uploaden",
        "import-token-mismatch": "De sessiegegevens zijn verloren gegaan. Probeer het opnieuw.",
        "import-error-special": "Pagina \"$1\" is niet geïmporteerd omdat deze is geplaatst in een speciale naamruimte waar geen pagina's in geplaatst kunnen worden.",
        "import-error-invalid": "De pagina\" \"$1\" is niet geïmporteerd omdat de naam ongeldig is.",
        "import-error-unserialize": "Versie $2 van de pagina \"$1\" kon niet verwerkt worden. De versie hoort contentmodel $3 te gebruiken met een serialisatie als $4.",
-       "import-error-bad-location": "Revisie $2 met behulp van model $3 kan niet worden opgeslagen als \"$1\" op deze wiki, aangezien dat model niet ondersteund wordt op die pagina.",
+       "import-error-bad-location": "Versie $2 met behulp van model $3 kan niet worden opgeslagen als \"$1\" op deze wiki, aangezien dat model niet ondersteund wordt op die pagina.",
        "import-options-wrong": "Verkeerde {{PLURAL:$2|optie|opties}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "De opgegeven basispagina is ongeldig.",
        "import-rootpage-nosubpage": "In de naamruimte \"$1\" van de basispagina is het aanmaken van subpagina's niet mogelijk.",
        "confirmemail_loggedin": "Uw e-mailadres is nu bevestigd.",
        "confirmemail_subject": "Bevestiging e-mailadres voor {{SITENAME}}",
        "confirmemail_body": "Iemand, waarschijnlijk u, met het IP-adres $1,\nheeft zich met dit e-mailadres geregistreerd als gebruiker \"$2\" op {{SITENAME}}.\n\nOpen de volgende koppeling in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} te activeren:\n\n$3\n\nAls u uzelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
-       "confirmemail_body_changed": "Iemand, waarschijnlijk u, 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 uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls u uzelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
-       "confirmemail_body_set": "Iemand, waarschijnlijk u, met het IP-adres $1,\nheeft het het e-mailadres voor gebruiker \"$2\" op {{SITENAME}} ingesteld op dit e-mailadres.\n\nKlik op de volgende koppeling of open deze in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls deze gebruiker *niet* aan u toebehoort, klik dan op de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
+       "confirmemail_body_changed": "Iemand, waarschijnlijk u, met het IP-adres $1,\nheeft het e-mailadres geregistreerd voor gebruiker \"$2\" op {{SITENAME}} gewijzigd naar dit e-mailadres.\n\nOpen de volgende koppeling in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls u uzelf *niet* hebt aangemeld, volg dan de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
+       "confirmemail_body_set": "Iemand, waarschijnlijk u, met het IP-adres $1,\nheeft het e-mailadres voor gebruiker \"$2\" op {{SITENAME}} ingesteld op dit e-mailadres.\n\nOpen de volgende koppeling in uw webbrowser om te bevestigen dat u deze gebruiker bent en om de e-mailmogelijkheden op {{SITENAME}} opnieuw te activeren:\n\n$3\n\nAls deze gebruiker *niet* aan u toebehoort, klik dan op de volgende koppeling om de bevestiging van uw e-mailadres te annuleren:\n\n$5\n\nDe bevestigingscode vervalt op $4.",
        "confirmemail_invalidated": "De e-mailbevestiging is geannuleerd",
        "invalidateemail": "E-mailbevestiging annuleren",
        "scarytranscludedisabled": "[Interwiki-invoeging van sjablonen is uitgeschakeld]",
        "watchlistedit-raw-removed": "Er {{PLURAL:$1|is 1 pagina|zijn $1 pagina's}} verwijderd:",
        "watchlistedit-clear-title": "Volglijst gewist",
        "watchlistedit-clear-legend": "Volglijst wissen",
-       "watchlistedit-clear-explain": "Alle titels zullen van uw volglijst worden verwijderd",
-       "watchlistedit-clear-titles": "Titels:",
+       "watchlistedit-clear-explain": "Alle pagina's worden van uw volglijst verwijderd",
+       "watchlistedit-clear-titles": "Pagina's:",
        "watchlistedit-clear-submit": "Volglijst wissen (dit is definitief!)",
        "watchlistedit-clear-done": "Uw volglijst is gewist.",
        "watchlistedit-clear-removed": "Er {{PLURAL:$1|is 1 pagina|zijn $1 pagina's}} verwijderd:",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|heeft}} versie $4 van pagina $3 gemarkeerd als gecontroleerd",
        "logentry-patrol-patrol-auto": "$1 {{GENDER:$2|heeft}} versie $4 van pagina $3 automatisch gemarkeerd als gecontroleerd",
        "logentry-newusers-newusers": "Gebruiker $1 {{GENDER:$2|is}} aangemaakt",
-       "logentry-newusers-create": "Gebruikersaccount $1 {{GENDER:$2|is}} aangemaakt",
-       "logentry-newusers-create2": "Gebruikersaccount $3 {{GENDER:$2|is}} aangemaakt door $1",
+       "logentry-newusers-create": "Gebruiker $1 {{GENDER:$2|is}} aangemaakt",
+       "logentry-newusers-create2": "Gebruiker $3 {{GENDER:$2|is}} aangemaakt door $1",
        "logentry-newusers-byemail": "Gebruiker $3 {{GENDER:$2|is}} aangemaakt door $1 en het wachtwoord is per e-mail verzonden",
-       "logentry-newusers-autocreate": "Gebruikersaccount $1 {{GENDER:$2|is}} automatisch aangemaakt",
+       "logentry-newusers-autocreate": "Gebruiker $1 {{GENDER:$2|is}} automatisch aangemaakt",
        "logentry-rights-rights": "$1 {{GENDER:$2|heeft}} groepslidmaatschap voor $3 gewijzigd van $4 naar $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|heeft}} het groepslidmaatschap gewijzigd voor $3",
        "logentry-rights-autopromote": "$1 {{GENDER:$2|is}} automatisch gepromoveerd van $4 naar $5",
        "api-error-stashfailed": "Interne fout: de server kon het tijdelijke bestand niet opslaan.",
        "api-error-publishfailed": "Interne fout: de server kon het tijdelijke bestand niet publiceren.",
        "api-error-stasherror": "Er is een fout opgetreden tijdens het uploaden van het bestand naar de tijdelijke opslagruimte.",
+       "api-error-stashedfilenotfound": "Het opgeslagen bestand is niet aangetroffen tijdens het uploaden vanuit de stash.",
+       "api-error-stashpathinvalid": "Het pad waar het bestand in de stash werd verwacht is ongeldig.",
+       "api-error-stashfilestorage": "Er is een fout opgetreden tijdens het opslaan van het bestand in de stash.",
+       "api-error-stashzerolength": "De server kon het bestand niet opslaan in de stash, omdat het een lengte van nul had.",
+       "api-error-stashnotloggedin": "U moet aangemeld zijn om bestanden te kunnen opslaan in de stash.",
+       "api-error-stashwrongowner": "U bent geen eigenaar van het bestand waar u toegang tot probeerde te krijgen.",
+       "api-error-stashnosuchfilekey": "Het sleutelbestand in de stash waar u toegang tot probeert te krijgen bestaat niet.",
        "api-error-timeout": "De server heeft niet binnen de verwachte tijd geantwoord.",
        "api-error-unclassified": "Er is een onbekende fout opgetreden",
        "api-error-unknown-code": "Interne fout: \"$1\"",
        "expand_templates_generate_xml": "XML-parserboom bekijken",
        "expand_templates_generate_rawhtml": "Ruwe HTML weergeven",
        "expand_templates_preview": "Voorvertoning",
-       "pagelanguage": "Taal pagina kiezen",
+       "pagelanguage": "Paginataal kiezen",
        "pagelang-name": "Pagina",
        "pagelang-language": "Taal",
-       "pagelang-use-default": "Gebruik standaard taal",
+       "pagelang-use-default": "Standaard taal gebruiken",
        "pagelang-select-lang": "Taal selecteren",
-       "right-pagelang": "Taal van de pagina wijzigen",
-       "action-pagelang": "Taal van de pagina wijzigen",
-       "log-name-pagelang": "Logboek van taalwijzigingen",
+       "right-pagelang": "Paginataal wijzigen",
+       "action-pagelang": "paginataal te wijzigen",
+       "log-name-pagelang": "Logboek 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.",
+       "logentry-pagelang-pagelang": "$1 heeft de taal van de pagina \"$3\" gewijzigd 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>)",
        "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-summary": "Statistieken over geüploade bestandstypen. Dit overzicht bevat alleen de meest recente versie van een bestand. Oude of verwijderde versies worden niet meegeteld.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
        "mediastatistics-table-mimetype": "MIME-type",
        "mediastatistics-table-extensions": "Mogelijke extensies",
        "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-syntax": "Er zit een fout in de syntaxis",
        "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",
index 6e63fc4..bf39363 100644 (file)
        "revdelete-uname-unhid": "wycofano ukrycie nazwy użytkownika",
        "revdelete-restricted": "ograniczono widoczność dla administratorów",
        "revdelete-unrestricted": "wycofano ograniczenie widoczności dla administratorów",
+       "logentry-merge-merge": "$1 {{GENDER:$2|scalił|scaliła}} stronę $3 do $4 (wersje do $5)",
        "logentry-move-move": "$1 {{GENDER:$2|przeniósł|przeniosła}} stronę $3 do $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|przeniósł|przeniosła}} stronę $3 na $4, bez pozostawienia przekierowania pod starym tytułem",
        "logentry-move-move_redir": "$1 {{GENDER:$2|przeniósł|przeniosła}} stronę $3 na $4 w miejsce przekierowania",
index 47e8040..5d1bffb 100644 (file)
        "filerenameerror": "A l'é pa podusse cangeje nòm a l'archivi «$1» an «$2».",
        "filedeleteerror": "A l'é pa podusse scancelé l'archivi «$1».",
        "directorycreateerror": "A l'é pa podusse creé ël dossié «$1».",
+       "directoryreadonlyerror": "Ël dossié «$1» a l'é mach an letura.",
+       "directorynotreadableerror": "Ël dossié «$1» as peul nen les-se.",
        "filenotfound": "A l'é pa trovasse l'archivi «$1».",
        "unexpected": "Valor che i së spetavo pa: «$1»=«$2».",
        "formerror": "Eror: A l'é nen podusse mandé ël formolari.",
index 4747ded..fc640b9 100644 (file)
        "filerenameerror": "Não foi possível alterar o nome do ficheiro \"$1\" para \"$2\".",
        "filedeleteerror": "Não foi possível eliminar o ficheiro \"$1\".",
        "directorycreateerror": "Não foi possível criar o diretório \"$1\".",
+       "directoryreadonlyerror": "O diretório \"$1\" é apenas de leitura.",
+       "directorynotreadableerror": "O diretório \"$1\" não é legível.",
        "filenotfound": "Não foi possível encontrar o ficheiro \"$1\".",
        "unexpected": "Valor não esperado: \"$1\"=\"$2\".",
        "formerror": "Erro: Não foi possível enviar o formulário",
index e254fa5..869cc5b 100644 (file)
        "searchprofile-advanced-tooltip": "Used as tooltip for the option {{msg-mw|Searchprofile-advanced}} in [[Special:Search]].\n\nSee also:\n* {{msg-mw|Searchprofile-advanced|message}}\n* {{msg-mw|Searchprofile-advanced-tooltip|tooltip}}",
        "search-result-size": "Shown per line of a [[Special:Search|search result]]\n* $1 - the size of the page in bytes, but no need to add \"byte\" or similar as the unit is added by special function\n* $2 - the sum of all words in this page",
        "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-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''')\n{{Identical|Redirect}}",
        "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.",
index 468b8d1..0cae5ff 100644 (file)
        "upload-failure-subj": "Problemă la trimitere",
        "upload-failure-msg": "A apărut o problemă cu încărcarea de la [$2]:\n\n$1",
        "upload-warning-subj": "Avertizare la încărcare",
-       "upload-warning-msg": "A apărut o problemă în timpul încărcării de la [$2]. Vă puteți întoarce la [[Special:Upload/stash/$1|formularul de trimitere]]pentru a corecta această problemă.",
+       "upload-warning-msg": "A apărut o problemă în timpul încărcării de la [$2]. Vă puteți întoarce la [[Special:Upload/stash/$1|formularul de trimitere]] pentru a corecta această problemă.",
        "upload-proto-error": "Protocol incorect",
        "upload-proto-error-text": "Importul de la distanță necesită adrese URL care încep cu <code>http://</code> sau <code>ftp://</code>.",
        "upload-file-error": "Eroare internă",
        "zip-wrong-format": "Fișierul specificat nu era un fișier de tip ZIP.",
        "zip-bad": "Fișierul este un fișier corupt de tip ZIP, fiind imposibil de citit.\nNu poate fi verificat în mod corespunzător în vederea securității.",
        "zip-unsupported": "Fișierul este unul de tip ZIP cu caracteristici neacceptate de MediaWiki.\nNu poate fi verificat în mod corespunzător în vederea securității.",
-       "uploadstash": "Fișiere trimise în așteptare",
-       "uploadstash-summary": "Această pagină oferă acces la fișierele care sunt încărcate (sau în curs de încărcare) dar nu sunt încă publicate pe wiki. Aceste fișiere nu sunt vizibile nimănui cu excepția celui care le-a încărcat.",
-       "uploadstash-clear": "Șterge fișierele în așteptare",
-       "uploadstash-nofiles": "Nu aveți fișiere în lista de așteptare.",
+       "uploadstash": "Fișiere în depozitul temporar",
+       "uploadstash-summary": "Această pagină oferă acces la fișierele care sunt încărcate sau sunt în curs de încărcare, dar nu sunt încă publicate pe wiki. Aceste fișiere nu sunt vizibile nimănui, cu excepția celui care le-a încărcat.",
+       "uploadstash-clear": "Șterge fișierele din depozitul temporar",
+       "uploadstash-nofiles": "Nu aveți fișiere în depozitul temporar.",
        "uploadstash-badtoken": "Execuția acestei acțiuni nu a reușit, probabil deoarece informațiile dumneavoastră de identificare au expirat. Încercați din nou.",
        "uploadstash-errclear": "Golirea fișierelor nu a reușit.",
        "uploadstash-refresh": "Reîmprospătează lista de fișiere",
        "api-error-overwrite": "Nu este permisă suprascrierea unui fișier existent.",
        "api-error-stashfailed": "Eroare internă: serverul nu a putut stoca fișierul temporar.",
        "api-error-publishfailed": "Eroare internă: serverul nu a putut publica fișierul temporar.",
+       "api-error-stasherror": "A apărut o eroare la încărcarea fișierului în depozitul temporar.",
+       "api-error-stashedfilenotfound": "Fișierul din depozitul temporar nu a fost găsit când s-a încercat încărcarea sa.",
+       "api-error-stashpathinvalid": "Calea unde ar fi trebuit să fie găsit fișierul din depozitul temporar nu este validă.",
+       "api-error-stashfilestorage": "A apărut o eroare la stocarea fișierului în depozitul temporar.",
+       "api-error-stashzerolength": "Serverul nu a putut depozita temporar fișierul, deoarece are o mărime egală cu zero.",
+       "api-error-stashnotloggedin": "Trebuie să vă autentificați pentru a salva fișiere în depozitul temporar.",
+       "api-error-stashwrongowner": "Fișierul pe care încercați să-l accesați din depozitul temporar nu vă aparține.",
+       "api-error-stashnosuchfilekey": "Cheia fișierului pe care încercați să-l accesați din depozitul temporar nu există.",
        "api-error-timeout": "Serverul nu a răspuns în timp util.",
        "api-error-unclassified": "A apărut o eroare necunoscută.",
        "api-error-unknown-code": "Eroare necunoscută: „$1”",
index 984ed55..32cab6e 100644 (file)
                        "Nirovulf",
                        "Striking Blue",
                        "Fitoschido",
-                       "MaxBioHazard"
+                       "MaxBioHazard",
+                       "Tourorist"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
-       "tog-hideminor": "СкÑ\80Ñ\8bваÑ\82Ñ\8c Ð¼Ð°Ð»Ñ\8bе Ð¿Ñ\80авки Ð² Ñ\81пиÑ\81ке свежих правок",
+       "tog-hideminor": "СкÑ\80Ñ\8bваÑ\82Ñ\8c Ð¼Ð°Ð»Ñ\8bе Ð¿Ñ\80авки Ð¸Ð· Ñ\81пиÑ\81ка свежих правок",
        "tog-hidepatrolled": "Скрывать патрулированные правки в списке свежих правок",
        "tog-newpageshidepatrolled": "Скрывать отпатрулированные страницы в списке новых страниц",
        "tog-extendwatchlist": "Расширенный список наблюдения, включающий все изменения, а не только последние",
        "filerenameerror": "Невозможно переименовать файл «$1» в «$2».",
        "filedeleteerror": "Невозможно удалить файл «$1».",
        "directorycreateerror": "Невозможно создать директорию «$1».",
+       "directoryreadonlyerror": "Каталог «$1» доступен только для чтения.",
+       "directorynotreadableerror": "Каталог «$1» не читается.",
        "filenotfound": "Невозможно найти файл «$1».",
        "unexpected": "Неподходящее значение: «$1»=«$2».",
        "formerror": "Ошибка: невозможно передать данные формы",
        "search-relatedarticle": "Связанный",
        "searchrelated": "связанный",
        "searchall": "все",
-       "showingresults": "Ниже {{PLURAL:$1|1=показан результат|показаны  результаты}} с № '''$2''' и вплоть до № '''$1'''.",
+       "showingresults": "Ниже {{PLURAL:$1|1=показан <strong>1</strong> результат|показан  <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>.",
        "search-showingresults": "{{PLURAL:$4|Результат <strong>$1</strong> из <strong>$3</strong>|Результаты <strong>$1 — $2</strong> из <strong>$3</strong>}}",
        "search-nonefound": "Соответствий запросу не найдено.",
        "right-browsearchive": "поиск удалённых страниц",
        "right-undelete": "восстановление страниц",
        "right-suppressrevision": "просмотр, сокрытие и восстановление скрытых версий страниц",
-       "right-viewsuppressed": "Ð\9fросмотр версий, скрытых от всех участников",
+       "right-viewsuppressed": "просмотр версий, скрытых от всех участников",
        "right-suppressionlog": "просмотр частных журналов",
        "right-block": "установка ограничений на редактирование для других участников",
        "right-blockemail": "установка запрета на отправку электронной почты",
        "pagelang-language": "Язык",
        "pagelang-use-default": "Использовать язык по умолчанию",
        "pagelang-select-lang": "Выберите язык",
-       "right-pagelang": "Ð\98змениÑ\82Ñ\8c Ñ\8fзÑ\8bк страницы",
+       "right-pagelang": "изменение Ñ\8fзÑ\8bка страницы",
        "action-pagelang": "изменять язык страницы",
        "log-name-pagelang": "Журнал изменения языка",
        "log-description-pagelang": "Это журнал изменений в языках страницы.",
index 3969358..7892473 100644 (file)
@@ -16,7 +16,7 @@
        "tog-showtoolbar": "Aratâ bara di halati trâ alâxiri",
        "tog-editondblclick": "Alâxeaști frândzâli pri-tu click duplo",
        "tog-editsectiononrightclick": "Activeadzâ alâxirea a secțiuniloru pri-tu click ndreapta pi titlu a secțiunâľei",
-       "tog-watchcreations": "Adavgâ frândzâli pi cari li adar și fișierele pi cari li ncari la lista a ńia di frândzâ avinati",
+       "tog-watchcreations": "Adavgâ frândzâli pi cari li adaru și fișierili pi cari li ancarcu la lista a ńia di frândzâ avinati",
        "tog-watchdefault": "Adavgâ frândzâli și fișierili pi cari li alâxescu la lista a ńia di avinari",
        "tog-watchmoves": "Adavgâ frândzâli și fișierili pi cari li dau numâ noao la lista a ńia di avinari",
        "tog-watchdeletion": "Adavgâ frândzâli și fișierili pi cari li aștergu la lista a ńia di avinari",
        "readonly": "Baza di dati easti blocatâ (ncľisâ) la nyrâpseari",
        "missingarticle-rev": "(versiuniľea#: $1)",
        "missingarticle-diff": "(Dif: $1, $2)",
+       "internalerror": "Sfalmâ di nuntru",
+       "internalerror_info": "Sfalmâ di nuntru: $1",
+       "filecopyerror": "Fișierlu \"$1\" nu putu s-hibâ copiatu \"$2\".",
+       "filerenameerror": "Fișierlu \"$1\" nu putu s-hibâ mutatu \"$2\".",
+       "filedeleteerror": "Fișierlu \"$1\" nu si putu s-hibâ aștersu.",
+       "directorycreateerror": "Nu s-poati si s-facâ directorlu \"$1\".",
+       "directoryreadonlyerror": "Directorlu \"$1\" easti mași trâ adghivâsiri.",
+       "directorynotreadableerror": "Directorlu \"$1\" nu s-poati si s-adghivâseascâ.",
+       "filenotfound": "Fișierlu \"$1\" nu si putu s-hibâ aflatu.",
        "badtitle": "Titlu alatusu",
        "viewsource": "Vez-u textu",
        "viewsource-title": "Vedz ivurlu trâ $1",
        "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": "Zboru acrifo (parolâ)",
        "userlogin-yourpassword-ph": "Bagâ-u parola (zboru acrifo)",
        "createacct-yourpassword-ph": "Bagâ-u parola (zboru acrifo)",
        "yourpasswordagain": "Bagâ-u cľeae diznou:",
        "gotaccountlink": "Leagâ-ti",
        "userlogin-resetlink": "U agârșii parola i numa di utilizatoru?",
        "userlogin-resetpassword-link": "U agârșii parola?",
+       "userlogin-helplink2": "Agiutoru la ligari",
+       "userlogin-createanother": "Adrari contu nou",
        "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â",
        "createacct-another-email-ph": "Bagâ-u adresa di carti electronicâ",
+       "createaccountmail": "Ufiliseaști unâ parolâ (zboru acrifo) pirastica și u pitreați la adresa di e-mail cari u dzâț tini",
        "createacct-realname": "Numa realâ (opționalu)",
        "createaccountreason": "Furńie:",
        "createacct-reason": "Furńie",
+       "createacct-reason-ph": "Câ ți feci altu contu",
+       "createacct-captcha": "Duchimie (provâ) di securitati",
+       "createacct-imgcaptcha-ph": "Bagâ lu textu pi cari lu vedz disuprâ",
+       "createacct-submit": "Adrari contu-ț",
+       "createacct-another-submit": "Adrari altu contu",
+       "createacct-benefit-heading": "{{SITENAME}} s-feasi cu oamińi ca tini.",
+       "createacct-benefit-body1": "{{PLURAL:$1|alâxiri|alâxiri|di alâxiri}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|frândzâ|frândzâ|de frândzâ}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|contribuitoru proaspitu|contribuitori proaspiț|di contribuitori proaspiț}}",
+       "badretype": "Zboarâli acrifo pi cari lâ bâgaș nu suntu unâ.",
+       "userexists": "Numa di utilizatoru pi cari u bâgaș ari nica aoa. Ti oru, ľea altâ numâ.",
+       "loginerror": "Sfalmâ di ligari",
+       "createacct-error": "Sfalmâ la adrarea a contlui",
+       "createaccounterror": "Nu s-putu si s-facâ contu: $1",
+       "loginsuccesstitle": "Ligarea s-bitisi ghini",
+       "loginsuccess": "'''Ti ligai la {{SITENAME}} ca „$1”.'''",
+       "loginlanguagelabel": "Limbâ: $1",
+       "pt-login": "Leagâ-ti",
+       "pt-login-button": "Leagâ-ti",
+       "pt-createaccount": "Fă contu (isape)",
+       "pt-userlogout": "Dizleagâ-ti",
+       "bold_sample": "Scriari groasâ (bold)",
+       "bold_tip": "Scriari groasâ (bold)",
+       "italic_sample": "Scriari aplicatâ (italic)",
+       "italic_tip": "Scriari aplicatâ (italic)",
+       "link_sample": "Titlu a ligâturiľei",
+       "link_tip": "Ligâturâ di nuntru",
+       "extlink_sample": "http://www.example.com titlu a ligâturiľei",
        "summary": "Rezumatu:",
        "minoredit": "Aestâ easti unâ alâxiri minorâ (ńicâ)",
        "watchthis": "Mutrea-u frândzâ aestâ",
index 662f189..a03a4cb 100644 (file)
        "edit-gone-missing": "Mpussìbbili aggiurnari la pàggina.\nPari ca fu scancillata.",
        "edit-conflict": "Cunflittu di edizzioni.",
        "edit-no-change": "La mudifica fu ignurata pirchì nu foru appurtati canci ntô testu.",
+       "postedit-confirmation-created": "La pàggina fu criata.",
        "postedit-confirmation-saved": "Lu canciamentu fu sarbatu.",
        "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}}.",
index 6e39183..b08f81d 100644 (file)
        "filerenameerror": "Datoteke »$1« ni mogoče preimenovati v »$2«.",
        "filedeleteerror": "Datoteke »$1« ni mogoče izbrisati.",
        "directorycreateerror": "Ne morem ustvariti direktorija »$1«.",
+       "directoryreadonlyerror": "Mapa »$1« je samo za branje.",
+       "directorynotreadableerror": "Mapa »$1« ni berljiva.",
        "filenotfound": "Datoteke »$1« ne najdem.",
        "unexpected": "Nepričakovana vrednost: \"$1\"=\"$2\".",
        "formerror": "Napaka: obrazca ni mogoče predložiti",
index 5684954..39de585 100644 (file)
        "viewsourcetext": "Можете читати и копирати садржај ове странице:",
        "viewyourtext": "Можете да погледате и копирате извор '''ваших измена''' на овој страници:",
        "protectedinterface": "Ова страница садржи текст корисничког окружења за софтвер на овом викију и заштићена је ради спречавања злоупотребе.\nДа бисте додали или изменили преводе свих викија, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
-       "editinginterface": "<strong>Упозорење:</strong> уређујете страницу која се користи за приказивање текста корисничког окружења.\nИзмене на овој страници ће утицати на све кориснике овог викија.\nДа бисте додали или изменили преводе свих викија, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
+       "editinginterface": "<strong>Упозорење:</strong> уређујете страницу која се користи за приказивање текста корисничког окружења.\nИзмене на овој страници ће утицати на све кориснике овог викија.",
+       "translateinterface": "Да додате или промените преводе за све викије, посетите [//translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
        "cascadeprotected": "Ова страница је закључана јер садржи {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом“ заштитом:\n$2",
        "namespaceprotected": "Немате дозволу да уређујете странице у именском простору '''$1'''.",
        "customcssprotected": "Немате дозволу да мењате ову CSS страницу јер садржи личне поставке другог корисника.",
        "revdelete-confirm": "Потврдите да намеравате ово урадити, да разумете последице и да то чините у складу с [[{{MediaWiki:Policy-url}}|правилима]].",
        "revdelete-suppress-text": "Сакривање измена би требало користити '''само''' у следећим случајевима:\n* Злонамерни или погрдни подаци\n* Неприкладни лични подаци\n*: ''кућна адреса и број телефона, број банковне картице итд.''",
        "revdelete-legend": "Ограничења видљивости",
-       "revdelete-hide-text": "Текст измене",
+       "revdelete-hide-text": "СакÑ\80иÑ\98 Ñ\82екст измене",
        "revdelete-hide-image": "Сакриј садржај датотеке",
        "revdelete-hide-name": "Сакриј радњу и одредиште",
        "revdelete-hide-comment": "Опис измене",
        "search-result-category-size": "{{PLURAL:$1|1 члан|$1 члана|$1 чланова}}, ({{PLURAL:$2|1 поткатегорија|$2 поткатегорије|$2 поткатегорија}}, {{PLURAL:$3|1 датотека|$3 датотеке|$3 датотека}})",
        "search-redirect": "(преусмерење $1)",
        "search-section": "(одељак $1)",
+       "search-category": "(категорија $1)",
        "search-suggest": "Да ли сте мислили на: $1",
        "search-interwiki-caption": "Братски пројекти",
        "search-interwiki-default": "Резултати са $1:",
        "randomincategory-nopages": "Нема страница у категорији [[:Category:$1|$1]].",
        "randomincategory-category": "Категорија:",
        "randomredirect": "Случајно преусмерење",
-       "randomredirect-nopages": "Ð\9dема Ð¿Ñ\80еÑ\83Ñ\81меÑ\80еÑ\9aа Ñ\83 Ð¸Ð¼ÐµÐ½Ñ\81ком Ð¿Ñ\80оÑ\81Ñ\82оÑ\80Ñ\83 â\80\9e$1â\80\9d.",
+       "randomredirect-nopages": "Ð\9dема Ð¿Ñ\80еÑ\83Ñ\81меÑ\80еÑ\9aа Ñ\83 Ð¸Ð¼ÐµÐ½Ñ\81ком Ð¿Ñ\80оÑ\81Ñ\82оÑ\80Ñ\83 â\80\9e$1â\80\9c.",
        "statistics": "Статистике",
        "statistics-header-pages": "Странице",
        "statistics-header-edits": "Измене",
        "tooltip-feed-atom": "Атом довод ове странице",
        "tooltip-t-contributions": "Погледајте списак доприноса овог корисника",
        "tooltip-t-emailuser": "Пошаљите е-поруку овом кориснику",
+       "tooltip-t-info": "Више информација о овој страници",
        "tooltip-t-upload": "Пошаљите датотеке",
        "tooltip-t-specialpages": "Списак свих посебних страница",
        "tooltip-t-print": "Верзија ове странице за штампање",
        "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 преко преусмерења",
index 57633c1..8eb2f0d 100644 (file)
        "viewsourcetext": "Možete čitati i kopirati sadržaj ove stranice:",
        "viewyourtext": "Možete da pogledate i umnožite izvor '''vaših izmena''' na ovoj stranici:",
        "protectedinterface": "Ova stranica sadrži tekst korisničkog okruženja za softver na ovom vikiju i zaštićena je radi sprečavanja zloupotrebe.\nDa biste dodali ili izmenili prevode svih vikija, posetite [//translatewiki.net/ Translejtviki], projekat za lokalizaciju Medijavikija.",
-       "editinginterface": "<strong>Upozorenje:</strong> uređujete stranicu koja se koristi za prikazivanje teksta korisničkog okruženja.\nIzmene na ovoj stranici će uticati na sve korisnike ovog vikija.\nDa biste dodali ili izmenili prevode svih vikija, posetite [//translatewiki.net/ Translejtviki], projekat za lokalizaciju Medijavikija.",
+       "editinginterface": "<strong>Upozorenje:</strong> uređujete stranicu koja se koristi za prikazivanje teksta korisničkog okruženja.\nIzmene na ovoj stranici će uticati na sve korisnike ovog vikija.",
        "cascadeprotected": "Ova stranica je zaključana jer sadrži {{PLURAL:$1|sledeću stranicu koja je zaštićena|sledeće stranice koje su zaštićene}} „prenosivom“ zaštitom:\n$2",
        "namespaceprotected": "Nemate dozvolu da uređujete stranice u imenskom prostoru '''$1'''.",
        "customcssprotected": "Nemate dozvolu da menjate ovu CSS stranicu jer sadrži lične postavke drugog korisnika.",
        "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",
-       "revdelete-hide-text": "Tekst izmene",
+       "revdelete-hide-text": "Sakrij tekst izmene",
        "revdelete-hide-image": "Sakrij sadržaj datoteke",
        "revdelete-hide-name": "Sakrij radnju i odredište",
        "revdelete-hide-comment": "Opis izmene",
        "randomincategory-nopages": "Nema stranica u kategoriji [[:Category:$1|$1]].",
        "randomincategory-category": "Kategorija:",
        "randomredirect": "Slučajno preusmerenje",
-       "randomredirect-nopages": "Nema preusmerenja u imenskom prostoru â\80\9e$1â\80\9d.",
+       "randomredirect-nopages": "Nema preusmerenja u imenskom prostoru â\80\9e$1â\80\9c.",
        "statistics": "Statistike",
        "statistics-header-pages": "Stranice",
        "statistics-header-edits": "Izmene",
index 8dcc5d8..879e8ef 100644 (file)
        "edit-no-change": "Текстта үзгәешләр ясалмау сәбәпле, сезнең үзгәртү кире кагыла.",
        "edit-already-exists": "Яңа бит төзеп булмый.\nУл инде бар.",
        "editwarning-warning": "Башка биткә күчү вакытында бу мәкаләгә керткән үзгәрешләр югалырга мөмкин.\nӘгәрдә сез теркәлгән булсагыз, бу искәрмәне сез «Көйләнмәләрем» өлешендә үзгәртә аласыз.",
+       "duplicate-args-category": "Калыпны чакыруда кабатлап торган аргументларны кулланган битләр",
        "expensive-parserfunction-warning": "'''Игътибар:''' бу биттә хәтерне еш кулланучы функцияләр артык күп.\n\nЧикләү: $2 {{PLURAL:$2|1=куллану}}, бу очракта {{PLURAL:$1|$1 тапкыр}} башкарырга рөхсәт ителә.",
        "expensive-parserfunction-category": "Хәтерне еш кулланучы функцияләр күп булган битләр",
        "post-expand-template-inclusion-warning": "'''Игътибар:''' Кулланылучы үрнәкләр артык зур.\nКайберләре кабызылмаячак.",
index e534258..857485c 100644 (file)
@@ -51,7 +51,8 @@
                        "Mykola Swarnyk",
                        "Milicevic01",
                        "Lamsec",
-                       "Olion"
+                       "Olion",
+                       "Piramidion"
                ]
        },
        "tog-underline": "Підкреслювання посилань:",
        "filerenameerror": "Не вдалося перейменувати файл «$1» на «$2».",
        "filedeleteerror": "Не вдалося вилучити файл «$1».",
        "directorycreateerror": "Не вдалося створити каталог \"$1\".",
+       "directoryreadonlyerror": "Каталог \"$1\" доступний лише для читання.",
+       "directorynotreadableerror": "Каталог \"$1\" нечитабельний.",
        "filenotfound": "Не вдалося знайти файл «$1».",
        "unexpected": "Неочікуване значення: «$1»=«$2».",
        "formerror": "Помилка: неможливо передати дані форми",
        "zip-wrong-format": "Вказаний файл не є ZIP-файлом",
        "zip-bad": "ZIP-файл є пошкоджений чи в інший спосіб непридатний для зчитування.\nВін не піддається перевірці в цілях безпеки.",
        "zip-unsupported": "Файл використовує такі можливості ZIP, які не підтримуються MediaWiki.\nВін не піддається перевірці в цілях безпеки.",
-       "uploadstash": "Ð\97аванÑ\82ажиÑ\82и Ñ\81Ñ\85овок",
+       "uploadstash": "СÑ\85овок Ð·Ð°Ð²Ð°Ð½Ñ\82аженÑ\8c",
        "uploadstash-summary": "Ця сторінка надає доступ до файлів, що були завантажені (або завантажуються зараз), але ще не були опубліковані в вікі. Ці файли не відображаються нікому, крім користувача, що їх завантажив.",
        "uploadstash-clear": "Очистити сховані файли",
        "uploadstash-nofiles": "У вас немає схованих файлів.",
        "nolicense": "Відсутнє",
        "licenses-edit": "Редагувати параметри ліцензії",
        "license-nopreview": "(Попередній перегляд недоступний)",
-       "upload_source_url": "(ви Ð²Ð¸Ð±Ñ\80али правильну, публічно доступну інтернет-адресу)",
+       "upload_source_url": "(введÑ\96Ñ\82Ñ\8c правильну, публічно доступну інтернет-адресу)",
        "upload_source_file": " (файл на вашому комп'ютері)",
        "listfiles-delete": "видалити",
        "listfiles-summary": "Ця спеціальна сторінка показує всі завантажені файли.",
        "api-error-stashfailed": "Внутрішня помилка: сервер не зміг зберегти тимчасовий файл.",
        "api-error-publishfailed": "Внутрішня помилка: сервер не зміг опублікувати тимчасовий файл.",
        "api-error-stasherror": "Сталася помилка при завантаженні файлу у сховище.",
+       "api-error-stashnotloggedin": "Ви повинні увійти в систему, аби мати змогу зберігати файли у сховку завантажень.",
+       "api-error-stashnosuchfilekey": "Ключ файлу, до якого Ви намагались отримати доступ у сховку, не існує.",
        "api-error-timeout": "Сервер не відповідає протягом очікуваного часу.",
        "api-error-unclassified": "Сталася невідома помилка.",
        "api-error-unknown-code": "Невідома помилка: «$1»",
index 39a573a..4cb1ff4 100644 (file)
        "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>。",
+       "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一些模板将不会包含。",
index 60dea73..72cf148 100644 (file)
@@ -72,9 +72,9 @@
        "tog-editondblclick": "開啟滑鼠雙擊編輯頁面",
        "tog-editsectiononrightclick": "開啟滑鼠右鍵點選章節標題編輯",
        "tog-watchcreations": "將我建立的頁面和上傳的檔案加入監視清單",
-       "tog-watchdefault": "將我編輯的頁面和檔案新增至監視清單",
+       "tog-watchdefault": "將我編輯的頁面和檔案加入監視清單",
        "tog-watchmoves": "將我移動的頁面和檔案加入監視清單",
-       "tog-watchdeletion": "將我刪除的頁面和檔案新增至監視清單",
+       "tog-watchdeletion": "將我刪除的頁面和檔案加入監視清單",
        "tog-watchrollback": "將我曾經還原的頁面新增至監視清單",
        "tog-minordefault": "預設標記所有的編輯為小修訂",
        "tog-previewontop": "顯示預覽於編輯框上方",
@@ -88,7 +88,7 @@
        "tog-fancysig": "將簽名視為 Wikitext 語言 (不自動產生連結)",
        "tog-uselivepreview": "使用即時預覽 (實驗中)",
        "tog-forceeditsummary": "未填寫編輯摘要時提示我",
-       "tog-watchlisthideown": "隱藏監視清單中我自己的編輯",
+       "tog-watchlisthideown": "隱藏監視清單中我的編輯",
        "tog-watchlisthidebots": "隱藏監視清單中機器人的編輯",
        "tog-watchlisthideminor": "隱藏監視清單中的小修訂",
        "tog-watchlisthideliu": "隱藏監視清單中已登入使用者的編輯",
        "projectpage": "檢視專案頁面",
        "imagepage": "檢視檔案頁面",
        "mediawikipage": "檢視訊息頁面",
-       "templatepage": "檢視樣頁面",
+       "templatepage": "檢視樣頁面",
        "viewhelppage": "檢視說明頁面",
        "categorypage": "檢視分類頁面",
        "viewtalkpage": "檢視討論頁面",
        "nstab-project": "專案頁面",
        "nstab-image": "檔案",
        "nstab-mediawiki": "訊息",
-       "nstab-template": "樣",
+       "nstab-template": "樣",
        "nstab-help": "說明頁面",
        "nstab-category": "分類",
        "nosuchaction": "無此動作",
        "filerenameerror": "無法重新命名檔案 \"$1\" 為 \"$2\"。",
        "filedeleteerror": "無法刪除檔案 \"$1\"。",
        "directorycreateerror": "無法建立目錄 \"$1\"。",
+       "directoryreadonlyerror": "目錄 \"$1\" 為唯讀。",
+       "directorynotreadableerror": "目錄 \"$1\" 無法讀取。",
        "filenotfound": "找不到檔案 \"$1\"。",
        "unexpected": "預期之外的資料:\"$1\"=\"$2\"。",
        "formerror": "錯誤:無法送出表單。",
        "cascadeprotectedwarning": "<strong>警告:</strong>本頁已經被保護,只有擁有管理員權限的使用者才可編輯,此頁面被下列頁面引用因此連鎖保護:",
        "titleprotectedwarning": "<strong>警告:本頁面已被保護,需要 [[Special:ListGroupRights|特殊權限]] 方可建立。</strong>\n以下提供最近的日誌以便參考:",
        "templatesused": "此頁面使用了以下{{PLURAL:$1|樣版}}:",
-       "templatesusedpreview": "此預覽使用了以下{{PLURAL:$1|樣版}}:",
+       "templatesusedpreview": "此預覽使用了以下{{PLURAL:$1|樣板}}:",
        "templatesusedsection": "此頁面使用了以下{{PLURAL:$1|樣版}}:",
        "template-protected": "(受保護)",
        "template-semiprotected": "(受半保護)",
        "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-warning": "<strong>警告:</strong>引用樣板後大小超出限制。\n部份樣內容將不會被使用。",
        "post-expand-template-inclusion-category": "引用樣板後大小超出限制的頁面",
        "post-expand-template-argument-warning": "<strong>警告:</strong>此頁面有一個以上的樣版參數過長。\n過長的參數會被直接忽略。",
-       "post-expand-template-argument-category": "樣參數有部份被忽略的頁面",
-       "parser-template-loop-warning": "偵測到樣遞迴:[[$1]]",
+       "post-expand-template-argument-category": "樣參數有部份被忽略的頁面",
+       "parser-template-loop-warning": "偵測到樣遞迴:[[$1]]",
        "parser-template-recursion-depth-warning": "超出樣版遞迴深度限制 ($1)",
        "language-converter-depth-warning": "已超出語言轉換器深度限制 ($1)",
        "node-count-exceeded-category": "節點數量超出限制的頁面",
        "searchprofile-advanced-tooltip": "搜尋自訂命名空間",
        "search-result-size": "$1 ($2 個字)",
        "search-result-category-size": "$1 位成員 ($2 個子分類,$3 個檔案)",
-       "search-redirect": "(重新導向 $1)",
+       "search-redirect": "(重新導向 $1)",
        "search-section": "(章節 $1)",
        "search-category": "(分類 $1)",
        "search-file-match": "(符合檔案內容)",
        "email": "電子郵件",
        "prefs-help-realname": "真實姓名為選填欄位。\n若提供,真實姓名可能會用來作為您的作品的署名。",
        "prefs-help-email": "電子郵件位址為選填欄位。\n但在重設密碼時會使用,而您很有可能會忘記密。",
-       "prefs-help-email-others": "æ\82¨äº¦å\8f¯ä»¥é\81¸æ\93\87è®\93å\85¶ä»\96使ç\94¨è\80\85ç\94¨é\9b»å­\90é\83µä»¶è\88\87æ\82¨è\81¯ç¹«,透過您的使用者或對話頁面上方的連結。\n您的電子郵件位址不會實際告知給其他要聯絡您的使用者。",
+       "prefs-help-email-others": "æ\82¨äº¦å\8f¯ä»¥é\81¸æ\93\87è®\93å\85¶ä»\96使ç\94¨è\80\85ç\94¨é\9b»å­\90é\83µä»¶è\88\87æ\82¨è\81¯çµ¡,透過您的使用者或對話頁面上方的連結。\n您的電子郵件位址不會實際告知給其他要聯絡您的使用者。",
        "prefs-help-email-required": "電子郵件地址是必填項目。",
        "prefs-info": "基本資訊",
        "prefs-i18n": "國際化",
        "group-sysop": "管理員",
        "group-bureaucrat": "行政員",
        "group-suppress": "監督員",
-       "group-all": "(全部)",
+       "group-all": "(全部)",
        "group-user-member": "{{GENDER:$1|使用者}}",
        "group-autoconfirmed-member": "自動確認使用者",
        "group-bot-member": "機器人",
        "listduplicatedfiles": "重複檔案清單",
        "listduplicatedfiles-summary": "此清單中包含最新版本的檔案與其他檔案重複的清單,本清單只顯示本地檔案。",
        "listduplicatedfiles-entry": "[[:File:$1|$1]] 有[[$3|其他 $2 個重複檔案]]。",
-       "unusedtemplates": "未使用的樣",
+       "unusedtemplates": "未使用的樣",
        "unusedtemplatestext": "此頁面列出所有於 {{ns:template}} 命名空間下未被其他頁面引用的樣版。\n在刪除前,仍需檢查是否有連結這些樣版的其他頁面。",
        "unusedtemplateswlh": "其他連結",
        "randompage": "隨機頁面",
        "booksources-text": "下列清單包含其他銷售新書籍或二手書籍的網站連結,可會有你想尋找書籍的進一部資訊:",
        "booksources-invalid-isbn": "您提供的 ISBN 不正確,請檢查複製的來源是否有誤。",
        "specialloguserlabel": "執行者:",
-       "speciallogtitlelabel": "目標 (標題或使用者):",
+       "speciallogtitlelabel": "目標(標題或使用者):",
        "log": "日誌",
        "all-logs-page": "所有公開日誌",
-       "alllogstext": "合併顯示所有 {{SITENAME}} 中所有類型的日誌。\n您可以點選下拉式選單選擇日誌的類型,指定使用者名稱 (區分大小寫) 或影響的頁面 (區分大小寫)。",
+       "alllogstext": "合併顯示所有 {{SITENAME}} 中所有類型的日誌。\n您可以點選下拉式選單選擇日誌的類型,指定使用者名稱(區分大小寫)或影響的頁面(區分大小寫)。",
        "logempty": "無符合條件的日誌。",
        "log-title-wildcard": "搜尋以此欄位文字為字首的標題",
        "showhideselectedlogentries": "顯示/隱藏已選擇的日誌項目",
        "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": "顯示使用者開始自:",
        "enotif_body_intro_deleted": "{{SITENAME}} $2 已刪除頁面 $1 於 $PAGEEDITDATE,詳見 $3。",
        "enotif_body_intro_created": "{{SITENAME}} 的頁面 $1 已於 $PAGEEDITDATE 被使用者 $2 {{GENDER:$2|建立}},詳見目前的修訂 $3。",
        "enotif_body_intro_moved": "{{SITENAME}} 的頁面 $1 已於 $PAGEEDITDATE 被使用者 $2 {{GENDER:$2|移動}},詳見目前的修訂 $3。",
-       "enotif_body_intro_restored": "{{SITENAME}} 的頁面 $1 已於 $PAGEEDITDATE 被使用者 $2 {{GENDER:$2|恢復}},詳見目前的修訂 $3。",
+       "enotif_body_intro_restored": "{{SITENAME}} 的頁面 $1 已於 $PAGEEDITDATE 被使用者 $2 {{GENDER:$2|還原}},詳見目前的修訂 $3。",
        "enotif_body_intro_changed": "{{SITENAME}} 的頁面 $1 已於 $PAGEEDITDATE 被使用者 $2 {{GENDER:$2|更改}},詳見目前的修訂 $3。",
        "enotif_lastvisited": "請參考 $1 檢視自您上次檢視後所有的變更。",
        "enotif_lastdiff": "請參考 $1 檢視此變更。",
        "whatlinkshere-prev": "前 $1 筆",
        "whatlinkshere-next": "後 $1 筆",
        "whatlinkshere-links": "← 連結",
-       "whatlinkshere-hideredirs": "$1 重新導向頁面",
+       "whatlinkshere-hideredirs": "$1重新導向頁面",
        "whatlinkshere-hidetrans": "$1 引用",
        "whatlinkshere-hidelinks": "$1 連結",
        "whatlinkshere-hideimages": "$1 檔案連結",
        "unblock": "解除封鎖使用者",
        "blockip": "封鎖{{GENDER:$1|使用者}}",
        "blockip-legend": "封鎖使用者",
-       "blockiptext": "填寫以下單據可封鎖特定 IP 位址或使用者名稱的存取權限。\n這個動作應用來避免破壞行為,可根據 [[{{MediaWiki:Policy-url}}|管理政策]]。\n請在下方填寫一個具體的原因 (例如:引述一段破壞頁面的事實)。",
+       "blockiptext": "填寫以下表單可封鎖特定 IP 位址或使用者名稱的存取權限。\n這個動作應用來避免破壞行為,可根據 [[{{MediaWiki:Policy-url}}|管理政策]]。\n請在下方填寫一個具體的原因 (例如:引述一段破壞頁面的事實)。",
        "ipaddressorusername": "IP 位址或使用者名稱:",
        "ipbexpiry": "期限:",
        "ipbreason": "原因:",
        "lockedbyandtime": "(由 {{GENDER:$1|$1}} 於 $2 的 $3)",
        "move-page": "移動 $1",
        "move-page-legend": "移動頁面",
-       "movepagetext": "以下表格可以用來重新命名頁面,並將該頁面的所有歷史記錄一併移至擁有新名稱的頁面。\n舊標題的頁面將會變成重新導向頁面,指向使用新標題的頁面。\n您可以選擇自動更新所有指向舊頁面的重新導向,讓它們改為指向新頁面。\n若您選擇不自動更新,請檢查有沒有[[Special:DoubleRedirects|雙重重新導向]]或[[Special:BrokenRedirects|損壞的重新導向]]需要修正。\n您有責任讓連結繼續指向正確的地方。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>移動至該處,除非新名稱下是個重新導向頁面而且沒有任何編輯記錄。\n即是說,您可以將錯誤移動至其他名稱的頁面還原到原有名稱,但不能覆蓋任何現有的頁面。\n\n<strong>警告!</strong>\n這個動作對受歡迎的頁面來說可能是重大而唐突的更改;\n在行動前請先確認您了解移動可能帶來的後果。",
-       "movepagetext-noredirectfixer": "以下表格可以用來重新命名頁面,並將該頁面的所有歷史記錄一併移至擁有新名稱的頁面。\n舊標題的頁面將會變成重新導向頁面,指向使用新標題的頁面。\n請檢查有沒有[[Special:DoubleRedirects|雙重重新導向]]或[[Special:BrokenRedirects|損壞的重新導向]]需要修正。\n您有責任讓連結繼續指向正確的地方。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>移動至該處,除非新名稱下是個重新導向頁面而且沒有任何編輯記錄。\n即是說,您可以將錯誤移動至其他名稱的頁面還原到原有名稱,但不能覆蓋任何現有的頁面。\n\n<strong>警告!</strong>\n這個動作對受歡迎的頁面來說可能是重大而唐突的更改;\n在行動前請先確認您了解移動可能帶來的後果。",
+       "movepagetext": "以下表單可以用來重新命名一個頁面,並將該頁面的所有歷史記錄一併移至擁有新名稱的頁面。\n舊標題的頁面將會變成重新導向頁面,指向使用新標題的頁面。\n您可以選擇自動更新所有指向舊頁面的重新導向,讓它們改為指向新頁面。\n若您選擇不自動更新,請檢查有沒有[[Special:DoubleRedirects|雙重重新導向]]或[[Special:BrokenRedirects|損壞的重新導向]]需要修正。\n您有責任讓連結繼續指向正確的地方。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>移動至該處,除非新名稱下是個重新導向頁面而且沒有任何編輯記錄。\n即是說,您可以將錯誤移動至其他名稱的頁面還原到原有名稱,但不能覆蓋任何現有的頁面。\n\n<strong>警告!</strong>\n這個動作對受歡迎的頁面來說可能是重大而唐突的更改;\n在行動前請先確認您了解移動可能帶來的後果。",
+       "movepagetext-noredirectfixer": "以下表單可以用來重新命名一個頁面,並將該頁面的所有歷史記錄一併移至擁有新名稱的頁面。\n舊標題的頁面將會變成重新導向頁面,指向使用新標題的頁面。\n請檢查有沒有[[Special:DoubleRedirects|雙重重新導向]]或[[Special:BrokenRedirects|損壞的重新導向]]需要修正。\n您有責任讓連結繼續指向正確的地方。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>移動至該處,除非新名稱下是個重新導向頁面而且沒有任何編輯記錄。\n即是說,您可以將錯誤移動至其他名稱的頁面還原到原有名稱,但不能覆蓋任何現有的頁面。\n\n<strong>警告!</strong>\n這個動作對受歡迎的頁面來說可能是重大而唐突的更改;\n在行動前請先確認您了解移動可能帶來的後果。",
        "movepagetalktext": "相關的的對話頁面 (如果有的話) 會自動與該頁面一起移動,<strong>除非:</strong>\n*新的名稱已有一個存在的對話頁面,或\n*您未勾選此核選方塊。\n\n在上述情況下,若有必要您必須手動移動或合併已存在的頁面。",
        "movearticle": "移動頁面:",
        "moveuserpage-warning": "<strong>警告:</strong>您正要移動使用者頁面,請注意只有使用者頁面會變更名稱,並<em>不會</em>重新命名使用者。",
        "export-addnstext": "使用命名空間新增頁面:",
        "export-addns": "新增",
        "export-download": "儲存為檔案",
-       "export-templates": "包含樣",
+       "export-templates": "包含樣",
        "export-pagelinks": "包含連結的頁面深度:",
        "allmessages": "系統訊息",
        "allmessagesname": "名稱",
        "import-interwiki-sourcewiki": "來源 Wiki:",
        "import-interwiki-sourcepage": "來源頁面:",
        "import-interwiki-history": "複製此頁的所有歷史修訂",
-       "import-interwiki-templates": "包含所有樣",
+       "import-interwiki-templates": "包含所有樣",
        "import-interwiki-submit": "匯入",
        "import-interwiki-namespace": "目標命名空間:",
        "import-interwiki-rootpage": "目標根頁面 (選填):",
        "tooltip-ca-nstab-project": "檢視專案頁面",
        "tooltip-ca-nstab-image": "檢視檔案頁面",
        "tooltip-ca-nstab-mediawiki": "檢視系統訊息",
-       "tooltip-ca-nstab-template": "檢視樣",
+       "tooltip-ca-nstab-template": "檢視樣",
        "tooltip-ca-nstab-help": "檢視說明頁面",
        "tooltip-ca-nstab-category": "檢視分類頁面",
        "tooltip-minoredit": "標記為小修訂",
        "confirmemail_success": "您的電子郵件已經被確認。您現在可以[[Special:UserLogin|登入]]並使用此網站了。",
        "confirmemail_loggedin": "已確認您的電子郵件位址。",
        "confirmemail_subject": "{{SITENAME}} 電子郵件位址確認",
-       "confirmemail_body": "不明人士 (可能是您自己,來自 IP 位址 $1)  已在 {{SITENAME}} 註冊了一個帳號 \"$2\" 並使用了此電子郵件位址。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以啟用在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
+       "confirmemail_body": "不明人士(可能是您自己,來自 IP 位址 $1 )已在 {{SITENAME}} 註冊了一個帳號 \"$2\" 並使用了此電子郵件位址。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以啟用在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
        "confirmemail_body_changed": "不明人士 (可能是您自己,來自 IP 位址 $1)  已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件位址更改至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以啟用在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
-       "confirmemail_body_set": "不明人士 (可能是您自己,來自 IP 位址 $1)  已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件位址設定至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以啟用在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
+       "confirmemail_body_set": "不明人士(可能是您自己,來自 IP 位址 $1 )已將在 {{SITENAME}} 帳號 \"$2\" 的電子郵件位址設定至此。\n\n請確認這個帳號是屬於您的,並使用瀏覽器開啟下方連結以啟用在 {{SITENAME}} 上的電子郵件功能:\n\n$3\n\n若您 *未* 註冊此帳號,\n請開啟下方連結取消電子郵件確認:\n\n$5\n\n此確認代碼會於 $4 過期。",
        "confirmemail_invalidated": "已取消電子郵件位址確認",
        "invalidateemail": "取消電子郵件確認",
        "scarytranscludedisabled": "[Interwiki 轉換代碼不可用]",
-       "scarytranscludefailed": "[樣 $1 讀取失敗]",
-       "scarytranscludefailed-httpstatus": "[樣 $1 讀取失敗:HTTP $2]",
+       "scarytranscludefailed": "[樣 $1 讀取失敗]",
+       "scarytranscludefailed-httpstatus": "[樣 $1 讀取失敗:HTTP $2]",
        "scarytranscludetoolong": "[URL 過長]",
        "deletedwhileediting": "<strong>警告:</strong>此頁在您開始編輯之後已經被刪除﹗",
        "confirmrecreate": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|對話]]) 刪除了此頁面,原因為:\n: <em>$2</em>\n請確認您是否真的要重新建立此頁面。",
        "redirect-revision": "頁面修訂 ID",
        "redirect-file": "檔案名稱",
        "redirect-not-exists": "查無值",
-       "fileduplicatesearch": "æ\90\9cå°\8bé\87\8dè¦\86檔案",
+       "fileduplicatesearch": "æ\90\9cå°\8bé\87\8dè¤\87檔案",
        "fileduplicatesearch-summary": "依據雜湊值 (Hash) 來搜尋重複的檔案。",
        "fileduplicatesearch-legend": "搜尋重覆",
        "fileduplicatesearch-filename": "檔案名稱:",
        "fileduplicatesearch-submit": "搜尋",
        "fileduplicatesearch-info": "$1 × $2 像素<br />檔案大小:$3<br />MIME 類型:$4",
-       "fileduplicatesearch-result-1": "æª\94æ¡\88 $1 ç\84¡é\87\8dè¦\86的檔案。",
+       "fileduplicatesearch-result-1": "æª\94æ¡\88 $1 ç\84¡é\87\8dè¤\87的檔案。",
        "fileduplicatesearch-result-n": "檔案 $1 有 $2 筆重覆的檔案。",
        "fileduplicatesearch-noresults": "查無名稱為 \"$1\" 的檔案。",
        "specialpages": "特殊頁面",
        "limitreport-ppgeneratednodes": "預處理器產生節點次數",
        "limitreport-postexpandincludesize": "展開後的引用大小",
        "limitreport-postexpandincludesize-value": "$1/$2 個{{PLURAL:$2|位元組}}",
-       "limitreport-templateargumentsize": "樣參數大小",
+       "limitreport-templateargumentsize": "樣參數大小",
        "limitreport-templateargumentsize-value": "$1/$2 個{{PLURAL:$2|位元組}}",
        "limitreport-expansiondepth": "最高展開深度",
        "limitreport-expensivefunctioncount": "高消耗解析器函數次數",
-       "expandtemplates": "展開樣",
+       "expandtemplates": "展開樣",
        "expand_templates_intro": "本特殊頁面會將文字中的樣版展開,可以包含支援的解析器語法,如 <code><nowiki>{{</nowiki>#language:…}}</code> 與變數如 <code><nowiki>{{</nowiki>CURRENTDAY}}</code>。\n實際上,絕大部分在雙括號中的內容都會被展開。",
        "expand_templates_title": "上下文標題,用於 {{FULLPAGENAME}} 等:",
        "expand_templates_input": "輸入文字:",
diff --git a/maintenance/generateLocalAutoload.php b/maintenance/generateLocalAutoload.php
new file mode 100644 (file)
index 0000000..5e4cac6
--- /dev/null
@@ -0,0 +1,25 @@
+<?php
+
+if ( PHP_SAPI != 'cli' ) {
+       die( "This script can only be run from the command line.\n" );
+}
+
+require_once __DIR__ . '/../includes/utils/AutoloadGenerator.php';
+
+// Mediawiki installation directory
+$base = dirname( __DIR__ );
+
+$generator = new AutoloadGenerator( $base, 'local' );
+foreach ( array( 'includes', 'languages', 'maintenance', 'mw-config' ) as $dir ) {
+       $generator->readDir( $base . '/' . $dir );
+}
+foreach ( glob( $base . '/*.php' ) as $file ) {
+       $generator->readFile( $file );
+}
+
+// This class is not defined, but might be added by the installer
+$generator->forceClassPath( 'MyLocalSettingsGenerator', "$base/mw-config/overrides.php" );
+
+// Write out the autoload
+$generator->generateAutoload();
+
index b79ab50..60ef661 100644 (file)
        },
        "ooui-outline-control-move-down": "ელემენტის ქვემოთ გადატანა",
        "ooui-outline-control-move-up": "ელემენტის ზემოთ გადატანა",
-       "ooui-toolbar-more": "მეტი"
+       "ooui-outline-control-remove": "წაშლა",
+       "ooui-toolbar-more": "მეტი",
+       "ooui-toolgroup-expand": "მეტი",
+       "ooui-toolgroup-collapse": "რამდენიმე",
+       "ooui-dialog-message-accept": "კარგი",
+       "ooui-dialog-message-reject": "გაუქმება",
+       "ooui-dialog-process-error": "მოხდა რაღაც შეცდომა",
+       "ooui-dialog-process-dismiss": "დამალვა",
+       "ooui-dialog-process-retry": "კიდევ სცადეთ",
+       "ooui-dialog-process-continue": "გაგრძელება"
 }
index a7b4c08..7c7b176 100644 (file)
        "ooui-outline-control-move-up": "Item omhoog verplaatsen",
        "ooui-outline-control-remove": "Item verwijderen",
        "ooui-toolbar-more": "Meer",
+       "ooui-toolgroup-expand": "Meer",
+       "ooui-toolgroup-collapse": "Minder",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Annuleren",
        "ooui-dialog-process-error": "Er is iets misgegaan",
        "ooui-dialog-process-dismiss": "Sluiten",
-       "ooui-dialog-process-retry": "Opnieuw proberen"
+       "ooui-dialog-process-retry": "Opnieuw proberen",
+       "ooui-dialog-process-continue": "Doorgaan"
 }
index dea65eb..fbd0c8c 100644 (file)
@@ -23,6 +23,8 @@
        "ooui-outline-control-move-up": "Przenieś wyżej",
        "ooui-outline-control-remove": "Usuń element",
        "ooui-toolbar-more": "Więcej",
+       "ooui-toolgroup-expand": "Więcej",
+       "ooui-toolgroup-collapse": "Mniej",
        "ooui-dialog-message-accept": "OK",
        "ooui-dialog-message-reject": "Anuluj",
        "ooui-dialog-process-error": "Coś poszło nie tak",
index b225b4b..f633de2 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (05f0fefc3f)
+ * OOjs UI v0.1.0-pre (fe4076af75)
  * 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-11T16:30:00Z
+ * Date: 2014-11-13T22:25:27Z
  */
 /* @noflip */
 .oo-ui-rtl {
index 8c4ddfc..c61b3b9 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (05f0fefc3f)
+ * OOjs UI v0.1.0-pre (fe4076af75)
  * 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-11T16:29:49Z
+ * Date: 2014-11-13T22:25:17Z
  */
 /* Instantiation */
 
index 14ad38f..23313e5 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (05f0fefc3f)
+ * OOjs UI v0.1.0-pre (fe4076af75)
  * 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-11T16:30:00Z
+ * Date: 2014-11-13T22:25:27Z
  */
 /* @noflip */
 .oo-ui-rtl {
index 34db397..f13404b 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (05f0fefc3f)
+ * OOjs UI v0.1.0-pre (fe4076af75)
  * 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-11T16:30:00Z
+ * Date: 2014-11-13T22:25:27Z
  */
 /* @noflip */
 .oo-ui-rtl {
index 1ef5bca..856be2a 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (05f0fefc3f)
+ * OOjs UI v0.1.0-pre (fe4076af75)
  * 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-11T16:29:49Z
+ * Date: 2014-11-13T22:25:17Z
  */
 /**
  * @class
index aa5605a..b901a4c 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (05f0fefc3f)
+ * OOjs UI v0.1.0-pre (fe4076af75)
  * 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-11T16:30:00Z
+ * Date: 2014-11-13T22:25:27Z
  */
 /* @noflip */
 .oo-ui-rtl {
index a8d0029..d781397 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.1.0-pre (05f0fefc3f)
+ * OOjs UI v0.1.0-pre (fe4076af75)
  * 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-11T16:29:49Z
+ * Date: 2014-11-13T22:25:17Z
  */
 ( function ( OO ) {
 
@@ -93,6 +93,30 @@ OO.ui.getLocalValue = function ( obj, lang, fallback ) {
        return undefined;
 };
 
+/**
+ * Check if a node is contained within another node
+ *
+ * Similar to jQuery#contains except a list of containers can be supplied
+ * and a boolean argument allows you to include the container in the match list
+ *
+ * @param {HTMLElement|HTMLElement[]} containers Container node(s) to search in
+ * @param {HTMLElement} contained Node to find
+ * @param {boolean} [matchContainers] Include the container(s) in the list of nodes to match, otherwise only match descendents
+ * @returns {boolean} The node is in the list of target nodes
+ */
+OO.ui.contains = function ( containers, contained, matchContainers ) {
+       var i;
+       if ( !Array.isArray( containers ) ) {
+               containers = [ containers ];
+       }
+       for ( i = containers.length - 1; i >= 0; i-- ) {
+               if ( ( matchContainers && contained === containers[i] ) || $.contains( containers[i], contained ) ) {
+                       return true;
+               }
+       }
+       return false;
+};
+
 ( function () {
        /**
         * Message store for the default implementation of OO.ui.msg
@@ -7474,7 +7498,9 @@ OO.ui.PopupToolGroup.prototype.onBlur = function ( e ) {
  */
 OO.ui.PopupToolGroup.prototype.onPointerUp = function ( e ) {
        // e.which is 0 for touch events, 1 for left mouse button
-       if ( !this.isDisabled() && e.which <= 1 ) {
+       // Only close toolgroup when a tool was actually selected
+       // FIXME: this duplicates logic from the parent class
+       if ( !this.isDisabled() && e.which <= 1 && this.pressed && this.pressed === this.getTargetTool( e ) ) {
                this.setActive( false );
        }
        return OO.ui.PopupToolGroup.super.prototype.onPointerUp.call( this, e );
@@ -11488,7 +11514,10 @@ OO.mixinClass( OO.ui.MenuWidget, OO.ui.ClippableElement );
  * @param {jQuery.Event} e Key down event
  */
 OO.ui.MenuWidget.prototype.onDocumentMouseDown = function ( e ) {
-       if ( !$.contains( this.$element[0], e.target ) && ( !this.$widget || !$.contains( this.$widget[0], e.target ) ) ) {
+       if (
+               !OO.ui.contains( this.$element[0], e.target, true ) &&
+               ( !this.$widget || !OO.ui.contains( this.$widget[0], e.target, true ) )
+       ) {
                this.toggle( false );
        }
 };
index 7a41708..51cb8d0 100644 (file)
@@ -165,8 +165,13 @@ div.magnify a {
        width: 15px;
        height: 11px;
        /* Default styles when there's no .mw-content-ltr or .mw-content-rtl, overridden below */
+
+       /* Use same SVG support hack as mediawiki.legacy's shared.css */
+       background-image: url(images/magnify-clip-ltr.png);
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/magnify-clip-ltr.svg);
        /* @embed */
-       background: url(images/magnify-clip-ltr.png) center center no-repeat;
+       background-image: linear-gradient(transparent, transparent), url(images/magnify-clip-ltr.svg);
        /* Don't annoy people who copy-paste everything too much */
        -moz-user-select: none;
        -webkit-user-select: none;
@@ -194,8 +199,12 @@ img.thumbborder {
 
 /* @noflip */
 .mw-content-ltr div.magnify a {
-       /* @embed */
+       /* Use same SVG support hack as mediawiki.legacy's shared.css */
        background-image: url(images/magnify-clip-ltr.png);
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/magnify-clip-ltr.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/magnify-clip-ltr.svg);
 }
 
 /* @noflip */
@@ -212,8 +221,12 @@ img.thumbborder {
 
 /* @noflip */
 .mw-content-rtl div.magnify a {
-       /* @embed */
+       /* Use same SVG support hack as mediawiki.legacy's shared.css */
        background-image: url(images/magnify-clip-rtl.png);
+       /* @embed */
+       background-image: -webkit-linear-gradient(transparent, transparent), url(images/magnify-clip-rtl.svg);
+       /* @embed */
+       background-image: linear-gradient(transparent, transparent), url(images/magnify-clip-rtl.svg);
 }
 
 /* @noflip */
index 00a9cee..712b1b4 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/magnify-clip-ltr.png and b/resources/src/mediawiki.skinning/images/magnify-clip-ltr.png differ
diff --git a/resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg b/resources/src/mediawiki.skinning/images/magnify-clip-ltr.svg
new file mode 100644 (file)
index 0000000..4d3dcb6
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 15" width="15" height="11">
+    <g id="magnify-clip" fill="#fff" stroke="#000">
+        <path id="bigbox" d="M1.509 1.865h10.99v7.919h-10.99z"/>
+        <path id="smallbox" d="M-1.499 6.868h5.943v4.904h-5.943z"/>
+    </g>
+</svg>
index ff85c07..1d03a8c 100644 (file)
Binary files a/resources/src/mediawiki.skinning/images/magnify-clip-rtl.png and b/resources/src/mediawiki.skinning/images/magnify-clip-rtl.png differ
diff --git a/resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg b/resources/src/mediawiki.skinning/images/magnify-clip-rtl.svg
new file mode 100644 (file)
index 0000000..582e4ae
--- /dev/null
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 11 15" width="15" height="11">
+    <g id="magnify-clip" fill="#fff" stroke="#000">
+        <path id="bigbox" d="M9.491 1.865h-10.99v7.919h10.99z"/>
+        <path id="smallbox" d="M12.499 6.868h-5.943v4.904h5.943z"/>
+    </g>
+</svg>
index 55f2f89..14f6aee 100644 (file)
@@ -20,7 +20,7 @@
 
 .mw-changeslist-legend dt {
        float: left;
-       margin-right: 0.5em;
+       margin: 0 0.5em 0 0;
 }
 
 .mw-changeslist-legend dd {
diff --git a/skins/common/ajax.js b/skins/common/ajax.js
deleted file mode 120000 (symlink)
index 6cf8d71..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../../resources/src/mediawiki.legacy/ajax.js
\ No newline at end of file
diff --git a/skins/common/images/bullet.gif b/skins/common/images/bullet.gif
deleted file mode 100644 (file)
index b43de48..0000000
Binary files a/skins/common/images/bullet.gif and /dev/null differ
diff --git a/skins/common/images/magnify-clip-rtl.png b/skins/common/images/magnify-clip-rtl.png
deleted file mode 100644 (file)
index ff85c07..0000000
Binary files a/skins/common/images/magnify-clip-rtl.png and /dev/null differ
diff --git a/skins/common/images/magnify-clip.png b/skins/common/images/magnify-clip.png
deleted file mode 100644 (file)
index 00a9cee..0000000
Binary files a/skins/common/images/magnify-clip.png and /dev/null differ
diff --git a/skins/common/images/redirectltr.png b/skins/common/images/redirectltr.png
deleted file mode 100644 (file)
index 695f2a1..0000000
Binary files a/skins/common/images/redirectltr.png and /dev/null differ
diff --git a/skins/common/images/redirectrtl.png b/skins/common/images/redirectrtl.png
deleted file mode 100644 (file)
index c954a2a..0000000
Binary files a/skins/common/images/redirectrtl.png and /dev/null differ
diff --git a/skins/common/wikibits.js b/skins/common/wikibits.js
deleted file mode 120000 (symlink)
index c86af5b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-../../resources/src/mediawiki.legacy/wikibits.js
\ No newline at end of file
index 7391afd..d35ec26 100644 (file)
@@ -55,7 +55,10 @@ $wgAutoloadClasses += array(
 
        # tests/phpunit/includes/api
        'ApiFormatTestBase' => "$testDir/phpunit/includes/api/format/ApiFormatTestBase.php",
+       'ApiQueryTestBase' => "$testDir/phpunit/includes/api/query/ApiQueryTestBase.php",
+       'ApiQueryContinueTestBase' => "$testDir/phpunit/includes/api/query/ApiQueryContinueTestBase.php",
        'ApiTestCase' => "$testDir/phpunit/includes/api/ApiTestCase.php",
+       'ApiTestCaseUpload' => "$testDir/phpunit/includes/api/ApiTestCaseUpload.php",
        'ApiTestContext' => "$testDir/phpunit/includes/api/ApiTestContext.php",
        'MockApi' => "$testDir/phpunit/includes/api/MockApi.php",
        'MockApiQueryBase' => "$testDir/phpunit/includes/api/MockApiQueryBase.php",
@@ -79,6 +82,9 @@ $wgAutoloadClasses += array(
        'PageORMTableForTesting' => "$testDir/phpunit/includes/db/ORMTableTest.php",
        'DatabaseTestHelper' => "$testDir/phpunit/includes/db/DatabaseTestHelper.php",
 
+       # tests/phpunit/includes/diff
+       'FakeDiffOp' => "$testDir/phpunit/includes/diff/FakeDiffOp.php",
+
        # tests/phpunit/includes/passwords
        'PasswordTestCase' => "$testDir/phpunit/includes/password/PasswordTestCase.php",
 
index 8ea761f..7fdefb6 100644 (file)
@@ -17,8 +17,6 @@
 
 // @todo Port the other Upload tests, and other API tests to this framework
 
-require_once 'ApiTestCaseUpload.php';
-
 /**
  * @group Database
  * @group Broken
index e486c4f..fa0e4cb 100644 (file)
@@ -23,8 +23,6 @@
  * @file
  */
 
-require_once 'ApiQueryTestBase.php';
-
 /**
  * These tests validate basic functionality of the api query module
  *
index 46f1b7b..2431761 100644 (file)
@@ -18,8 +18,6 @@
  * http://www.gnu.org/copyleft/gpl.html
  */
 
-require_once 'ApiQueryContinueTestBase.php';
-
 /**
  * @group API
  * @group Database
index 56130f1..de9965b 100644 (file)
@@ -18,8 +18,6 @@
  * http://www.gnu.org/copyleft/gpl.html
  */
 
-require_once 'ApiQueryContinueTestBase.php';
-
 /**
  * These tests validate the new continue functionality of the api query module by
  * doing multiple requests with varying parameters, merging the results, and checking
index a5f2684..ce2f70d 100644 (file)
@@ -21,9 +21,6 @@
  *
  * @file
  */
-
-require_once 'ApiQueryTestBase.php';
-
 abstract class ApiQueryContinueTestBase extends ApiQueryTestBase {
 
        /**
index ca31cf9..a5c19f9 100644 (file)
  * that hold the first tests in a pending state awaiting access to the database.
  * @group medium
  *
+ * @covers TestORMRow
  * @licence GNU GPL v2+
  * @author Jeroen De Dauw < jeroendedauw@gmail.com >
  */
-require_once __DIR__ . "/ORMRowTest.php";
-
-/**
- * @covers TestORMRow
- */
 class TestORMRowTest extends ORMRowTest {
 
        /**
index d89b89f..a685bf4 100644 (file)
@@ -1,8 +1,4 @@
 <?php
-
-//Load our FakeDiffOp
-require_once __DIR__ . DIRECTORY_SEPARATOR . 'FakeDiffOp.php';
-
 /**
  * @licence GNU GPL v2+
  * @author Adam Shorland
index 003efd2..500b7e4 100644 (file)
@@ -5,23 +5,8 @@
  */
 class BadTitleErrorTest extends MediaWikiTestCase {
 
-       protected $wgOut;
-
-       protected function setUp() {
-               parent::setUp();
-               global $wgOut;
-               $this->wgOut = clone $wgOut;
-       }
-
-       protected function tearDown() {
-               parent::tearDown();
-               global $wgOut;
-               $wgOut = $this->wgOut;
-       }
-
        public function testExceptionSetsStatusCode() {
-               global $wgOut;
-               $wgOut = $this->getMockWgOut();
+               $this->setMwGlobals( 'wgOut', $this->getMockWgOut() );
                try {
                        throw new BadTitleError();
                } catch ( BadTitleError $e ) {
index 13dcf33..9c4e4a0 100644 (file)
@@ -6,20 +6,6 @@
  */
 class ErrorPageErrorTest extends MediaWikiTestCase {
 
-       private $wgOut;
-
-       protected function setUp() {
-               parent::setUp();
-               global $wgOut;
-               $this->wgOut = clone $wgOut;
-       }
-
-       protected function tearDown() {
-               global $wgOut;
-               $wgOut = $this->wgOut;
-               parent::tearDown();
-       }
-
        private function getMockMessage() {
                $mockMessage = $this->getMockBuilder( 'Message' )
                        ->disableOriginalConstructor()
@@ -48,20 +34,18 @@ class ErrorPageErrorTest extends MediaWikiTestCase {
                $title = 'Foo';
                $params = array( 'Baz' );
 
-               global $wgOut;
-               $wgOut = $this->getMockBuilder( 'OutputPage' )
+               $mock = $this->getMockBuilder( 'OutputPage' )
                        ->disableOriginalConstructor()
                        ->getMock();
-               $wgOut->expects( $this->once() )
+               $mock->expects( $this->once() )
                        ->method( 'showErrorPage' )
                        ->with( $title, $mockMessage, $params );
-               $wgOut->expects( $this->once() )
+               $mock->expects( $this->once() )
                        ->method( 'output' );
+               $this->setMwGlobals( 'wgOut', $mock );
 
                $e = new ErrorPageError( $title, $mockMessage, $params );
                $e->report();
        }
 
-
-
 }
index bdb143f..a1cf84b 100644 (file)
@@ -6,23 +6,8 @@
  */
 class ThrottledErrorTest extends MediaWikiTestCase {
 
-       protected $wgOut;
-
-       protected function setUp() {
-               parent::setUp();
-               global $wgOut;
-               $this->wgOut = clone $wgOut;
-       }
-
-       protected function tearDown() {
-               parent::tearDown();
-               global $wgOut;
-               $wgOut = $this->wgOut;
-       }
-
        public function testExceptionSetsStatusCode() {
-               global $wgOut;
-               $wgOut = $this->getMockWgOut();
+               $this->setMwGlobals( 'wgOut', $this->getMockWgOut() );
                try {
                        throw new ThrottledError();
                } catch ( ThrottledError $e ) {
index 1f88b12..8c2f12c 100644 (file)
@@ -21,6 +21,9 @@
 
 class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
 
+       /**
+        * @covers ObjectFactory::getObjectFromSpec
+        */
        public function testClosureExpansionDisabled() {
                $obj = ObjectFactory::getObjectFromSpec( array(
                        'class' => 'ObjectFactoryTest_Fixture',
@@ -31,6 +34,9 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
                $this->assertSame( 'unwrapped', $obj->args[0]() );
        }
 
+       /**
+        * @covers ObjectFactory::getObjectFromSpec
+        */
        public function testClosureExpansionEnabled() {
                $obj = ObjectFactory::getObjectFromSpec( array(
                        'class' => 'ObjectFactoryTest_Fixture',
diff --git a/tests/phpunit/includes/libs/XhprofTest.php b/tests/phpunit/includes/libs/XhprofTest.php
new file mode 100644 (file)
index 0000000..cc81aba
--- /dev/null
@@ -0,0 +1,321 @@
+<?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
+ */
+
+/**
+ * @uses Xhprof
+ * @uses AutoLoader
+ * @author Bryan Davis <bd808@wikimedia.org>
+ * @copyright © 2014 Bryan Davis and Wikimedia Foundation.
+ * @since 1.25
+ */
+class XhprofTest extends PHPUnit_Framework_TestCase {
+
+       public function setUp() {
+               if ( !function_exists( 'xhprof_enable' ) ) {
+                       $this->markTestSkipped( 'No xhprof support detected.' );
+               }
+       }
+
+       /**
+        * @covers Xhprof::splitKey
+        * @dataProvider provideSplitKey
+        */
+       public function testSplitKey( $key, $expect ) {
+               $this->assertSame( $expect, Xhprof::splitKey( $key ) );
+       }
+
+       public function provideSplitKey() {
+               return array(
+                       array( 'main()', array( null, 'main()' ) ),
+                       array( 'foo==>bar', array( 'foo', 'bar' ) ),
+                       array( 'bar@1==>bar@2', array( 'bar@1', 'bar@2' ) ),
+                       array( 'foo==>bar==>baz', array( 'foo', 'bar==>baz' ) ),
+                       array( '==>bar', array( '', 'bar' ) ),
+                       array( '', array( null, '' ) ),
+               );
+       }
+
+       /**
+        * @covers Xhprof::__construct
+        * @covers Xhprof::stop
+        * @covers Xhprof::getRawData
+        * @dataProvider provideRawData
+        */
+       public function testRawData( $flags, $keys ) {
+               $xhprof = new Xhprof( array( 'flags' => $flags ) );
+               $raw = $xhprof->getRawData();
+               $this->assertArrayHasKey( 'main()', $raw );
+               foreach ( $keys as $key ) {
+                       $this->assertArrayHasKey( $key, $raw['main()'] );
+               }
+       }
+
+       public function provideRawData() {
+               $tests = array(
+                       array( 0, array( 'ct', 'wt' ) ),
+               );
+
+               if ( defined( 'XHPROF_FLAGS_CPU' ) && defined( 'XHPROF_FLAGS_CPU' ) ) {
+                       $tests[] = array( XHPROF_FLAGS_MEMORY, array(
+                               'ct', 'wt', 'mu', 'pmu',
+                       ) );
+                       $tests[] = array( XHPROF_FLAGS_CPU, array(
+                               'ct', 'wt', 'cpu',
+                       ) );
+                       $tests[] = array( XHPROF_FLAGS_MEMORY | XHPROF_FLAGS_CPU, array(
+                                       'ct', 'wt', 'mu', 'pmu', 'cpu',
+                               ) );
+               }
+
+               return $tests;
+       }
+
+       /**
+        * @covers Xhprof::pruneData
+        */
+       public function testInclude() {
+               $xhprof = $this->getXhprofFixture( array(
+                       'include' => array( 'main()' ),
+               ) );
+               $raw = $xhprof->getRawData();
+               $this->assertArrayHasKey( 'main()', $raw );
+               $this->assertArrayHasKey( 'main()==>foo', $raw );
+               $this->assertArrayHasKey( 'main()==>xhprof_disable', $raw );
+               $this->assertSame( 3, count( $raw ) );
+       }
+
+       /**
+        * Validate the structure of data returned by
+        * Xhprof::getInclusiveMetrics(). This acts as a guard against unexpected
+        * structural changes to the returned data in lieu of using a more heavy
+        * weight typed response object.
+        *
+        * @covers Xhprof::getInclusiveMetrics
+        */
+       public function testInclusiveMetricsStructure() {
+               $metricStruct = array(
+                       'ct' => 'int',
+                       'wt' => 'array',
+                       'cpu' => 'array',
+                       'mu' => 'array',
+                       'pmu' => 'array',
+               );
+               $statStruct = array(
+                       'total' => 'numeric',
+                       'min' => 'numeric',
+                       'mean' => 'numeric',
+                       'max' => 'numeric',
+                       'variance' => 'numeric',
+                       'percent' => 'numeric',
+               );
+
+               $xhprof = $this->getXhprofFixture();
+               $metrics = $xhprof->getInclusiveMetrics();
+
+               foreach ( $metrics as $name => $metric ) {
+                       $this->assertArrayStructure( $metricStruct, $metric );
+
+                       foreach ( $metricStruct as $key => $type ) {
+                               if ( $type === 'array' ) {
+                                       $this->assertArrayStructure( $statStruct, $metric[$key] );
+                                       if ( $name === 'main()' ) {
+                                               $this->assertEquals( 100, $metric[$key]['percent'] );
+                                       }
+                               }
+                       }
+               }
+       }
+
+       /**
+        * Validate the structure of data returned by
+        * Xhprof::getCompleteMetrics(). This acts as a guard against unexpected
+        * structural changes to the returned data in lieu of using a more heavy
+        * weight typed response object.
+        *
+        * @covers Xhprof::getCompleteMetrics
+        */
+       public function testCompleteMetricsStructure() {
+               $metricStruct = array(
+                       'ct' => 'int',
+                       'wt' => 'array',
+                       'cpu' => 'array',
+                       'mu' => 'array',
+                       'pmu' => 'array',
+                       'calls' => 'array',
+                       'subcalls' => 'array',
+               );
+               $statsMetrics = array( 'wt', 'cpu', 'mu', 'pmu' );
+               $statStruct = array(
+                       'total' => 'numeric',
+                       'min' => 'numeric',
+                       'mean' => 'numeric',
+                       'max' => 'numeric',
+                       'variance' => 'numeric',
+                       'percent' => 'numeric',
+                       'exclusive' => 'numeric',
+               );
+
+               $xhprof = $this->getXhprofFixture();
+               $metrics = $xhprof->getCompleteMetrics();
+
+               foreach ( $metrics as $name => $metric ) {
+                       $this->assertArrayStructure( $metricStruct, $metric, $name );
+
+                       foreach ( $metricStruct as $key => $type ) {
+                               if ( in_array( $key, $statsMetrics ) ) {
+                                       $this->assertArrayStructure(
+                                               $statStruct, $metric[$key], $key
+                                       );
+                                       $this->assertLessThanOrEqual(
+                                               $metric[$key]['total'], $metric[$key]['exclusive']
+                                       );
+                               }
+                       }
+               }
+       }
+
+       /**
+        * @covers Xhprof::getCallers
+        * @covers Xhprof::getCallees
+        * @uses Xhprof
+        */
+       public function testEdges() {
+               $xhprof = $this->getXhprofFixture();
+               $this->assertSame( array(), $xhprof->getCallers( 'main()' ) );
+               $this->assertSame( array( 'foo', 'xhprof_disable' ),
+                       $xhprof->getCallees( 'main()' )
+               );
+               $this->assertSame( array( 'main()' ),
+                       $xhprof->getCallers( 'foo' )
+               );
+               $this->assertSame( array(), $xhprof->getCallees( 'strlen' ) );
+       }
+
+       /**
+        * @covers Xhprof::getCriticalPath
+        * @uses Xhprof
+        */
+       public function testCriticalPath() {
+               $xhprof = $this->getXhprofFixture();
+               $path = $xhprof->getCriticalPath();
+
+               $last = null;
+               foreach ( $path as $key => $value ) {
+                       list( $func, $call ) = Xhprof::splitKey( $key );
+                       $this->assertSame( $last, $func );
+                       $last = $call;
+               }
+               $this->assertSame( $last, 'bar@1' );
+       }
+
+       /**
+        * Get an Xhprof instance that has been primed with a set of known testing
+        * data. Tests for the Xhprof class should laregly be concerned with
+        * evaluating the manipulations of the data collected by xhprof rather
+        * than the data collection process itself.
+        *
+        * The returned Xhprof instance primed will be with a data set created by
+        * running this trivial program using the PECL xhprof implementation:
+        * @code
+        * function bar( $x ) {
+        *   if ( $x > 0 ) {
+        *     bar($x - 1);
+        *   }
+        * }
+        * function foo() {
+        *   for ( $idx = 0; $idx < 2; $idx++ ) {
+        *     bar( $idx );
+        *     $x = strlen( 'abc' );
+        *   }
+        * }
+        * xhprof_enable( XHPROF_FLAGS_CPU | XHPROF_FLAGS_MEMORY );
+        * foo();
+        * $x = xhprof_disable();
+        * var_export( $x );
+        * @endcode
+        *
+        * @return Xhprof
+        */
+       protected function getXhprofFixture( array $opts = array() ) {
+               $xhprof = new Xhprof( $opts );
+               $xhprof->loadRawData( array (
+                       'foo==>bar' => array (
+                               'ct' => 2,
+                               'wt' => 57,
+                               'cpu' => 92,
+                               'mu' => 1896,
+                               'pmu' => 0,
+                       ),
+                       'foo==>strlen' => array (
+                               'ct' => 2,
+                               'wt' => 21,
+                               'cpu' => 141,
+                               'mu' => 752,
+                               'pmu' => 0,
+                       ),
+                       'bar==>bar@1' => array (
+                               'ct' => 1,
+                               'wt' => 18,
+                               'cpu' => 19,
+                               'mu' => 752,
+                               'pmu' => 0,
+                       ),
+                       'main()==>foo' => array (
+                               'ct' => 1,
+                               'wt' => 304,
+                               'cpu' => 307,
+                               'mu' => 4008,
+                               'pmu' => 0,
+                       ),
+                       'main()==>xhprof_disable' => array (
+                               'ct' => 1,
+                               'wt' => 8,
+                               'cpu' => 10,
+                               'mu' => 768,
+                               'pmu' => 392,
+                       ),
+                       'main()' => array (
+                               'ct' => 1,
+                               'wt' => 353,
+                               'cpu' => 351,
+                               'mu' => 6112,
+                               'pmu' => 1424,
+                       ),
+               ) );
+               return $xhprof;
+       }
+
+       /**
+        * Assert that the given array has the described structure.
+        *
+        * @param array $struct Array of key => type mappings
+        * @param array $actual Array to check
+        * @param string $label
+        */
+       protected function assertArrayStructure( $struct, $actual, $label = null ) {
+               $this->assertInternalType( 'array', $actual, $label );
+               $this->assertCount( count($struct), $actual, $label );
+               foreach ( $struct as $key => $type ) {
+                       $this->assertArrayHasKey( $key, $actual );
+                       $this->assertInternalType( $type, $actual[$key] );
+               }
+       }
+}
index 2eda8f1..96a88f0 100644 (file)
@@ -26,9 +26,9 @@
         */
 
        // When a test() indicates asynchronicity with stop(),
-       // allow 10 seconds to pass before killing the test(),
+       // allow 30 seconds to pass before killing the test(),
        // and assuming failure.
-       QUnit.config.testTimeout = 10 * 1000;
+       QUnit.config.testTimeout = 30 * 1000;
 
        // Add a checkbox to QUnit header to toggle MediaWiki ResourceLoader debug mode.
        QUnit.config.urlConfig.push( {