Merge "Allow basic grant holders to autocreate accounts"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 14 Aug 2019 19:52:10 +0000 (19:52 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 14 Aug 2019 19:52:10 +0000 (19:52 +0000)
375 files changed:
HISTORY
RELEASE-NOTES-1.34
autoload.php
includes/CategoryFinder.php
includes/DefaultSettings.php
includes/Defines.php
includes/DevelopmentSettings.php
includes/EditPage.php
includes/FormOptions.php
includes/MagicWord.php
includes/MagicWordFactory.php
includes/OutputPage.php
includes/Revision/RevisionRecord.php
includes/Revision/RevisionStore.php
includes/Revision/RevisionStoreCacheRecord.php
includes/ServiceWiring.php
includes/Setup.php
includes/Title.php
includes/api/ApiBase.php
includes/api/ApiFeedContributions.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryQueryPage.php
includes/api/ApiQueryRevisionsBase.php
includes/api/ApiResult.php
includes/api/i18n/ar.json
includes/api/i18n/fr.json
includes/api/i18n/he.json
includes/api/i18n/ja.json
includes/api/i18n/mk.json
includes/api/i18n/pt-br.json
includes/api/i18n/pt.json
includes/api/i18n/uk.json
includes/api/i18n/zh-hant.json
includes/auth/AuthManager.php
includes/auth/AuthenticationRequest.php
includes/block/BlockManager.php
includes/cache/GenderCache.php
includes/changes/ChangesList.php
includes/changes/FeedItem.php
includes/changetags/ChangeTags.php
includes/changetags/ChangeTagsList.php
includes/changetags/ChangeTagsRevisionList.php
includes/db/CloneDatabase.php
includes/db/DatabaseOracle.php [deleted file]
includes/deferred/LinksUpdate.php
includes/deferred/SearchUpdate.php
includes/diff/DifferenceEngine.php
includes/filebackend/FileBackendGroup.php
includes/filerepo/FileRepo.php
includes/installer/DatabaseInstaller.php
includes/installer/Installer.php
includes/installer/MssqlInstaller.php [deleted file]
includes/installer/MssqlUpdater.php [deleted file]
includes/installer/OracleInstaller.php [deleted file]
includes/installer/OracleUpdater.php [deleted file]
includes/installer/SqliteInstaller.php
includes/installer/WebInstallerDBConnect.php
includes/installer/i18n/ast.json
includes/installer/i18n/en.json
includes/installer/i18n/he.json
includes/installer/i18n/ja.json
includes/installer/i18n/pl.json
includes/installer/i18n/qqq.json
includes/jobqueue/JobQueueDB.php
includes/libs/CSSMin.php
includes/libs/MWMessagePack.php
includes/libs/ParamValidator/ParamValidator.php
includes/libs/filebackend/FileBackend.php
includes/libs/filebackend/fileop/DeleteFileOp.php
includes/libs/mime/defines.php
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/HashBagOStuff.php
includes/libs/objectcache/MediumSpecificBagOStuff.php
includes/libs/objectcache/MemcachedBagOStuff.php
includes/libs/objectcache/RedisBagOStuff.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/database/DatabaseMssql.php [deleted file]
includes/libs/rdbms/database/DatabaseMysqlBase.php
includes/libs/rdbms/database/DatabaseMysqli.php
includes/libs/rdbms/database/DatabaseSqlite.php
includes/libs/rdbms/database/IDatabase.php
includes/libs/rdbms/defines.php
includes/libs/rdbms/lbfactory/ILBFactory.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/logging/LogPage.php
includes/media/Exif.php
includes/objectcache/ObjectCache.php
includes/objectcache/SqlBagOStuff.php
includes/page/Article.php
includes/page/ImagePage.php
includes/page/WikiPage.php
includes/parser/Sanitizer.php
includes/resourceloader/ResourceLoaderClientHtml.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderFilePath.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/search/SearchSqlite.php
includes/session/Session.php
includes/session/SessionManager.php
includes/session/Token.php
includes/specialpage/AuthManagerSpecialPage.php
includes/specialpage/ChangesListSpecialPage.php
includes/specialpage/LoginSignupSpecialPage.php
includes/specialpage/RedirectSpecialArticle.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialBlock.php
includes/specials/SpecialChangeContentModel.php
includes/specials/SpecialContributions.php
includes/specials/SpecialCreateAccount.php
includes/specials/SpecialNewSection.php [new file with mode: 0644]
includes/specials/SpecialNewpages.php
includes/specials/SpecialUpload.php
includes/specials/SpecialVersion.php
includes/specials/formfields/Licenses.php
includes/specials/pagers/NewPagesPager.php
includes/title/NamespaceInfo.php
includes/title/TitleValue.php
includes/watcheditem/WatchedItemStore.php
jsduck.json
languages/i18n/ar.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/awa.json
languages/i18n/bcc.json
languages/i18n/bcl.json
languages/i18n/bg.json
languages/i18n/bho.json
languages/i18n/bn.json
languages/i18n/br.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/cs.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/exif/nl.json
languages/i18n/fa.json
languages/i18n/fr.json
languages/i18n/gcr.json
languages/i18n/gom-latn.json
languages/i18n/grc.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/hyw.json
languages/i18n/id.json
languages/i18n/ig.json
languages/i18n/io.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/ka.json
languages/i18n/km.json
languages/i18n/ko.json
languages/i18n/ku-latn.json
languages/i18n/lb.json
languages/i18n/lki.json
languages/i18n/lrc.json
languages/i18n/lt.json
languages/i18n/lv.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mni.json
languages/i18n/ms.json
languages/i18n/nds-nl.json
languages/i18n/nl.json
languages/i18n/nqo.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ru.json
languages/i18n/sc.json
languages/i18n/sd.json
languages/i18n/sh.json
languages/i18n/sk.json
languages/i18n/skr-arab.json
languages/i18n/sl.json
languages/i18n/sv.json
languages/i18n/tg-cyrl.json
languages/i18n/tl.json
languages/i18n/tt-cyrl.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesDe.php
languages/messages/MessagesEn.php
languages/messages/MessagesInh.php
maintenance/minify.php
maintenance/mssql/archives/patch-actor-table.sql [deleted file]
maintenance/mssql/archives/patch-add-3d.sql [deleted file]
maintenance/mssql/archives/patch-add-cl_collation_ext_index.sql [deleted file]
maintenance/mssql/archives/patch-alter-table-oldimage.sql [deleted file]
maintenance/mssql/archives/patch-ar_rev_id-not-null.sql [deleted file]
maintenance/mssql/archives/patch-archive-drop-fks.sql [deleted file]
maintenance/mssql/archives/patch-bot_passwords.sql [deleted file]
maintenance/mssql/archives/patch-categorylinks-constraints.sql [deleted file]
maintenance/mssql/archives/patch-change_tag-ct_id.sql [deleted file]
maintenance/mssql/archives/patch-change_tag-tag_id.sql [deleted file]
maintenance/mssql/archives/patch-change_tag_def.sql [deleted file]
maintenance/mssql/archives/patch-comment-table.sql [deleted file]
maintenance/mssql/archives/patch-content.sql [deleted file]
maintenance/mssql/archives/patch-content_models.sql [deleted file]
maintenance/mssql/archives/patch-drop-ar_text.sql [deleted file]
maintenance/mssql/archives/patch-drop-comment-fields.sql [deleted file]
maintenance/mssql/archives/patch-drop-ct_tag.sql [deleted file]
maintenance/mssql/archives/patch-drop-page_counter.sql [deleted file]
maintenance/mssql/archives/patch-drop-rc_cur_time.sql [deleted file]
maintenance/mssql/archives/patch-drop-ss_total_views.sql [deleted file]
maintenance/mssql/archives/patch-drop-user_options.sql [deleted file]
maintenance/mssql/archives/patch-externallinks-el_index_60-drop-default.sql [deleted file]
maintenance/mssql/archives/patch-fa_major_mime-chemical.sql [deleted file]
maintenance/mssql/archives/patch-filearchive-constraints.sql [deleted file]
maintenance/mssql/archives/patch-filearchive-schema.sql [deleted file]
maintenance/mssql/archives/patch-il_from_namespace.sql [deleted file]
maintenance/mssql/archives/patch-image-constraints.sql [deleted file]
maintenance/mssql/archives/patch-image-img_description_id.sql [deleted file]
maintenance/mssql/archives/patch-image-schema.sql [deleted file]
maintenance/mssql/archives/patch-img_major_mime-chemical.sql [deleted file]
maintenance/mssql/archives/patch-interwiki-pk.sql [deleted file]
maintenance/mssql/archives/patch-ipb_sitewide.sql [deleted file]
maintenance/mssql/archives/patch-ipblocks_restrictions-table.sql [deleted file]
maintenance/mssql/archives/patch-kill-cl_collation_index.sql [deleted file]
maintenance/mssql/archives/patch-logging-drop-fks.sql [deleted file]
maintenance/mssql/archives/patch-oi_major_mime-chemical.sql [deleted file]
maintenance/mssql/archives/patch-oldimage-constraints.sql [deleted file]
maintenance/mssql/archives/patch-oldimage-schema.sql [deleted file]
maintenance/mssql/archives/patch-page_page_lang.sql [deleted file]
maintenance/mssql/archives/patch-page_props-pk.sql [deleted file]
maintenance/mssql/archives/patch-pl_from_namespace.sql [deleted file]
maintenance/mssql/archives/patch-pp_sortkey.sql [deleted file]
maintenance/mssql/archives/patch-protected_titles-pk.sql [deleted file]
maintenance/mssql/archives/patch-rc_patrolled_type.sql [deleted file]
maintenance/mssql/archives/patch-recentchanges-drop-fks.sql [deleted file]
maintenance/mssql/archives/patch-rev_text_id-default.sql [deleted file]
maintenance/mssql/archives/patch-site_identifiers-pk.sql [deleted file]
maintenance/mssql/archives/patch-site_stats-modify.sql [deleted file]
maintenance/mssql/archives/patch-site_stats-pk.sql [deleted file]
maintenance/mssql/archives/patch-slot-origin.sql [deleted file]
maintenance/mssql/archives/patch-slot_roles.sql [deleted file]
maintenance/mssql/archives/patch-slots.sql [deleted file]
maintenance/mssql/archives/patch-tl_from_namespace.sql [deleted file]
maintenance/mssql/archives/patch-uploadstash-constraints.sql [deleted file]
maintenance/mssql/archives/patch-user_groups-ug_expiry.sql [deleted file]
maintenance/mssql/archives/patch-user_password_expires.sql [deleted file]
maintenance/mssql/archives/patch-watchlist-wl_id.sql [deleted file]
maintenance/mssql/patch-change_tag-change_tag_rc_tag_id.sql [deleted file]
maintenance/mssql/tables.sql [deleted file]
maintenance/mssql/update-keys.sql [deleted file]
maintenance/oracle/alterSharedConstraints.php [deleted file]
maintenance/oracle/archives/patch-actor-table.sql [deleted file]
maintenance/oracle/archives/patch-add-rc_name_type_patrolled_timestamp_index.sql [deleted file]
maintenance/oracle/archives/patch-ar_rev_id-not-null.sql [deleted file]
maintenance/oracle/archives/patch-ar_sha1_field.sql [deleted file]
maintenance/oracle/archives/patch-archive-ar_content_format.sql [deleted file]
maintenance/oracle/archives/patch-archive-ar_content_model.sql [deleted file]
maintenance/oracle/archives/patch-archive-ar_id.sql [deleted file]
maintenance/oracle/archives/patch-archive-ar_rev_id-unique.sql [deleted file]
maintenance/oracle/archives/patch-auto_increment_triggers.sql [deleted file]
maintenance/oracle/archives/patch-cat_hidden.sql [deleted file]
maintenance/oracle/archives/patch-change_tag-change_tag_rc_tag_id.sql [deleted file]
maintenance/oracle/archives/patch-change_tag-ct_id.sql [deleted file]
maintenance/oracle/archives/patch-change_tag-tag_id.sql [deleted file]
maintenance/oracle/archives/patch-change_tag_def.sql [deleted file]
maintenance/oracle/archives/patch-comment-table.sql [deleted file]
maintenance/oracle/archives/patch-content.sql [deleted file]
maintenance/oracle/archives/patch-content_models.sql [deleted file]
maintenance/oracle/archives/patch-drop-ar_text.sql [deleted file]
maintenance/oracle/archives/patch-drop-comment-fields.sql [deleted file]
maintenance/oracle/archives/patch-drop-ct_tag.sql [deleted file]
maintenance/oracle/archives/patch-externallinks-el_id.sql [deleted file]
maintenance/oracle/archives/patch-externallinks-el_index_60.sql [deleted file]
maintenance/oracle/archives/patch-fa_sha1.sql [deleted file]
maintenance/oracle/archives/patch-image-img_description_id.sql [deleted file]
maintenance/oracle/archives/patch-ipb_sitewide.sql [deleted file]
maintenance/oracle/archives/patch-ipblocks_i05_index.sql [deleted file]
maintenance/oracle/archives/patch-ipblocks_restrictions-table.sql [deleted file]
maintenance/oracle/archives/patch-job_attempts.sql [deleted file]
maintenance/oracle/archives/patch-job_timestamp_field.sql [deleted file]
maintenance/oracle/archives/patch-job_timestamp_index.sql [deleted file]
maintenance/oracle/archives/patch-job_token.sql [deleted file]
maintenance/oracle/archives/patch-logging_type_action_index.sql [deleted file]
maintenance/oracle/archives/patch-logging_user_text_time_index.sql [deleted file]
maintenance/oracle/archives/patch-logging_user_text_type_time_index.sql [deleted file]
maintenance/oracle/archives/patch-page-page_content_model.sql [deleted file]
maintenance/oracle/archives/patch-page-page_lang.sql [deleted file]
maintenance/oracle/archives/patch-page_links_updated.sql [deleted file]
maintenance/oracle/archives/patch-page_redirect_namespace_len.sql [deleted file]
maintenance/oracle/archives/patch-page_restrictions_pkuk_fix.sql [deleted file]
maintenance/oracle/archives/patch-rc_moved.sql [deleted file]
maintenance/oracle/archives/patch-rc_source.sql [deleted file]
maintenance/oracle/archives/patch-recentchanges-nttindex.sql [deleted file]
maintenance/oracle/archives/patch-rev_sha1_field.sql [deleted file]
maintenance/oracle/archives/patch-revision-rev_content_format.sql [deleted file]
maintenance/oracle/archives/patch-revision-rev_content_model.sql [deleted file]
maintenance/oracle/archives/patch-revision_i05_index.sql [deleted file]
maintenance/oracle/archives/patch-site_stats-modify.sql [deleted file]
maintenance/oracle/archives/patch-site_stats-pk.sql [deleted file]
maintenance/oracle/archives/patch-sites.sql [deleted file]
maintenance/oracle/archives/patch-slot-origin.sql [deleted file]
maintenance/oracle/archives/patch-slot_roles.sql [deleted file]
maintenance/oracle/archives/patch-slots.sql [deleted file]
maintenance/oracle/archives/patch-ss_admins.sql [deleted file]
maintenance/oracle/archives/patch-testrun.sql [deleted file]
maintenance/oracle/archives/patch-ufg_group-length-increase-255.sql [deleted file]
maintenance/oracle/archives/patch-ug_group-length-increase-255.sql [deleted file]
maintenance/oracle/archives/patch-up_property.sql [deleted file]
maintenance/oracle/archives/patch-uploadstash-us_props.sql [deleted file]
maintenance/oracle/archives/patch-uploadstash.sql [deleted file]
maintenance/oracle/archives/patch-us_chunk_inx_field.sql [deleted file]
maintenance/oracle/archives/patch-user_email_index.sql [deleted file]
maintenance/oracle/archives/patch-user_former_groups.sql [deleted file]
maintenance/oracle/archives/patch-user_groups-ug_expiry.sql [deleted file]
maintenance/oracle/archives/patch-user_password_expire.sql [deleted file]
maintenance/oracle/archives/patch-watchlist-wl_id.sql [deleted file]
maintenance/oracle/archives/patch_16_17_schema_changes.sql [deleted file]
maintenance/oracle/archives/patch_create_17_functions.sql [deleted file]
maintenance/oracle/archives/patch_fk_rename_deferred.sql [deleted file]
maintenance/oracle/archives/patch_namespace_defaults.sql [deleted file]
maintenance/oracle/archives/patch_rebuild_dupfunc.sql [deleted file]
maintenance/oracle/archives/patch_recentchanges_fk2_cascade.sql [deleted file]
maintenance/oracle/archives/patch_remove_not_null_empty_defs.sql [deleted file]
maintenance/oracle/archives/patch_remove_not_null_empty_defs2.sql [deleted file]
maintenance/oracle/patch_seq_names_pre1.16.sql [deleted file]
maintenance/oracle/tables.sql [deleted file]
maintenance/oracle/update-keys.sql [deleted file]
maintenance/oracle/user.sql [deleted file]
maintenance/populateChangeTagDef.php
resources/Resources.php
resources/src/mediawiki.base/legacy.wikibits.js [new file with mode: 0644]
resources/src/mediawiki.base/mediawiki.base.js
resources/src/mediawiki.legacy/wikibits.js [deleted file]
resources/src/mediawiki.page.gallery.slideshow.js
resources/src/mediawiki.page.ready.js
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagMultiselectWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.RcTopSectionWidget.less
resources/src/mediawiki.rcfilters/ui/FilterTagMultiselectWidget.js
resources/src/startup/mediawiki.js
tests/parser/ParserTestRunner.php
tests/parser/parserTests.txt
tests/phpunit/MediaWikiIntegrationTestCase.php
tests/phpunit/bootstrap.php
tests/phpunit/includes/MergeHistoryTest.php
tests/phpunit/includes/MovePageTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/api/ApiFeedContributionsTest.php [new file with mode: 0644]
tests/phpunit/includes/api/query/ApiQueryBasicTest.php
tests/phpunit/includes/api/query/ApiQueryContinue2Test.php
tests/phpunit/includes/api/query/ApiQueryContinueTest.php
tests/phpunit/includes/changetags/ChangeTagsTest.php
tests/phpunit/includes/db/LBFactoryTest.php
tests/phpunit/includes/db/LoadBalancerTest.php
tests/phpunit/includes/libs/CSSMinTest.php
tests/phpunit/includes/libs/XhprofTest.php
tests/phpunit/includes/libs/objectcache/BagOStuffTest.php
tests/phpunit/includes/libs/rdbms/database/DatabaseMssqlTest.php [deleted file]
tests/phpunit/includes/libs/rdbms/database/DatabaseTest.php
tests/phpunit/includes/page/WikiPageDbTestBase.php
tests/phpunit/includes/rcfeed/RCFeedIntegrationTest.php
tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php
tests/phpunit/languages/classes/LanguageSrTest.php
tests/phpunit/languages/classes/LanguageUzTest.php
tests/phpunit/maintenance/categoryChangesAsRdfTest.php
tests/phpunit/suites/ParserTestTopLevelSuite.php
tests/phpunit/unit/includes/db/DatabaseOracleTest.php [deleted file]
tests/phpunit/unit/includes/installer/OracleInstallerTest.php [deleted file]
tests/phpunit/unit/includes/title/TitleValueTest.php
tests/selenium/wdio.conf.js

diff --git a/HISTORY b/HISTORY
index ff4007e..ccdd2de 100644 (file)
--- a/HISTORY
+++ b/HISTORY
@@ -389,6 +389,11 @@ because of Phabricator reports.
 * The .background-size() LESS mixin, deprecated in 1.27, has been removed.
 * ReadOnlyMode::clearCache() and ConfiguredReadOnlyMode::clearCache() have been
   removed. Use MediaWikiTestCase::overrideMwServices() instead.
+* Support for the 'aggregator' option of JobQueue (and thus $wgJobTypeConf) was
+  removed. The JobQueueAggregator interface and JobQueueAggregatorRedis class
+  have also been removed. They were experimentally developed for use by the
+  Wikimedia Foundation, but were never used, with no known use cases. (Note that
+  this does not affect JobQueueRedis which is still supported.)
 
 === Deprecations in 1.33 ===
 * The configuration option $wgUseESI has been deprecated, and is expected
index 8ecc469..5e4f61d 100644 (file)
@@ -82,6 +82,11 @@ For notes on 1.33.x and older releases, see HISTORY.
 === New user-facing features in 1.34 ===
 * Special:Mute has been added as a quick way for users to block unwanted emails
   from other users originating from Special:EmailUser.
+* (T207577) Special:NewSection has been created as a shortcut to creating a new
+  section on a page. When linked to, its subpage is used as the target
+  ([[Special:NewSection/Test]] redirects to creating a new section in "Test").
+  Otherwise, it displays a basic interface to allow the end user to specify
+  the target manually.
 
 === New developer features in 1.34 ===
 * The ImgAuthModifyHeaders hook was added to img_auth.php to allow modification
@@ -413,6 +418,8 @@ because of Phabricator reports.
   template option 'searchaction' instead.
 * LoadBalancer::haveIndex() and LoadBalancer::isNonZeroLoad() have
   been deprecated.
+* FileBackend::getWikiId() has been deprecated.
+  Use FileBackend::getDomainId() instead.
 * User::getRights() and User::$mRights have been deprecated. Use
   PermissionManager::getUserPermissions() instead.
 * The LocalisationCacheRecache hook no longer allows purging of message blobs
index 0208a6d..9a555d0 100644 (file)
@@ -20,7 +20,6 @@ $wgAutoloadLocalClasses = [
        'AllMessagesTablePager' => __DIR__ . '/includes/specials/pagers/AllMessagesTablePager.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',
        'ApiAMCreateAccount' => __DIR__ . '/includes/api/ApiAMCreateAccount.php',
@@ -358,10 +357,8 @@ $wgAutoloadLocalClasses = [
        'DatabaseInstaller' => __DIR__ . '/includes/installer/DatabaseInstaller.php',
        'DatabaseLag' => __DIR__ . '/maintenance/lag.php',
        'DatabaseLogEntry' => __DIR__ . '/includes/logging/DatabaseLogEntry.php',
-       'DatabaseMssql' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMssql.php',
        'DatabaseMysqlBase' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqlBase.php',
        'DatabaseMysqli' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqli.php',
-       'DatabaseOracle' => __DIR__ . '/includes/db/DatabaseOracle.php',
        'DatabasePostgres' => __DIR__ . '/includes/libs/rdbms/database/DatabasePostgres.php',
        'DatabaseSqlite' => __DIR__ . '/includes/libs/rdbms/database/DatabaseSqlite.php',
        'DatabaseUpdater' => __DIR__ . '/includes/installer/DatabaseUpdater.php',
@@ -1011,8 +1008,6 @@ $wgAutoloadLocalClasses = [
        'MoveLogFormatter' => __DIR__ . '/includes/logging/MoveLogFormatter.php',
        'MovePage' => __DIR__ . '/includes/MovePage.php',
        'MovePageForm' => __DIR__ . '/includes/specials/SpecialMovepage.php',
-       'MssqlInstaller' => __DIR__ . '/includes/installer/MssqlInstaller.php',
-       'MssqlUpdater' => __DIR__ . '/includes/installer/MssqlUpdater.php',
        'MultiConfig' => __DIR__ . '/includes/config/MultiConfig.php',
        'MultiHttpClient' => __DIR__ . '/includes/libs/http/MultiHttpClient.php',
        'MultiWriteBagOStuff' => __DIR__ . '/includes/libs/objectcache/MultiWriteBagOStuff.php',
@@ -1052,8 +1047,6 @@ $wgAutoloadLocalClasses = [
        'OldChangesList' => __DIR__ . '/includes/changes/OldChangesList.php',
        'OldLocalFile' => __DIR__ . '/includes/filerepo/file/OldLocalFile.php',
        'OldRevisionImporter' => __DIR__ . '/includes/import/OldRevisionImporter.php',
-       'OracleInstaller' => __DIR__ . '/includes/installer/OracleInstaller.php',
-       'OracleUpdater' => __DIR__ . '/includes/installer/OracleUpdater.php',
        'OrderedStreamingForkController' => __DIR__ . '/includes/OrderedStreamingForkController.php',
        'OrphanStats' => __DIR__ . '/maintenance/storage/orphanStats.php',
        'Orphans' => __DIR__ . '/maintenance/orphans.php',
@@ -1404,6 +1397,7 @@ $wgAutoloadLocalClasses = [
        'SpecialMytalk' => __DIR__ . '/includes/specials/redirects/SpecialMytalk.php',
        'SpecialMyuploads' => __DIR__ . '/includes/specials/redirects/SpecialMyuploads.php',
        'SpecialNewFiles' => __DIR__ . '/includes/specials/SpecialNewimages.php',
+       'SpecialNewSection' => __DIR__ . '/includes/specials/SpecialNewSection.php',
        'SpecialNewpages' => __DIR__ . '/includes/specials/SpecialNewpages.php',
        'SpecialPage' => __DIR__ . '/includes/specialpage/SpecialPage.php',
        'SpecialPageAction' => __DIR__ . '/includes/actions/SpecialPageAction.php',
@@ -1663,7 +1657,6 @@ $wgAutoloadLocalClasses = [
        'Wikimedia\\Rdbms\\DBUnexpectedError' => __DIR__ . '/includes/libs/rdbms/exception/DBUnexpectedError.php',
        'Wikimedia\\Rdbms\\Database' => __DIR__ . '/includes/libs/rdbms/database/Database.php',
        'Wikimedia\\Rdbms\\DatabaseDomain' => __DIR__ . '/includes/libs/rdbms/database/domain/DatabaseDomain.php',
-       'Wikimedia\\Rdbms\\DatabaseMssql' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMssql.php',
        'Wikimedia\\Rdbms\\DatabaseMysqlBase' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqlBase.php',
        'Wikimedia\\Rdbms\\DatabaseMysqli' => __DIR__ . '/includes/libs/rdbms/database/DatabaseMysqli.php',
        'Wikimedia\\Rdbms\\DatabasePostgres' => __DIR__ . '/includes/libs/rdbms/database/DatabasePostgres.php',
index 720abc3..01427a2 100644 (file)
@@ -58,7 +58,7 @@ class CategoryFinder {
        /** @var array Array of article/category IDs */
        protected $next = [];
 
-       /** @var int Max layer depth **/
+       /** @var int Max layer depth */
        protected $maxdepth = -1;
 
        /** @var array Array of DBKEY category names */
index 197a6f0..fea5ff9 100644 (file)
@@ -158,7 +158,7 @@ $wgUsePathInfo = ( strpos( PHP_SAPI, 'cgi' ) === false ) &&
        ( strpos( PHP_SAPI, 'apache2filter' ) === false ) &&
        ( strpos( PHP_SAPI, 'isapi' ) === false );
 
-/**@}*/
+/** @} */
 
 /************************************************************************//**
  * @name   URLs and file paths
@@ -330,15 +330,22 @@ $wgAppleTouchIcon = false;
 $wgReferrerPolicy = false;
 
 /**
- * The local filesystem path to a temporary directory. This is not required to
- * be web accessible.
+ * The local filesystem path to a temporary directory. This must not be web accessible.
  *
- * When this setting is set to false, its value will be set through a call
- * to wfTempDir(). See that methods implementation for the actual detection
- * logic.
+ * When this setting is set to false, its value will automatically be decided
+ * through the first call to wfTempDir(). See that method's implementation for
+ * the actual detection logic.
  *
- * Developers should use the global function wfTempDir() instead of this
- * variable.
+ * To find the temporary path for the current wiki, developers must not use
+ * this variable directly. Use the global function wfTempDir() instead.
+ *
+ * The temporary directory is expected to be shared with other applications,
+ * including other MediaWiki instances (which might not run the same version
+ * or configution). When storing files here, take care to avoid conflicts
+ * with other instances of MediaWiki. For example, when caching the result
+ * of a computation, the file name should incorporate the input of the
+ * computation so that it cannot be confused for the result of a similar
+ * computation by another MediaWiki instance.
  *
  * @see wfTempDir()
  * @note Default changed to false in MediaWiki 1.20.
@@ -377,7 +384,7 @@ $wgUploadStashScalerBaseUrl = false;
  */
 $wgActionPaths = [];
 
-/**@}*/
+/** @} */
 
 /************************************************************************//**
  * @name   Files and file uploads
@@ -2169,7 +2176,7 @@ $wgSlaveLagCritical = 30;
  */
 $wgDBWindowsAuthentication = false;
 
-/**@}*/ # End of DB settings }
+/** @} */ # End of DB settings }
 
 /************************************************************************//**
  * @name   Text storage
@@ -8942,7 +8949,7 @@ $wgExperiencedUserMemberSince = 30; # days
  * @code
  * $wgInterwikiPrefixDisplayTypes = [
  *     'iwprefix' => 'definition'
- *];
+ * ];
  * @endcode
  */
 $wgInterwikiPrefixDisplayTypes = [];
index d818226..0269ab6 100644 (file)
@@ -31,7 +31,7 @@ use Wikimedia\Rdbms\IDatabase;
 
 # Obsolete aliases
 
-/**@{
+/** @{
  * Obsolete IDatabase::makeList() constants
  * These are also available as Database class constants
  */
@@ -40,16 +40,16 @@ define( 'LIST_AND', IDatabase::LIST_AND );
 define( 'LIST_SET', IDatabase::LIST_SET );
 define( 'LIST_NAMES', IDatabase::LIST_NAMES );
 define( 'LIST_OR', IDatabase::LIST_OR );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Virtual namespaces; don't appear in the page database
  */
 define( 'NS_MEDIA', -2 );
 define( 'NS_SPECIAL', -1 );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Real namespaces
  *
  * Number 100 and beyond are reserved for custom namespaces;
@@ -73,9 +73,9 @@ define( 'NS_HELP', 12 );
 define( 'NS_HELP_TALK', 13 );
 define( 'NS_CATEGORY', 14 );
 define( 'NS_CATEGORY_TALK', 15 );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Cache type
  */
 define( 'CACHE_ANYTHING', -1 );  // Use anything, as long as it works
@@ -83,18 +83,18 @@ define( 'CACHE_NONE', 0 );       // Do not cache
 define( 'CACHE_DB', 1 );         // Store cache objects in the DB
 define( 'CACHE_MEMCACHED', 2 );  // MemCached, must specify servers in $wgMemCacheServers
 define( 'CACHE_ACCEL', 3 );      // APC or WinCache
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Antivirus result codes, for use in $wgAntivirusSetup.
  */
 define( 'AV_NO_VIRUS', 0 );  # scan ok, no virus found
 define( 'AV_VIRUS_FOUND', 1 );  # virus found!
 define( 'AV_SCAN_ABORTED', -1 );  # scan aborted, the file is probably immune
 define( 'AV_SCAN_FAILED', false );  # scan failed (scanner not found or error in scanner)
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Anti-lock flags
  * Was used by $wgAntiLockFlags, which was removed with 1.25
  * Constants kept to not have warnings when used in LocalSettings
@@ -103,9 +103,9 @@ define( 'ALF_PRELOAD_LINKS', 1 ); // unused
 define( 'ALF_PRELOAD_EXISTENCE', 2 ); // unused
 define( 'ALF_NO_LINK_LOCK', 4 ); // unused
 define( 'ALF_NO_BLOCK_LOCK', 8 ); // unused
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Date format selectors; used in user preference storage and by
  * Language::date() and co.
  */
@@ -114,9 +114,9 @@ define( 'MW_DATE_MDY', 'mdy' );
 define( 'MW_DATE_DMY', 'dmy' );
 define( 'MW_DATE_YMD', 'ymd' );
 define( 'MW_DATE_ISO', 'ISO 8601' );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * RecentChange type identifiers
  */
 define( 'RC_EDIT', 0 );
@@ -124,9 +124,9 @@ define( 'RC_NEW', 1 );
 define( 'RC_LOG', 3 );
 define( 'RC_EXTERNAL', 5 );
 define( 'RC_CATEGORIZE', 6 );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Article edit flags
  */
 define( 'EDIT_NEW', 1 );
@@ -137,21 +137,21 @@ define( 'EDIT_FORCE_BOT', 16 );
 define( 'EDIT_DEFER_UPDATES', 32 ); // Unused since 1.27
 define( 'EDIT_AUTOSUMMARY', 64 );
 define( 'EDIT_INTERNAL', 128 );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Hook support constants
  */
 define( 'MW_SUPPORTS_PARSERFIRSTCALLINIT', 1 );
 define( 'MW_SUPPORTS_LOCALISATIONCACHE', 1 );
 define( 'MW_SUPPORTS_CONTENTHANDLER', 1 );
 define( 'MW_EDITFILTERMERGED_SUPPORTS_API', 1 );
-/**@}*/
+/** @} */
 
 /** Support for $wgResourceModules */
 define( 'MW_SUPPORTS_RESOURCE_MODULES', 1 );
 
-/**@{
+/** @{
  * Allowed values for Parser::$mOutputType
  * Parameter to Parser::startExternalParse().
  * Use of Parser consts is preferred:
@@ -166,9 +166,9 @@ define( 'OT_WIKI', 2 );
 define( 'OT_PREPROCESS', 3 );
 define( 'OT_MSG', 3 );  // b/c alias for OT_PREPROCESS
 define( 'OT_PLAIN', 4 );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Flags for Parser::setFunctionHook
  * Use of Parser consts is preferred:
  * - Parser::SFH_NO_HASH
@@ -176,9 +176,9 @@ define( 'OT_PLAIN', 4 );
  */
 define( 'SFH_NO_HASH', 1 );
 define( 'SFH_OBJECT_ARGS', 2 );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Autopromote conditions (must be here and not in Autopromote.php, so that
  * they're loaded for DefaultSettings.php before AutoLoader.php)
  */
@@ -191,7 +191,7 @@ define( 'APCOND_IPINRANGE', 6 );
 define( 'APCOND_AGE_FROM_EDIT', 7 );
 define( 'APCOND_BLOCKED', 8 );
 define( 'APCOND_ISBOT', 9 );
-/**@}*/
+/** @} */
 
 /** @{
  * Protocol constants for wfExpandUrl()
@@ -202,9 +202,9 @@ define( 'PROTO_RELATIVE', '//' );
 define( 'PROTO_CURRENT', null );
 define( 'PROTO_CANONICAL', 1 );
 define( 'PROTO_INTERNAL', 2 );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Content model ids, used by Content and ContentHandler.
  * These IDs will be exposed in the API and XML dumps.
  *
@@ -217,9 +217,9 @@ define( 'CONTENT_MODEL_JAVASCRIPT', 'javascript' );
 define( 'CONTENT_MODEL_CSS', 'css' );
 define( 'CONTENT_MODEL_TEXT', 'text' );
 define( 'CONTENT_MODEL_JSON', 'json' );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Content formats, used by Content and ContentHandler.
  * These should be MIME types, and will be exposed in the API and XML dumps.
  *
@@ -242,15 +242,15 @@ define( 'CONTENT_FORMAT_SERIALIZED', 'application/vnd.php.serialized' );
 define( 'CONTENT_FORMAT_JSON', 'application/json' );
 // for future use with the api, and for use by extensions
 define( 'CONTENT_FORMAT_XML', 'application/xml' );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Max string length for shell invocations; based on binfmts.h
  */
 define( 'SHELL_MAX_ARG_STRLEN', '100000' );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Schema compatibility flags.
  *
  * Used as flags in a bit field that indicates whether the old or new schema (or both)
@@ -269,9 +269,9 @@ define( 'SCHEMA_COMPAT_WRITE_BOTH', SCHEMA_COMPAT_WRITE_OLD | SCHEMA_COMPAT_WRIT
 define( 'SCHEMA_COMPAT_READ_BOTH', SCHEMA_COMPAT_READ_OLD | SCHEMA_COMPAT_READ_NEW );
 define( 'SCHEMA_COMPAT_OLD', SCHEMA_COMPAT_WRITE_OLD | SCHEMA_COMPAT_READ_OLD );
 define( 'SCHEMA_COMPAT_NEW', SCHEMA_COMPAT_WRITE_NEW | SCHEMA_COMPAT_READ_NEW );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Schema change migration flags.
  *
  * Used as values of a feature flag for an orderly transition from an old
@@ -296,9 +296,9 @@ define( 'MIGRATION_OLD', 0x00000000 | SCHEMA_COMPAT_OLD );
 define( 'MIGRATION_WRITE_BOTH', 0x10000000 | SCHEMA_COMPAT_READ_BOTH | SCHEMA_COMPAT_WRITE_BOTH );
 define( 'MIGRATION_WRITE_NEW', 0x20000000 | SCHEMA_COMPAT_READ_BOTH | SCHEMA_COMPAT_WRITE_NEW );
 define( 'MIGRATION_NEW', 0x30000000 | SCHEMA_COMPAT_NEW );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * XML dump schema versions, for use with XmlDumpWriter.
  * See also the corresponding export-nnnn.xsd files in the docs directory,
  * which are also listed at <https://www.mediawiki.org/xml/>.
@@ -307,4 +307,4 @@ define( 'MIGRATION_NEW', 0x30000000 | SCHEMA_COMPAT_NEW );
  */
 define( 'XML_DUMP_SCHEMA_VERSION_10', '0.10' );
 define( 'XML_DUMP_SCHEMA_VERSION_11', '0.11' );
-/**@}*/
+/** @} */
index 103ff45..d93caa7 100644 (file)
@@ -24,8 +24,9 @@ ini_set( 'display_errors', 1 );
 /**
  * Debugging for MediaWiki
  */
+
 global $wgDevelopmentWarnings, $wgShowExceptionDetails, $wgShowHostnames,
-       $wgDebugRawPage, $wgSQLMode, $wgCommandLineMode, $wgDebugLogFile,
+       $wgDebugRawPage, $wgCommandLineMode, $wgDebugLogFile,
        $wgDBerrorLog, $wgDebugLogGroups;
 
 // Use of wfWarn() should cause tests to fail
@@ -36,9 +37,6 @@ $wgShowExceptionDetails = true;
 $wgShowHostnames = true;
 $wgDebugRawPage = true; // T49960
 
-// Enable MariaDB/MySQL strict mode
-$wgSQLMode = 'TRADITIONAL';
-
 // Enable log files
 $logDir = getenv( 'MW_LOG_DIR' );
 if ( $logDir ) {
@@ -54,9 +52,25 @@ if ( $logDir ) {
 }
 unset( $logDir );
 
+/**
+ * Make testing possible (or easier)
+ */
+
+global $wgRateLimits;
+
 // Disable rate-limiting to allow integration tests to run unthrottled
 // in CI and for devs locally (T225796)
 $wgRateLimits = [];
 
+/**
+ * Experimental changes that may later become the default.
+ * (Must reference a Phabricator ticket)
+ */
+
+global $wgSQLMode, $wgLegacyJavaScriptGlobals;
+
+// Enable MariaDB/MySQL strict mode (T108255)
+$wgSQLMode = 'TRADITIONAL';
+
 // Disable legacy javascript globals in CI and for devs (T72470)
 $wgLegacyJavaScriptGlobals = false;
index f288327..74ec883 100644 (file)
@@ -622,7 +622,7 @@ class EditPage {
                        wfDebug( __METHOD__ . ": User can't edit\n" );
 
                        if ( $this->context->getUser()->getBlock() ) {
-                               // track block with a cookie if it doesn't exists already
+                               // Track block with a cookie if it doesn't exist already
                                MediaWikiServices::getInstance()->getBlockManager()
                                        ->trackBlockWithCookie( $this->context->getUser() );
 
index 0131855..f0a48d2 100644 (file)
@@ -44,7 +44,8 @@ class FormOptions implements ArrayAccess {
        /** Integer type, maps guessType() to WebRequest::getInt() */
        const INT = 1;
        /** Float type, maps guessType() to WebRequest::getFloat()
-        * @since 1.23 */
+        * @since 1.23
+        */
        const FLOAT = 4;
        /** Boolean type, maps guessType() to WebRequest::getBool() */
        const BOOL = 2;
@@ -53,7 +54,8 @@ class FormOptions implements ArrayAccess {
         */
        const INTNULL = 3;
        /** Array type, maps guessType() to WebRequest::getArray()
-        * @since 1.29 */
+        * @since 1.29
+        */
        const ARR = 5;
        /* @} */
 
index 0984786..cb58e62 100644 (file)
@@ -55,7 +55,7 @@ use MediaWiki\MediaWikiServices;
  * @ingroup Parser
  */
 class MagicWord {
-       /**#@-*/
+       /** #@- */
 
        /** @var string */
        public $mId;
@@ -93,7 +93,7 @@ class MagicWord {
        /** @var Language */
        private $contLang;
 
-       /**#@-*/
+       /** #@- */
 
        /**
         * Create a new MagicWord object
index 4e9bfaf..4c66854 100644 (file)
@@ -32,7 +32,7 @@
  * @ingroup Parser
  */
 class MagicWordFactory {
-       /**#@-*/
+       /** #@- */
 
        /** @var bool */
        private $mVariableIDsInitialised = false;
@@ -196,7 +196,7 @@ class MagicWordFactory {
        /** @var Language */
        private $contLang;
 
-       /**#@-*/
+       /** #@- */
 
        /**
         * @param Language $contLang Content language
index e78cd7b..b7341e3 100644 (file)
@@ -54,7 +54,8 @@ class OutputPage extends ContextSource {
        protected $mCanonicalUrl = false;
 
        /**
-        * @var string The contents of <h1> */
+        * @var string The contents of <h1>
+        */
        private $mPageTitle = '';
 
        /**
@@ -3047,8 +3048,8 @@ class OutputPage extends ContextSource {
 
                // This library is intended to run on older browsers that MediaWiki no longer
                // supports as Grade A. For these Grade C browsers, we provide an experience
-               // using only HTML and CSS. Where standards-compliant browsers are able to style
-               // unknown HTML elements without issue, old IE ignores these styles.
+               // using only HTML and CSS. But, where standards-compliant browsers are able to
+               // style unknown HTML elements without issue, old IE ignores these styles.
                // The html5shiv library fixes that.
                // Use an IE conditional comment to serve the script only to old IE
                $shivUrl = $config->get( 'ResourceBasePath' ) . '/resources/lib/html5shiv/html5shiv.js';
index 0dcc35c..ff9ac57 100644 (file)
@@ -82,7 +82,7 @@ abstract class RevisionRecord {
        /** @var CommentStoreComment|null */
        protected $mComment;
 
-       /**  @var Title */
+       /** @var Title */
        protected $mTitle; // TODO: we only need the title for permission checks!
 
        /** @var RevisionSlots */
index fe5b5b9..9e8dfe7 100644 (file)
@@ -276,17 +276,6 @@ class RevisionStore
                return $this->loadBalancer;
        }
 
-       /**
-        * @param int $mode DB_MASTER or DB_REPLICA
-        * @param array $groups
-        *
-        * @return IDatabase
-        */
-       private function getDBConnection( $mode, $groups = [] ) {
-               $lb = $this->getDBLoadBalancer();
-               return $lb->getConnectionRef( $mode, $groups, $this->dbDomain );
-       }
-
        /**
         * @param int $queryFlags a bit field composed of READ_XXX flags
         *
@@ -297,22 +286,15 @@ class RevisionStore
                return $this->getDBConnectionRef( $mode );
        }
 
-       /**
-        * @param IDatabase $connection
-        */
-       private function releaseDBConnection( IDatabase $connection ) {
-               $lb = $this->getDBLoadBalancer();
-               $lb->reuseConnection( $connection );
-       }
-
        /**
         * @param int $mode DB_MASTER or DB_REPLICA
         *
+        * @param array $groups
         * @return DBConnRef
         */
-       private function getDBConnectionRef( $mode ) {
+       private function getDBConnectionRef( $mode, $groups = [] ) {
                $lb = $this->getDBLoadBalancer();
-               return $lb->getConnectionRef( $mode, [], $this->dbDomain );
+               return $lb->getConnectionRef( $mode, $groups, $this->dbDomain );
        }
 
        /**
@@ -1154,7 +1136,7 @@ class RevisionStore
         */
        public function getRecentChange( RevisionRecord $rev, $flags = 0 ) {
                list( $dbType, ) = DBAccessObjectUtils::getDBOptions( $flags );
-               $db = $this->getDBConnection( $dbType );
+               $db = $this->getDBConnectionRef( $dbType );
 
                $userIdentity = $rev->getUser( RevisionRecord::RAW );
 
@@ -1176,8 +1158,6 @@ class RevisionStore
                        $dbType
                );
 
-               $this->releaseDBConnection( $db );
-
                // XXX: cache this locally? Glue it to the RevisionRecord?
                return $rc;
        }
@@ -1593,7 +1573,7 @@ class RevisionStore
         * @return RevisionRecord|null
         */
        public function getRevisionByTimestamp( $title, $timestamp ) {
-               $db = $this->getDBConnection( DB_REPLICA );
+               $db = $this->getDBConnectionRef( DB_REPLICA );
                return $this->newRevisionFromConds(
                        [
                                'rev_timestamp' => $db->timestamp( $timestamp ),
@@ -2203,9 +2183,8 @@ class RevisionStore
                        && $lb->hasOrMadeRecentMasterChanges()
                ) {
                        $flags = self::READ_LATEST;
-                       $dbw = $this->getDBConnection( DB_MASTER );
+                       $dbw = $this->getDBConnectionRef( DB_MASTER );
                        $rev = $this->loadRevisionFromConds( $dbw, $conditions, $flags, $title );
-                       $this->releaseDBConnection( $dbw );
                }
 
                return $rev;
@@ -2574,7 +2553,7 @@ class RevisionStore
         *         of the corresponding revision.
         */
        public function getRevisionSizes( array $revIds ) {
-               return $this->listRevisionSizes( $this->getDBConnection( DB_REPLICA ), $revIds );
+               return $this->listRevisionSizes( $this->getDBConnectionRef( DB_REPLICA ), $revIds );
        }
 
        /**
@@ -2634,7 +2613,7 @@ class RevisionStore
                }
 
                list( $dbType, ) = DBAccessObjectUtils::getDBOptions( $flags );
-               $db = $this->getDBConnection( $dbType, [ 'contributions' ] );
+               $db = $this->getDBConnectionRef( $dbType, [ 'contributions' ] );
 
                $ts = $this->getTimestampFromId( $rev->getId(), $flags );
                if ( $ts === false ) {
index 0420d34..1258f15 100644 (file)
@@ -97,7 +97,7 @@ class RevisionStoreCacheRecord extends RevisionStoreRecord {
 
        /**
         * Load a fresh row from the database to ensure we return updated information
-
+        *
         * @throws RevisionAccessException if the row could not be loaded
         */
        private function loadFreshRow() {
index 9073de1..c192b5a 100644 (file)
@@ -215,7 +215,12 @@ return [
        },
 
        'GenderCache' => function ( MediaWikiServices $services ) : GenderCache {
-               return new GenderCache( $services->getNamespaceInfo() );
+               $nsInfo = $services->getNamespaceInfo();
+               // Database layer may be disabled, so processing without database connection
+               $dbLoadBalancer = $services->isServiceDisabled( 'DBLoadBalancer' )
+                       ? null
+                       : $services->getDBLoadBalancer();
+               return new GenderCache( $nsInfo, $dbLoadBalancer );
        },
 
        'HttpRequestFactory' =>
index 4202985..201e1a9 100644 (file)
@@ -483,25 +483,7 @@ $wgMinUploadChunkSize = min(
  * Definitions of the NS_ constants are in Defines.php
  * @private
  */
-$wgCanonicalNamespaceNames = [
-       NS_MEDIA            => 'Media',
-       NS_SPECIAL          => 'Special',
-       NS_TALK             => 'Talk',
-       NS_USER             => 'User',
-       NS_USER_TALK        => 'User_talk',
-       NS_PROJECT          => 'Project',
-       NS_PROJECT_TALK     => 'Project_talk',
-       NS_FILE             => 'File',
-       NS_FILE_TALK        => 'File_talk',
-       NS_MEDIAWIKI        => 'MediaWiki',
-       NS_MEDIAWIKI_TALK   => 'MediaWiki_talk',
-       NS_TEMPLATE         => 'Template',
-       NS_TEMPLATE_TALK    => 'Template_talk',
-       NS_HELP             => 'Help',
-       NS_HELP_TALK        => 'Help_talk',
-       NS_CATEGORY         => 'Category',
-       NS_CATEGORY_TALK    => 'Category_talk',
-];
+$wgCanonicalNamespaceNames = NamespaceInfo::$canonicalNames;
 
 /// @todo UGLY UGLY
 if ( is_array( $wgExtraNamespaces ) ) {
index 12d6641..281f75b 100644 (file)
@@ -182,7 +182,8 @@ class Title implements LinkTarget, IDBAccessObject {
        private $mPageLanguage = false;
 
        /** @var string|bool|null The page language code from the database, null if not saved in
-        * the database or false if not loaded, yet. */
+        * the database or false if not loaded, yet.
+        */
        private $mDbPageLanguage = false;
 
        /** @var TitleValue|null A corresponding TitleValue object */
index 63d8b18..a7b872c 100644 (file)
@@ -251,7 +251,7 @@ abstract class ApiBase extends ContextSource {
         */
        const PARAM_TEMPLATE_VARS = 25;
 
-       /**@}*/
+       /** @} */
 
        const ALL_DEFAULT_STRING = '*';
 
@@ -506,7 +506,7 @@ abstract class ApiBase extends ContextSource {
                return null;
        }
 
-       /**@}*/
+       /** @} */
 
        /************************************************************************//**
         * @name   Data access methods
@@ -711,7 +711,7 @@ abstract class ApiBase extends ContextSource {
                return MediaWikiServices::getInstance()->getPermissionManager();
        }
 
-       /**@}*/
+       /** @} */
 
        /************************************************************************//**
         * @name   Parameter handling
@@ -1729,7 +1729,7 @@ abstract class ApiBase extends ContextSource {
                );
        }
 
-       /**@}*/
+       /** @} */
 
        /************************************************************************//**
         * @name   Utility methods
@@ -1904,7 +1904,7 @@ abstract class ApiBase extends ContextSource {
                } );
        }
 
-       /**@}*/
+       /** @} */
 
        /************************************************************************//**
         * @name   Warning and error reporting
@@ -2249,7 +2249,7 @@ abstract class ApiBase extends ContextSource {
                wfDebugLog( 'api-feature-usage', $s, 'private', $ctx );
        }
 
-       /**@}*/
+       /** @} */
 
        /************************************************************************//**
         * @name   Help message generation
@@ -2629,7 +2629,7 @@ abstract class ApiBase extends ContextSource {
        public function modifyHelp( array &$help, array $options, array &$tocData ) {
        }
 
-       /**@}*/
+       /** @} */
 }
 
 /**
index 08be8e0..28b0a4b 100644 (file)
@@ -34,6 +34,9 @@ class ApiFeedContributions extends ApiBase {
        /** @var RevisionStore */
        private $revisionStore;
 
+       /** @var TitleParser */
+       private $titleParser;
+
        /**
         * This module uses a custom feed wrapper printer.
         *
@@ -45,6 +48,7 @@ class ApiFeedContributions extends ApiBase {
 
        public function execute() {
                $this->revisionStore = MediaWikiServices::getInstance()->getRevisionStore();
+               $this->titleParser = MediaWikiServices::getInstance()->getTitleParser();
 
                $params = $this->extractRequestParams();
 
@@ -67,9 +71,19 @@ class ApiFeedContributions extends ApiBase {
                        ' [' . $config->get( 'LanguageCode' ) . ']';
                $feedUrl = SpecialPage::getTitleFor( 'Contributions', $params['user'] )->getFullURL();
 
-               $target = $params['user'] == 'newbies'
-                       ? 'newbies'
-                       : Title::makeTitleSafe( NS_USER, $params['user'] )->getText();
+               $target = 'newbies';
+               if ( $params['user'] != 'newbies' ) {
+                       try {
+                               $target = $this->titleParser
+                                       ->parseTitle( $params['user'], NS_USER )
+                                       ->getText();
+                       } catch ( MalformedTitleException $e ) {
+                               $this->dieWithError(
+                                       [ 'apierror-baduser', 'user', wfEscapeWikiText( $params['user'] ) ],
+                                       'baduser_' . $this->encodeParamName( 'user' )
+                               );
+                       }
+               }
 
                $feed = new $feedClasses[$params['feedformat']] (
                        $feedTitle,
index ec432d8..50ca99a 100644 (file)
@@ -78,7 +78,7 @@ abstract class ApiQueryBase extends ApiBase {
        public function requestExtraData( $pageSet ) {
        }
 
-       /**@}*/
+       /** @} */
 
        /************************************************************************//**
         * @name   Data access
@@ -131,7 +131,7 @@ abstract class ApiQueryBase extends ApiBase {
                return $this->getQuery()->getPageSet();
        }
 
-       /**@}*/
+       /** @} */
 
        /************************************************************************//**
         * @name   Querying
@@ -465,7 +465,7 @@ abstract class ApiQueryBase extends ApiBase {
                }
        }
 
-       /**@}*/
+       /** @} */
 
        /************************************************************************//**
         * @name   Utility methods
@@ -608,5 +608,5 @@ abstract class ApiQueryBase extends ApiBase {
                );
        }
 
-       /**@}*/
+       /** @} */
 }
index ea20664..26c17c5 100644 (file)
@@ -122,9 +122,12 @@ class ApiQueryQueryPage extends ApiQueryGeneratorBase {
 
                        $title = Title::makeTitle( $row->namespace, $row->title );
                        if ( is_null( $resultPageSet ) ) {
-                               $data = [ 'value' => $row->value ];
-                               if ( $qp->usesTimestamps() ) {
-                                       $data['timestamp'] = wfTimestamp( TS_ISO_8601, $row->value );
+                               $data = [];
+                               if ( isset( $row->value ) ) {
+                                       $data['value'] = $row->value;
+                                       if ( $qp->usesTimestamps() ) {
+                                               $data['timestamp'] = wfTimestamp( TS_ISO_8601, $row->value );
+                                       }
                                }
                                self::addTitleInfo( $data, $title );
 
index d0b152e..0d284c0 100644 (file)
@@ -43,7 +43,7 @@ abstract class ApiQueryRevisionsBase extends ApiQueryGeneratorBase {
        const IS_DELETED = 1; // Whether the field is revision-deleted
        const CANNOT_VIEW = 2; // Whether the user cannot view the field due to revdel
 
-       /**@}*/
+       /** @} */
 
        protected $limit, $diffto, $difftotext, $difftotextpst, $expandTemplates, $generateXML,
                $section, $parseContent, $fetchContent, $contentFormat, $setParsedLimit = true,
index c27b10e..7224f07 100644 (file)
@@ -514,7 +514,7 @@ class ApiResult implements ApiSerializable {
                        self::OVERRIDE | self::NO_SIZE_CHECK );
        }
 
-       /**@}*/
+       /** @} */
 
        /************************************************************************//**
         * @name   Metadata
@@ -777,7 +777,7 @@ class ApiResult implements ApiSerializable {
                self::setArrayTypeRecursive( $arr, $tag, $kvpKeyName );
        }
 
-       /**@}*/
+       /** @} */
 
        /************************************************************************//**
         * @name   Utility
@@ -1217,7 +1217,7 @@ class ApiResult implements ApiSerializable {
                }
        }
 
-       /**@}*/
+       /** @} */
 
 }
 
index 70515eb..af97236 100644 (file)
        "apihelp-query+languageinfo-paramvalue-prop-bcp47": "رمز لغة BCP-47.",
        "apihelp-query+languageinfo-paramvalue-prop-dir": "اتجاه كتابة اللغة (إما <code>ltr</code> أو <code>rtl</code>).",
        "apihelp-query+languageinfo-paramvalue-prop-autonym": "الاسم الداخلي للغة، أي: الاسم بتلك اللغة.",
-       "apihelp-query+languageinfo-paramvalue-prop-name": "اسم اللغة ياللغة المحددة بواسطة الوسيط <var>lilang</var>، مع تطبيق احتياطات اللغة إذا لزم الأمر.",
+       "apihelp-query+languageinfo-paramvalue-prop-name": "اسم اللغة ياللغة المحددة بواسطة الوسيط <var>uselang</var>، مع تطبيق احتياطات اللغة إذا لزم الأمر.",
        "apihelp-query+languageinfo-paramvalue-prop-fallbacks": "رموز لغة اللغات الاحتياطية التي تم تكوينها لهذه اللغة، لا يتم تضمين الإرجاع النهائي الضمني إلى \"en\" (ولكن قد ترجع بعض اللغات إلى \"en\" بشكل صريح).",
        "apihelp-query+languageinfo-paramvalue-prop-variants": "رموز اللغات للمتغيرات التي تدعمها هذه اللغة.",
        "apihelp-query+languageinfo-param-code": "رموز اللغات التي يجب إرجاعها، أو <code>*</code> لجميع اللغات.",
index b04ad1b..591bf31 100644 (file)
        "apihelp-query+languageinfo-paramvalue-prop-bcp47": "Le code de langue BCP-47.",
        "apihelp-query+languageinfo-paramvalue-prop-dir": "La direction d’écriture de la langue (<code>ltr</code> ou <code>rtl</code>).",
        "apihelp-query+languageinfo-paramvalue-prop-autonym": "L’autonyme d’une langue, c’est-à-dire son nom dans cette langue.",
-       "apihelp-query+languageinfo-paramvalue-prop-name": "Le nom de la langue dans la langue spécifiée par le paramètre <var>lilang</var>, avec application des langues de secours si besoin.",
+       "apihelp-query+languageinfo-paramvalue-prop-name": "Le nom de la langue dans la langue spécifiée par le paramètre <var>uselang</var>, avec l'application des langues de repli si besoin.",
        "apihelp-query+languageinfo-paramvalue-prop-fallbacks": "Les codes de langue des langues de secours configurées pour cette langue. Le secours implicite final en 'en' n’est pas inclus (mais certaines langues peuvent avoir 'en' en secours explicitement).",
        "apihelp-query+languageinfo-paramvalue-prop-variants": "Les codes de langue des variantes supportées par cette langue.",
        "apihelp-query+languageinfo-param-code": "Codes de langue des langues qui doivent être renvoyées, ou <code>*</code> pour toutes les langues.",
index d0d5aa2..e2c5fe7 100644 (file)
@@ -16,7 +16,8 @@
                        "שמזן",
                        "Or",
                        "Umherirrender",
-                       "Strayblues"
+                       "Strayblues",
+                       "Steeve815"
                ]
        },
        "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|תיעוד]]\n* [[mw:Special:MyLanguage/API:FAQ|שאלות נפוצות]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api רשימת דיוור]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce הודעות על API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R באגים ובקשות]\n</div>\n<strong>מצב:</strong> ה־API של מדיה־ויקי הוא ממשק ותיק ויציב שנתמך ומשתפר באופן סדיר. למרות שאנחנו משתדלים להימנע מכך, לעתים עלינו לבצע שינויים שעלולים לשבש דברים בפונקציונליות הזו; באפשרותך לעשות מינוי ל[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ רשימת הדיוור mediawiki-api-announce] כדי לקבל הודעות על עדכונים.\n\n<strong>בקשות שגויות:</strong> כשבקשות שגויות נשלחות ל־API, תישלח כותרת HTTP עם המפתח \"MediaWiki-API-Error\", ואז גם הערך של הכותרת וגם קוד השגיאה יוגדרו לאותו ערך. למידע נוסף, אפשר לעיין בדף [[mw:Special:MyLanguage/API:Errors_and_warnings|API: שגיאות ואזהרות]].\n\n<p class=\"mw-apisandbox-link\"><strong>בדיקה:</strong> לבדיקה קלה יותר של בקשות, אפשר להשתמש ב[[Special:ApiSandbox|ארגז החול של API]].</p>",
        "apihelp-query+langlinks-param-inlanguagecode": "קוד שפה בשביל שמות שפות מתורגמות.",
        "apihelp-query+langlinks-example-simple": "קבלת קישורים בין־לשוניים מהדף <kbd>Main Page</kbd>.",
        "apihelp-query+languageinfo-summary": "מחזירה מידע על שפות זמינות.",
+       "apihelp-query+languageinfo-param-prop": "איזה מידע לקבל עבור כל שפה.",
+       "apihelp-query+languageinfo-paramvalue-prop-dir": "כיוון הכתיבה של השפה (<code>ltr</code> או <code>rtl</code>).",
+       "apihelp-query+languageinfo-example-simple": "קבלת קודי שפה של כל השפות הנתמכות.",
        "apihelp-query+links-summary": "החזרת כל הקישורים מהדפים שצוינו.",
        "apihelp-query+links-param-namespace": "להציג קישורים רק במרחבי השם האלה.",
        "apihelp-query+links-param-limit": "כמה קישורים להחזיר.",
index a7ff703..acdb05c 100644 (file)
@@ -15,7 +15,8 @@
                        "Omotecho",
                        "Yusuke1109",
                        "Suyama",
-                       "Yuukin0248"
+                       "Yuukin0248",
+                       "Afaz"
                ]
        },
        "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:Special:MyLanguage/API:Main_page|説明文書]]\n* [[mw:Special:MyLanguage/API:FAQ|よくある質問]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api メーリングリスト]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 告知]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R バグの報告とリクエスト]\n</div>\n<strong>状態:</strong> MediaWiki APIは、積極的にサポートされ、改善された成熟した安定したインターフェースです。避けようとはしていますが、時には壊れた変更が加えられるかもしれません。アップデートの通知を受け取るには、[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce メーリングリスト]に参加してください。\n\n<strong>誤ったリクエスト:</strong> 誤ったリクエストが API に送られた場合、\"MediaWiki-API-Error\" HTTP ヘッダーが送信され、そのヘッダーの値と送り返されるエラーコードは同じ値にセットされます。より詳しい情報は [[mw:Special:MyLanguage/API:Errors_and_warnings|API: Errors and warnings]] を参照してください。\n\n<p class=\"mw-apisandbox-link\"><strong>テスト:</strong> API のリクエストのテストは、[[Special:ApiSandbox]]で簡単に行えます。</p>",
        "apihelp-feedrecentchanges-param-feedformat": "フィードの形式。",
        "apihelp-feedrecentchanges-param-namespace": "この名前空間の結果のみに絞り込む。",
        "apihelp-feedrecentchanges-param-invert": "選択されたものを除く、すべての名前空間。",
-       "apihelp-feedrecentchanges-param-associated": "関連する(トークまたはメイン)名前空間を含めます。",
+       "apihelp-feedrecentchanges-param-associated": "関連する(トークまたは標準)名前空間を含めます。",
        "apihelp-feedrecentchanges-param-days": "結果を絞り込む日数。",
        "apihelp-feedrecentchanges-param-limit": "返す結果の最大数。",
        "apihelp-feedrecentchanges-param-from": "これ以降の編集を表示する。",
index 8caea4c..2845340 100644 (file)
        "apihelp-feedcontributions-param-deletedonly": "Прикажувај само избришани придонеси.",
        "apihelp-feedcontributions-param-toponly": "Само последни преработки.",
        "apihelp-feedcontributions-param-newonly": "Само новосоздадени страници",
-       "apihelp-feedcontributions-param-hideminor": "СокÑ\80иÑ\98 Ñ\81иÑ\82ни Ñ\83Ñ\80едÑ\83ваÑ\9aа.",
+       "apihelp-feedcontributions-param-hideminor": "Скриј ситни уредувања.",
        "apihelp-feedcontributions-param-showsizediff": "Покажувај ја големинската разлика меѓу преработките.",
        "apihelp-feedcontributions-example-simple": "Покажувај придонеси на <kbd>Пример</kbd>.",
        "apihelp-feedrecentchanges-summary": "Дава тековник со скорешни промени.",
        "apihelp-feedrecentchanges-param-hideliu": "Скриј ги промените направени од регистрирани корисници.",
        "apihelp-feedrecentchanges-param-hidepatrolled": "Скриј ги испатролираните промени.",
        "apihelp-feedrecentchanges-param-hidemyself": "Скриј ги промените на тековниот корисник.",
-       "apihelp-feedrecentchanges-param-hidecategorization": "СокÑ\80иÑ\98 Ð¿Ñ\80еÑ\84Ñ\80лаÑ\9aа Ð²Ð¾ Ð´Ñ\80Ñ\83ги ÐºÐ°Ñ\82егоÑ\80ии.",
+       "apihelp-feedrecentchanges-param-hidecategorization": "Скриј префрлања во други категории.",
        "apihelp-feedrecentchanges-param-tagfilter": "Филтрирање по ознака.",
        "apihelp-feedrecentchanges-param-target": "Прикажи само промени на страници што водат од оваа.",
        "apihelp-feedrecentchanges-param-showlinkedto": "Наместо тоа, прикажи ги промените на страниците поврзани со избраната страница.",
        "apihelp-login-example-login": "Најава",
        "apihelp-logout-summary": "Одјави се и исчисти ги податоците на седницата.",
        "apihelp-logout-example-logout": "Одјави го тековниот корисник",
+       "apihelp-managetags-summary": "Извршување на раководни задачи по промена на ознаки.",
+       "apihelp-managetags-param-reason": "Незадолжителна причина за создавање, бришење, активирање или деактивирање на ознаката.",
        "apihelp-mergehistory-summary": "Спојување на истории на страници.",
        "apihelp-move-summary": "Премести страница.",
        "apihelp-move-param-from": "Наслов на страницата што треба да се премести. Не може да се користи заедно со <var>$1fromid</var>.",
        "api-help-right-apihighlimits": "Употреба на повисоки ограничувања за приложни барања (бавни барања: $1; брзи барања: $2). Ограничувањата за бавни барања важат и за повеќевредносни параметри.",
        "apierror-badgenerator-unknown": "Непознат <kbd>generator=$1</kbd>.",
        "apierror-badquery": "Неважечко барање.",
+       "apierror-copyuploadbaddomain": "Подигањето преку URL не е дозволено од овој домен.",
+       "apierror-copyuploadbadurl": "Подигањето не е дозволено од оваа URL-адреса.",
+       "apierror-emptynewsection": "Создавањето на нови празни поднаслови не е дозволено.",
+       "apierror-emptypage": "Создавањето на нови празни страници не е дозволено.",
+       "apierror-filedoesnotexist": "Податотеката не постои.",
+       "apierror-imageusage-badtitle": "Насловот за <kbd>$1</kbd> мора да е податотека.",
+       "apierror-import-unknownerror": "Непозната грешка при увозот: $1.",
+       "apierror-invalidcategory": "Наведеното име на категорија не е важечко.",
+       "apierror-invalid-file-key": "Не е важечки податотечен клуч.",
+       "apierror-missingtitle": "Наведената страница не постои.",
+       "apierror-missingtitle-byname": "Страницата $1 не постои.",
        "apierror-offline": "Не можев да продолжам поради проблем при поврзувањето со мрежата. Проверете дали сте поврзани со семрежјето и обидете се повторно.",
        "apierror-timeout": "Опслужувачот не одговори во очекуваното време.",
        "api-credits-header": "Признанија",
index af1596d..0ad7687 100644 (file)
        "apihelp-query+languageinfo-paramvalue-prop-bcp47": "O código do idioma BCP-47.",
        "apihelp-query+languageinfo-paramvalue-prop-dir": "A direção de escrita do idioma (<code>ltr</code>, da esquerda para a direita, ou <code>rtl</code>, da direita para a esquerda).",
        "apihelp-query+languageinfo-paramvalue-prop-autonym": "O autônimo do idioma, isto é, o seu nome nesse idioma.",
-       "apihelp-query+languageinfo-paramvalue-prop-name": "O nome do idioma no idioma especificado pelo parâmetro <var>lilang</var>, com a aplicação de idiomas de recurso se necessário.",
+       "apihelp-query+languageinfo-paramvalue-prop-name": "O nome do idioma no idioma especificado pelo parâmetro <var>uselang</var>, com a aplicação de idiomas de recurso se necessário.",
        "apihelp-query+languageinfo-paramvalue-prop-fallbacks": "Os códigos de idioma das idiomas de recurso configuradas para esta língua. O recurso final implícito para 'en' não é incluído (mas algum idiomas podem especificar 'en' como último recurso explicitamente).",
        "apihelp-query+languageinfo-paramvalue-prop-variants": "Os códigos de idioma das variantes suportadas por esse idioma.",
        "apihelp-query+languageinfo-param-code": "Códigos de idioma dos idiomas que devem ser devolvidas, ou <code>*</code> para todos os idiomas.",
index 029a6dc..6c30749 100644 (file)
        "apihelp-query+languageinfo-paramvalue-prop-bcp47": "O código de língua BCP-47.",
        "apihelp-query+languageinfo-paramvalue-prop-dir": "A direção de escrita da língua (<code>ltr</code>, da esquerda para a direita, ou <code>rtl</code>, da direita para a esquerda).",
        "apihelp-query+languageinfo-paramvalue-prop-autonym": "O autónimo da língua, isto é, o seu nome nessa língua.",
-       "apihelp-query+languageinfo-paramvalue-prop-name": "O nome da língua na língua especificada pelo parâmetro <var>lilang</var>, com a aplicação de línguas de recurso se necessário.",
+       "apihelp-query+languageinfo-paramvalue-prop-name": "O nome da língua na língua especificada pelo parâmetro <var>uselang</var>, com a aplicação de línguas de recurso se necessário.",
        "apihelp-query+languageinfo-paramvalue-prop-fallbacks": "Os códigos de língua das línguas de recurso configuradas para esta língua. O recurso final implícito para 'en' não é incluído (mas algumas línguas podem especificar 'en' como último recurso explicitamente).",
        "apihelp-query+languageinfo-paramvalue-prop-variants": "Os códigos de língua das variantes suportadas por esta língua.",
        "apihelp-query+languageinfo-param-code": "Códigos de língua das línguas que devem ser devolvidas, ou <code>*</code> para todas as línguas.",
index 3ca00ee..d62f1ad 100644 (file)
        "api-help-param-templated-var-first": "<var>&#x7B;$1&#x7D;</var> у назві параметра слід замінити значеннями <var>$2</var>",
        "api-help-param-templated-var": "<var>&#x7B;$1&#x7D;</var> — значеннями <var>$2</var>",
        "api-help-datatypes-header": "Типи даних",
-       "api-help-datatypes": "Вхідні дані у MediaWiki мають бути в NFC-нормалізованому UTF-8. MediaWiki може спробувати конвертувати вхідні дані іншого вигляду, але від цього можуть постраждати деякі операції (як [[Special:ApiHelp/edit|редагування]] з перевіркою MD5).\n\nДеякі типи параметрів у запитах API потребують ширшого пояснення:\n;boolean\n:Логічні параметри працюють як галочки HTML: якщо параметр вказано, не залежно від значення, він вважається істинним. Щоб значення було хибним, пропустіть параметр зовсім.\n;timestamp\n:Часові мітки можуть бути вказані у кількох форматах. Рекомендується час і дата в ISO 8601. Усі значення часу в UTC, будь-які часові пояси ігноруються.\n:* Дата і час ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (пунктуація і <kbd>Z</kbd> необов'язокві)\n:* Дата і час ISO 8601 з (ігнорованими) частками секунди, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (дефіси, двокрапки та <kbd>Z</kbd> необов'язкові)\n:* Формат MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Загальний числовий формат, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (необов'язковий часовий пояс <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd> або <kbd>-<var>##</var></kbd> ігнорується)\n:* Формат EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат RFC 2822 (часовий пояс може бути опущений), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат RFC 850 (часовий пояс може бути опущений), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Формат C ctime, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Секунди від 1970-01-01T00:00:00Z у вигляді цілого числа від 1 до 13 цифр (без <kbd>0</kbd>)\n:* Рядок <kbd>now</kbd>\n;альтернативний роздільник багатьох значень\n:Параметри, що приймають багато значень, зазвичай подаються зі значеннями, розділеними вертикальною рискою, наприклад, <kbd>param=value1|value2</kbd> або <kbd>param=value1%7Cvalue2</kbd>. Якщо значення повинне містити вертикальну риску, використовуйте як роздільник U+001F (роздільник одиниць) ''та'' поставте U+001F перед значенням, наприклад, <kbd>param=%1Fvalue1%1Fvalue2</kbd>.",
+       "api-help-datatypes": "Вхідні дані у MediaWiki мають бути в NFC-нормалізованому UTF-8. MediaWiki може спробувати конвертувати вхідні дані іншого вигляду, але від цього можуть постраждати деякі операції (як [[Special:ApiHelp/edit|редагування]] з перевіркою MD5).\n\nДеякі типи параметрів у запитах API потребують ширшого пояснення:\n;boolean\n:Логічні параметри працюють як галочки HTML: якщо параметр вказано, не залежно від значення, він вважається істинним. Щоб значення було хибним, пропустіть параметр зовсім.\n;timestamp\n:Часові мітки можуть бути вказані у кількох форматах. Рекомендується час і дата в ISO 8601, див. детальніше [[mw:Special:MyLanguage/Timestamp|про формати введення бібліотеки часових міток на mediawiki.org]]. Рекомендована дата і час у форматі ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd>. Додатково, рядок <kbd>now</kbd> можна використовувати, щоб вказати поточну часову мітку.\n;альтернативний роздільник багатьох значень\n:Параметри, що приймають багато значень, зазвичай подаються зі значеннями, розділеними вертикальною рискою, наприклад, <kbd>param=value1|value2</kbd> або <kbd>param=value1%7Cvalue2</kbd>. Якщо значення повинне містити вертикальну риску, використовуйте як роздільник U+001F (роздільник одиниць) ''та'' поставте U+001F перед значенням, наприклад, <kbd>param=%1Fvalue1%1Fvalue2</kbd>.",
        "api-help-templatedparams-header": "Шаблонні параметри",
        "api-help-templatedparams": "Шаблонні параметри підтримують випадки, в яких модулю API необхідне значення для кожного значення якогось іншого параметра. Наприклад, якби був модуль API для запитів фруктів, у нього був би параметр <var>fruits</var> для зазначення, запит на які саме фрукти надсилається і шаблонний параметр <var>{fruit}-quantity</var> для зазначення, скільки саме кожного різновиду фруктів потрібно. Клієнт API, якому потрібні 1 яблуко, 5 бананів і 20 полуниць, таким чином, міг би надіслати запит у формі <kbd>fruits=apples|bananas|strawberries&apples-quantity=1&bananas-quantity=5&strawberries-quantity=20</kbd>.",
        "api-help-param-type-limit": "Тип: ціле число або <kbd>max</kbd>",
index c434a5b..b7c60ed 100644 (file)
        "apihelp-query+languageinfo-paramvalue-prop-bcp47": "BCP-47 語言代碼。",
        "apihelp-query+languageinfo-paramvalue-prop-dir": "語言的書寫方向(<code>ltr</code> 或 <code>rtl</code>)。",
        "apihelp-query+languageinfo-paramvalue-prop-autonym": "語言的本語稱呼,也就是該語言用自己語言本身寫出的名稱。",
-       "apihelp-query+languageinfo-paramvalue-prop-name": "在由 <var>lilang</var> 參數所指定語言裡的語言名稱,如有需要可套用語言遞補。",
+       "apihelp-query+languageinfo-paramvalue-prop-name": "在由 <var>uselang</var> 參數所指定語言裡的語言名稱,如有需要可套用語言遞補。",
        "apihelp-query+languageinfo-paramvalue-prop-fallbacks": "替此語言設置的遞補語言之語言代碼。「en」不包括在內含的最後遞補(但一些語言可明確地指定「en」為最後遞補)。",
        "apihelp-query+languageinfo-paramvalue-prop-variants": "由此語言所支援的變體語言代碼。",
        "apihelp-query+languageinfo-param-code": "所應要回傳的語言該語言代碼,或是以 <code>*</code> 來表示為全部語言。",
index e03c590..c871ce1 100644 (file)
@@ -86,17 +86,20 @@ class AuthManager implements LoggerAwareInterface {
        /** Log in with an existing (not necessarily local) user */
        const ACTION_LOGIN = 'login';
        /** Continue a login process that was interrupted by the need for user input or communication
-        * with an external provider */
+        * with an external provider
+        */
        const ACTION_LOGIN_CONTINUE = 'login-continue';
        /** Create a new user */
        const ACTION_CREATE = 'create';
        /** Continue a user creation process that was interrupted by the need for user input or
-        * communication with an external provider */
+        * communication with an external provider
+        */
        const ACTION_CREATE_CONTINUE = 'create-continue';
        /** Link an existing user to a third-party account */
        const ACTION_LINK = 'link';
        /** Continue a user linking process that was interrupted by the need for user input or
-        * communication with an external provider */
+        * communication with an external provider
+        */
        const ACTION_LINK_CONTINUE = 'link-continue';
        /** Change a user's credentials */
        const ACTION_CHANGE = 'change';
@@ -827,7 +830,7 @@ class AuthManager implements LoggerAwareInterface {
                return array_keys( $ret );
        }
 
-       /**@}*/
+       /** @} */
 
        /**
         * @name Authentication data changing
@@ -908,7 +911,7 @@ class AuthManager implements LoggerAwareInterface {
                }
        }
 
-       /**@}*/
+       /** @} */
 
        /**
         * @name Account creation
@@ -1777,7 +1780,7 @@ class AuthManager implements LoggerAwareInterface {
                return Status::newGood();
        }
 
-       /**@}*/
+       /** @} */
 
        /**
         * @name Account linking
@@ -2002,7 +2005,7 @@ class AuthManager implements LoggerAwareInterface {
                }
        }
 
-       /**@}*/
+       /** @} */
 
        /**
         * @name Information methods
@@ -2235,7 +2238,7 @@ class AuthManager implements LoggerAwareInterface {
                return null;
        }
 
-       /**@}*/
+       /** @} */
 
        /**
         * @name Internal methods
@@ -2463,7 +2466,7 @@ class AuthManager implements LoggerAwareInterface {
                self::$instance = null;
        }
 
-       /**@}*/
+       /** @} */
 
 }
 
index 4744c4d..4200341 100644 (file)
@@ -47,7 +47,8 @@ abstract class AuthenticationRequest {
 
        /** Indicates that the request is required by a primary authentication
         * provider. Since the user can choose which primary to authenticate with,
-        * the request might or might not end up being actually required. */
+        * the request might or might not end up being actually required.
+        */
        const PRIMARY_REQUIRED = 2;
 
        /** @var string|null The AuthManager::ACTION_* constant this request was
@@ -57,14 +58,16 @@ abstract class AuthenticationRequest {
        public $action = null;
 
        /** @var int For login, continue, and link actions, one of self::OPTIONAL,
-        * self::REQUIRED, or self::PRIMARY_REQUIRED */
+        * self::REQUIRED, or self::PRIMARY_REQUIRED
+        */
        public $required = self::REQUIRED;
 
        /** @var string|null Return-to URL, in case of redirect */
        public $returnToUrl = null;
 
        /** @var string|null Username. See AuthenticationProvider::getAuthenticationRequests()
-        * for details of what this means and how it behaves. */
+        * for details of what this means and how it behaves.
+        */
        public $username = null;
 
        /**
index c82ed1c..b67703c 100644 (file)
@@ -50,7 +50,7 @@ class BlockManager {
         *
         * @var array
         * @since 1.34
-        * */
+        */
        public static $constructorOptions = [
                'ApplyIpBlocksToXff',
                'CookieSetOnAutoblock',
index eedc3c6..a181507 100644 (file)
@@ -21,7 +21,9 @@
  * @author Niklas Laxström
  * @ingroup Cache
  */
+
 use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\ILoadBalancer;
 
 /**
  * Caches user genders when needed to use correct namespace aliases.
@@ -37,8 +39,12 @@ class GenderCache {
        /** @var NamespaceInfo */
        private $nsInfo;
 
-       public function __construct( NamespaceInfo $nsInfo = null ) {
+       /** @var ILoadBalancer|null */
+       private $loadBalancer;
+
+       public function __construct( NamespaceInfo $nsInfo = null, ILoadBalancer $loadBalancer = null ) {
                $this->nsInfo = $nsInfo ?? MediaWikiServices::getInstance()->getNamespaceInfo();
+               $this->loadBalancer = $loadBalancer;
        }
 
        /**
@@ -164,7 +170,13 @@ class GenderCache {
                        return;
                }
 
-               $dbr = wfGetDB( DB_REPLICA );
+               // Only query database, when load balancer is provided by service wiring
+               // This maybe not happen when running as part of the installer
+               if ( $this->loadBalancer === null ) {
+                       return;
+               }
+
+               $dbr = $this->loadBalancer->getConnectionRef( DB_REPLICA );
                $table = [ 'user', 'user_properties' ];
                $fields = [ 'user_name', 'up_value' ];
                $conds = [ 'user_name' => $usersToCheck ];
index 31b4443..e2b35a8 100644 (file)
@@ -451,9 +451,9 @@ class ChangesList extends ContextSource {
        public function insertLog( &$s, $title, $logtype ) {
                $page = new LogPage( $logtype );
                $logname = $page->getName()->setContext( $this->getContext() )->text();
-               $s .= $this->msg( 'parentheses' )->rawParams(
-                       $this->linkRenderer->makeKnownLink( $title, $logname )
-               )->escaped();
+               $s .= Html::rawElement( 'span', [
+                       'class' => 'mw-changeslist-links'
+               ], $this->linkRenderer->makeKnownLink( $title, $logname ) );
        }
 
        /**
@@ -605,7 +605,9 @@ class ChangesList extends ContextSource {
                $formatter->setShowUserToolLinks( true );
                $mark = $this->getLanguage()->getDirMark();
 
-               return $formatter->getActionText() . " $mark" . $formatter->getComment();
+               return Html::openElement( 'span', [ 'class' => 'mw-changeslist-log-entry' ] )
+                       . $formatter->getActionText() . " $mark" . $formatter->getComment()
+                       . Html::closeElement( 'span' );
        }
 
        /**
@@ -705,7 +707,8 @@ class ChangesList extends ContextSource {
                ) {
                        $title = $rc->getTitle();
                        /** Check for rollback permissions, disallow special pages, and only
-                        * show a link on the top-most revision */
+                        * show a link on the top-most revision
+                        */
                        if ( $title->quickUserCan( 'rollback', $this->getUser() ) ) {
                                $rev = new Revision( [
                                        'title' => $title,
index a6a2615..5f4bada 100644 (file)
@@ -218,5 +218,5 @@ class FeedItem {
        public static function stripComment( $text ) {
                return preg_replace( '/\[\[([^]]*\|)?([^]]+)\]\]/', '\2', $text );
        }
-       /**#@-*/
+       /** #@- */
 }
index 40f7180..8c8125b 100644 (file)
@@ -24,6 +24,7 @@
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Storage\NameTableAccessException;
 use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\IDatabase;
 
 class ChangeTags {
        /**
@@ -358,7 +359,7 @@ class ChangeTags {
                        );
                }
 
-               $prevTags = self::getPrevTags( $rc_id, $log_id, $rev_id );
+               $prevTags = self::getTags( $dbw, $rc_id, $rev_id, $log_id );
 
                // add tags
                $tagsToAdd = array_values( array_diff( $tagsToAdd, $prevTags ) );
@@ -452,21 +453,36 @@ class ChangeTags {
                return [ $tagsToAdd, $tagsToRemove, $prevTags ];
        }
 
-       private static function getPrevTags( $rc_id = null, $log_id = null, $rev_id = null ) {
+       /**
+        * Return all the tags associated with the given recent change ID,
+        * revision ID, and/or log entry ID.
+        *
+        * @param IDatabase $db the database to query
+        * @param int|null $rc_id
+        * @param int|null $rev_id
+        * @param int|null $log_id
+        * @return string[]
+        */
+       public static function getTags( IDatabase $db, $rc_id = null, $rev_id = null, $log_id = null ) {
                $conds = array_filter(
                        [
                                'ct_rc_id' => $rc_id,
-                               'ct_log_id' => $log_id,
                                'ct_rev_id' => $rev_id,
+                               'ct_log_id' => $log_id,
                        ]
                );
 
-               $dbw = wfGetDB( DB_MASTER );
-               $tagIds = $dbw->selectFieldValues( 'change_tag', 'ct_tag_id', $conds, __METHOD__ );
+               $tagIds = $db->selectFieldValues(
+                       'change_tag',
+                       'ct_tag_id',
+                       $conds,
+                       __METHOD__
+               );
 
                $tags = [];
+               $changeTagDefStore = MediaWikiServices::getInstance()->getChangeTagDefStore();
                foreach ( $tagIds as $tagId ) {
-                       $tags[] = MediaWikiServices::getInstance()->getChangeTagDefStore()->getName( (int)$tagId );
+                       $tags[] = $changeTagDefStore->getName( (int)$tagId );
                }
 
                return $tags;
index 1559e1d..89f8f76 100644 (file)
@@ -68,7 +68,7 @@ abstract class ChangeTagsList extends RevisionListBase {
         *
         * @param array $tagsToAdd
         * @param array $tagsToRemove
-        * @param array $params
+        * @param string|null $params
         * @param string $reason
         * @param User $user
         * @return Status
index 2aad2db..dfa78e6 100644 (file)
@@ -74,7 +74,7 @@ class ChangeTagsRevisionList extends ChangeTagsList {
         *
         * @param array $tagsToAdd
         * @param array $tagsToRemove
-        * @param array $params
+        * @param string|null $params
         * @param string $reason
         * @param User $user
         * @return Status
index cdf0f79..df5f115 100644 (file)
@@ -93,9 +93,7 @@ class CloneDatabase {
 
                        // Postgres: Temp tables are automatically deleted upon end of session
                        //           Same Temp table name hides existing table for current session
-                       if ( $this->dropCurrentTables
-                               && !in_array( $this->db->getType(), [ 'oracle' ] )
-                       ) {
+                       if ( $this->dropCurrentTables ) {
                                if ( $oldTableName === $newTableName ) {
                                        // Last ditch check to avoid data loss
                                        throw new LogicException( "Not dropping new table, as '$newTableName'"
diff --git a/includes/db/DatabaseOracle.php b/includes/db/DatabaseOracle.php
deleted file mode 100644 (file)
index 82fff6b..0000000
+++ /dev/null
@@ -1,1387 +0,0 @@
-<?php
-/**
- * This is the Oracle database abstraction layer.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Database
- */
-
-use Wikimedia\AtEase\AtEase;
-use Wikimedia\Timestamp\ConvertibleTimestamp;
-use Wikimedia\Rdbms\Database;
-use Wikimedia\Rdbms\DatabaseDomain;
-use Wikimedia\Rdbms\Blob;
-use Wikimedia\Rdbms\ResultWrapper;
-use Wikimedia\Rdbms\IResultWrapper;
-use Wikimedia\Rdbms\DBUnexpectedError;
-use Wikimedia\Rdbms\DBExpectedError;
-
-/**
- * @ingroup Database
- */
-class DatabaseOracle extends Database {
-       /** @var resource */
-       protected $mLastResult = null;
-
-       /** @var int The number of rows affected as an integer */
-       protected $mAffectedRows;
-
-       /** @var bool */
-       private $ignoreDupValOnIndex = false;
-
-       /** @var bool|array */
-       private $sequenceData = null;
-
-       /** @var string Character set for Oracle database */
-       private $defaultCharset = 'AL32UTF8';
-
-       /** @var array */
-       private $mFieldInfoCache = [];
-
-       /** @var string[] Map of (reserved table name => alternate table name) */
-       private $keywordTableMap = [];
-
-       /**
-        * @see Database::__construct()
-        * @param array $params Additional parameters include:
-        *   - keywordTableMap : Map of reserved table names to alternative table names to use
-        */
-       public function __construct( array $params ) {
-               $this->keywordTableMap = $params['keywordTableMap'] ?? [];
-               $params['tablePrefix'] = strtoupper( $params['tablePrefix'] );
-               parent::__construct( $params );
-       }
-
-       function __destruct() {
-               if ( $this->conn ) {
-                       AtEase::suppressWarnings();
-                       $this->close();
-                       AtEase::restoreWarnings();
-               }
-       }
-
-       function getType() {
-               return 'oracle';
-       }
-
-       function implicitOrderby() {
-               return false;
-       }
-
-       protected function open( $server, $user, $password, $dbName, $schema, $tablePrefix ) {
-               if ( !function_exists( 'oci_connect' ) ) {
-                       throw $this->newExceptionAfterConnectError(
-                               "Oracle functions missing, have you compiled PHP with the --with-oci8 option?\n " .
-                               "(Note: if you recently installed PHP, you may need to restart your webserver\n " .
-                               "and database)"
-                       );
-               }
-
-               $this->close();
-
-               if ( $schema !== null ) {
-                       // This uses the *database* aspect of $domain for schema, not the domain schema
-                       throw $this->newExceptionAfterConnectError(
-                               "Got schema '$schema'; not supported. " .
-                               "The database component '$dbName' is actually interpreted as the Oracle schema."
-                       );
-               }
-
-               $this->user = $user;
-               $this->password = $password;
-               if ( strlen( $server ) ) {
-                       // Transparent Network Substrate (TNS) endpoint
-                       $this->server = $server;
-                       // Database name, defaulting to the user name
-                       $realDatabase = strlen( $dbName ) ? $dbName : $user;
-               } else {
-                       // Backward compatibility; $server used to be null and $dbName was the TNS
-                       $this->server = $dbName;
-                       $realDatabase = $user;
-               }
-               $session_mode = ( $this->flags & DBO_SYSDBA ) ? OCI_SYSDBA : OCI_DEFAULT;
-
-               $this->installErrorHandler();
-               try {
-                       $this->conn = $this->getFlag( DBO_PERSISTENT )
-                               ? oci_pconnect(
-                                       $this->user,
-                                       $this->password,
-                                       $this->server,
-                                       $this->defaultCharset,
-                                       $session_mode
-                               )
-                               : oci_new_connect(
-                                       $this->user,
-                                       $this->password,
-                                       $this->server,
-                                       $this->defaultCharset,
-                                       $session_mode
-                               );
-               } catch ( Exception $e ) {
-                       $this->restoreErrorHandler();
-                       throw $this->newExceptionAfterConnectError( $e->getMessage() );
-               }
-               $error = $this->restoreErrorHandler();
-
-               if ( !$this->conn ) {
-                       throw $this->newExceptionAfterConnectError( $error ?: $this->lastError() );
-               }
-
-               try {
-                       if ( $this->user != $realDatabase ) {
-                               // Change current schema for the entire session
-                               $this->selectDomain( new DatabaseDomain(
-                                       $realDatabase,
-                                       $this->currentDomain->getSchema(),
-                                       $this->currentDomain->getTablePrefix()
-                               ) );
-                       } else {
-                               $this->currentDomain = new DatabaseDomain( $realDatabase, null, $tablePrefix );
-                       }
-                       $set = [
-                               'NLS_TIMESTAMP_FORMAT' => 'DD-MM-YYYY HH24:MI:SS.FF6',
-                               'NLS_TIMESTAMP_TZ_FORMAT' => 'DD-MM-YYYY HH24:MI:SS.FF6',
-                               'NLS_NUMERIC_CHARACTERS' => '.,'
-                       ];
-                       foreach ( $set as $var => $val ) {
-                               $this->query(
-                                       "ALTER SESSION SET {$var}=" . $this->addQuotes( $val ),
-                                       __METHOD__,
-                                       self::QUERY_IGNORE_DBO_TRX | self::QUERY_NO_RETRY
-                               );
-                       }
-               } catch ( Exception $e ) {
-                       throw $this->newExceptionAfterConnectError( $e->getMessage() );
-               }
-       }
-
-       /**
-        * Closes a database connection, if it is open
-        * Returns success, true if already closed
-        * @return bool
-        */
-       protected function closeConnection() {
-               return oci_close( $this->conn );
-       }
-
-       function execFlags() {
-               return $this->trxLevel() ? OCI_NO_AUTO_COMMIT : OCI_COMMIT_ON_SUCCESS;
-       }
-
-       /**
-        * @param string $sql
-        * @return bool|mixed|ORAResult
-        */
-       protected function doQuery( $sql ) {
-               if ( !mb_check_encoding( (string)$sql, 'UTF-8' ) ) {
-                       throw new DBUnexpectedError( $this, "SQL encoding is invalid\n$sql" );
-               }
-
-               // handle some oracle specifics
-               // remove AS column/table/subquery namings
-               if ( !$this->getFlag( DBO_DDLMODE ) ) {
-                       $sql = preg_replace( '/ as /i', ' ', $sql );
-               }
-
-               // Oracle has issues with UNION clause if the statement includes LOB fields
-               // So we do a UNION ALL and then filter the results array with array_unique
-               $union_unique = ( preg_match( '/\/\* UNION_UNIQUE \*\/ /', $sql ) != 0 );
-               // EXPLAIN syntax in Oracle is EXPLAIN PLAN FOR and it return nothing
-               // you have to select data from plan table after explain
-               $explain_id = MWTimestamp::getLocalInstance()->format( 'dmYHis' );
-
-               $sql = preg_replace(
-                       '/^EXPLAIN /',
-                       'EXPLAIN PLAN SET STATEMENT_ID = \'' . $explain_id . '\' FOR',
-                       $sql,
-                       1,
-                       $explain_count
-               );
-
-               Wikimedia\suppressWarnings();
-
-               $this->mLastResult = $stmt = oci_parse( $this->conn, $sql );
-               if ( $stmt === false ) {
-                       $e = oci_error( $this->conn );
-                       $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
-
-                       return false;
-               }
-
-               if ( !oci_execute( $stmt, $this->execFlags() ) ) {
-                       $e = oci_error( $stmt );
-                       if ( !$this->ignoreDupValOnIndex || $e['code'] != '1' ) {
-                               $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
-
-                               return false;
-                       }
-               }
-
-               Wikimedia\restoreWarnings();
-
-               if ( $explain_count > 0 ) {
-                       return $this->doQuery( 'SELECT id, cardinality "ROWS" FROM plan_table ' .
-                               'WHERE statement_id = \'' . $explain_id . '\'' );
-               } elseif ( oci_statement_type( $stmt ) == 'SELECT' ) {
-                       return new ORAResult( $this, $stmt, $union_unique );
-               } else {
-                       $this->mAffectedRows = oci_num_rows( $stmt );
-
-                       return true;
-               }
-       }
-
-       function queryIgnore( $sql, $fname = '' ) {
-               return $this->query( $sql, $fname, true );
-       }
-
-       /**
-        * Frees resources associated with the LOB descriptor
-        * @param IResultWrapper|ORAResult $res
-        */
-       function freeResult( $res ) {
-               ResultWrapper::unwrap( $res )->free();
-       }
-
-       /**
-        * @param IResultWrapper|ORAResult $res
-        * @return stdClass|bool
-        */
-       function fetchObject( $res ) {
-               return ResultWrapper::unwrap( $res )->fetchObject();
-       }
-
-       /**
-        * @param IResultWrapper|ORAResult $res
-        * @return stdClass|bool
-        */
-       function fetchRow( $res ) {
-               return ResultWrapper::unwrap( $res )->fetchRow();
-       }
-
-       /**
-        * @param IResultWrapper|ORAResult $res
-        * @return int
-        */
-       function numRows( $res ) {
-               return ResultWrapper::unwrap( $res )->numRows();
-       }
-
-       /**
-        * @param IResultWrapper|ORAResult $res
-        * @return int
-        */
-       function numFields( $res ) {
-               return ResultWrapper::unwrap( $res )->numFields();
-       }
-
-       function fieldName( $stmt, $n ) {
-               return oci_field_name( $stmt, $n );
-       }
-
-       function insertId() {
-               $res = $this->query( "SELECT lastval_pkg.getLastval FROM dual" );
-               $row = $this->fetchRow( $res );
-               return is_null( $row[0] ) ? null : (int)$row[0];
-       }
-
-       /**
-        * @param mixed $res
-        * @param int $row
-        */
-       function dataSeek( $res, $row ) {
-               if ( $res instanceof ORAResult ) {
-                       $res->seek( $row );
-               } else {
-                       ResultWrapper::unwrap( $res )->seek( $row );
-               }
-       }
-
-       function lastError() {
-               if ( $this->conn === false ) {
-                       $e = oci_error();
-               } else {
-                       $e = oci_error( $this->conn );
-               }
-
-               return $e['message'];
-       }
-
-       function lastErrno() {
-               if ( $this->conn === false ) {
-                       $e = oci_error();
-               } else {
-                       $e = oci_error( $this->conn );
-               }
-
-               return $e['code'];
-       }
-
-       protected function fetchAffectedRowCount() {
-               return $this->mAffectedRows;
-       }
-
-       /**
-        * Returns information about an index
-        * If errors are explicitly ignored, returns NULL on failure
-        * @param string $table
-        * @param string $index
-        * @param string $fname
-        * @return bool
-        */
-       function indexInfo( $table, $index, $fname = __METHOD__ ) {
-               return false;
-       }
-
-       function indexUnique( $table, $index, $fname = __METHOD__ ) {
-               return false;
-       }
-
-       function insert( $table, $a, $fname = __METHOD__, $options = [] ) {
-               if ( !count( $a ) ) {
-                       return true;
-               }
-
-               if ( !is_array( $options ) ) {
-                       $options = [ $options ];
-               }
-
-               if ( in_array( 'IGNORE', $options ) ) {
-                       $this->ignoreDupValOnIndex = true;
-               }
-
-               if ( !is_array( reset( $a ) ) ) {
-                       $a = [ $a ];
-               }
-
-               foreach ( $a as &$row ) {
-                       $this->insertOneRow( $table, $row, $fname );
-               }
-
-               if ( in_array( 'IGNORE', $options ) ) {
-                       $this->ignoreDupValOnIndex = false;
-               }
-
-               return true;
-       }
-
-       private function fieldBindStatement( $table, $col, &$val, $includeCol = false ) {
-               $col_info = $this->fieldInfoMulti( $table, $col );
-               $col_type = $col_info != false ? $col_info->type() : 'CONSTANT';
-
-               $bind = '';
-               if ( is_numeric( $col ) ) {
-                       $bind = $val;
-                       $val = null;
-
-                       return $bind;
-               } elseif ( $includeCol ) {
-                       $bind = "$col = ";
-               }
-
-               if ( $val == '' && $val !== 0 && $col_type != 'BLOB' && $col_type != 'CLOB' ) {
-                       $val = null;
-               }
-
-               if ( $val === 'NULL' ) {
-                       $val = null;
-               }
-
-               if ( $val === null ) {
-                       if (
-                               $col_info != false &&
-                               $col_info->isNullable() == 0 &&
-                               $col_info->defaultValue() != null
-                       ) {
-                               $bind .= 'DEFAULT';
-                       } else {
-                               $bind .= 'NULL';
-                       }
-               } else {
-                       $bind .= ':' . $col;
-               }
-
-               return $bind;
-       }
-
-       /**
-        * @param string $table
-        * @param array $row
-        * @param string $fname
-        * @return bool
-        * @throws DBUnexpectedError
-        */
-       private function insertOneRow( $table, $row, $fname ) {
-               $table = $this->tableName( $table );
-               // "INSERT INTO tables (a, b, c)"
-               $sql = "INSERT INTO " . $table . " (" . implode( ',', array_keys( $row ) ) . ')';
-               $sql .= " VALUES (";
-
-               // for each value, append ":key"
-               $first = true;
-               foreach ( $row as $col => &$val ) {
-                       if ( !$first ) {
-                               $sql .= ', ';
-                       } else {
-                               $first = false;
-                       }
-                       if ( $this->isQuotedIdentifier( $val ) ) {
-                               $sql .= $this->removeIdentifierQuotes( $val );
-                               unset( $row[$col] );
-                       } else {
-                               $sql .= $this->fieldBindStatement( $table, $col, $val );
-                       }
-               }
-               $sql .= ')';
-
-               $this->mLastResult = $stmt = oci_parse( $this->conn, $sql );
-               if ( $stmt === false ) {
-                       $e = oci_error( $this->conn );
-                       $this->reportQueryError( $e['message'], $e['code'], $sql, $fname );
-
-                       return false;
-               }
-               foreach ( $row as $col => &$val ) {
-                       $col_info = $this->fieldInfoMulti( $table, $col );
-                       $col_type = $col_info != false ? $col_info->type() : 'CONSTANT';
-
-                       if ( $val === null ) {
-                               // do nothing ... null was inserted in statement creation
-                       } elseif ( $col_type != 'BLOB' && $col_type != 'CLOB' ) {
-                               if ( is_object( $val ) ) {
-                                       $val = $val->fetch();
-                               }
-
-                               // backward compatibility
-                               if (
-                                       preg_match( '/^timestamp.*/i', $col_type ) == 1 &&
-                                       strtolower( $val ) == 'infinity'
-                               ) {
-                                       $val = $this->getInfinity();
-                               }
-
-                               $val = $this->getVerifiedUTF8( $val );
-                               if ( oci_bind_by_name( $stmt, ":$col", $val, -1, SQLT_CHR ) === false ) {
-                                       $e = oci_error( $stmt );
-                                       $this->reportQueryError( $e['message'], $e['code'], $sql, $fname );
-
-                                       return false;
-                               }
-                       } else {
-                               /** @var OCI_Lob[] $lob */
-                               $lob[$col] = oci_new_descriptor( $this->conn, OCI_D_LOB );
-                               if ( $lob[$col] === false ) {
-                                       $e = oci_error( $stmt );
-                                       throw new DBUnexpectedError(
-                                               $this,
-                                               "Cannot create LOB descriptor: " . $e['message']
-                                       );
-                               }
-
-                               if ( is_object( $val ) ) {
-                                       $val = $val->fetch();
-                               }
-
-                               if ( $col_type == 'BLOB' ) {
-                                       $lob[$col]->writeTemporary( $val, OCI_TEMP_BLOB );
-                                       oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, OCI_B_BLOB );
-                               } else {
-                                       $lob[$col]->writeTemporary( $val, OCI_TEMP_CLOB );
-                                       oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, OCI_B_CLOB );
-                               }
-                       }
-               }
-
-               Wikimedia\suppressWarnings();
-
-               if ( oci_execute( $stmt, $this->execFlags() ) === false ) {
-                       $e = oci_error( $stmt );
-                       if ( !$this->ignoreDupValOnIndex || $e['code'] != '1' ) {
-                               $this->reportQueryError( $e['message'], $e['code'], $sql, $fname );
-
-                               return false;
-                       } else {
-                               $this->mAffectedRows = oci_num_rows( $stmt );
-                       }
-               } else {
-                       $this->mAffectedRows = oci_num_rows( $stmt );
-               }
-
-               Wikimedia\restoreWarnings();
-
-               if ( isset( $lob ) ) {
-                       foreach ( $lob as $lob_v ) {
-                               $lob_v->free();
-                       }
-               }
-
-               if ( !$this->trxLevel() ) {
-                       oci_commit( $this->conn );
-               }
-
-               return oci_free_statement( $stmt );
-       }
-
-       function nativeInsertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
-               $insertOptions = [], $selectOptions = [], $selectJoinConds = []
-       ) {
-               $destTable = $this->tableName( $destTable );
-
-               $sequenceData = $this->getSequenceData( $destTable );
-               if ( $sequenceData !== false &&
-                       !isset( $varMap[$sequenceData['column']] )
-               ) {
-                       $varMap[$sequenceData['column']] =
-                               'GET_SEQUENCE_VALUE(\'' . $sequenceData['sequence'] . '\')';
-               }
-
-               // count-alias subselect fields to avoid abigious definition errors
-               $i = 0;
-               foreach ( $varMap as &$val ) {
-                       $val .= ' field' . $i;
-                       $i++;
-               }
-
-               $selectSql = $this->selectSQLText(
-                       $srcTable,
-                       array_values( $varMap ),
-                       $conds,
-                       $fname,
-                       $selectOptions,
-                       $selectJoinConds
-               );
-
-               $sql = "INSERT INTO $destTable (" .
-                       implode( ',', array_keys( $varMap ) ) . ') ' . $selectSql;
-
-               if ( in_array( 'IGNORE', $insertOptions ) ) {
-                       $this->ignoreDupValOnIndex = true;
-               }
-
-               $this->query( $sql, $fname );
-
-               if ( in_array( 'IGNORE', $insertOptions ) ) {
-                       $this->ignoreDupValOnIndex = false;
-               }
-       }
-
-       public function upsert( $table, array $rows, $uniqueIndexes, array $set,
-               $fname = __METHOD__
-       ) {
-               if ( $rows === [] ) {
-                       return true; // nothing to do
-               }
-
-               if ( !is_array( reset( $rows ) ) ) {
-                       $rows = [ $rows ];
-               }
-
-               $sequenceData = $this->getSequenceData( $table );
-               if ( $sequenceData !== false ) {
-                       // add sequence column to each list of columns, when not set
-                       foreach ( $rows as &$row ) {
-                               if ( !isset( $row[$sequenceData['column']] ) ) {
-                                       $row[$sequenceData['column']] =
-                                               $this->addIdentifierQuotes( 'GET_SEQUENCE_VALUE(\'' .
-                                                       $sequenceData['sequence'] . '\')' );
-                               }
-                       }
-               }
-
-               return parent::upsert( $table, $rows, $uniqueIndexes, $set, $fname );
-       }
-
-       public function tableName( $name, $format = 'quoted' ) {
-               // Replace reserved words with better ones
-               $name = $this->remappedTableName( $name );
-
-               return strtoupper( parent::tableName( $name, $format ) );
-       }
-
-       /**
-        * @param string $name
-        * @return string Value of $name or remapped name if $name is a reserved keyword
-        */
-       public function remappedTableName( $name ) {
-               return $this->keywordTableMap[$name] ?? $name;
-       }
-
-       function tableNameInternal( $name ) {
-               $name = $this->tableName( $name );
-
-               return preg_replace( '/.*\.(.*)/', '$1', $name );
-       }
-
-       /**
-        * Return sequence_name if table has a sequence
-        *
-        * @param string $table
-        * @return string[]|bool
-        */
-       private function getSequenceData( $table ) {
-               if ( $this->sequenceData == null ) {
-                       $dbname = $this->currentDomain->getDatabase();
-                       $prefix = $this->currentDomain->getTablePrefix();
-                       // See https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions040.htm
-                       $decodeArgs = [ 'atc.table_name' ]; // the switch
-                       foreach ( $this->keywordTableMap as $reserved => $alternative ) {
-                               $search = strtoupper( $prefix . $alternative ); // case
-                               $replace = strtoupper( $prefix . $reserved ); // result
-                               $decodeArgs[] = $this->addQuotes( $search );
-                               $decodeArgs[] = $this->addQuotes( $replace );
-                       }
-                       $decodeArgs[] = [ 'atc.table_name' ]; // default
-                       $decodeArgs = implode( ', ', $decodeArgs );
-
-                       $result = $this->doQuery(
-                               "SELECT lower(asq.sequence_name), lower(atc.table_name), lower(atc.column_name)
-                               FROM all_sequences asq, all_tab_columns atc
-                               WHERE decode({$decodeArgs}) || '_' ||
-                               atc.column_name || '_SEQ' = '{$prefix}' || asq.sequence_name
-                               AND asq.sequence_owner = upper('{$dbname}')
-                               AND atc.owner = upper('{$dbname}')"
-                       );
-
-                       while ( ( $row = $result->fetchRow() ) !== false ) {
-                               $this->sequenceData[$row[1]] = [
-                                       'sequence' => $row[0],
-                                       'column' => $row[2]
-                               ];
-                       }
-               }
-               $table = strtolower( $this->removeIdentifierQuotes( $this->tableName( $table ) ) );
-
-               return $this->sequenceData[$table] ?? false;
-       }
-
-       /**
-        * Returns the size of a text field, or -1 for "unlimited"
-        *
-        * @param string $table
-        * @param string $field
-        * @return mixed
-        */
-       function textFieldSize( $table, $field ) {
-               $fieldInfoData = $this->fieldInfo( $table, $field );
-
-               return $fieldInfoData->maxLength();
-       }
-
-       function limitResult( $sql, $limit, $offset = false ) {
-               if ( $offset === false ) {
-                       $offset = 0;
-               }
-
-               return "SELECT * FROM ($sql) WHERE rownum >= (1 + $offset) AND rownum < (1 + $limit + $offset)";
-       }
-
-       function encodeBlob( $b ) {
-               return new Blob( $b );
-       }
-
-       function unionQueries( $sqls, $all ) {
-               $glue = ' UNION ALL ';
-
-               return 'SELECT * ' . ( $all ? '' : '/* UNION_UNIQUE */ ' ) .
-                       'FROM (' . implode( $glue, $sqls ) . ')';
-       }
-
-       function wasDeadlock() {
-               return $this->lastErrno() == 'OCI-00060';
-       }
-
-       function duplicateTableStructure( $oldName, $newName, $temporary = false,
-               $fname = __METHOD__
-       ) {
-               $temporary = $temporary ? 'TRUE' : 'FALSE';
-               $tablePrefix = $this->currentDomain->getTablePrefix();
-
-               $newName = strtoupper( $newName );
-               $oldName = strtoupper( $oldName );
-
-               $tabName = substr( $newName, strlen( $tablePrefix ) );
-               $oldPrefix = substr( $oldName, 0, strlen( $oldName ) - strlen( $tabName ) );
-               $newPrefix = strtoupper( $tablePrefix );
-
-               return $this->doQuery( "BEGIN DUPLICATE_TABLE( '$tabName', " .
-                       "'$oldPrefix', '$newPrefix', $temporary ); END;" );
-       }
-
-       function listTables( $prefix = null, $fname = __METHOD__ ) {
-               $listWhere = '';
-               if ( !empty( $prefix ) ) {
-                       $listWhere = ' AND table_name LIKE \'' . strtoupper( $prefix ) . '%\'';
-               }
-
-               $owner = strtoupper( $this->getDBname() );
-               $result = $this->doQuery( "SELECT table_name FROM all_tables " .
-                       "WHERE owner='$owner' AND table_name NOT LIKE '%!_IDX\$_' ESCAPE '!' $listWhere" );
-
-               // dirty code ... i know
-               $endArray = [];
-               $endArray[] = strtoupper( $prefix . 'MWUSER' );
-               $endArray[] = strtoupper( $prefix . 'PAGE' );
-               $endArray[] = strtoupper( $prefix . 'IMAGE' );
-               $fixedOrderTabs = $endArray;
-               while ( ( $row = $result->fetchRow() ) !== false ) {
-                       if ( !in_array( $row['table_name'], $fixedOrderTabs ) ) {
-                               $endArray[] = $row['table_name'];
-                       }
-               }
-
-               return $endArray;
-       }
-
-       public function dropTable( $tableName, $fName = __METHOD__ ) {
-               $tableName = $this->tableName( $tableName );
-               if ( !$this->tableExists( $tableName ) ) {
-                       return false;
-               }
-
-               return $this->doQuery( "DROP TABLE $tableName CASCADE CONSTRAINTS PURGE" );
-       }
-
-       public function timestamp( $ts = 0 ) {
-               $t = new ConvertibleTimestamp( $ts );
-               // Let errors bubble up to avoid putting garbage in the DB
-               return $t->getTimestamp( TS_ORACLE );
-       }
-
-       /**
-        * Return aggregated value function call
-        *
-        * @param array $valuedata
-        * @param string $valuename
-        * @return mixed
-        */
-       public function aggregateValue( $valuedata, $valuename = 'value' ) {
-               return $valuedata;
-       }
-
-       /**
-        * @return string Wikitext of a link to the server software's web site
-        */
-       public function getSoftwareLink() {
-               return '[{{int:version-db-oracle-url}} Oracle]';
-       }
-
-       /**
-        * @return string Version information from the database
-        */
-       function getServerVersion() {
-               // better version number, fallback on driver
-               $rset = $this->doQuery(
-                       'SELECT version FROM product_component_version ' .
-                               'WHERE UPPER(product) LIKE \'ORACLE DATABASE%\''
-               );
-               $row = $rset->fetchRow();
-               if ( !$row ) {
-                       return oci_server_version( $this->conn );
-               }
-
-               return $row['version'];
-       }
-
-       /**
-        * Query whether a given index exists
-        * @param string $table
-        * @param string $index
-        * @param string $fname
-        * @return bool
-        */
-       function indexExists( $table, $index, $fname = __METHOD__ ) {
-               $table = $this->tableName( $table );
-               $table = strtoupper( $this->removeIdentifierQuotes( $table ) );
-               $index = strtoupper( $index );
-               $owner = strtoupper( $this->getDBname() );
-               $sql = "SELECT 1 FROM all_indexes WHERE owner='$owner' AND index_name='{$table}_{$index}'";
-               $res = $this->doQuery( $sql );
-               if ( $res ) {
-                       $count = $res->numRows();
-                       $res->free();
-               } else {
-                       $count = 0;
-               }
-
-               return $count != 0;
-       }
-
-       /**
-        * Query whether a given table exists (in the given schema, or the default mw one if not given)
-        * @param string $table
-        * @param string $fname
-        * @return bool
-        */
-       function tableExists( $table, $fname = __METHOD__ ) {
-               $table = $this->tableName( $table );
-               $table = $this->addQuotes( strtoupper( $this->removeIdentifierQuotes( $table ) ) );
-               $owner = $this->addQuotes( strtoupper( $this->getDBname() ) );
-               $sql = "SELECT 1 FROM all_tables WHERE owner=$owner AND table_name=$table";
-               $res = $this->doQuery( $sql );
-               if ( $res && $res->numRows() > 0 ) {
-                       $exists = true;
-               } else {
-                       $exists = false;
-               }
-
-               $res->free();
-
-               return $exists;
-       }
-
-       /**
-        * Function translates mysql_fetch_field() functionality on ORACLE.
-        * Caching is present for reducing query time.
-        * For internal calls. Use fieldInfo for normal usage.
-        * Returns false if the field doesn't exist
-        *
-        * @param array|string $table
-        * @param string $field
-        * @return ORAField|ORAResult|false
-        */
-       private function fieldInfoMulti( $table, $field ) {
-               $field = strtoupper( $field );
-               if ( is_array( $table ) ) {
-                       $table = array_map( [ $this, 'tableNameInternal' ], $table );
-                       $tableWhere = 'IN (';
-                       foreach ( $table as &$singleTable ) {
-                               $singleTable = $this->removeIdentifierQuotes( $singleTable );
-                               if ( isset( $this->mFieldInfoCache["$singleTable.$field"] ) ) {
-                                       return $this->mFieldInfoCache["$singleTable.$field"];
-                               }
-                               $tableWhere .= '\'' . $singleTable . '\',';
-                       }
-                       $tableWhere = rtrim( $tableWhere, ',' ) . ')';
-               } else {
-                       $table = $this->removeIdentifierQuotes( $this->tableNameInternal( $table ) );
-                       if ( isset( $this->mFieldInfoCache["$table.$field"] ) ) {
-                               return $this->mFieldInfoCache["$table.$field"];
-                       }
-                       $tableWhere = '= \'' . $table . '\'';
-               }
-
-               $fieldInfoStmt = oci_parse(
-                       $this->conn,
-                       'SELECT * FROM wiki_field_info_full WHERE table_name ' .
-                               $tableWhere . ' and column_name = \'' . $field . '\''
-               );
-               if ( oci_execute( $fieldInfoStmt, $this->execFlags() ) === false ) {
-                       $e = oci_error( $fieldInfoStmt );
-                       $this->reportQueryError( $e['message'], $e['code'], 'fieldInfo QUERY', __METHOD__ );
-
-                       return false;
-               }
-               $res = new ORAResult( $this, $fieldInfoStmt );
-               if ( $res->numRows() == 0 ) {
-                       if ( is_array( $table ) ) {
-                               foreach ( $table as &$singleTable ) {
-                                       $this->mFieldInfoCache["$singleTable.$field"] = false;
-                               }
-                       } else {
-                               $this->mFieldInfoCache["$table.$field"] = false;
-                       }
-                       $fieldInfoTemp = null;
-               } else {
-                       $fieldInfoTemp = new ORAField( $res->fetchRow() );
-                       $table = $fieldInfoTemp->tableName();
-                       $this->mFieldInfoCache["$table.$field"] = $fieldInfoTemp;
-               }
-               $res->free();
-
-               return $fieldInfoTemp;
-       }
-
-       /**
-        * @throws DBUnexpectedError
-        * @param string $table
-        * @param string $field
-        * @return ORAField
-        */
-       function fieldInfo( $table, $field ) {
-               if ( is_array( $table ) ) {
-                       throw new DBUnexpectedError(
-                               $this,
-                               'DatabaseOracle::fieldInfo called with table array!'
-                       );
-               }
-
-               return $this->fieldInfoMulti( $table, $field );
-       }
-
-       protected function doBegin( $fname = __METHOD__ ) {
-               $this->query( 'SET CONSTRAINTS ALL DEFERRED' );
-       }
-
-       protected function doCommit( $fname = __METHOD__ ) {
-               if ( $this->trxLevel() ) {
-                       $ret = oci_commit( $this->conn );
-                       if ( !$ret ) {
-                               throw new DBUnexpectedError( $this, $this->lastError() );
-                       }
-                       $this->query( 'SET CONSTRAINTS ALL IMMEDIATE' );
-               }
-       }
-
-       protected function doRollback( $fname = __METHOD__ ) {
-               if ( $this->trxLevel() ) {
-                       oci_rollback( $this->conn );
-                       $ignoreErrors = true;
-                       $this->query( 'SET CONSTRAINTS ALL IMMEDIATE', $fname, $ignoreErrors );
-               }
-       }
-
-       function sourceStream(
-               $fp,
-               callable $lineCallback = null,
-               callable $resultCallback = null,
-               $fname = __METHOD__, callable $inputCallback = null
-       ) {
-               $cmd = '';
-               $done = false;
-               $dollarquote = false;
-
-               $replacements = [];
-               // Defines must comply with ^define\s*([^\s=]*)\s*=\s?'\{\$([^\}]*)\}';
-               while ( !feof( $fp ) ) {
-                       if ( $lineCallback ) {
-                               $lineCallback();
-                       }
-                       $line = trim( fgets( $fp, 1024 ) );
-                       $sl = strlen( $line ) - 1;
-
-                       if ( $sl < 0 ) {
-                               continue;
-                       }
-                       if ( $line[0] == '-' && $line[1] == '-' ) {
-                               continue;
-                       }
-
-                       // Allow dollar quoting for function declarations
-                       if ( substr( $line, 0, 8 ) == '/*$mw$*/' ) {
-                               if ( $dollarquote ) {
-                                       $dollarquote = false;
-                                       $line = str_replace( '/*$mw$*/', '', $line ); // remove dollarquotes
-                                       $done = true;
-                               } else {
-                                       $dollarquote = true;
-                               }
-                       } elseif ( !$dollarquote ) {
-                               if ( $line[$sl] == ';' && ( $sl < 2 || $line[$sl - 1] != ';' ) ) {
-                                       $done = true;
-                                       $line = substr( $line, 0, $sl );
-                               }
-                       }
-
-                       if ( $cmd != '' ) {
-                               $cmd .= ' ';
-                       }
-                       $cmd .= "$line\n";
-
-                       if ( $done ) {
-                               $cmd = str_replace( ';;', ";", $cmd );
-                               if ( strtolower( substr( $cmd, 0, 6 ) ) == 'define' ) {
-                                       if ( preg_match( '/^define\s*([^\s=]*)\s*=\s*\'\{\$([^\}]*)\}\'/', $cmd, $defines ) ) {
-                                               $replacements[$defines[2]] = $defines[1];
-                                       }
-                               } else {
-                                       foreach ( $replacements as $mwVar => $scVar ) {
-                                               $cmd = str_replace( '&' . $scVar . '.', '`{$' . $mwVar . '}`', $cmd );
-                                       }
-
-                                       $cmd = $this->replaceVars( $cmd );
-                                       if ( $inputCallback ) {
-                                               $inputCallback( $cmd );
-                                       }
-                                       $res = $this->doQuery( $cmd );
-                                       if ( $resultCallback ) {
-                                               call_user_func( $resultCallback, $res, $this );
-                                       }
-
-                                       if ( $res === false ) {
-                                               $err = $this->lastError();
-
-                                               return "Query \"{$cmd}\" failed with error code \"$err\".\n";
-                                       }
-                               }
-
-                               $cmd = '';
-                               $done = false;
-                       }
-               }
-
-               return true;
-       }
-
-       protected function doSelectDomain( DatabaseDomain $domain ) {
-               if ( $domain->getSchema() !== null ) {
-                       // We use the *database* aspect of $domain for schema, not the domain schema
-                       throw new DBExpectedError(
-                               $this,
-                               __CLASS__ . ": domain '{$domain->getId()}' has a schema component; " .
-                               "the database component is actually interpreted as the Oracle schema."
-                       );
-               }
-
-               $database = $domain->getDatabase();
-               if ( $database === null || $database === $this->user ) {
-                       // Backward compatibility
-                       $this->currentDomain = $domain;
-
-                       return true;
-               }
-
-               // https://docs.oracle.com/javadb/10.8.3.0/ref/rrefsqlj32268.html
-               $encDatabase = $this->addIdentifierQuotes( strtoupper( $database ) );
-               $sql = "ALTER SESSION SET CURRENT_SCHEMA=$encDatabase";
-               $stmt = oci_parse( $this->conn, $sql );
-               Wikimedia\suppressWarnings();
-               $success = oci_execute( $stmt );
-               Wikimedia\restoreWarnings();
-               if ( $success ) {
-                       // Update that domain fields on success (no exception thrown)
-                       $this->currentDomain = $domain;
-               } else {
-                       $e = oci_error( $stmt );
-                       $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
-               }
-
-               return true;
-       }
-
-       function strencode( $s ) {
-               return str_replace( "'", "''", $s );
-       }
-
-       function addQuotes( $s ) {
-               return "'" . $this->strencode( $this->getVerifiedUTF8( $s ) ) . "'";
-       }
-
-       public function addIdentifierQuotes( $s ) {
-               if ( !$this->getFlag( DBO_DDLMODE ) ) {
-                       $s = '/*Q*/' . $s;
-               }
-
-               return $s;
-       }
-
-       public function removeIdentifierQuotes( $s ) {
-               return strpos( $s, '/*Q*/' ) === false ? $s : substr( $s, 5 );
-       }
-
-       public function isQuotedIdentifier( $s ) {
-               return strpos( $s, '/*Q*/' ) !== false;
-       }
-
-       private function wrapFieldForWhere( $table, &$col, &$val ) {
-               $col_info = $this->fieldInfoMulti( $table, $col );
-               $col_type = $col_info != false ? $col_info->type() : 'CONSTANT';
-               if ( $col_type == 'CLOB' ) {
-                       $col = 'TO_CHAR(' . $col . ')';
-                       $val = $this->getVerifiedUTF8( $val );
-               } elseif ( $col_type == 'VARCHAR2' ) {
-                       $val = $this->getVerifiedUTF8( $val );
-               }
-       }
-
-       private function wrapConditionsForWhere( $table, $conds, $parentCol = null ) {
-               $conds2 = [];
-               foreach ( $conds as $col => $val ) {
-                       if ( is_array( $val ) ) {
-                               $conds2[$col] = $this->wrapConditionsForWhere( $table, $val, $col );
-                       } else {
-                               if ( is_numeric( $col ) && $parentCol != null ) {
-                                       $this->wrapFieldForWhere( $table, $parentCol, $val );
-                               } else {
-                                       $this->wrapFieldForWhere( $table, $col, $val );
-                               }
-                               $conds2[$col] = $val;
-                       }
-               }
-
-               return $conds2;
-       }
-
-       function selectRow( $table, $vars, $conds, $fname = __METHOD__,
-               $options = [], $join_conds = []
-       ) {
-               if ( is_array( $conds ) ) {
-                       $conds = $this->wrapConditionsForWhere( $table, $conds );
-               }
-
-               return parent::selectRow( $table, $vars, $conds, $fname, $options, $join_conds );
-       }
-
-       /**
-        * Returns an optional USE INDEX clause to go after the table, and a
-        * string to go at the end of the query
-        *
-        * @param array $options An associative array of options to be turned into
-        *   an SQL query, valid keys are listed in the function.
-        * @return array
-        */
-       function makeSelectOptions( $options ) {
-               $preLimitTail = $postLimitTail = '';
-               $startOpts = '';
-
-               $noKeyOptions = [];
-               foreach ( $options as $key => $option ) {
-                       if ( is_numeric( $key ) ) {
-                               $noKeyOptions[$option] = true;
-                       }
-               }
-
-               $preLimitTail .= $this->makeGroupByWithHaving( $options );
-
-               $preLimitTail .= $this->makeOrderBy( $options );
-
-               if ( isset( $noKeyOptions['FOR UPDATE'] ) ) {
-                       $postLimitTail .= ' FOR UPDATE';
-               }
-
-               if ( isset( $noKeyOptions['DISTINCT'] ) || isset( $noKeyOptions['DISTINCTROW'] ) ) {
-                       $startOpts .= 'DISTINCT';
-               }
-
-               if ( isset( $options['USE INDEX'] ) && !is_array( $options['USE INDEX'] ) ) {
-                       $useIndex = $this->useIndexClause( $options['USE INDEX'] );
-               } else {
-                       $useIndex = '';
-               }
-
-               if ( isset( $options['IGNORE INDEX'] ) && !is_array( $options['IGNORE INDEX'] ) ) {
-                       $ignoreIndex = $this->ignoreIndexClause( $options['IGNORE INDEX'] );
-               } else {
-                       $ignoreIndex = '';
-               }
-
-               return [ $startOpts, $useIndex, $preLimitTail, $postLimitTail, $ignoreIndex ];
-       }
-
-       public function delete( $table, $conds, $fname = __METHOD__ ) {
-               global $wgActorTableSchemaMigrationStage;
-
-               if ( is_array( $conds ) ) {
-                       $conds = $this->wrapConditionsForWhere( $table, $conds );
-               }
-               // a hack for deleting pages, users and images (which have non-nullable FKs)
-               // all deletions on these tables have transactions so final failure rollbacks these updates
-               // @todo: Normalize the schema to match MySQL, no special FKs and such
-               $table = $this->tableName( $table );
-               if ( $table == $this->tableName( 'user' ) &&
-                       ( $wgActorTableSchemaMigrationStage & SCHEMA_COMPAT_WRITE_OLD )
-               ) {
-                       $this->update( 'archive', [ 'ar_user' => 0 ],
-                               [ 'ar_user' => $conds['user_id'] ], $fname );
-                       $this->update( 'ipblocks', [ 'ipb_user' => 0 ],
-                               [ 'ipb_user' => $conds['user_id'] ], $fname );
-                       $this->update( 'image', [ 'img_user' => 0 ],
-                               [ 'img_user' => $conds['user_id'] ], $fname );
-                       $this->update( 'oldimage', [ 'oi_user' => 0 ],
-                               [ 'oi_user' => $conds['user_id'] ], $fname );
-                       $this->update( 'filearchive', [ 'fa_deleted_user' => 0 ],
-                               [ 'fa_deleted_user' => $conds['user_id'] ], $fname );
-                       $this->update( 'filearchive', [ 'fa_user' => 0 ],
-                               [ 'fa_user' => $conds['user_id'] ], $fname );
-                       $this->update( 'uploadstash', [ 'us_user' => 0 ],
-                               [ 'us_user' => $conds['user_id'] ], $fname );
-                       $this->update( 'recentchanges', [ 'rc_user' => 0 ],
-                               [ 'rc_user' => $conds['user_id'] ], $fname );
-                       $this->update( 'logging', [ 'log_user' => 0 ],
-                               [ 'log_user' => $conds['user_id'] ], $fname );
-               } elseif ( $table == $this->tableName( 'image' ) ) {
-                       $this->update( 'oldimage', [ 'oi_name' => 0 ],
-                               [ 'oi_name' => $conds['img_name'] ], $fname );
-               }
-
-               return parent::delete( $table, $conds, $fname );
-       }
-
-       /**
-        * @param string $table
-        * @param array $values
-        * @param array $conds
-        * @param string $fname
-        * @param array $options
-        * @return bool
-        * @throws DBUnexpectedError
-        */
-       function update( $table, $values, $conds, $fname = __METHOD__, $options = [] ) {
-               $table = $this->tableName( $table );
-               $opts = $this->makeUpdateOptions( $options );
-               $sql = "UPDATE $opts $table SET ";
-
-               $first = true;
-               foreach ( $values as $col => &$val ) {
-                       $sqlSet = $this->fieldBindStatement( $table, $col, $val, true );
-
-                       if ( !$first ) {
-                               $sqlSet = ', ' . $sqlSet;
-                       } else {
-                               $first = false;
-                       }
-                       $sql .= $sqlSet;
-               }
-
-               if ( $conds !== [] && $conds !== '*' ) {
-                       $conds = $this->wrapConditionsForWhere( $table, $conds );
-                       $sql .= ' WHERE ' . $this->makeList( $conds, LIST_AND );
-               }
-
-               $this->mLastResult = $stmt = oci_parse( $this->conn, $sql );
-               if ( $stmt === false ) {
-                       $e = oci_error( $this->conn );
-                       $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
-
-                       return false;
-               }
-               foreach ( $values as $col => &$val ) {
-                       $col_info = $this->fieldInfoMulti( $table, $col );
-                       $col_type = $col_info != false ? $col_info->type() : 'CONSTANT';
-
-                       if ( $val === null ) {
-                               // do nothing ... null was inserted in statement creation
-                       } elseif ( $col_type != 'BLOB' && $col_type != 'CLOB' ) {
-                               if ( is_object( $val ) ) {
-                                       $val = $val->getData();
-                               }
-
-                               if (
-                                       preg_match( '/^timestamp.*/i', $col_type ) == 1 &&
-                                       strtolower( $val ) == 'infinity'
-                               ) {
-                                       $val = '31-12-2030 12:00:00.000000';
-                               }
-
-                               $val = $this->getVerifiedUTF8( $val );
-                               if ( oci_bind_by_name( $stmt, ":$col", $val ) === false ) {
-                                       $e = oci_error( $stmt );
-                                       $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
-
-                                       return false;
-                               }
-                       } else {
-                               /** @var OCI_Lob[] $lob */
-                               $lob[$col] = oci_new_descriptor( $this->conn, OCI_D_LOB );
-                               if ( $lob[$col] === false ) {
-                                       $e = oci_error( $stmt );
-                                       throw new DBUnexpectedError(
-                                               $this,
-                                               "Cannot create LOB descriptor: " . $e['message']
-                                       );
-                               }
-
-                               if ( is_object( $val ) ) {
-                                       $val = $val->getData();
-                               }
-
-                               if ( $col_type == 'BLOB' ) {
-                                       $lob[$col]->writeTemporary( $val );
-                                       oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, SQLT_BLOB );
-                               } else {
-                                       $lob[$col]->writeTemporary( $val );
-                                       oci_bind_by_name( $stmt, ":$col", $lob[$col], -1, OCI_B_CLOB );
-                               }
-                       }
-               }
-
-               Wikimedia\suppressWarnings();
-
-               if ( oci_execute( $stmt, $this->execFlags() ) === false ) {
-                       $e = oci_error( $stmt );
-                       if ( !$this->ignoreDupValOnIndex || $e['code'] != '1' ) {
-                               $this->reportQueryError( $e['message'], $e['code'], $sql, __METHOD__ );
-
-                               return false;
-                       } else {
-                               $this->mAffectedRows = oci_num_rows( $stmt );
-                       }
-               } else {
-                       $this->mAffectedRows = oci_num_rows( $stmt );
-               }
-
-               Wikimedia\restoreWarnings();
-
-               if ( isset( $lob ) ) {
-                       foreach ( $lob as $lob_v ) {
-                               $lob_v->free();
-                       }
-               }
-
-               if ( !$this->trxLevel() ) {
-                       oci_commit( $this->conn );
-               }
-
-               return oci_free_statement( $stmt );
-       }
-
-       function bitNot( $field ) {
-               // expecting bit-fields smaller than 4bytes
-               return 'BITNOT(' . $field . ')';
-       }
-
-       function bitAnd( $fieldLeft, $fieldRight ) {
-               return 'BITAND(' . $fieldLeft . ', ' . $fieldRight . ')';
-       }
-
-       function bitOr( $fieldLeft, $fieldRight ) {
-               return 'BITOR(' . $fieldLeft . ', ' . $fieldRight . ')';
-       }
-
-       public function buildGroupConcatField(
-               $delim, $table, $field, $conds = '', $join_conds = []
-       ) {
-               $fld = "LISTAGG($field," . $this->addQuotes( $delim ) . ") WITHIN GROUP (ORDER BY $field)";
-
-               return '(' . $this->selectSQLText( $table, $fld, $conds, null, [], $join_conds ) . ')';
-       }
-
-       public function buildSubstring( $input, $startPosition, $length = null ) {
-               $this->assertBuildSubstringParams( $startPosition, $length );
-               $params = [ $input, $startPosition ];
-               if ( $length !== null ) {
-                       $params[] = $length;
-               }
-               return 'SUBSTR(' . implode( ',', $params ) . ')';
-       }
-
-       /**
-        * @param string $field Field or column to cast
-        * @return string
-        * @since 1.28
-        */
-       public function buildStringCast( $field ) {
-               return 'CAST ( ' . $field . ' AS VARCHAR2 )';
-       }
-
-       public function getInfinity() {
-               return '31-12-2030 12:00:00.000000';
-       }
-
-       /**
-        * @param string $s
-        * @return string
-        */
-       private function getVerifiedUTF8( $s ) {
-               if ( mb_check_encoding( (string)$s, 'UTF-8' ) ) {
-                       return $s; // valid
-               }
-
-               throw new DBUnexpectedError( $this, "Non BLOB/CLOB field must be UTF-8." );
-       }
-}
index 603e49c..74e236f 100644 (file)
@@ -32,7 +32,7 @@ use Wikimedia\ScopedCallback;
  *
  * See docs/deferred.txt
  */
-class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
+class LinksUpdate extends DataUpdate {
        // @todo make members protected, but make sure extensions don't break
 
        /** @var int Page ID of the article linked from */
@@ -1192,39 +1192,4 @@ class LinksUpdate extends DataUpdate implements EnqueueableDataUpdate {
 
                return $this->db;
        }
-
-       public function getAsJobSpecification() {
-               if ( $this->user ) {
-                       $userInfo = [
-                               'userId' => $this->user->getId(),
-                               'userName' => $this->user->getName(),
-                       ];
-               } else {
-                       $userInfo = false;
-               }
-
-               if ( $this->mRevision ) {
-                       $triggeringRevisionId = $this->mRevision->getId();
-               } else {
-                       $triggeringRevisionId = false;
-               }
-
-               return [
-                       'domain' => $this->getDB()->getDomainID(),
-                       'job'  => new JobSpecification(
-                               'refreshLinksPrioritized',
-                               [
-                                       // Reuse the parser cache if it was saved
-                                       'rootJobTimestamp' => $this->mParserOutput->getCacheTime(),
-                                       'useRecursiveLinksUpdate' => $this->mRecursive,
-                                       'triggeringUser' => $userInfo,
-                                       'triggeringRevisionId' => $triggeringRevisionId,
-                                       'causeAction' => $this->getCauseAction(),
-                                       'causeAgent' => $this->getCauseAgent()
-                               ],
-                               [ 'removeDuplicates' => true ],
-                               $this->getTitle()
-                       )
-               ];
-       }
 }
index 611469c..a508746 100644 (file)
@@ -40,7 +40,7 @@ class SearchUpdate implements DeferrableUpdate {
        /** @var Content|null Content of the page (not text) */
        private $content;
 
-       /** @var WikiPage **/
+       /** @var WikiPage */
        private $page;
 
        /**
index 37ec39a..841daea 100644 (file)
@@ -198,7 +198,7 @@ class DifferenceEngine extends ContextSource {
         */
        protected $isSlotDiffRenderer = false;
 
-       /**#@-*/
+       /** #@- */
 
        /**
         * @param IContextSource|null $context Context to use, anything else will be ignored
index a5860e2..7ec2357 100644 (file)
@@ -117,12 +117,14 @@ class FileBackendGroup {
                        }
                        $name = $config['name'];
                        if ( isset( $this->backends[$name] ) ) {
-                               throw new LogicException( "Backend with name `{$name}` already registered." );
+                               throw new LogicException( "Backend with name '$name' already registered." );
                        } elseif ( !isset( $config['class'] ) ) {
-                               throw new InvalidArgumentException( "Backend with name `{$name}` has no class." );
+                               throw new InvalidArgumentException( "Backend with name '$name' has no class." );
                        }
                        $class = $config['class'];
 
+                       // @FIXME: ideally this would default to the DB domain (which includes the schema)
+                       $config['domainId'] = $config['domainId'] ?? ( $config['wikiId'] ?? wfWikiID() );
                        $config['readOnly'] = $config['readOnly'] ?? $readOnlyReason;
 
                        unset( $config['class'] ); // backend won't need this
@@ -172,40 +174,40 @@ class FileBackendGroup {
         */
        public function config( $name ) {
                if ( !isset( $this->backends[$name] ) ) {
-                       throw new InvalidArgumentException( "No backend defined with the name `$name`." );
+                       throw new InvalidArgumentException( "No backend defined with the name '$name'." );
                }
-               $class = $this->backends[$name]['class'];
 
                $config = $this->backends[$name]['config'];
-               $config['class'] = $class;
-               if ( isset( $config['domainId'] ) ) {
-                       $domain = $config['domainId'];
-               } else {
-                       // @FIXME: this does not include the domain for b/c but it ideally should
-                       $domain = $config['wikiId'] ?? wfWikiID();
-               }
-               // Set default parameter values
-               $config += [
-                       'domainId' => $domain, // e.g. "my_wiki-en_"
-                       'mimeCallback' => [ $this, 'guessMimeInternal' ],
-                       'obResetFunc' => 'wfResetOutputBuffers',
-                       'streamMimeFunc' => [ StreamFile::class, 'contentTypeFromPath' ],
-                       'tmpDirectory' => wfTempDir(),
-                       'statusWrapper' => [ Status::class, 'wrap' ],
-                       'wanCache' => MediaWikiServices::getInstance()->getMainWANObjectCache(),
-                       'srvCache' => ObjectCache::getLocalServerInstance( 'hash' ),
-                       'logger' => LoggerFactory::getInstance( 'FileOperation' ),
-                       'profiler' => function ( $section ) {
-                               return Profiler::instance()->scopedProfileIn( $section );
-                       }
-               ];
-               $config['lockManager'] =
-                       LockManagerGroup::singleton( $domain )->get( $config['lockManager'] );
-               $config['fileJournal'] = isset( $config['fileJournal'] )
-                       ? FileJournal::factory( $config['fileJournal'], $name )
-                       : FileJournal::factory( [ 'class' => NullFileJournal::class ], $name );
-
-               return $config;
+               $services = MediaWikiServices::getInstance();
+
+               return array_merge(
+                       // Default backend parameters
+                       [
+                               'mimeCallback' => [ $this, 'guessMimeInternal' ],
+                               'obResetFunc' => 'wfResetOutputBuffers',
+                               'streamMimeFunc' => [ StreamFile::class, 'contentTypeFromPath' ],
+                               'tmpDirectory' => wfTempDir(),
+                               'statusWrapper' => [ Status::class, 'wrap' ],
+                               'wanCache' => $services->getMainWANObjectCache(),
+                               'srvCache' => ObjectCache::getLocalServerInstance( 'hash' ),
+                               'logger' => LoggerFactory::getInstance( 'FileOperation' ),
+                               'profiler' => function ( $section ) {
+                                       return Profiler::instance()->scopedProfileIn( $section );
+                               }
+                       ],
+                       // Configured backend parameters
+                       $config,
+                       // Resolved backend parameters
+                       [
+                               'class' => $this->backends[$name]['class'],
+                               'lockManager' =>
+                                       LockManagerGroup::singleton( $config['domainId'] )
+                                               ->get( $config['lockManager'] ),
+                               'fileJournal' => isset( $config['fileJournal'] )
+                                       ? FileJournal::factory( $config['fileJournal'], $name )
+                                       : FileJournal::factory( [ 'class' => NullFileJournal::class ], $name )
+                       ]
+               );
        }
 
        /**
index cbbffe4..60f1607 100644 (file)
@@ -45,7 +45,8 @@ class FileRepo {
        const NAME_AND_TIME_ONLY = 1;
 
        /** @var bool Whether to fetch commons image description pages and display
-        *    them on the local wiki */
+        *    them on the local wiki
+        */
        public $fetchDescription;
 
        /** @var int */
@@ -67,7 +68,8 @@ class FileRepo {
        protected $thumbScriptUrl;
 
        /** @var bool Whether to skip media file transformation on parse and rely
-        *    on a 404 handler instead. */
+        *    on a 404 handler instead.
+        */
        protected $transformVia404;
 
        /** @var string URL of image description pages, e.g.
index ba5da6d..8b94d97 100644 (file)
@@ -447,8 +447,7 @@ abstract class DatabaseInstaller {
         * @return string
         */
        public function getReadableName() {
-               // Messages: config-type-mysql, config-type-postgres, config-type-sqlite,
-               // config-type-oracle
+               // Messages: config-type-mysql, config-type-postgres, config-type-sqlite
                return wfMessage( 'config-type-' . $this->getName() )->text();
        }
 
index 7452b7c..de15456 100644 (file)
@@ -105,8 +105,6 @@ abstract class Installer {
        protected static $dbTypes = [
                'mysql',
                'postgres',
-               'oracle',
-               'mssql',
                'sqlite',
        ];
 
@@ -761,8 +759,7 @@ abstract class Installer {
 
                $allNames = [];
 
-               // Messages: config-type-mysql, config-type-postgres, config-type-oracle,
-               // config-type-sqlite
+               // Messages: config-type-mysql, config-type-postgres, config-type-sqlite
                foreach ( self::getDBTypes() as $name ) {
                        $allNames[] = wfMessage( "config-type-$name" )->text();
                }
diff --git a/includes/installer/MssqlInstaller.php b/includes/installer/MssqlInstaller.php
deleted file mode 100644 (file)
index 8b5ff11..0000000
+++ /dev/null
@@ -1,738 +0,0 @@
-<?php
-/**
- * Microsoft SQL Server-specific installer.
- *
- * 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 Deployment
- */
-
-use Wikimedia\Rdbms\Database;
-use Wikimedia\Rdbms\DBQueryError;
-use Wikimedia\Rdbms\DBConnectionError;
-
-/**
- * Class for setting up the MediaWiki database using Microsoft SQL Server.
- *
- * @ingroup Deployment
- * @since 1.23
- */
-class MssqlInstaller extends DatabaseInstaller {
-
-       protected $globalNames = [
-               'wgDBserver',
-               'wgDBname',
-               'wgDBuser',
-               'wgDBpassword',
-               'wgDBmwschema',
-               'wgDBprefix',
-               'wgDBWindowsAuthentication',
-       ];
-
-       protected $internalDefaults = [
-               '_InstallUser' => 'sa',
-               '_InstallWindowsAuthentication' => 'sqlauth',
-               '_WebWindowsAuthentication' => 'sqlauth',
-       ];
-
-       // SQL Server 2005 RTM
-       // @todo Are SQL Express version numbers different?)
-       public static $minimumVersion = '9.00.1399';
-       protected static $notMinimumVersionMessage = 'config-mssql-old';
-
-       // These are schema-level privs
-       // Note: the web user will be created will full permissions if possible, this permission
-       // list is only used if we are unable to grant full permissions.
-       public $webUserPrivs = [
-               'DELETE',
-               'INSERT',
-               'SELECT',
-               'UPDATE',
-               'EXECUTE',
-       ];
-
-       /**
-        * @return string
-        */
-       public function getName() {
-               return 'mssql';
-       }
-
-       /**
-        * @return bool
-        */
-       public function isCompiled() {
-               return self::checkExtension( 'sqlsrv' );
-       }
-
-       /**
-        * @return string
-        */
-       public function getConnectForm() {
-               if ( $this->getVar( '_InstallWindowsAuthentication' ) == 'windowsauth' ) {
-                       $displayStyle = 'display: none;';
-               } else {
-                       $displayStyle = 'display: block;';
-               }
-
-               return $this->getTextBox(
-                       'wgDBserver',
-                       'config-db-host',
-                       [],
-                       $this->parent->getHelpBox( 'config-db-host-help' )
-               ) .
-                       Html::openElement( 'fieldset' ) .
-                       Html::element( 'legend', [], wfMessage( 'config-db-wiki-settings' )->text() ) .
-                       $this->getTextBox( 'wgDBname', 'config-db-name', [ 'dir' => 'ltr' ],
-                               $this->parent->getHelpBox( 'config-db-name-help' ) ) .
-                       $this->getTextBox( 'wgDBmwschema', 'config-db-schema', [ 'dir' => 'ltr' ],
-                               $this->parent->getHelpBox( 'config-db-schema-help' ) ) .
-                       $this->getTextBox( 'wgDBprefix', 'config-db-prefix', [ 'dir' => 'ltr' ],
-                               $this->parent->getHelpBox( 'config-db-prefix-help' ) ) .
-                       Html::closeElement( 'fieldset' ) .
-                       Html::openElement( 'fieldset' ) .
-                       Html::element( 'legend', [], wfMessage( 'config-db-install-account' )->text() ) .
-                       $this->getRadioSet( [
-                               'var' => '_InstallWindowsAuthentication',
-                               'label' => 'config-mssql-auth',
-                               'itemLabelPrefix' => 'config-mssql-',
-                               'values' => [ 'sqlauth', 'windowsauth' ],
-                               'itemAttribs' => [
-                                       'sqlauth' => [
-                                               'class' => 'showHideRadio',
-                                               'rel' => 'dbCredentialBox',
-                                       ],
-                                       'windowsauth' => [
-                                               'class' => 'hideShowRadio',
-                                               'rel' => 'dbCredentialBox',
-                                       ]
-                               ],
-                               'help' => $this->parent->getHelpBox( 'config-mssql-install-auth' )
-                       ] ) .
-                       Html::openElement( 'div', [ 'id' => 'dbCredentialBox', 'style' => $displayStyle ] ) .
-                       $this->getTextBox(
-                               '_InstallUser',
-                               'config-db-username',
-                               [ 'dir' => 'ltr' ],
-                               $this->parent->getHelpBox( 'config-db-install-username' )
-                       ) .
-                       $this->getPasswordBox(
-                               '_InstallPassword',
-                               'config-db-password',
-                               [ 'dir' => 'ltr' ],
-                               $this->parent->getHelpBox( 'config-db-install-password' )
-                       ) .
-                       Html::closeElement( 'div' ) .
-                       Html::closeElement( 'fieldset' );
-       }
-
-       public function submitConnectForm() {
-               // Get variables from the request.
-               $newValues = $this->setVarsFromRequest( [
-                       'wgDBserver',
-                       'wgDBname',
-                       'wgDBmwschema',
-                       'wgDBprefix'
-               ] );
-
-               // Validate them.
-               $status = Status::newGood();
-               if ( !strlen( $newValues['wgDBserver'] ) ) {
-                       $status->fatal( 'config-missing-db-host' );
-               }
-               if ( !strlen( $newValues['wgDBname'] ) ) {
-                       $status->fatal( 'config-missing-db-name' );
-               } elseif ( !preg_match( '/^[a-z0-9_]+$/i', $newValues['wgDBname'] ) ) {
-                       $status->fatal( 'config-invalid-db-name', $newValues['wgDBname'] );
-               }
-               if ( !preg_match( '/^[a-z0-9_]*$/i', $newValues['wgDBmwschema'] ) ) {
-                       $status->fatal( 'config-invalid-schema', $newValues['wgDBmwschema'] );
-               }
-               if ( !preg_match( '/^[a-z0-9_]*$/i', $newValues['wgDBprefix'] ) ) {
-                       $status->fatal( 'config-invalid-db-prefix', $newValues['wgDBprefix'] );
-               }
-               if ( !$status->isOK() ) {
-                       return $status;
-               }
-
-               // Check for blank schema and remap to dbo
-               if ( $newValues['wgDBmwschema'] === '' ) {
-                       $this->setVar( 'wgDBmwschema', 'dbo' );
-               }
-
-               // User box
-               $this->setVarsFromRequest( [
-                       '_InstallUser',
-                       '_InstallPassword',
-                       '_InstallWindowsAuthentication'
-               ] );
-
-               // Try to connect
-               $status = $this->getConnection();
-               if ( !$status->isOK() ) {
-                       return $status;
-               }
-               /**
-                * @var Database $conn
-                */
-               $conn = $status->value;
-
-               // Check version
-               return static::meetsMinimumRequirement( $conn->getServerVersion() );
-       }
-
-       /**
-        * @return Status
-        */
-       public function openConnection() {
-               global $wgDBWindowsAuthentication;
-               $status = Status::newGood();
-               $user = $this->getVar( '_InstallUser' );
-               $password = $this->getVar( '_InstallPassword' );
-
-               if ( $this->getVar( '_InstallWindowsAuthentication' ) == 'windowsauth' ) {
-                       // Use Windows authentication for this connection
-                       $wgDBWindowsAuthentication = true;
-               } else {
-                       $wgDBWindowsAuthentication = false;
-               }
-
-               try {
-                       /** @var DatabaseMssql $db */
-                       $db = Database::factory( 'mssql', [
-                               'host' => $this->getVar( 'wgDBserver' ),
-                               'port' => $this->getVar( 'wgDBport' ),
-                               'user' => $user,
-                               'password' => $password,
-                               'dbname' => false,
-                               'flags' => 0,
-                               'schema' => $this->getVar( 'wgDBmwschema' ),
-                               'tablePrefix' => $this->getVar( 'wgDBprefix' ) ] );
-                       $db->prepareStatements( false );
-                       $db->scrollableCursor( false );
-                       $status->value = $db;
-               } catch ( DBConnectionError $e ) {
-                       $status->fatal( 'config-connection-error', $e->getMessage() );
-               }
-
-               return $status;
-       }
-
-       public function preUpgrade() {
-               global $wgDBuser, $wgDBpassword;
-
-               $status = $this->getConnection();
-               if ( !$status->isOK() ) {
-                       $this->parent->showStatusMessage( $status );
-
-                       return;
-               }
-               /**
-                * @var Database $conn
-                */
-               $conn = $status->value;
-               $conn->selectDB( $this->getVar( 'wgDBname' ) );
-
-               # Normal user and password are selected after this step, so for now
-               # just copy these two
-               $wgDBuser = $this->getVar( '_InstallUser' );
-               $wgDBpassword = $this->getVar( '_InstallPassword' );
-       }
-
-       /**
-        * Return true if the install user can create accounts
-        *
-        * @return bool
-        */
-       public function canCreateAccounts() {
-               $status = $this->getConnection();
-               if ( !$status->isOK() ) {
-                       return false;
-               }
-               /** @var Database $conn */
-               $conn = $status->value;
-
-               // We need the server-level ALTER ANY LOGIN permission to create new accounts
-               $res = $conn->query( "SELECT permission_name FROM sys.fn_my_permissions( NULL, 'SERVER' )" );
-               $serverPrivs = [
-                       'ALTER ANY LOGIN' => false,
-                       'CONTROL SERVER' => false,
-               ];
-
-               foreach ( $res as $row ) {
-                       $serverPrivs[$row->permission_name] = true;
-               }
-
-               if ( !$serverPrivs['ALTER ANY LOGIN'] ) {
-                       return false;
-               }
-
-               // Check to ensure we can grant everything needed as well
-               // We can't actually tell if we have WITH GRANT OPTION for a given permission, so we assume we do
-               // and just check for the permission
-               // https://technet.microsoft.com/en-us/library/ms178569.aspx
-               // The following array sets up which permissions imply whatever permissions we specify
-               $implied = [
-                       // schema           database  server
-                       'DELETE'  => [ 'DELETE', 'CONTROL SERVER' ],
-                       'EXECUTE' => [ 'EXECUTE', 'CONTROL SERVER' ],
-                       'INSERT'  => [ 'INSERT', 'CONTROL SERVER' ],
-                       'SELECT'  => [ 'SELECT', 'CONTROL SERVER' ],
-                       'UPDATE'  => [ 'UPDATE', 'CONTROL SERVER' ],
-               ];
-
-               $grantOptions = array_flip( $this->webUserPrivs );
-
-               // Check for schema and db-level permissions, but only if the schema/db exists
-               $schemaPrivs = $dbPrivs = [
-                       'DELETE' => false,
-                       'EXECUTE' => false,
-                       'INSERT' => false,
-                       'SELECT' => false,
-                       'UPDATE' => false,
-               ];
-
-               $dbPrivs['ALTER ANY USER'] = false;
-
-               if ( $this->databaseExists( $this->getVar( 'wgDBname' ) ) ) {
-                       $conn->selectDB( $this->getVar( 'wgDBname' ) );
-                       $res = $conn->query( "SELECT permission_name FROM sys.fn_my_permissions( NULL, 'DATABASE' )" );
-
-                       foreach ( $res as $row ) {
-                               $dbPrivs[$row->permission_name] = true;
-                       }
-
-                       // If the db exists, we need ALTER ANY USER privs on it to make a new user
-                       if ( !$dbPrivs['ALTER ANY USER'] ) {
-                               return false;
-                       }
-
-                       if ( $this->schemaExists( $this->getVar( 'wgDBmwschema' ) ) ) {
-                               // wgDBmwschema is validated to only contain alphanumeric + underscore, so this is safe
-                               $res = $conn->query( "SELECT permission_name FROM sys.fn_my_permissions( "
-                                       . "'{$this->getVar( 'wgDBmwschema' )}', 'SCHEMA' )" );
-
-                               foreach ( $res as $row ) {
-                                       $schemaPrivs[$row->permission_name] = true;
-                               }
-                       }
-               }
-
-               // Now check all the grants we'll need to be doing to see if we can
-               foreach ( $this->webUserPrivs as $permission ) {
-                       if ( ( isset( $schemaPrivs[$permission] ) && $schemaPrivs[$permission] )
-                                       || ( isset( $dbPrivs[$implied[$permission][0]] )
-                                               && $dbPrivs[$implied[$permission][0]] )
-                                       || ( isset( $serverPrivs[$implied[$permission][1]] )
-                                               && $serverPrivs[$implied[$permission][1]] )
-                       ) {
-                               unset( $grantOptions[$permission] );
-                       }
-               }
-
-               if ( count( $grantOptions ) ) {
-                       // Can't grant everything
-                       return false;
-               }
-
-               return true;
-       }
-
-       /**
-        * @return string
-        */
-       public function getSettingsForm() {
-               if ( $this->canCreateAccounts() ) {
-                       $noCreateMsg = false;
-               } else {
-                       $noCreateMsg = 'config-db-web-no-create-privs';
-               }
-
-               $wrapperStyle = $this->getVar( '_SameAccount' ) ? 'display: none' : '';
-               $displayStyle = $this->getVar( '_WebWindowsAuthentication' ) == 'windowsauth'
-                       ? 'display: none'
-                       : '';
-               $s = Html::openElement( 'fieldset' ) .
-                       Html::element( 'legend', [], wfMessage( 'config-db-web-account' )->text() ) .
-                       $this->getCheckBox(
-                               '_SameAccount', 'config-db-web-account-same',
-                               [ 'class' => 'hideShowRadio', 'rel' => 'dbOtherAccount' ]
-                       ) .
-                       Html::openElement( 'div', [ 'id' => 'dbOtherAccount', 'style' => $wrapperStyle ] ) .
-                       $this->getRadioSet( [
-                               'var' => '_WebWindowsAuthentication',
-                               'label' => 'config-mssql-auth',
-                               'itemLabelPrefix' => 'config-mssql-',
-                               'values' => [ 'sqlauth', 'windowsauth' ],
-                               'itemAttribs' => [
-                                       'sqlauth' => [
-                                               'class' => 'showHideRadio',
-                                               'rel' => 'dbCredentialBox',
-                                       ],
-                                       'windowsauth' => [
-                                               'class' => 'hideShowRadio',
-                                               'rel' => 'dbCredentialBox',
-                                       ]
-                               ],
-                               'help' => $this->parent->getHelpBox( 'config-mssql-web-auth' )
-                       ] ) .
-                       Html::openElement( 'div', [ 'id' => 'dbCredentialBox', 'style' => $displayStyle ] ) .
-                       $this->getTextBox( 'wgDBuser', 'config-db-username' ) .
-                       $this->getPasswordBox( 'wgDBpassword', 'config-db-password' ) .
-                       Html::closeElement( 'div' );
-
-               if ( $noCreateMsg ) {
-                       $s .= $this->parent->getWarningBox( wfMessage( $noCreateMsg )->plain() );
-               } else {
-                       $s .= $this->getCheckBox( '_CreateDBAccount', 'config-db-web-create' );
-               }
-
-               $s .= Html::closeElement( 'div' ) . Html::closeElement( 'fieldset' );
-
-               return $s;
-       }
-
-       /**
-        * @return Status
-        */
-       public function submitSettingsForm() {
-               $this->setVarsFromRequest( [
-                               'wgDBuser',
-                               'wgDBpassword',
-                               '_SameAccount',
-                               '_CreateDBAccount',
-                               '_WebWindowsAuthentication'
-               ] );
-
-               if ( $this->getVar( '_SameAccount' ) ) {
-                       $this->setVar( '_WebWindowsAuthentication', $this->getVar( '_InstallWindowsAuthentication' ) );
-                       $this->setVar( 'wgDBuser', $this->getVar( '_InstallUser' ) );
-                       $this->setVar( 'wgDBpassword', $this->getVar( '_InstallPassword' ) );
-               }
-
-               if ( $this->getVar( '_WebWindowsAuthentication' ) == 'windowsauth' ) {
-                       $this->setVar( 'wgDBuser', '' );
-                       $this->setVar( 'wgDBpassword', '' );
-                       $this->setVar( 'wgDBWindowsAuthentication', true );
-               } else {
-                       $this->setVar( 'wgDBWindowsAuthentication', false );
-               }
-
-               if ( $this->getVar( '_CreateDBAccount' )
-                       && $this->getVar( '_WebWindowsAuthentication' ) == 'sqlauth'
-                       && strval( $this->getVar( 'wgDBpassword' ) ) == ''
-               ) {
-                       return Status::newFatal( 'config-db-password-empty', $this->getVar( 'wgDBuser' ) );
-               }
-
-               // Validate the create checkbox
-               $canCreate = $this->canCreateAccounts();
-               if ( !$canCreate ) {
-                       $this->setVar( '_CreateDBAccount', false );
-                       $create = false;
-               } else {
-                       $create = $this->getVar( '_CreateDBAccount' );
-               }
-
-               if ( !$create ) {
-                       // Test the web account
-                       $user = $this->getVar( 'wgDBuser' );
-                       $password = $this->getVar( 'wgDBpassword' );
-
-                       if ( $this->getVar( '_WebWindowsAuthentication' ) == 'windowsauth' ) {
-                               $user = 'windowsauth';
-                               $password = 'windowsauth';
-                       }
-
-                       try {
-                               Database::factory( 'mssql', [
-                                       'host' => $this->getVar( 'wgDBserver' ),
-                                       'user' => $user,
-                                       'password' => $password,
-                                       'dbname' => false,
-                                       'flags' => 0,
-                                       'tablePrefix' => $this->getVar( 'wgDBprefix' ),
-                                       'schema' => $this->getVar( 'wgDBmwschema' ),
-                               ] );
-                       } catch ( DBConnectionError $e ) {
-                               return Status::newFatal( 'config-connection-error', $e->getMessage() );
-                       }
-               }
-
-               return Status::newGood();
-       }
-
-       public function preInstall() {
-               # Add our user callback to installSteps, right before the tables are created.
-               $callback = [
-                       'name' => 'user',
-                       'callback' => [ $this, 'setupUser' ],
-               ];
-               $this->parent->addInstallStep( $callback, 'tables' );
-       }
-
-       /**
-        * @return Status
-        */
-       public function setupDatabase() {
-               $status = $this->getConnection();
-               if ( !$status->isOK() ) {
-                       return $status;
-               }
-               /** @var Database $conn */
-               $conn = $status->value;
-               $dbName = $this->getVar( 'wgDBname' );
-               $schemaName = $this->getVar( 'wgDBmwschema' );
-               if ( !$this->databaseExists( $dbName ) ) {
-                       $conn->query(
-                               "CREATE DATABASE " . $conn->addIdentifierQuotes( $dbName ),
-                               __METHOD__
-                       );
-               }
-               $conn->selectDB( $dbName );
-               if ( !$this->schemaExists( $schemaName ) ) {
-                       $conn->query(
-                               "CREATE SCHEMA " . $conn->addIdentifierQuotes( $schemaName ),
-                               __METHOD__
-                       );
-               }
-               if ( !$this->catalogExists( $schemaName ) ) {
-                       $conn->query(
-                               "CREATE FULLTEXT CATALOG " . $conn->addIdentifierQuotes( $schemaName ),
-                               __METHOD__
-                       );
-               }
-               $this->setupSchemaVars();
-
-               return $status;
-       }
-
-       /**
-        * @return Status
-        */
-       public function setupUser() {
-               $dbUser = $this->getVar( 'wgDBuser' );
-               if ( $dbUser == $this->getVar( '_InstallUser' )
-                               || ( $this->getVar( '_InstallWindowsAuthentication' ) == 'windowsauth'
-                                       && $this->getVar( '_WebWindowsAuthentication' ) == 'windowsauth' ) ) {
-                       return Status::newGood();
-               }
-               $status = $this->getConnection();
-               if ( !$status->isOK() ) {
-                       return $status;
-               }
-
-               $this->setupSchemaVars();
-               $dbName = $this->getVar( 'wgDBname' );
-               $this->db->selectDB( $dbName );
-               $password = $this->getVar( 'wgDBpassword' );
-               $schemaName = $this->getVar( 'wgDBmwschema' );
-
-               if ( $this->getVar( '_WebWindowsAuthentication' ) == 'windowsauth' ) {
-                       $dbUser = 'windowsauth';
-                       $password = 'windowsauth';
-               }
-
-               if ( $this->getVar( '_CreateDBAccount' ) ) {
-                       $tryToCreate = true;
-               } else {
-                       $tryToCreate = false;
-               }
-
-               $escUser = $this->db->addIdentifierQuotes( $dbUser );
-               $escDb = $this->db->addIdentifierQuotes( $dbName );
-               $escSchema = $this->db->addIdentifierQuotes( $schemaName );
-               $grantableNames = [];
-               if ( $tryToCreate ) {
-                       $escPass = $this->db->addQuotes( $password );
-
-                       if ( !$this->loginExists( $dbUser ) ) {
-                               try {
-                                       $this->db->begin();
-                                       $this->db->selectDB( 'master' );
-                                       $logintype = $this->getVar( '_WebWindowsAuthentication' ) == 'windowsauth'
-                                               ? 'FROM WINDOWS'
-                                               : "WITH PASSWORD = $escPass";
-                                       $this->db->query( "CREATE LOGIN $escUser $logintype" );
-                                       $this->db->selectDB( $dbName );
-                                       $this->db->query( "CREATE USER $escUser FOR LOGIN $escUser WITH DEFAULT_SCHEMA = $escSchema" );
-                                       $this->db->commit();
-                                       $grantableNames[] = $dbUser;
-                               } catch ( DBQueryError $dqe ) {
-                                       $this->db->rollback();
-                                       $status->warning( 'config-install-user-create-failed', $dbUser, $dqe->getMessage() );
-                               }
-                       } elseif ( !$this->userExists( $dbUser ) ) {
-                               try {
-                                       $this->db->begin();
-                                       $this->db->selectDB( $dbName );
-                                       $this->db->query( "CREATE USER $escUser FOR LOGIN $escUser WITH DEFAULT_SCHEMA = $escSchema" );
-                                       $this->db->commit();
-                                       $grantableNames[] = $dbUser;
-                               } catch ( DBQueryError $dqe ) {
-                                       $this->db->rollback();
-                                       $status->warning( 'config-install-user-create-failed', $dbUser, $dqe->getMessage() );
-                               }
-                       } else {
-                               $status->warning( 'config-install-user-alreadyexists', $dbUser );
-                               $grantableNames[] = $dbUser;
-                       }
-               }
-
-               // Try to grant to all the users we know exist or we were able to create
-               $this->db->selectDB( $dbName );
-               if ( $grantableNames ) {
-                       try {
-                               // First try to grant full permissions
-                               $fullPrivArr = [
-                                       'BACKUP DATABASE', 'BACKUP LOG', 'CREATE FUNCTION', 'CREATE PROCEDURE',
-                                       'CREATE TABLE', 'CREATE VIEW', 'CREATE FULLTEXT CATALOG', 'SHOWPLAN'
-                               ];
-                               $fullPrivList = implode( ', ', $fullPrivArr );
-                               $this->db->begin();
-                               $this->db->query( "GRANT $fullPrivList ON DATABASE :: $escDb TO $escUser", __METHOD__ );
-                               $this->db->query( "GRANT CONTROL ON SCHEMA :: $escSchema TO $escUser", __METHOD__ );
-                               $this->db->commit();
-                       } catch ( DBQueryError $dqe ) {
-                               // If that fails, try to grant the limited subset specified in $this->webUserPrivs
-                               try {
-                                       $privList = implode( ', ', $this->webUserPrivs );
-                                       $this->db->rollback();
-                                       $this->db->begin();
-                                       $this->db->query( "GRANT $privList ON SCHEMA :: $escSchema TO $escUser", __METHOD__ );
-                                       $this->db->commit();
-                               } catch ( DBQueryError $dqe ) {
-                                       $this->db->rollback();
-                                       $status->fatal( 'config-install-user-grant-failed', $dbUser, $dqe->getMessage() );
-                               }
-                               // Also try to grant SHOWPLAN on the db, but don't fail if we can't
-                               // (just makes a couple things in mediawiki run slower since
-                               // we have to run SELECT COUNT(*) instead of getting the query plan)
-                               try {
-                                       $this->db->query( "GRANT SHOWPLAN ON DATABASE :: $escDb TO $escUser", __METHOD__ );
-                               } catch ( DBQueryError $dqe ) {
-                               }
-                       }
-               }
-
-               return $status;
-       }
-
-       public function createTables() {
-               $status = parent::createTables();
-
-               // Do last-minute stuff like fulltext indexes (since they can't be inside a transaction)
-               if ( $status->isOK() ) {
-                       $searchindex = $this->db->tableName( 'searchindex' );
-                       $schema = $this->db->addIdentifierQuotes( $this->getVar( 'wgDBmwschema' ) );
-                       try {
-                               $this->db->query( "CREATE FULLTEXT INDEX ON $searchindex (si_title, si_text) "
-                                       . "KEY INDEX si_page ON $schema" );
-                       } catch ( DBQueryError $dqe ) {
-                               $status->fatal( 'config-install-tables-failed', $dqe->getMessage() );
-                       }
-               }
-
-               return $status;
-       }
-
-       public function getGlobalDefaults() {
-               // The default $wgDBmwschema is null, which breaks Postgres and other DBMSes that require
-               // the use of a schema, so we need to set it here
-               return array_merge( parent::getGlobalDefaults(), [
-                       'wgDBmwschema' => 'mediawiki',
-               ] );
-       }
-
-       /**
-        * Try to see if the login exists
-        * @param string $user Username to check
-        * @return bool
-        */
-       private function loginExists( $user ) {
-               $res = $this->db->selectField( 'sys.sql_logins', 1, [ 'name' => $user ] );
-               return (bool)$res;
-       }
-
-       /**
-        * Try to see if the user account exists
-        * We assume we already have the appropriate database selected
-        * @param string $user Username to check
-        * @return bool
-        */
-       private function userExists( $user ) {
-               $res = $this->db->selectField( 'sys.sysusers', 1, [ 'name' => $user ] );
-               return (bool)$res;
-       }
-
-       /**
-        * Try to see if a given database exists
-        * @param string $dbName Database name to check
-        * @return bool
-        */
-       private function databaseExists( $dbName ) {
-               $res = $this->db->selectField( 'sys.databases', 1, [ 'name' => $dbName ] );
-               return (bool)$res;
-       }
-
-       /**
-        * Try to see if a given schema exists
-        * We assume we already have the appropriate database selected
-        * @param string $schemaName Schema name to check
-        * @return bool
-        */
-       private function schemaExists( $schemaName ) {
-               $res = $this->db->selectField( 'sys.schemas', 1, [ 'name' => $schemaName ] );
-               return (bool)$res;
-       }
-
-       /**
-        * Try to see if a given fulltext catalog exists
-        * We assume we already have the appropriate database selected
-        * @param string $catalogName Catalog name to check
-        * @return bool
-        */
-       private function catalogExists( $catalogName ) {
-               $res = $this->db->selectField( 'sys.fulltext_catalogs', 1, [ 'name' => $catalogName ] );
-               return (bool)$res;
-       }
-
-       /**
-        * Get variables to substitute into tables.sql and the SQL patch files.
-        *
-        * @return array
-        */
-       public function getSchemaVars() {
-               return [
-                       'wgDBname' => $this->getVar( 'wgDBname' ),
-                       'wgDBmwschema' => $this->getVar( 'wgDBmwschema' ),
-                       'wgDBuser' => $this->getVar( 'wgDBuser' ),
-                       'wgDBpassword' => $this->getVar( 'wgDBpassword' ),
-               ];
-       }
-
-       public function getLocalSettings() {
-               $schema = LocalSettingsGenerator::escapePhpString( $this->getVar( 'wgDBmwschema' ) );
-               $prefix = LocalSettingsGenerator::escapePhpString( $this->getVar( 'wgDBprefix' ) );
-               $windowsauth = $this->getVar( 'wgDBWindowsAuthentication' ) ? 'true' : 'false';
-
-               return "# MSSQL specific settings
-\$wgDBWindowsAuthentication = {$windowsauth};
-\$wgDBmwschema = \"{$schema}\";
-\$wgDBprefix = \"{$prefix}\";";
-       }
-}
diff --git a/includes/installer/MssqlUpdater.php b/includes/installer/MssqlUpdater.php
deleted file mode 100644 (file)
index b8dc5ff..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-<?php
-/**
- * Microsoft SQL Server-specific installer.
- *
- * 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 Deployment
- */
-
-use Wikimedia\Rdbms\DatabaseMssql;
-
-/**
- * Class for setting up the MediaWiki database using Microsoft SQL Server.
- *
- * @ingroup Deployment
- * @since 1.23
- */
-
-class MssqlUpdater extends DatabaseUpdater {
-
-       /**
-        * @var DatabaseMssql
-        */
-       protected $db;
-
-       protected function getCoreUpdateList() {
-               return [
-                       // 1.23
-                       [ 'addField', 'mwuser', 'user_password_expires', 'patch-user_password_expires.sql' ],
-
-                       // 1.24
-                       [ 'addField', 'page', 'page_lang', 'patch-page_page_lang.sql' ],
-
-                       // 1.25
-                       [ 'dropTable', 'hitcounter' ],
-                       [ 'dropField', 'site_stats', 'ss_total_views', 'patch-drop-ss_total_views.sql' ],
-                       [ 'dropField', 'page', 'page_counter', 'patch-drop-page_counter.sql' ],
-                       // scripts were updated in 1.27 due to SQL errors; retaining old updatekeys so that people
-                       // updating from 1.23->1.25->1.27 do not execute these scripts twice even though the
-                       // updatekeys no longer make sense as they are.
-                       [ 'updateSchema', 'categorylinks', 'cl_type-category_types-ck',
-                               'patch-categorylinks-constraints.sql' ],
-                       [ 'updateSchema', 'filearchive', 'fa_major_mime-major_mime-ck',
-                               'patch-filearchive-constraints.sql' ],
-                       [ 'updateSchema', 'oldimage', 'oi_major_mime-major_mime-ck',
-                               'patch-oldimage-constraints.sql' ],
-                       [ 'updateSchema', 'image', 'img_major_mime-major_mime-ck', 'patch-image-constraints.sql' ],
-                       [ 'updateSchema', 'uploadstash', 'us_media_type-media_type-ck',
-                               'patch-uploadstash-constraints.sql' ],
-
-                       [ 'modifyField', 'image', 'img_major_mime',
-                               'patch-img_major_mime-chemical.sql' ],
-                       [ 'modifyField', 'oldimage', 'oi_major_mime',
-                               'patch-oi_major_mime-chemical.sql' ],
-                       [ 'modifyField', 'filearchive', 'fa_major_mime',
-                               'patch-fa_major_mime-chemical.sql' ],
-
-                       // 1.27
-                       [ 'dropTable', 'msg_resource_links' ],
-                       [ 'dropTable', 'msg_resource' ],
-                       [ 'addField', 'watchlist', 'wl_id', 'patch-watchlist-wl_id.sql' ],
-                       [ 'dropField', 'mwuser', 'user_options', 'patch-drop-user_options.sql' ],
-                       [ 'addTable', 'bot_passwords', 'patch-bot_passwords.sql' ],
-                       [ 'addField', 'pagelinks', 'pl_from_namespace', 'patch-pl_from_namespace.sql' ],
-                       [ 'addField', 'templatelinks', 'tl_from_namespace', 'patch-tl_from_namespace.sql' ],
-                       [ 'addField', 'imagelinks', 'il_from_namespace', 'patch-il_from_namespace.sql' ],
-                       [ 'dropIndex', 'categorylinks', 'cl_collation', 'patch-kill-cl_collation_index.sql' ],
-                       [ 'addIndex', 'categorylinks', 'cl_collation_ext',
-                               'patch-add-cl_collation_ext_index.sql' ],
-                       [ 'dropField', 'recentchanges', 'rc_cur_time', 'patch-drop-rc_cur_time.sql' ],
-                       [ 'addField', 'page_props', 'pp_sortkey', 'patch-pp_sortkey.sql' ],
-                       [ 'updateSchema', 'oldimage', 'oldimage varchar', 'patch-oldimage-schema.sql' ],
-                       [ 'updateSchema', 'filearchive', 'filearchive varchar', 'patch-filearchive-schema.sql' ],
-                       [ 'updateSchema', 'image', 'image varchar', 'patch-image-schema.sql' ],
-                       [ 'updateSchema', 'recentchanges', 'recentchanges-drop-fks',
-                               'patch-recentchanges-drop-fks.sql' ],
-                       [ 'updateSchema', 'logging', 'logging-drop-fks', 'patch-logging-drop-fks.sql' ],
-                       [ 'updateSchema', 'archive', 'archive-drop-fks', 'patch-archive-drop-fks.sql' ],
-
-                       // 1.28
-                       [ 'addIndex', 'recentchanges', 'rc_name_type_patrolled_timestamp',
-                               'patch-add-rc_name_type_patrolled_timestamp_index.sql' ],
-                       [ 'addField', 'change_tag', 'ct_id', 'patch-change_tag-ct_id.sql' ],
-
-                       // 1.29
-                       [ 'addField', 'externallinks', 'el_index_60', 'patch-externallinks-el_index_60.sql' ],
-                       [ 'dropIndex', 'oldimage', 'oi_name_archive_name',
-                               'patch-alter-table-oldimage.sql' ],
-
-                       // 1.30
-                       [ 'modifyField', 'image', 'img_media_type', 'patch-add-3d.sql' ],
-                       [ 'addIndex', 'site_stats', 'PRIMARY', 'patch-site_stats-pk.sql' ],
-
-                       // Should have been in 1.30
-                       [ 'addTable', 'comment', 'patch-comment-table.sql' ],
-                       // This field was added in 1.31, but is put here so it can be used by 'migrateComments'
-                       [ 'addField', 'image', 'img_description_id', 'patch-image-img_description_id.sql' ],
-                       // Should have been in 1.30
-                       [ 'migrateComments' ],
-
-                       // 1.31
-                       [ 'addTable', 'slot_roles', 'patch-slot_roles.sql' ],
-                       [ 'addTable', 'content_models', 'patch-content_models.sql' ],
-                       [ 'addTable', 'content', 'patch-content.sql' ],
-                       [ 'addTable', 'slots', 'patch-slots.sql' ],
-                       [ 'addField', 'slots', 'slot_origin', 'patch-slot-origin.sql' ],
-                       [ 'migrateArchiveText' ],
-                       [ 'addTable', 'actor', 'patch-actor-table.sql' ],
-                       [ 'migrateActors' ],
-                       [ 'modifyField', 'revision', 'rev_text_id', 'patch-rev_text_id-default.sql' ],
-                       [ 'modifyTable', 'site_stats', 'patch-site_stats-modify.sql' ],
-                       [ 'populateArchiveRevId' ],
-                       [ 'modifyField', 'recentchanges', 'rc_patrolled', 'patch-rc_patrolled_type.sql' ],
-                       [ 'addIndex', 'recentchanges', 'rc_namespace_title_timestamp',
-                               'patch-recentchanges-nttindex.sql' ],
-
-                       // 1.32
-                       [ 'addTable', 'change_tag_def', 'patch-change_tag_def.sql' ],
-                       [ 'populateExternallinksIndex60' ],
-                       [ 'modifyfield', 'externallinks', 'el_index_60',
-                               'patch-externallinks-el_index_60-drop-default.sql' ],
-                       [ 'runMaintenance', DeduplicateArchiveRevId::class, 'maintenance/deduplicateArchiveRevId.php' ],
-                       [ 'addField', 'change_tag', 'ct_tag_id', 'patch-change_tag-tag_id.sql' ],
-                       [ 'addIndex', 'archive', 'ar_revid_uniq', 'patch-archive-ar_rev_id-unique.sql' ],
-                       [ 'populateContentTables' ],
-                       [ 'addIndex', 'logging', 'log_type_action', 'patch-logging-log-type-action-index.sql' ],
-                       [ 'dropIndex', 'logging', 'type_action', 'patch-logging-drop-type-action-index.sql' ],
-                       [ 'addIndex', 'interwiki', 'PRIMARY', 'patch-interwiki-pk.sql' ],
-                       [ 'addIndex', 'protected_titles', 'PRIMARY', 'patch-protected_titles-pk.sql' ],
-                       [ 'addIndex', 'page_props', 'PRIMARY', 'patch-page_props-pk.sql' ],
-                       [ 'addIndex', 'site_identifiers', 'PRIMARY', 'patch-site_identifiers-pk.sql' ],
-                       [ 'addIndex', 'recentchanges', 'rc_this_oldid', 'patch-recentchanges-rc_this_oldid-index.sql' ],
-                       [ 'dropTable', 'transcache' ],
-                       [ 'runMaintenance', PopulateChangeTagDef::class, 'maintenance/populateChangeTagDef.php' ],
-                       [ 'addIndex', 'change_tag', 'change_tag_rc_tag_id',
-                               'patch-change_tag-change_tag_rc_tag_id.sql' ],
-                       [ 'addField', 'ipblocks', 'ipb_sitewide', 'patch-ipb_sitewide.sql' ],
-                       [ 'addTable', 'ipblocks_restrictions', 'patch-ipblocks_restrictions-table.sql' ],
-                       [ 'migrateImageCommentTemp' ],
-
-                       // 1.33
-                       [ 'dropField', 'change_tag', 'ct_tag', 'patch-drop-ct_tag.sql' ],
-                       [ 'dropTable', 'valid_tag' ],
-                       [ 'dropTable', 'tag_summary' ],
-                       [ 'dropField', 'protected_titles', 'pt_reason', 'patch-drop-comment-fields.sql' ],
-               ];
-       }
-
-       protected function applyPatch( $path, $isFullPath = false, $msg = null ) {
-               $prevScroll = $this->db->scrollableCursor( false );
-               $prevPrep = $this->db->prepareStatements( false );
-               parent::applyPatch( $path, $isFullPath, $msg );
-               $this->db->scrollableCursor( $prevScroll );
-               $this->db->prepareStatements( $prevPrep );
-               return true;
-       }
-
-       /**
-        * General schema update for a table that touches more than one field or requires
-        * destructive actions (such as dropping and recreating the table). NOTE: Usage of
-        * this function is highly discouraged, use it's successor DatabaseUpdater::modifyTable
-        * instead.
-        *
-        * @param string $table
-        * @param string $updatekey
-        * @param string $patch
-        * @param bool $fullpath
-        * @return bool
-        */
-       protected function updateSchema( $table, $updatekey, $patch, $fullpath = false ) {
-               if ( !$this->db->tableExists( $table, __METHOD__ ) ) {
-                       $this->output( "...$table table does not exist, skipping schema update patch.\n" );
-               } elseif ( $this->updateRowExists( $updatekey ) ) {
-                       $this->output( "...$table already had schema updated by $patch.\n" );
-               } else {
-                       $apply = $this->applyPatch( $patch, $fullpath, "Updating schema of table $table" );
-                       if ( $apply ) {
-                               $this->insertUpdateRow( $updatekey );
-                       }
-                       return $apply;
-               }
-
-               return true;
-       }
-}
diff --git a/includes/installer/OracleInstaller.php b/includes/installer/OracleInstaller.php
deleted file mode 100644 (file)
index 1a4e0f7..0000000
+++ /dev/null
@@ -1,340 +0,0 @@
-<?php
-/**
- * Oracle-specific installer.
- *
- * 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 Deployment
- */
-
-use Wikimedia\Rdbms\Database;
-use Wikimedia\Rdbms\DBConnectionError;
-
-/**
- * Class for setting up the MediaWiki database using Oracle.
- *
- * @ingroup Deployment
- * @since 1.17
- */
-class OracleInstaller extends DatabaseInstaller {
-
-       protected $globalNames = [
-               'wgDBserver',
-               'wgDBname',
-               'wgDBuser',
-               'wgDBpassword',
-               'wgDBprefix',
-       ];
-
-       protected $internalDefaults = [
-               '_OracleDefTS' => 'USERS',
-               '_OracleTempTS' => 'TEMP',
-               '_InstallUser' => 'SYSTEM',
-       ];
-
-       public static $minimumVersion = '9.0.1'; // 9iR1
-       protected static $notMinimumVersionMessage = 'config-oracle-old';
-
-       protected $connError = null;
-
-       public function getName() {
-               return 'oracle';
-       }
-
-       public function isCompiled() {
-               return self::checkExtension( 'oci8' );
-       }
-
-       public function getConnectForm() {
-               if ( $this->getVar( 'wgDBserver' ) == 'localhost' ) {
-                       $this->parent->setVar( 'wgDBserver', '' );
-               }
-
-               return $this->getTextBox(
-                       'wgDBserver',
-                       'config-db-host-oracle',
-                       [],
-                       $this->parent->getHelpBox( 'config-db-host-oracle-help' )
-               ) .
-                       Html::openElement( 'fieldset' ) .
-                       Html::element( 'legend', [], wfMessage( 'config-db-wiki-settings' )->text() ) .
-                       $this->getTextBox( 'wgDBprefix', 'config-db-prefix' ) .
-                       $this->getTextBox( '_OracleDefTS', 'config-oracle-def-ts' ) .
-                       $this->getTextBox(
-                               '_OracleTempTS',
-                               'config-oracle-temp-ts',
-                               [],
-                               $this->parent->getHelpBox( 'config-db-oracle-help' )
-                       ) .
-                       Html::closeElement( 'fieldset' ) .
-                       $this->parent->getWarningBox( wfMessage( 'config-db-account-oracle-warn' )->text() ) .
-                       $this->getInstallUserBox() .
-                       $this->getWebUserBox();
-       }
-
-       public function submitInstallUserBox() {
-               parent::submitInstallUserBox();
-               $this->parent->setVar( '_InstallDBname', $this->getVar( '_InstallUser' ) );
-
-               return Status::newGood();
-       }
-
-       public function submitConnectForm() {
-               // Get variables from the request
-               $newValues = $this->setVarsFromRequest( [
-                       'wgDBserver',
-                       'wgDBprefix',
-                       'wgDBuser',
-                       'wgDBpassword'
-               ] );
-               $this->parent->setVar( 'wgDBname', $this->getVar( 'wgDBuser' ) );
-
-               // Validate them
-               $status = Status::newGood();
-               if ( !strlen( $newValues['wgDBserver'] ) ) {
-                       $status->fatal( 'config-missing-db-server-oracle' );
-               } elseif ( !self::checkConnectStringFormat( $newValues['wgDBserver'] ) ) {
-                       $status->fatal( 'config-invalid-db-server-oracle', $newValues['wgDBserver'] );
-               }
-               if ( !preg_match( '/^[a-zA-Z0-9_]*$/', $newValues['wgDBprefix'] ) ) {
-                       $status->fatal( 'config-invalid-schema', $newValues['wgDBprefix'] );
-               }
-               if ( !$status->isOK() ) {
-                       return $status;
-               }
-
-               // Submit user box
-               $status = $this->submitInstallUserBox();
-               if ( !$status->isOK() ) {
-                       return $status;
-               }
-
-               // Try to connect trough multiple scenarios
-               // Scenario 1: Install with a manually created account
-               $status = $this->getConnection();
-               if ( !$status->isOK() ) {
-                       if ( $this->connError == 28009 ) {
-                               // _InstallUser seems to be a SYSDBA
-                               // Scenario 2: Create user with SYSDBA and install with new user
-                               $status = $this->submitWebUserBox();
-                               if ( !$status->isOK() ) {
-                                       return $status;
-                               }
-                               $status = $this->openSYSDBAConnection();
-                               if ( !$status->isOK() ) {
-                                       return $status;
-                               }
-                               if ( !$this->getVar( '_CreateDBAccount' ) ) {
-                                       $status->fatal( 'config-db-sys-create-oracle' );
-                               }
-                       } else {
-                               return $status;
-                       }
-               } else {
-                       // check for web user credentials
-                       // Scenario 3: Install with a priviliged user but use a restricted user
-                       $statusIS3 = $this->submitWebUserBox();
-                       if ( !$statusIS3->isOK() ) {
-                               return $statusIS3;
-                       }
-               }
-
-               /**
-                * @var Database $conn
-                */
-               $conn = $status->value;
-
-               // Check version
-               $status->merge( static::meetsMinimumRequirement( $conn->getServerVersion() ) );
-
-               return $status;
-       }
-
-       public function openConnection() {
-               return $this->doOpenConnection();
-       }
-
-       public function openSYSDBAConnection() {
-               return $this->doOpenConnection( DatabaseOracle::DBO_SYSDBA );
-       }
-
-       /**
-        * @param int $flags
-        * @return Status Status with DatabaseOracle or null as the value
-        */
-       private function doOpenConnection( $flags = 0 ) {
-               $status = Status::newGood();
-               try {
-                       $db = Database::factory(
-                               'oracle',
-                               [
-                                       'host' => $this->getVar( 'wgDBserver' ),
-                                       'user' => $this->getVar( '_InstallUser' ),
-                                       'password' => $this->getVar( '_InstallPassword' ),
-                                       'dbname' => $this->getVar( '_InstallDBname' ),
-                                       'tablePrefix' => $this->getVar( 'wgDBprefix' ),
-                                       'flags' => $flags
-                               ]
-                       );
-                       $status->value = $db;
-               } catch ( DBConnectionError $e ) {
-                       $this->connError = $e->db->lastErrno();
-                       $status->fatal( 'config-connection-error', $e->getMessage() );
-               }
-
-               return $status;
-       }
-
-       public function needsUpgrade() {
-               $tempDBname = $this->getVar( 'wgDBname' );
-               $this->parent->setVar( 'wgDBname', $this->getVar( 'wgDBuser' ) );
-               $retVal = parent::needsUpgrade();
-               $this->parent->setVar( 'wgDBname', $tempDBname );
-
-               return $retVal;
-       }
-
-       public function preInstall() {
-               # Add our user callback to installSteps, right before the tables are created.
-               $callback = [
-                       'name' => 'user',
-                       'callback' => [ $this, 'setupUser' ]
-               ];
-               $this->parent->addInstallStep( $callback, 'database' );
-       }
-
-       public function setupDatabase() {
-               $status = Status::newGood();
-
-               return $status;
-       }
-
-       public function setupUser() {
-               global $IP;
-
-               if ( !$this->getVar( '_CreateDBAccount' ) ) {
-                       return Status::newGood();
-               }
-
-               // normaly only SYSDBA users can create accounts
-               $status = $this->openSYSDBAConnection();
-               if ( !$status->isOK() ) {
-                       if ( $this->connError == 1031 ) {
-                               // insufficient  privileges (looks like a normal user)
-                               $status = $this->openConnection();
-                               if ( !$status->isOK() ) {
-                                       return $status;
-                               }
-                       } else {
-                               return $status;
-                       }
-               }
-
-               $this->db = $status->value;
-               $this->setupSchemaVars();
-
-               if ( !$this->db->selectDB( $this->getVar( 'wgDBuser' ) ) ) {
-                       $this->db->setFlag( DBO_DDLMODE );
-                       $error = $this->db->sourceFile( "$IP/maintenance/oracle/user.sql" );
-                       if ( $error !== true || !$this->db->selectDB( $this->getVar( 'wgDBuser' ) ) ) {
-                               $status->fatal( 'config-install-user-failed', $this->getVar( 'wgDBuser' ), $error );
-                       }
-               } elseif ( $this->db->getFlag( DBO_SYSDBA ) ) {
-                       $status->fatal( 'config-db-sys-user-exists-oracle', $this->getVar( 'wgDBuser' ) );
-               }
-
-               if ( $status->isOK() ) {
-                       // user created or already existing, switching back to a normal connection
-                       // as the new user has all needed privileges to setup the rest of the schema
-                       // i will be using that user as _InstallUser from this point on
-                       $this->db->close();
-                       $this->db = false;
-                       $this->parent->setVar( '_InstallUser', $this->getVar( 'wgDBuser' ) );
-                       $this->parent->setVar( '_InstallPassword', $this->getVar( 'wgDBpassword' ) );
-                       $this->parent->setVar( '_InstallDBname', $this->getVar( 'wgDBuser' ) );
-                       $status = $this->getConnection();
-               }
-
-               return $status;
-       }
-
-       /**
-        * Overload: after this action field info table has to be rebuilt
-        * @return Status
-        */
-       public function createTables() {
-               $this->setupSchemaVars();
-               $this->db->setFlag( DBO_DDLMODE );
-               $this->parent->setVar( 'wgDBname', $this->getVar( 'wgDBuser' ) );
-               $status = parent::createTables();
-               $this->db->clearFlag( DBO_DDLMODE );
-
-               $this->db->query( 'BEGIN fill_wiki_info; END;' );
-
-               return $status;
-       }
-
-       public function getSchemaVars() {
-               $varNames = [
-                       # These variables are used by maintenance/oracle/user.sql
-                       '_OracleDefTS',
-                       '_OracleTempTS',
-                       'wgDBuser',
-                       'wgDBpassword',
-
-                       # These are used by tables.sql
-                       'wgDBprefix',
-               ];
-               $vars = [];
-               foreach ( $varNames as $name ) {
-                       $vars[$name] = $this->getVar( $name );
-               }
-
-               return $vars;
-       }
-
-       public function getLocalSettings() {
-               $prefix = $this->getVar( 'wgDBprefix' );
-
-               return "# Oracle specific settings
-\$wgDBprefix = \"{$prefix}\";
-";
-       }
-
-       /**
-        * Function checks the format of Oracle connect string
-        * The actual validity of the string is checked by attempting to connect
-        *
-        * Regex should be able to validate all connect string formats
-        * [//](host|tns_name)[:port][/service_name][:POOLED]
-        * http://www.orafaq.com/wiki/EZCONNECT
-        *
-        * @since 1.22
-        *
-        * @param string $connect_string
-        *
-        * @return bool Whether the connection string is valid.
-        */
-       public static function checkConnectStringFormat( $connect_string ) {
-               // phpcs:disable Generic.Files.LineLength
-               // @todo Very long regular expression. Make more readable?
-               $isValid = preg_match( '/^[[:alpha:]][\w\-]*(?:\.[[:alpha:]][\w\-]*){0,2}$/', $connect_string ); // TNS name
-               $isValid |= preg_match( '/^(?:\/\/)?[\w\-\.]+(?::[\d]+)?(?:\/(?:[\w\-\.]+(?::(pooled|dedicated|shared))?)?(?:\/[\w\-\.]+)?)?$/', $connect_string ); // EZConnect
-               // phpcs:enable
-               return (bool)$isValid;
-       }
-}
diff --git a/includes/installer/OracleUpdater.php b/includes/installer/OracleUpdater.php
deleted file mode 100644 (file)
index d3a7b13..0000000
+++ /dev/null
@@ -1,374 +0,0 @@
-<?php
-/**
- * Oracle-specific updater.
- *
- * 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 Deployment
- */
-
-/**
- * Class for handling updates to Oracle databases.
- *
- * @ingroup Deployment
- * @since 1.17
- */
-class OracleUpdater extends DatabaseUpdater {
-
-       /**
-        * Handle to the database subclass
-        *
-        * @var DatabaseOracle
-        */
-       protected $db;
-
-       protected function getCoreUpdateList() {
-               return [
-                       [ 'disableContentHandlerUseDB' ],
-
-                       // 1.17
-                       [ 'doNamespaceDefaults' ],
-                       [ 'doFKRenameDeferr' ],
-                       [ 'doFunctions17' ],
-                       [ 'doSchemaUpgrade17' ],
-                       [ 'doInsertPage0' ],
-                       [ 'doRemoveNotNullEmptyDefaults' ],
-                       [ 'addTable', 'user_former_groups', 'patch-user_former_groups.sql' ],
-
-                       // 1.18
-                       [ 'addIndex', 'user', 'i02', 'patch-user_email_index.sql' ],
-                       [ 'modifyField', 'user_properties', 'up_property', 'patch-up_property.sql' ],
-                       [ 'addTable', 'uploadstash', 'patch-uploadstash.sql' ],
-                       [ 'doRecentchangesFK2Cascade' ],
-
-                       // 1.19
-                       [ 'addIndex', 'logging', 'i05', 'patch-logging_type_action_index.sql' ],
-                       [ 'addField', 'revision', 'rev_sha1', 'patch-rev_sha1_field.sql' ],
-                       [ 'addField', 'archive', 'ar_sha1', 'patch-ar_sha1_field.sql' ],
-                       [ 'doRemoveNotNullEmptyDefaults2' ],
-                       [ 'addIndex', 'page', 'i03', 'patch-page_redirect_namespace_len.sql' ],
-                       [ 'addField', 'uploadstash', 'us_chunk_inx', 'patch-us_chunk_inx_field.sql' ],
-                       [ 'addField', 'job', 'job_timestamp', 'patch-job_timestamp_field.sql' ],
-                       [ 'addIndex', 'job', 'i02', 'patch-job_timestamp_index.sql' ],
-                       [ 'doPageRestrictionsPKUKFix' ],
-
-                       // 1.20
-                       [ 'addIndex', 'ipblocks', 'i05', 'patch-ipblocks_i05_index.sql' ],
-                       [ 'addIndex', 'revision', 'i05', 'patch-revision_i05_index.sql' ],
-                       [ 'dropField', 'category', 'cat_hidden', 'patch-cat_hidden.sql' ],
-
-                       // 1.21
-                       [ 'addField', 'revision', 'rev_content_format',
-                               'patch-revision-rev_content_format.sql' ],
-                       [ 'addField', 'revision', 'rev_content_model',
-                               'patch-revision-rev_content_model.sql' ],
-                       [ 'addField', 'archive', 'ar_content_format', 'patch-archive-ar_content_format.sql' ],
-                       [ 'addField', 'archive', 'ar_content_model', 'patch-archive-ar_content_model.sql' ],
-                       [ 'addField', 'archive', 'ar_id', 'patch-archive-ar_id.sql' ],
-                       [ 'addField', 'externallinks', 'el_id', 'patch-externallinks-el_id.sql' ],
-                       [ 'addField', 'page', 'page_content_model', 'patch-page-page_content_model.sql' ],
-                       [ 'enableContentHandlerUseDB' ],
-                       [ 'dropField', 'site_stats', 'ss_admins', 'patch-ss_admins.sql' ],
-                       [ 'dropField', 'recentchanges', 'rc_moved_to_title', 'patch-rc_moved.sql' ],
-                       [ 'addTable', 'sites', 'patch-sites.sql' ],
-                       [ 'addField', 'filearchive', 'fa_sha1', 'patch-fa_sha1.sql' ],
-                       [ 'addField', 'job', 'job_token', 'patch-job_token.sql' ],
-                       [ 'addField', 'job', 'job_attempts', 'patch-job_attempts.sql' ],
-                       [ 'addField', 'uploadstash', 'us_props', 'patch-uploadstash-us_props.sql' ],
-                       [ 'modifyField', 'user_groups', 'ug_group', 'patch-ug_group-length-increase-255.sql' ],
-                       [ 'modifyField', 'user_former_groups', 'ufg_group',
-                               'patch-ufg_group-length-increase-255.sql' ],
-
-                       // 1.23
-                       [ 'addIndex', 'logging', 'i06', 'patch-logging_user_text_type_time_index.sql' ],
-                       [ 'addIndex', 'logging', 'i07', 'patch-logging_user_text_time_index.sql' ],
-                       [ 'addField', 'user', 'user_password_expires', 'patch-user_password_expire.sql' ],
-                       [ 'addField', 'page', 'page_links_updated', 'patch-page_links_updated.sql' ],
-                       [ 'addField', 'recentchanges', 'rc_source', 'patch-rc_source.sql' ],
-
-                       // 1.24
-                       [ 'addField', 'page', 'page_lang', 'patch-page-page_lang.sql' ],
-
-                       // 1.25
-                       [ 'dropTable', 'hitcounter' ],
-                       [ 'dropField', 'site_stats', 'ss_total_views', 'patch-drop-ss_total_views.sql' ],
-                       [ 'dropField', 'page', 'page_counter', 'patch-drop-page_counter.sql' ],
-
-                       // 1.27
-                       [ 'dropTable', 'msg_resource_links' ],
-                       [ 'dropTable', 'msg_resource' ],
-                       [ 'addField', 'watchlist', 'wl_id', 'patch-watchlist-wl_id.sql' ],
-
-                       // 1.28
-                       [ 'addIndex', 'recentchanges', 'rc_name_type_patrolled_timestamp',
-                               'patch-add-rc_name_type_patrolled_timestamp_index.sql' ],
-                       [ 'addField', 'change_tag', 'ct_id', 'patch-change_tag-ct_id.sql' ],
-
-                       // 1.29
-                       [ 'addField', 'externallinks', 'el_index_60', 'patch-externallinks-el_index_60.sql' ],
-                       [ 'addField', 'user_groups', 'ug_expiry', 'patch-user_groups-ug_expiry.sql' ],
-
-                       // 1.30
-                       [ 'doAutoIncrementTriggers' ],
-                       [ 'addIndex', 'site_stats', 'PRIMARY', 'patch-site_stats-pk.sql' ],
-
-                       // Should have been in 1.30
-                       [ 'addTable', 'comment', 'patch-comment-table.sql' ],
-                       // This field was added in 1.31, but is put here so it can be used by 'migrateComments'
-                       [ 'addField', 'image', 'img_description_id', 'patch-image-img_description_id.sql' ],
-                       // Should have been in 1.30
-                       [ 'migrateComments' ],
-
-                       // 1.31
-                       [ 'addTable', 'slots', 'patch-slots.sql' ],
-                       [ 'addField', 'slots', 'slot_origin', 'patch-slot-origin.sql' ],
-                       [ 'addTable', 'content', 'patch-content.sql' ],
-                       [ 'addTable', 'slot_roles', 'patch-slot_roles.sql' ],
-                       [ 'addTable', 'content_models', 'patch-content_models.sql' ],
-                       [ 'migrateArchiveText' ],
-                       [ 'addTable', 'actor', 'patch-actor-table.sql' ],
-                       [ 'migrateActors' ],
-                       [ 'modifyTable', 'site_stats', 'patch-site_stats-modify.sql' ],
-                       [ 'populateArchiveRevId' ],
-                       [ 'addIndex', 'recentchanges', 'rc_namespace_title_timestamp',
-                               'patch-recentchanges-nttindex.sql' ],
-
-                       // 1.32
-                       [ 'addTable', 'change_tag_def', 'patch-change_tag_def.sql' ],
-                       [ 'populateExternallinksIndex60' ],
-                       [ 'runMaintenance', DeduplicateArchiveRevId::class, 'maintenance/deduplicateArchiveRevId.php' ],
-                       [ 'addField', 'change_tag', 'ct_tag_id', 'patch-change_tag-tag_id.sql' ],
-                       [ 'addIndex', 'archive', 'ar_revid_uniq', 'patch-archive-ar_rev_id-unique.sql' ],
-                       [ 'populateContentTables' ],
-                       [ 'addIndex', 'recentchanges', 'rc_this_oldid', 'patch-recentchanges-rc_this_oldid-index.sql' ],
-                       [ 'dropTable', 'transcache' ],
-                       [ 'runMaintenance', PopulateChangeTagDef::class, 'maintenance/populateChangeTagDef.php' ],
-                       [ 'addIndex', 'change_tag', 'change_tag_i03',
-                               'patch-change_tag-change_tag_rc_tag_id.sql' ],
-                       [ 'addField', 'ipblocks', 'ipb_sitewide', 'patch-ipb_sitewide.sql' ],
-                       [ 'addTable', 'ipblocks_restrictions', 'patch-ipblocks_restrictions-table.sql' ],
-                       [ 'migrateImageCommentTemp' ],
-
-                       // 1.33
-                       [ 'dropField', 'change_tag', 'ct_tag', 'patch-drop-ct_tag.sql' ],
-                       [ 'dropTable', 'valid_tag' ],
-                       [ 'dropTable', 'tag_summary' ],
-                       [ 'dropField', 'protected_titles', 'pt_reason', 'patch-drop-comment-fields.sql' ],
-
-                       // KEEP THIS AT THE BOTTOM!!
-                       [ 'doRebuildDuplicateFunction' ],
-
-               ];
-       }
-
-       /**
-        * MySQL uses datatype defaults for NULL inserted into NOT NULL fields
-        * In namespace case that results into insert of 0 which is default namespace
-        * Oracle inserts NULL, so namespace fields should have a default value
-        */
-       protected function doNamespaceDefaults() {
-               $meta = $this->db->fieldInfo( 'page', 'page_namespace' );
-               if ( $meta->defaultValue() != null ) {
-                       return;
-               }
-
-               $this->applyPatch(
-                       'patch_namespace_defaults.sql',
-                       false,
-                       'Altering namespace fields with default value'
-               );
-       }
-
-       /**
-        * Uniform FK names + deferrable state
-        */
-       protected function doFKRenameDeferr() {
-               $meta = $this->db->query( '
-                       SELECT COUNT(*) cnt
-                       FROM user_constraints
-                       WHERE constraint_type = \'R\' AND deferrable = \'DEFERRABLE\''
-               );
-               $row = $meta->fetchRow();
-               if ( $row && $row['cnt'] > 0 ) {
-                       return;
-               }
-
-               $this->applyPatch( 'patch_fk_rename_deferred.sql', false, "Altering foreign keys ... " );
-       }
-
-       /**
-        * Recreate functions to 17 schema layout
-        */
-       protected function doFunctions17() {
-               $this->applyPatch( 'patch_create_17_functions.sql', false, "Recreating functions" );
-       }
-
-       /**
-        * Schema upgrade 16->17
-        * there are no incremental patches prior to this
-        */
-       protected function doSchemaUpgrade17() {
-               // check if iwlinks table exists which was added in 1.17
-               if ( $this->db->tableExists( 'iwlinks' ) ) {
-                       return;
-               }
-               $this->applyPatch( 'patch_16_17_schema_changes.sql', false, "Updating schema to 17" );
-       }
-
-       /**
-        * Insert page (page_id = 0) to prevent FK constraint violation
-        */
-       protected function doInsertPage0() {
-               $this->output( "Inserting page 0 if missing ... " );
-               $row = [
-                       'page_id' => 0,
-                       'page_namespace' => 0,
-                       'page_title' => ' ',
-                       'page_is_redirect' => 0,
-                       'page_is_new' => 0,
-                       'page_random' => 0,
-                       'page_touched' => $this->db->timestamp(),
-                       'page_latest' => 0,
-                       'page_len' => 0
-               ];
-               $this->db->insert( 'page', $row, 'OracleUpdater:doInserPage0', [ 'IGNORE' ] );
-               $this->output( "ok\n" );
-       }
-
-       /**
-        * Remove DEFAULT '' NOT NULL constraints from fields as '' is internally
-        * converted to NULL in Oracle
-        */
-       protected function doRemoveNotNullEmptyDefaults() {
-               $meta = $this->db->fieldInfo( 'categorylinks', 'cl_sortkey_prefix' );
-               if ( $meta->isNullable() ) {
-                       return;
-               }
-               $this->applyPatch(
-                       'patch_remove_not_null_empty_defs.sql',
-                       false,
-                       'Removing not null empty constraints'
-               );
-       }
-
-       protected function doRemoveNotNullEmptyDefaults2() {
-               $meta = $this->db->fieldInfo( 'ipblocks', 'ipb_by_text' );
-               if ( $meta->isNullable() ) {
-                       return;
-               }
-               $this->applyPatch(
-                       'patch_remove_not_null_empty_defs2.sql',
-                       false,
-                       'Removing not null empty constraints'
-               );
-       }
-
-       /**
-        * Removed forcing of invalid state on recentchanges_fk2.
-        * cascading taken in account in the deleting function
-        */
-       protected function doRecentchangesFK2Cascade() {
-               $meta = $this->db->query( 'SELECT 1 FROM all_constraints WHERE owner = \'' .
-                       strtoupper( $this->db->getDBname() ) .
-                       '\' AND constraint_name = \'' .
-                       $this->db->tablePrefix() .
-                       'RECENTCHANGES_FK2\' AND delete_rule = \'CASCADE\''
-               );
-               $row = $meta->fetchRow();
-               if ( $row ) {
-                       return;
-               }
-
-               $this->applyPatch( 'patch_recentchanges_fk2_cascade.sql', false, "Altering RECENTCHANGES_FK2" );
-       }
-
-       /**
-        * Fixed wrong PK, UK definition
-        */
-       protected function doPageRestrictionsPKUKFix() {
-               $this->output( "Altering PAGE_RESTRICTIONS keys ... " );
-
-               $meta = $this->db->query( 'SELECT column_name FROM all_cons_columns WHERE owner = \'' .
-                       strtoupper( $this->db->getDBname() ) .
-                       '\' AND constraint_name = \'' .
-                       $this->db->tablePrefix() .
-                       'PAGE_RESTRICTIONS_PK\' AND rownum = 1'
-               );
-               $row = $meta->fetchRow();
-               if ( $row['column_name'] == 'PR_ID' ) {
-                       $this->output( "seems to be up to date.\n" );
-
-                       return;
-               }
-
-               $this->applyPatch( 'patch-page_restrictions_pkuk_fix.sql', false );
-               $this->output( "ok\n" );
-       }
-
-       /**
-        * Add auto-increment triggers
-        */
-       protected function doAutoIncrementTriggers() {
-               $this->output( "Adding auto-increment triggers ... " );
-
-               $meta = $this->db->query( 'SELECT trigger_name FROM user_triggers WHERE table_owner = \'' .
-                       strtoupper( $this->db->getDBname() ) .
-                       '\' AND trigger_name = \'' .
-                       $this->db->tablePrefix() .
-                       'PAGE_DEFAULT_PAGE_ID\''
-               );
-               $row = $meta->fetchRow();
-               if ( $row['column_name'] ) {
-                       $this->output( "seems to be up to date.\n" );
-
-                       return;
-               }
-
-               $this->applyPatch( 'patch-auto_increment_triggers.sql', false );
-
-               $this->output( "ok\n" );
-       }
-
-       /**
-        * rebuilding of the function that duplicates tables for tests
-        */
-       protected function doRebuildDuplicateFunction() {
-               $this->applyPatch( 'patch_rebuild_dupfunc.sql', false, "Rebuilding duplicate function" );
-       }
-
-       /**
-        * Overload: after this action field info table has to be rebuilt
-        *
-        * @param array $what
-        */
-       public function doUpdates( array $what = [ 'core', 'extensions', 'purge', 'stats' ] ) {
-               parent::doUpdates( $what );
-
-               $this->db->query( 'BEGIN fill_wiki_info; END;' );
-       }
-
-       /**
-        * Overload: because of the DDL_MODE tablename escaping is a bit dodgy
-        */
-       public function purgeCache() {
-               # We can't guarantee that the user will be able to use TRUNCATE,
-               # but we know that DELETE is available to us
-               $this->output( "Purging caches..." );
-               $this->db->delete( '/*Q*/' . $this->db->tableName( 'objectcache' ), '*', __METHOD__ );
-               $this->output( "done.\n" );
-       }
-}
index cf91ccd..7c39ded 100644 (file)
@@ -356,7 +356,14 @@ EOT;
                global $IP;
 
                $module = DatabaseSqlite::getFulltextSearchModule();
-               $fts3tTable = $this->db->checkForEnabledSearch();
+               $searchIndexSql = (string)$this->db->selectField(
+                       $this->db->addIdentifierQuotes( 'sqlite_master' ),
+                       'sql',
+                       [ 'tbl_name' => $this->db->tableName( 'searchindex', 'raw' ) ],
+                       __METHOD__
+               );
+               $fts3tTable = ( stristr( $searchIndexSql, 'fts' ) !== false );
+
                if ( $fts3tTable && !$module ) {
                        $status->warning( 'config-sqlite-fts3-downgrade' );
                        $this->db->sourceFile( "$IP/maintenance/sqlite/archives/searchindex-no-fts.sql" );
index 7546bdf..3bacb76 100644 (file)
@@ -48,8 +48,7 @@ class WebInstallerDBConnect extends WebInstallerPage {
                $settings = '';
                $defaultType = $this->getVar( 'wgDBtype' );
 
-               // Messages: config-dbsupport-mysql, config-dbsupport-postgres, config-dbsupport-oracle,
-               // config-dbsupport-sqlite, config-dbsupport-mssql
+               // Messages: config-dbsupport-mysql, config-dbsupport-postgres, config-dbsupport-sqlite
                $dbSupport = '';
                foreach ( Installer::getDBTypes() as $type ) {
                        $dbSupport .= wfMessage( "config-dbsupport-$type" )->plain() . "\n";
@@ -78,8 +77,7 @@ class WebInstallerDBConnect extends WebInstallerPage {
                                ) .
                                "</li>\n";
 
-                       // Messages: config-header-mysql, config-header-postgres, config-header-oracle,
-                       // config-header-sqlite
+                       // Messages: config-header-mysql, config-header-postgres, config-header-sqlite
                        $settings .= Html::openElement(
                                        'div',
                                        [
index 6b2024f..26d2ea7 100644 (file)
        "config-restart": "Sí, reanicialu",
        "config-welcome": "=== Comprobaciones del entornu ===\nAgora van facese unes comprobaciones básiques para ver si l'entornu ye afayadizu pa la instalación de MediaWiki.\nAlcuérdese d'incluir esta información si necesita encontu pa completar la instalación.",
        "config-welcome-section-copyright": "=== Drechos d'autor y condiciones d'usu ===\n\n$1\n\nEsti programa ye software llibre; puedes redistribuilu y/o camudalu baxo les condiciones de la llicencia pública xeneral GNU tal como la publica la Free Software Foundation; versión 2 o (como prefieras) cualquier versión posterior.\n\nEsti programa distribúese cola esperanza de que pueda ser útil, pero <strong>ensin garantía denguna</strong>; nin siquiera la garantía implícita de <strong>comercialidá</strong> o \n<strong>adautación a un fin determináu</strong>.\nVer la Llicencia pública xeneral GNU pa más detalles.\n\nHabríes de tener recibío [$2 una copia de la llicencia pública xeneral GNU] xunto con esti programa; sinón, escribi a la Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA, o [https://www.gnu.org/copyleft/gpl.html lléila en llinia].",
-       "config-sidebar": "* [https://www.mediawiki.org/wiki/MediaWiki/gl Páxina principal de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guía del usuariu]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guía del alministrador]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Entrugues frecuentes]\n----\n* <doclink href=Readme>Lléame</doclink>\n* <doclink href=ReleaseNotes>Notes de llanzamientu</doclink>\n* <doclink href=Copying>Copia</doclink>\n* <doclink href=UpgradeDoc>Anovamientu</doclink>",
+       "config-sidebar": "* [https://www.mediawiki.org Páxina principal de MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents Guía del usuariu]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents Guía p'alministradores]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Entrugues frecuentes]",
+       "config-sidebar-readme": "Llei-me",
+       "config-sidebar-relnotes": "Notes de la versión",
+       "config-sidebar-license": "Copiar",
+       "config-sidebar-upgrade": "Anovar",
        "config-env-good": "Comprobóse l'entornu.\nPues instalar MediaWiki.",
        "config-env-bad": "Comprobóse l'entornu.\nNun pues instalar MediaWiki.",
        "config-env-php": "PHP $1 ta instaláu.",
        "config-env-hhvm": "HHVM $1 ta instaláu.",
-       "config-unicode-using-intl": "Usando la [https://pecl.php.net/intl estensión intl PECL] pa la normalización Unicode.",
-       "config-unicode-pure-php-warning": "'''Avisu:''' La [https://pecl.php.net/intl estensión intl PECL] nun ta disponible pa xestionar la normalización Unicode; volviendo a la implementación lenta en PHP puru.\nSi xestiona un sitiu con un tráficu altu, tendría de lleer una migaya sobro la [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].",
+       "config-unicode-using-intl": "Usando la [https://php.net/manual/en/book.intl.php estensión intl de PHP] pa la normalización Unicode.",
+       "config-unicode-pure-php-warning": "<strong>Avisu:</strong> La [https://php.net/manual/en/book.intl.php estensión intl de PHP] nun ta disponible pa xestionar la normalización Unicode; volviendo a la implementación lenta en PHP puru.\nSi alministres un sitiu con un tráficu altu, tendríes de lleer sobro la [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations normalización Unicode].",
        "config-unicode-update-warning": "'''Avisu:''' La versión instalada del envoltoriu de normalización Unicode usa una versión antigua de la biblioteca [http://site.icu-project.org/ de los proyeutos ICU].\nTendría [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations d'anovala] si ye importante pa vusté usar Unicode.",
        "config-no-db": "¡Nun pudo alcontrase un controlador de base de datos afayadizu! Necesites instalar un controlador de base de datos pa PHP.\n{{PLURAL:$2|Tien sofitu el tipu de base de datos siguiente|Tienen sofitu los tipos de base de datos siguientes}}: $1.\n\nSi compilasti PHP tu mesmu, reconfigúralu con un cliente de base de datos activáu, por exemplu, usando <code>./configure --with-mysqli</code>.\nSi instalasti PHP dende un paquete de Debian o Ubuntu, necesites instalar tamién,por exemplu, el paquete <code>php-mysql</code>.",
-       "config-outdated-sqlite": "'''Avisu:''' tien SQLite $1, que ye inferior a la versión mínima necesaria $2. SQLite nun tará disponible.",
+       "config-outdated-sqlite": "<strong>Avisu:</strong> tienes SQLite $1, que ye menor que la versión mínima necesaria $2. SQLite nun tará disponible.",
        "config-no-fts3": "'''Avisu:''' SQLite ta compiláu ensin el [//sqlite.org/fts3.html módulu FTS3]; les funciones de gueta nun tarán disponibles nesti sistema.",
        "config-pcre-old": "<strong>Fatal:</strong> Ríquese PCRE $1 o posterior.\nEl binariu de PHP ta enllazáu con PCRE $2.\n[https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE Más información].",
        "config-pcre-no-utf8": "<strong>Erru fatal:</strong> Paez que'l módulu PCRE de PHP foi compiláu ensin el soporte PCRE_UTF8.\nMediaWiki requier compatibilidá con UTF_8 pa furrular correutamente.",
        "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki ye compatible colos siguientes sistemes de bases de datos:\n\n$1\n\nSi nun atopes na llista el sistema de base de datos que tas intentando utilizar, sigue les instrucciones enllazaes enriba p'activar la compatibilidá.",
+       "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] ye la base de datos primaria pa MediaWiki y la que tien mayor encontu. MediaWiki tamién funciona con [{{int:version-db-myslql-url}} MySQL] y [{{int:version-db-percona-url}} Percona Server], que son compatibles con MariaDB. ([https://www.php.net/manual/en/mysqli.installation.php Cómo compilar PHP con compatibilidá MySQL])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] ye un sistema popular de base de datos de códigu abiertu, como alternativa a MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Cómo compilar PHP con compatibilidá PostgreSQL]).",
+       "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] ye un sistema de base de datos llixeru que tien encontu perbonu. ([https://https://www.php.net/manual/en/pdo.installation.php Cómo compilar PHP con encontu pa SQLite], usa PDO)",
+       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] ye una base de datos comercial a nivel empresarial. ([https://www.php.net/manual/en/oci8.installation.php Cómo compilar PHP con encontu pa OCI8])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] ye un sistema comercial de base de datos empresariales pa Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Cómo compilar PHP con compatibilidá pa SQLSRV])",
        "config-header-mysql": "Axustes de MariaDB/MySQL",
        "config-header-postgres": "Axustes de PostgreSQL",
        "config-sqlite-readonly": "El ficheru <code>$1</code> nun puede escribise.",
        "config-sqlite-cant-create-db": "Nun pudo crease'l ficheru de la base de datos <code>$1</code>.",
        "config-sqlite-fts3-downgrade": "PHP nun tien compatibilidá pa FTS3, baxando a una versión anterior les tables.",
+       "config-can-upgrade": "Esta base de datos contien tables de MediaWiki.\nP'anovales a MediaWiki $1, pulsia <strong>Siguir</strong>.",
+       "config-upgrade-error": "Hebo un error al anovar les tables de MediaWiki de la base de datos.\n\nPa más información, consulta'l rexistru de más arriba; pa tentalo nuevamente, pulsia <strong>Siguir</strong>.",
+       "config-upgrade-done": "Anovamientu completáu.\n\nYá puedes [$1 principiar a usar la wiki].\n\nSi quies rexenerar el ficheru <code>LocalSettings.php</code>, pulsia nel botón d'abaxo.\nEsto <strong>nun s'encamienta</strong> sacante que teas teniendo problemes cola wiki.",
+       "config-upgrade-done-no-regenerate": "Anovamientu completáu.\n\nYá puedes [$1 principiar a usar la wiki].",
        "config-regenerate": "Rexenerar LocalSettings.php →",
        "config-show-table-status": "¡Falló la consulta <code>SHOW TABLE STATUS</code>!",
        "config-unknown-collation": "<strong>Avisu:</strong> La base de datos utiliza un orde alfabéticu ensin reconocer.",
        "config-admin-help": "Escribe equí'l nome d'usuariu que desees, como por casu \"Nel Bloggs\".\nEsti ye'l nome que vas usar pa entrar na wiki.",
        "config-admin-name-blank": "Escribe'l nome d'usuariu d'un alministrador.",
        "config-admin-password-mismatch": "Les dos contraseñes qu'introduxesti nun concasen.",
+       "config-admin-email": "Direición de corréu electrónicu:",
+       "config-admin-email-help": "Escribi equí una dirección de corréu electrónicu pa que te permita recibir mensaxes d'otros usuarios de la wiki, reaniciar la contraseña y recibir avisos de cambeos nes páxines de la to llista de siguimientu. Puedes dexar esti campu vacíu.",
+       "config-admin-error-user": "Error internu al crear un alministrador col nome «<nowiki>$1</nowiki>»",
+       "config-admin-error-password": "Error internu al configurar una contraseña pal alministrador «<nowiki>$1</nowiki>»: <pre>$2</pre>",
+       "config-admin-error-bademail": "Escribisti una dirección de corréu electrónicu inválida.",
        "config-optional-skip": "Yá toi aburríu, namái instala la wiki.",
        "config-profile-wiki": "Wiki públicu",
        "config-profile-no-anon": "Ríquese crear una cuenta",
        "config-install-tables-failed": "<strong>Error:</strong> La creación de tables falló col error siguiente: $1",
        "config-install-interwiki": "Enllenando la tabla d'interwiki predeterminada",
        "config-install-interwiki-list": "Nun pudo lleese'l ficheru <code>interwiki.list</code>.",
+       "config-install-interwiki-exists": "<strong>Avisu:</strong> Paez que la tabla d'interwikis yá contien entraes.\nSaltando la llista predeterminada.",
+       "config-install-stats": "Aniciando les estadístiques",
+       "config-install-keys": "Xenerando les claves secretes",
+       "config-install-updates": "Torgar que s'executen anovamientos innecesarios",
        "config-download-localsettings": "Descargar <code>LocalSettings.php</code>",
        "config-help": "ayuda",
+       "config-help-tooltip": "pulsia p'ampliar",
        "config-nofile": "Nun pudo atopase'l ficheru \"$1\". ¿Desaniciose?",
        "config-skins-screenshots": "$1 (imaxes de pantalla: $2)",
        "config-skins-screenshot": "$1 ($2)",
index a9da56d..758221f 100644 (file)
        "config-db-type": "Database type:",
        "config-db-host": "Database host:",
        "config-db-host-help": "If your database server is on a different server, enter the host name or IP address here.\n\nIf you are using shared web hosting, your hosting provider should give you the correct host name in their documentation.\n\nIf you are using MySQL, using \"localhost\" may not work for the server name. If it does not, try \"127.0.0.1\" for the local IP address.\n\nIf you are using PostgreSQL, leave this field blank to connect via a Unix socket.",
-       "config-db-host-oracle": "Database TNS:",
-       "config-db-host-oracle-help": "Enter a valid [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; a tnsnames.ora file must be visible to this installation.<br />If you are using client libraries 10g or newer you can also use the [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] naming method.",
        "config-db-wiki-settings": "Identify this wiki",
        "config-db-name": "Database name (no hyphens):",
        "config-db-name-help": "Choose a name that identifies your wiki.\nIt should not contain spaces.\n\nIf you are using shared web hosting, your hosting provider will either give you a specific database name to use or let you create databases via a control panel.",
-       "config-db-name-oracle": "Database schema:",
-       "config-db-account-oracle-warn": "There are three supported scenarios for installing Oracle as database backend:\n\nIf you wish to create database account as part of the installation process, please supply an account with SYSDBA role as database account for installation and specify the desired credentials for the web-access account, otherwise you can either create the web-access account manually and supply only that account (if it has required permissions to create the schema objects) or supply two different accounts, one with create privileges and a restricted one for web access.\n\nScript for creating an account with required privileges can be found in \"maintenance/oracle/\" directory of this installation. Keep in mind that using a restricted account will disable all maintenance capabilities with the default account.",
        "config-db-install-account": "User account for installation",
        "config-db-username": "Database username:",
        "config-db-password": "Database password:",
        "config-pg-test-error": "Cannot connect to database <strong>$1</strong>: $2",
        "config-sqlite-dir": "SQLite data directory:",
        "config-sqlite-dir-help": "SQLite stores all data in a single file.\n\nThe directory you provide must be writable by the webserver during installation.\n\nIt should <strong>not</strong> be accessible via the web; this is why we're not putting it where your PHP files are.\n\nThe installer will write a <code>.htaccess</code> file along with it, but if that fails someone can gain access to your raw database.\nThat includes raw user data (email addresses, hashed passwords) as well as deleted revisions and other restricted data on the wiki.\n\nConsider putting the database somewhere else altogether, for example in <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Default tablespace:",
-       "config-oracle-temp-ts": "Temporary tablespace:",
        "config-type-mysql": "MariaDB, MySQL, or compatible",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki supports the following database systems:\n\n$1\n\nIf you do not see the database system you are trying to use listed below, then follow the instructions linked above to enable support.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] is the primary target for MediaWiki and is best supported. MediaWiki also works with [{{int:version-db-mysql-url}} MySQL] and [{{int:version-db-percona-url}} Percona Server], which are MariaDB compatible. ([https://www.php.net/manual/en/mysqli.installation.php How to compile PHP with MySQL support])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is a popular open source database system as an alternative to MySQL. ([https://www.php.net/manual/en/pgsql.installation.php How to compile PHP with PostgreSQL support])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is a lightweight database system that is very well supported. ([https://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], uses PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] is a commercial enterprise database. ([https://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] is a commercial enterprise database for Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php How to compile PHP with SQLSRV support])",
        "config-header-mysql": "MariaDB/MySQL settings",
        "config-header-postgres": "PostgreSQL settings",
        "config-header-sqlite": "SQLite settings",
-       "config-header-oracle": "Oracle settings",
-       "config-header-mssql": "Microsoft SQL Server settings",
        "config-invalid-db-type": "Invalid database type.",
        "config-missing-db-name": "You must enter a value for \"{{int:config-db-name}}\".",
        "config-missing-db-host": "You must enter a value for \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "You must enter a value for \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "Invalid database TNS \"$1\".\nUse either \"TNS Name\" or an \"Easy Connect\" string ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]).",
        "config-invalid-db-name": "Invalid database name \"$1\".\nUse only ASCII letters (a-z, A-Z), numbers (0-9), underscores (_) and hyphens (-).",
        "config-invalid-db-prefix": "Invalid database prefix \"$1\".\nUse only ASCII letters (a-z, A-Z), numbers (0-9), underscores (_) and hyphens (-).",
        "config-connection-error": "$1.\n\nCheck the host, username and password and try again. If using \"localhost\" as the database host, try using \"127.0.0.1\" instead (or vice versa).",
        "config-invalid-schema": "Invalid schema for MediaWiki \"$1\".\nUse only ASCII letters (a-z, A-Z), numbers (0-9) and underscores (_).",
-       "config-db-sys-create-oracle": "Installer only supports using a SYSDBA account for creating a new account.",
-       "config-db-sys-user-exists-oracle": "User account \"$1\" already exists. SYSDBA can only be used for creating of a new account!",
        "config-postgres-old": "PostgreSQL $1 or later is required. You have $2.",
-       "config-mssql-old": "Microsoft SQL Server $1 or later is required. You have $2.",
        "config-sqlite-name-help": "Choose a name that identifies your wiki.\nDo not use spaces or hyphens.\nThis will be used for the SQLite data filename.",
        "config-sqlite-parent-unwritable-group": "Cannot create the data directory <code><nowiki>$1</nowiki></code>, because the parent directory <code><nowiki>$2</nowiki></code> is not writable by the webserver.\n\nThe installer has determined the user your webserver is running as.\nMake the <code><nowiki>$3</nowiki></code> directory writable by it to continue.\nOn a Unix/Linux system do:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Cannot create the data directory <code><nowiki>$1</nowiki></code>, because the parent directory <code><nowiki>$2</nowiki></code> is not writable by the webserver.\n\nThe installer could not determine the user your webserver is running as.\nMake the <code><nowiki>$3</nowiki></code> directory globally writable by it (and others!) to continue.\nOn a Unix/Linux system do:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Storage engine:",
        "config-mysql-innodb": "InnoDB (recommended)",
        "config-mysql-engine-help": "<strong>InnoDB</strong> is almost always the best option, since it has good concurrency support.\n\n<strong>MyISAM</strong> may be faster in single-user or read-only installations.\nMyISAM databases tend to get corrupted more often than InnoDB databases.",
-       "config-mssql-auth": "Authentication type:",
-       "config-mssql-install-auth": "Select the authentication type that will be used to connect to the database during the installation process.\nIf you select \"{{int:config-mssql-windowsauth}}\", the credentials of whatever user the webserver is running as will be used.",
-       "config-mssql-web-auth": "Select the authentication type that the web server will use to connect to the database server, during ordinary operation of the wiki.\nIf you select \"{{int:config-mssql-windowsauth}}\", the credentials of whatever user the webserver is running as will be used.",
-       "config-mssql-sqlauth": "SQL Server Authentication",
-       "config-mssql-windowsauth": "Windows Authentication",
        "config-site-name": "Name of wiki:",
        "config-site-name-help": "This will appear in the title bar of the browser and in various other places.",
        "config-site-name-blank": "Enter a site name.",
index 7d361bc..3a869cf 100644 (file)
@@ -11,7 +11,8 @@
                        "Macofe",
                        "Guycn2",
                        "שמזן",
-                       "חיים"
+                       "חיים",
+                       "Steeve815"
                ]
        },
        "config-desc": "תכנית ההתקנה של מדיה־ויקי",
        "config-welcome": "=== בדיקות סביבה ===\nבדיקות בסיסיות תתבצענה עכשיו כדי לראות אם הסביבה הזאת מתאימה להתקנת מדיה־ויקי.\nנא לזכור לכלול את המידע הזה בעת בקשת תמיכה עם השלמת ההתקנה.",
        "config-welcome-section-copyright": "=== זכויות יוצרים ותנאים ===\n\n$1\n\nתכנית זו היא תכנה חופשית; באפשרותך להפיצה מחדש ו/או לשנות אותה על פי תנאי הרישיון הציבורי הכללי של GNU כפי שפורסם על ידי קרן התכנה החופשית; בין אם גרסה 2 של הרישיון, ובין אם (לפי בחירתך) כל גרסה מאוחרת שלו.\n\nתכנית זו מופצת בתקווה שתהיה מועילה, אבל '''בלא אחריות כלשהי'''; ואפילו ללא האחריות המשתמעת בדבר '''מסחריותה''' או '''התאמתה למטרה '''מסוימת'''. לפרטים נוספים, ניתן לעיין ברישיון הציבורי הכללי של GNU.\n\nלתכנית זו אמור היה להיות מצורף [$2 עותק של הרישיון הציבורי הכללי של GNU]; אם לא קיבלת אותו, אפשר לכתוב ל־Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA או [https://www.gnu.org/copyleft/gpl.html לקרוא אותו דרך האינטרנט].",
        "config-sidebar": "* [https://www.mediawiki.org אתר הבית של מדיה־ויקי]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents המדריך למשתמש]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents המדריך למנהל]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ שו״ת]\n----\n* <doclink href=Readme>קרא אותי</doclink>\n* <doclink href=ReleaseNotes>הערות גרסה</doclink>\n* <doclink href=Copying>העתקה</doclink>\n* <doclink href=UpgradeDoc>שדרוג</doclink>",
+       "config-sidebar-readme": "קרא־אותי",
+       "config-sidebar-relnotes": "הערות גרסה",
+       "config-sidebar-license": "העתקה",
+       "config-sidebar-upgrade": "שדרוג",
        "config-env-good": "הסביבה שלכם נבדקה.\nאפשר להתקין מדיה־ויקי.",
        "config-env-bad": "הסביבה שלכם נבדקה.\nאי־אפשר להתקין מדיה־ויקי.",
        "config-env-php": "מותקנת <span dir=\"ltr\">PHP $1</span>.",
        "config-env-hhvm": "מותקנת <span dir=\"ltr\">HHVM $1</span>.",
-       "config-unicode-using-intl": "משתמש ב[https://pecl.php.net/intl הרחבת intl PECL] לנרמול יוניקוד.",
+       "config-unicode-using-intl": "משתמש ב[https://php.net/manual/en/book.intl.php הרחבת PHP intl] לנרמול יוניקוד.",
        "config-unicode-pure-php-warning": "<strong>אזהרה:</strong> [https://pecl.php.net/intl הרחבת intl PECL] אינה זמינה לטיפול בנרמול יוניקוד. משתמש ביישום PHP טהור ואטי יותר.\nאם זהו אתר בעל תעבורה גבוהה, כדאי לקרוא את המסמך הבא: [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations Unicode normalization].",
        "config-unicode-update-warning": "'''אזהרה''': הגרסה המותקנת של מעטפת נרמול יוניקוד משתמשת בגרסה ישנה של הספרייה של [http://site.icu-project.org/ פרויקט ICU].\nכדאי [https://www.mediawiki.org/wiki/Special:MyLanguage/Unicode_normalization_considerations לעדכן] אם הטיפול ביוניקוד חשוב לך.",
        "config-no-db": "לא נמצא דרייבר מסד נתונים מתאים. יש להתקין דרייבר מסד נתונים ל־PHP.\n{{PLURAL:$2|נתמך הסוג הבא של מסד נתונים|נתמכים הסוגים הבאים של מסדי נתונים}}: $1.\n\nאם קִמפלת את PHP בעצמך, יש להגדיר אותו מחדש ולהפעיל את לקוח מסד נתונים, למשל באמצעות <code dir=\"ltr\">./configure --with-mysqli</code>.\nאם התקנת את PHP מחבילה של דביאן או של אובונטו, יש להתקין, למשל, גם את המודול <code dir=\"ltr\">php-mysql</code>.",
        "config-install-done": "<strong>מזל טוב!</strong>\nהתקנת את תוכנת מדיה־ויקי.\n\nתוכנת ההתקנה יצרה את הקובץ <code>LocalSettings.php</code>.\nהוא מכיל את כל ההגדרות שלך.\n\nיש להוריד אותו ולהכניס אותו לתיקיית הבסיס שבה הותקן הוויקי שלך (אותה התיקייה שבה נמצא הקובץ index.php). ההורדה אמורה להתחיל באופן אוטומטי.\n\nאם ההורדה לא התחילה, או אם ביטלת אותה, אפשר להתחיל אותה מחדש באמצעות לחיצה על הקישור הבא:\n\n$3\n\n<strong>לתשומת לבך:</strong> אם ההורדה לא תבוצע כעת, קובץ ההגדרות <strong>לא</strong> יהיה זמין מאוחר יותר אם תוכנת ההתקנה תיסגר לפני שהקובץ יורד.\n\nלאחר שביצעת את הפעולות שלהלן, באפשרותך <strong>[$2 להיכנס לאתר הוויקי שלך]</strong>.",
        "config-install-done-path": "<strong>מזל טוב!</strong>\nהתקנת את תוכנת מדיה־ויקי.\n\nתוכנת ההתקנה יצרה את הקובץ <code>LocalSettings.php</code>.\nהוא מכיל את כל ההגדרות שלך.\n\nיש להוריד אותו ולהכניס אותו לתיקייה <code>$4</code>. ההורדה אמורה להתחיל באופן אוטומטי.\n\nאם ההורדה לא התחילה, או אם ביטלת אותה, אפשר להתחיל אותה מחדש באמצעות לחיצה על הקישור הבא:\n\n$3\n\n<strong>לתשומת לבך:</strong> אם ההורדה לא תבוצע כעת, קובץ ההגדרות <strong>לא</strong> יהיה זמין מאוחר יותר אם תוכנת ההתקנה תיסגר לפני שהקובץ יורד.\n\nלאחר שביצעת את הפעולות שלהלן, באפשרותך <strong>[$2 להיכנס לאתר הוויקי שלך]</strong>.",
        "config-install-success": "מדיה־ויקי הותקנה בהצלחה. עכשיו אפשר\nלבקר בכתובת <$1$2> כדי לצפות בוויקי שלך.\nאם יש לך שאלות, ר' את רשימת השאלות הנפוצות שלנו:\n<https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ> ואפשר גם להשתמש\nבאתרי התמיכה שקישורים אליהם מופיעים באותו הדף.",
+       "config-install-db-success": "בסיס הנתונים הוגדר בהצלחה",
        "config-download-localsettings": "הורדת <code>LocalSettings.php</code>",
        "config-help": "עזרה",
        "config-help-tooltip": "להרחיב",
index 9516433..94f3b9f 100644 (file)
@@ -25,7 +25,8 @@
                        "Omotecho",
                        "Yusuke1109",
                        "Aefgh39622",
-                       "Tomri5"
+                       "Tomri5",
+                       "Afaz"
                ]
        },
        "config-desc": "MediaWiki のインストーラー",
        "config-restart": "はい、再起動します",
        "config-welcome": "=== 環境の確認 ===\n基本的な確認では、現在の環境が MediaWiki のインストールに適しているかを確認します。\nインストール方法について助けが必要になった場合は、必ずこの確認結果を添えてください。",
        "config-welcome-section-copyright": "=== 著作権および規約 ===\n$1\n\nこの作品はフリーソフトウェアです。あなたは、フリーソフトウェア財団の発行する GNU 一般公衆利用許諾書 (GNU General Public License) (バージョン 2、またはそれ以降のライセンス) の規約に基づき、このライブラリを再配布および改変できます。\n\nこの作品は、有用であることを期待して配布されていますが、<strong>商用または特定の目的に適するかどうか</strong>も含めて、暗黙的にも、<strong>一切保証されません</strong>。\n詳しくは、 GNU 一般公衆利用許諾書をご覧ください。\n\nあなたはこのプログラムと共に、[$2 GNU 一般公衆利用許諾契約書の複製]を受け取ったはずです。受け取っていない場合は、フリーソフトウェア財団 (宛先は the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA) まで請求するか、または[https://www.gnu.org/copyleft/gpl.html オンラインでお読みください]。",
-       "config-sidebar": "* [https://www.mediawiki.org MediaWikiのホーム]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 利用者向け案内]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents 管理者向け案内]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>お読みください</doclink>\n* <doclink href=ReleaseNotes>リリースノート</doclink>\n* <doclink href=Copying>コピー</doclink>\n* <doclink href=UpgradeDoc>アップグレード</doclink>",
+       "config-sidebar": "* [https://www.mediawiki.org MediaWikiのホーム]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 利用者向け案内]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents 管理者向け案内]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]",
+       "config-sidebar-readme": "お読みください",
+       "config-sidebar-relnotes": "リリースノート",
+       "config-sidebar-license": "複製",
+       "config-sidebar-upgrade": "アップグレード",
        "config-env-good": "環境を確認しました。\nMediaWiki をインストールできます。",
        "config-env-bad": "環境を確認しました。\nMediaWiki のインストールはできません。",
        "config-env-php": "PHP $1がインストールされています。",
@@ -86,7 +91,7 @@
        "config-wincache": "[https://www.iis.net/downloads/microsoft/wincache-extension WinCache] がインストール済み",
        "config-no-cache-apcu": "<strong>警告:</strong> [https://www.php.net/apcu APCu]、 [https://www.iis.net/downloads/microsoft/wincache-extension WinCache] のいずれも見つかりませんでした。\nオブジェクトのキャッシュは有効化されません。",
        "config-mod-security": "<strong>警告:</strong> あなたのウェブサーバーでは [https://modsecurity.org/ mod_security] が有効になっています。正しく構成されていない場合は、MediaWiki や利用者にコンテンツの投稿を許可するその他のソフトウェアに問題が発生する場合があります。\n[https://modsecurity.org/documentation/ mod_security の説明文書]を確認するか、ランダムなエラーが発生した場合はあなたのホストのサポートにお問い合わせください。",
-       "config-diff3-bad": "GNU diff3 が見つかりません。",
+       "config-diff3-bad": "GNU diff3テキスト比較ユーティリティが見つかりません。無視することもできますが、その場合編集の競合が頻繁に発生する可能性があります。",
        "config-git": "バージョン管理ソフトウェア Git が見つかりました: <code>$1</code>",
        "config-git-bad": "バージョン管理ソフトウェア Git が見つかりません。これを無視することもできますが、Special:Version にコミットのハッシュが表示されないことにご注意ください。",
        "config-imagemagick": "ImageMagickが見つかりました: <code>$1</code>。\nアップロードが有効であれば、画像のサムネイルを利用できます。",
        "config-skins-screenshots": "$1 (スクリーンショット: $2)",
        "config-extensions-requires": "$1($2が必要)",
        "config-screenshot": "スクリーンショット",
+       "config-extension-not-found": "拡張機能「$1」の登録ファイルは見つかりませんでした",
        "config-extension-dependency": "拡張機能「$1」のインストール中に依存関係エラーが発生しました: $2",
        "mainpagetext": "<strong>MediaWiki はインストール済みです。</strong>",
        "mainpagedocfooter": "ウィキソフトウェアの使い方に関する情報は[https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents 利用者案内]を参照してください。\n\n== はじめましょう ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings/ja 設定の一覧]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ/ja MediaWiki よくある質問と回答]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki リリース情報メーリングリスト]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation/ja MediaWiki のあなたの言語へのローカライズ]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam あなたのウィキでスパムと戦う方法を学ぶ]"
index feda6b2..d34367e 100644 (file)
        "config-skins-must-enable-some": "Musisz wybrać co najmniej jedną skórkę, aby ją włączyć.",
        "config-skins-must-enable-default": "Skórka wybrana jako domyślna musi być włączona.",
        "config-install-alreadydone": "'''Uwaga''' – wydaje się, że MediaWiki jest już zainstalowane, a obecnie próbujesz zainstalować je ponownie.\nPrzejdź do następnej strony.",
-       "config-install-begin": "Po naciśnięciu \"{{int:config-continue}}\", rozpocznie się instalacja MediaWiki.\nJeśli nadal chcesz dokonać zmian, naciśnij \"{{int:config-back}}\".",
+       "config-install-begin": "Po naciśnięciu „{{int:config-continue}}”, rozpocznie się instalacja MediaWiki.\nJeśli nadal chcesz dokonać zmian, naciśnij „{{int:config-back}}”.",
        "config-install-step-done": "gotowe",
        "config-install-step-failed": "nieudane",
        "config-install-extensions": "Dołączanie rozszerzeń",
index 039cd26..42211b4 100644 (file)
        "config-db-type": "Field label in the MediaWiki installer followed by possible database types.",
        "config-db-host": "Used as label.\n\nAlso used in {{msg-mw|Config-missing-db-host}}.",
        "config-db-host-help": "{{doc-singularthey}}",
-       "config-db-host-oracle": "TNS = [[w:Transparent Network Substrate]].\n\nUsed as label.\n\nAlso used in {{msg-mw|Config-missing-db-server-oracle}}.",
-       "config-db-host-oracle-help": "See also:\n* {{msg-mw|Config-invalid-db-server-oracle}}",
        "config-db-wiki-settings": "This is more acurate: \"Enter identifying or distinguishing data for this wiki\" since a MySQL database can host tables of several wikis.",
        "config-db-name": "Used as label.\n\nAlso used in {{msg-mw|Config-missing-db-name}}.\n{{Identical|Database name}}",
        "config-db-name-help": "Help box text in the MediaWiki installer.",
-       "config-db-name-oracle": "Field label in the MediaWiki installer where an Oracle database schema can be specified.",
-       "config-db-account-oracle-warn": "A \"[[:wikipedia:Front and back ends|backend]]\" is a system or component that ordinary users don't interact with directly and don't need to know about, and that is responsible for a distinct task or service - for example, a storage back-end is a generic system for storing data which other applications can use. Possible alternatives for back-end are \"system\" or \"service\", or (depending on context and language) even leave it untranslated.",
        "config-db-install-account": "Legend in the MediaWiki installer for the section where database username and password have to be provided.",
        "config-db-username": "Used as label.",
        "config-db-password": "Field label in the MediaWiki installer where database password has to be provided.",
        "config-pg-test-error": "Parameters:\n* $1 - database name\n* $2 - error message",
        "config-sqlite-dir": "Field label for a folder location.",
        "config-sqlite-dir-help": "{{doc-important|Do not translate <code>.htaccess</code> and <code>/var/lib/mediawiki/yourwiki</code>.}}\nUsed in help box.",
-       "config-oracle-def-ts": "Field label for an Oracle default tablespace.",
-       "config-oracle-temp-ts": "Field label for an Oracle temporary tablespace.",
        "config-type-mysql": "\"Or compatible\" refers to several database systems that are compatible with MySQL, as explained in {{msg-mw|config-dbsupport-mysql}}, and thus also work with this choice of database type.",
        "config-type-postgres": "{{optional}}",
        "config-type-sqlite": "{{optional}}",
-       "config-type-oracle": "{{optional}}",
-       "config-type-mssql": "{{optional}}",
-       "config-support-info": "Parameters:\n* $1 - a list of DBMSs that MediaWiki supports, composed with config-dbsupport-* messages.\nSee also:\n* {{msg-mw|Config-dbsupport-mysql}}\n* {{msg-mw|Config-dbsupport-postgres}}\n* {{msg-mw|Config-dbsupport-oracle}}\n* {{msg-mw|Config-dbsupport-sqlite}}\n* {{msg-mw|Config-dbsupport-mssql}}",
+       "config-support-info": "Parameters:\n* $1 - a list of DBMSs that MediaWiki supports, composed with config-dbsupport-* messages.\nSee also:\n* {{msg-mw|Config-dbsupport-mysql}}\n* {{msg-mw|Config-dbsupport-postgres}}\n* {{msg-mw|Config-dbsupport-sqlite}}",
        "config-dbsupport-mysql": "Used in:\n* {{msg-mw|config-support-info}}\n{{Related|Config-dbsupport}}",
        "config-dbsupport-postgres": "Used in:\n* {{msg-mw|config-support-info}}\n{{Related|Config-dbsupport}}",
        "config-dbsupport-sqlite": "Used in:\n* {{msg-mw|config-support-info}}\n{{Related|Config-dbsupport}}",
-       "config-dbsupport-oracle": "Used in:\n* {{msg-mw|Config-support-info}}.\n{{Related|Config-dbsupport}}",
-       "config-dbsupport-mssql": "Used in:\n* {{msg-mw|Config-support-info}}\n{{Related|Config-dbsupport}}",
        "config-header-mysql": "Header for MySQL database settings in the MediaWiki installer.",
        "config-header-postgres": "Header for PostgreSQL database settings in the MediaWiki installer.",
        "config-header-sqlite": "Header for SQLite database settings in the MediaWiki installer.",
-       "config-header-oracle": "Header for Oracle database settings in the MediaWiki installer.",
-       "config-header-mssql": "Used as a section heading on the installer form, inside of a fieldset",
        "config-invalid-db-type": "Error message in MediaWiki installer when an invalid database type has been provided.",
        "config-missing-db-name": "Refers to {{msg-mw|Config-db-name}}.\n{{Related|Config-missing}}",
        "config-missing-db-host": "Refers to {{msg-mw|Config-db-host}}.\n{{Related|Config-missing}}",
-       "config-missing-db-server-oracle": "Refers to {{msg-mw|Config-db-host-oracle}}.\n{{Related|Config-missing}}",
-       "config-invalid-db-server-oracle": "Used as error message. Parameters:\n* $1 - database server name\nSee also:\n* {{msg-mw|Config-db-host-oracle-help}}",
        "config-invalid-db-name": "Used as error message. Parameters:\n* $1 - database name\nSee also:\n* {{msg-mw|Config-invalid-db-prefix}}",
        "config-invalid-db-prefix": "Used as error message. Parameters:\n* $1 - database prefix\nSee also:\n* {{msg-mw|Config-invalid-db-name}}",
        "config-connection-error": "$1 is the external error from the database, such as \"DB connection error: Access denied for user 'dba'@'localhost' (using password: YES) (localhost).\"\n\nIf you're translating this message to a right-to-left language, consider writing <nowiki><div dir=\"ltr\">$1.</div></nowiki>. (When the bidi features for HTML5 will be implemented in the browsers, it will probably be a good idea to write it as <nowiki><div dir=\"auto\">$1.</div></nowiki>.)",
        "config-invalid-schema": "*$1 - schema name",
-       "config-db-sys-create-oracle": "Error message in the MediaWiki installer when Oracle is used as database and an incorrect user account type has been provided.",
-       "config-db-sys-user-exists-oracle": "Used as error message. Parameters:\n* $1 - database username",
        "config-postgres-old": "Used as error message. Used as warning. Parameters:\n* $1 - minimum version\n* $2 - the version of PostgreSQL that has been installed\n{{Related|Config-old}}",
-       "config-mssql-old": "Used as an error message. Parameters:\n* $1 - minimum version\n* $2 - the version of Microsoft SQL Server that has been installed\n{{Related|Config-old}}",
        "config-sqlite-name-help": "Help text for the form field for the SQLite data file name.",
        "config-sqlite-parent-unwritable-group": "Used as SQLite error message. Parameters:\n* $1 - data directory\n* $2 - \"dirname\" part of $1\n* $3 - \"basename\" part of $1\n* $4 - web server's primary group name\nSee also:\n* {{msg-mw|Config-sqlite-parent-unwritable-nogroup}}",
        "config-sqlite-parent-unwritable-nogroup": "Used as SQLite error message. Parameters:\n* $1 - data directory\n* $2 - \"dirname\" part of $1\n* $3 - \"basename\" part of $1\nSee also:\n* {{msg-mw|Config-sqlite-parent-unwritable-group}}",
        "config-mysql-engine": "Field label for MySQL storage engine in the MediaWiki installer.",
        "config-mysql-innodb": "Option for the MySQL storage engine in the MediaWiki installer.",
        "config-mysql-engine-help": "Help text in MediaWiki installer with advice for picking a MySQL storage engine.",
-       "config-mssql-auth": "Radio button group label.\n\nFollowed by the following radio button labels:\n* {{msg-mw|Config-mssql-sqlauth}}\n* {{msg-mw|Config-mssql-windowsauth}}",
-       "config-mssql-install-auth": "Used as the help text for the \"Authentication type\" radio button when typing in database settings for installation.\n\nRefers to {{msg-mw|Config-mssql-windowsauth}}.\n\nSee also:\n* {{msg-mw|Config-mssql-web-auth}}",
-       "config-mssql-web-auth": "Used as the help text for the \"Authentication type\" radio button when typing in database settings for normal wiki usage.\n\nRefers to {{msg-mw|Config-mssql-windowsauth}}.\n\nSee also:\n* {{msg-mw|Config-mssql-install-auth}}",
-       "config-mssql-sqlauth": "Radio button.\n\n\"SQL Server\" refers to \"Microsoft SQL Server\".\n\nSee also:\n* {{msg-mw|Config-mssql-windowsauth}}",
-       "config-mssql-windowsauth": "Radio button. The official term is \"Integrated Windows Authentication\" but Microsoft itself uses \"Windows Authentication\" elsewhere in Microsoft SQL Server as a synonym.\n\nAlso used in:\n* {{msg-mw|Config-mssql-install-auth}}\n* {{msg-mw|Config-mssql-web-auth}}\n\nSee also:\n* {{msg-mw|Config-mssql-sqlauth}}",
        "config-site-name": "Field label for the form field where a wiki name has to be entered.",
        "config-site-name-help": "Help text for the form field where a wiki name has to be entered.",
        "config-site-name-blank": "Error text in the MediaWiki installer when the site name is left empty.",
index f7b8ed2..d449e8a 100644 (file)
@@ -690,9 +690,9 @@ class JobQueueDB extends JobQueue {
                                        $dbw->update( 'job',
                                                [
                                                        'job_token' => '',
-                                                       'job_token_timestamp' => $dbw->timestamp( $now ) ], // time of release
-                                               [
-                                                       'job_id' => $ids ],
+                                                       'job_token_timestamp' => $dbw->timestamp( $now ) // time of release
+                                               ],
+                                               [ 'job_id' => $ids, "job_token != ''" ],
                                                __METHOD__
                                        );
                                        $affected = $dbw->affectedRows();
index 7a90082..d3a02f7 100644 (file)
@@ -29,7 +29,7 @@
  */
 class CSSMin {
 
-       /** @var string Strip marker for comments. **/
+       /** @var string Strip marker for comments. */
        const PLACEHOLDER = "\x7fPLACEHOLDER\x7f";
 
        /**
index 84b7b3e..107672e 100644 (file)
@@ -34,7 +34,7 @@
  * @deprecated since 1.34, no longer used
  */
 class MWMessagePack {
-       /** @var bool|null Whether current system is bigendian. **/
+       /** @var bool|null Whether current system is bigendian. */
        public static $bigendian = null;
 
        /**
index 1085375..02746ec 100644 (file)
@@ -166,7 +166,7 @@ class ParamValidator {
         */
        const PARAM_IGNORE_INVALID_VALUES = 'param-ignore-invalid-values';
 
-       /**@}*/
+       /** @} */
 
        /** Magic "all values" value when PARAM_ALL is true. */
        const ALL_DEFAULT_STRING = '*';
index 4ad48c7..f65619f 100644 (file)
@@ -225,6 +225,7 @@ abstract class FileBackend implements LoggerAwareInterface {
         * Alias to getDomainId()
         * @return string
         * @since 1.20
+        * @deprecated Since 1.34 Use getDomainId()
         */
        final public function getWikiId() {
                return $this->getDomainId();
index 01f7df4..1047a98 100644 (file)
@@ -1,25 +1,25 @@
 <?php
 /**
-* Helper class for representing operations with transaction support.
-*
-* 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 FileBackend
-*/
+ * Helper class for representing operations with transaction support.
+ *
+ * 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 FileBackend
+ */
 
 /**
  * Delete a file at the given storage path from the backend.
index 9f753fe..185765d 100644 (file)
@@ -18,7 +18,7 @@
  * @file
  */
 
-/**@{
+/** @{
  * Media types.
  * This defines constants for the value returned by File::getMediaType()
  */
@@ -45,4 +45,4 @@ define( 'MEDIATYPE_EXECUTABLE', 'EXECUTABLE' );
 define( 'MEDIATYPE_ARCHIVE', 'ARCHIVE' );
 // 3D file types (stl)
 define( 'MEDIATYPE_3D', '3D' );
-/**@}*/
+/** @} */
index e9fd7d9..da60c01 100644 (file)
@@ -130,7 +130,7 @@ abstract class BagOStuff implements IExpiringStore, IStoreKeyEncoder, LoggerAwar
 
                if ( $value === false ) {
                        $value = $callback( $ttl );
-                       if ( $value !== false ) {
+                       if ( $value !== false && $ttl >= 0 ) {
                                $this->set( $key, $value, $ttl, $flags );
                        }
                }
index 83c8004..1cfa0c7 100644 (file)
@@ -81,7 +81,7 @@ class HashBagOStuff extends MediumSpecificBagOStuff {
                unset( $this->bag[$key] );
                $this->bag[$key] = [
                        self::KEY_VAL => $value,
-                       self::KEY_EXP => $this->convertToExpiry( $exptime ),
+                       self::KEY_EXP => $this->getExpirationAsTimestamp( $exptime ),
                        self::KEY_CAS => $this->token . ':' . ++self::$casCounter
                ];
 
index 23cf607..62a8aec 100644 (file)
@@ -407,12 +407,13 @@ abstract class MediumSpecificBagOStuff extends BagOStuff {
         * @return bool
         */
        protected function doChangeTTL( $key, $exptime, $flags ) {
-               $expiry = $this->convertToExpiry( $exptime );
-               $delete = ( $expiry != 0 && $expiry < $this->getCurrentTime() );
-
                if ( !$this->lock( $key, 0 ) ) {
                        return false;
                }
+
+               $expiry = $this->getExpirationAsTimestamp( $exptime );
+               $delete = ( $expiry != self::TTL_INDEFINITE && $expiry < $this->getCurrentTime() );
+
                // Use doGet() to avoid having to trigger resolveSegments()
                $blob = $this->doGet( $key, self::READ_LATEST );
                if ( $blob ) {
@@ -782,11 +783,12 @@ abstract class MediumSpecificBagOStuff extends BagOStuff {
        }
 
        /**
-        * @param int $exptime
-        * @return bool
+        * @param int|float $exptime
+        * @return bool Whether the expiry is non-infinite, and, negative or not a UNIX timestamp
+        * @since 1.34
         */
-       final protected function expiryIsRelative( $exptime ) {
-               return ( $exptime != 0 && $exptime < ( 10 * self::TTL_YEAR ) );
+       final protected function isRelativeExpiration( $exptime ) {
+               return ( $exptime !== self::TTL_INDEFINITE && $exptime < ( 10 * self::TTL_YEAR ) );
        }
 
        /**
@@ -799,11 +801,16 @@ abstract class MediumSpecificBagOStuff extends BagOStuff {
         *   - positive (>= 10 years): absolute UNIX timestamp; return this value
         *
         * @param int $exptime
-        * @return int Absolute TTL or 0 for indefinite
+        * @return int Expiration timestamp or TTL_INDEFINITE for indefinite
+        * @since 1.34
         */
-       final protected function convertToExpiry( $exptime ) {
-               return $this->expiryIsRelative( $exptime )
-                       ? (int)$this->getCurrentTime() + $exptime
+       final protected function getExpirationAsTimestamp( $exptime ) {
+               if ( $exptime == self::TTL_INDEFINITE ) {
+                       return $exptime;
+               }
+
+               return $this->isRelativeExpiration( $exptime )
+                       ? intval( $this->getCurrentTime() + $exptime )
                        : $exptime;
        }
 
@@ -818,12 +825,17 @@ abstract class MediumSpecificBagOStuff extends BagOStuff {
         *   - positive (>= 10 years): absolute UNIX timestamp; return offset to current time
         *
         * @param int $exptime
-        * @return int Relative TTL or 0 for indefinite
+        * @return int Relative TTL or TTL_INDEFINITE for indefinite
+        * @since 1.34
         */
-       final protected function convertToRelative( $exptime ) {
-               return $this->expiryIsRelative( $exptime ) || !$exptime
-                       ? (int)$exptime
-                       : max( $exptime - (int)$this->getCurrentTime(), 1 );
+       final protected function getExpirationAsTTL( $exptime ) {
+               if ( $exptime == self::TTL_INDEFINITE ) {
+                       return $exptime;
+               }
+
+               return $this->isRelativeExpiration( $exptime )
+                       ? $exptime
+                       : (int)max( $exptime - $this->getCurrentTime(), 1 );
        }
 
        /**
index 9f1c98a..dc40931 100644 (file)
@@ -96,18 +96,24 @@ abstract class MemcachedBagOStuff extends MediumSpecificBagOStuff {
        }
 
        /**
-        * TTLs higher than 30 days will be detected as absolute TTLs
-        * (UNIX timestamps), and will result in the cache entry being
-        * discarded immediately because the expiry is in the past.
-        * Clamp expires >30d at 30d, unless they're >=1e9 in which
-        * case they are likely to really be absolute (1e9 = 2011-09-09)
-        * @param int $expiry
+        * @param int|float $exptime
         * @return int
         */
-       function fixExpiry( $expiry ) {
-               if ( $expiry > 2592000 && $expiry < 1000000000 ) {
-                       $expiry = 2592000;
+       protected function fixExpiry( $exptime ) {
+               if ( $exptime < 0 ) {
+                       // The PECL driver does not seem to like negative relative values
+                       $expiresAt = $this->getCurrentTime() + $exptime;
+               } elseif ( $this->isRelativeExpiration( $exptime ) ) {
+                       // TTLs higher than 30 days will be detected as absolute TTLs
+                       // (UNIX timestamps), and will result in the cache entry being
+                       // discarded immediately because the expiry is in the past.
+                       // Clamp expires >30d at 30d, unless they're >=1e9 in which
+                       // case they are likely to really be absolute (1e9 = 2011-09-09)
+                       $expiresAt = min( $exptime, self::TTL_MONTH );
+               } else {
+                       $expiresAt = $exptime;
                }
-               return (int)$expiry;
+
+               return (int)$expiresAt;
        }
 }
index 87d26ef..f75d3a1 100644 (file)
@@ -21,8 +21,9 @@
  */
 
 /**
- * Redis-based caching module for redis server >= 2.6.12
+ * Redis-based caching module for redis server >= 2.6.12 and phpredis >= 2.2.4
  *
+ * @see https://github.com/phpredis/phpredis/blob/d310ed7c8/Changelog.md
  * @note Avoid use of Redis::MULTI transactions for twemproxy support
  *
  * @ingroup Cache
@@ -115,7 +116,7 @@ class RedisBagOStuff extends MediumSpecificBagOStuff {
                        return false;
                }
 
-               $ttl = $this->convertToRelative( $exptime );
+               $ttl = $this->getExpirationAsTTL( $exptime );
 
                $e = null;
                try {
@@ -143,7 +144,7 @@ class RedisBagOStuff extends MediumSpecificBagOStuff {
                $e = null;
                try {
                        // Note that redis does not return false if the key was not there
-                       $result = ( $conn->delete( $key ) !== false );
+                       $result = ( $conn->del( $key ) !== false );
                } catch ( RedisException $e ) {
                        $result = false;
                        $this->handleException( $conn, $e );
@@ -212,7 +213,7 @@ class RedisBagOStuff extends MediumSpecificBagOStuff {
                        }
                }
 
-               $ttl = $this->convertToRelative( $exptime );
+               $ttl = $this->getExpirationAsTTL( $exptime );
                $op = $ttl ? 'setex' : 'set';
 
                $result = true;
@@ -269,7 +270,7 @@ class RedisBagOStuff extends MediumSpecificBagOStuff {
                                // Avoid delete() with array to reduce CPU hogging from a single request
                                $conn->multi( Redis::PIPELINE );
                                foreach ( $batchKeys as $key ) {
-                                       $conn->delete( $key );
+                                       $conn->del( $key );
                                }
                                $batchResult = $conn->exec();
                                if ( $batchResult === false ) {
@@ -302,8 +303,10 @@ class RedisBagOStuff extends MediumSpecificBagOStuff {
                        }
                }
 
-               $relative = $this->expiryIsRelative( $exptime );
-               $op = ( $exptime == 0 ) ? 'persist' : ( $relative ? 'expire' : 'expireAt' );
+               $relative = $this->isRelativeExpiration( $exptime );
+               $op = ( $exptime == self::TTL_INDEFINITE )
+                       ? 'persist'
+                       : ( $relative ? 'expire' : 'expireAt' );
 
                $result = true;
                foreach ( $batches as $server => $batchKeys ) {
@@ -313,12 +316,12 @@ class RedisBagOStuff extends MediumSpecificBagOStuff {
                        try {
                                $conn->multi( Redis::PIPELINE );
                                foreach ( $batchKeys as $key ) {
-                                       if ( $exptime == 0 ) {
+                                       if ( $exptime == self::TTL_INDEFINITE ) {
                                                $conn->persist( $key );
                                        } elseif ( $relative ) {
-                                               $conn->expire( $key, $this->convertToRelative( $exptime ) );
+                                               $conn->expire( $key, $this->getExpirationAsTTL( $exptime ) );
                                        } else {
-                                               $conn->expireAt( $key, $this->convertToExpiry( $exptime ) );
+                                               $conn->expireAt( $key, $this->getExpirationAsTimestamp( $exptime ) );
                                        }
                                }
                                $batchResult = $conn->exec();
@@ -344,7 +347,7 @@ class RedisBagOStuff extends MediumSpecificBagOStuff {
                        return false;
                }
 
-               $ttl = $this->convertToRelative( $expiry );
+               $ttl = $this->getExpirationAsTTL( $expiry );
                try {
                        $result = $conn->set(
                                $key,
@@ -389,16 +392,16 @@ class RedisBagOStuff extends MediumSpecificBagOStuff {
                        return false;
                }
 
-               $relative = $this->expiryIsRelative( $exptime );
+               $relative = $this->isRelativeExpiration( $exptime );
                try {
-                       if ( $exptime == 0 ) {
+                       if ( $exptime == self::TTL_INDEFINITE ) {
                                $result = $conn->persist( $key );
                                $this->logRequest( 'persist', $key, $conn->getServer(), $result );
                        } elseif ( $relative ) {
-                               $result = $conn->expire( $key, $this->convertToRelative( $exptime ) );
+                               $result = $conn->expire( $key, $this->getExpirationAsTTL( $exptime ) );
                                $this->logRequest( 'expire', $key, $conn->getServer(), $result );
                        } else {
-                               $result = $conn->expireAt( $key, $this->convertToExpiry( $exptime ) );
+                               $result = $conn->expireAt( $key, $this->getExpirationAsTimestamp( $exptime ) );
                                $this->logRequest( 'expireAt', $key, $conn->getServer(), $result );
                        }
                } catch ( RedisException $e ) {
index 8b65397..aa8a899 100644 (file)
@@ -453,7 +453,6 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                // we auto-detect the first available driver. For types without built-in support,
                // an class named "Database<Type>" us used, eg. DatabaseFoo for type 'foo'.
                static $builtinTypes = [
-                       'mssql' => DatabaseMssql::class,
                        'mysql' => [ 'mysqli' => DatabaseMysqli::class ],
                        'sqlite' => DatabaseSqlite::class,
                        'postgres' => DatabasePostgres::class,
@@ -1337,7 +1336,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                // Avoid the overhead of logging calls unless debug mode is enabled
                if ( $this->getFlag( self::DBO_DEBUG ) ) {
                        $this->queryLogger->debug(
-                               "{method} [{runtime}s]: $sql",
+                               "{method} [{runtime}s] {db_host}: $sql",
                                [
                                        'method' => $fname,
                                        'db_host' => $this->getServer(),
@@ -1715,10 +1714,6 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                        $startOpts .= ' /*! STRAIGHT_JOIN */';
                }
 
-               if ( isset( $noKeyOptions['HIGH_PRIORITY'] ) ) {
-                       $startOpts .= ' HIGH_PRIORITY';
-               }
-
                if ( isset( $noKeyOptions['SQL_BIG_RESULT'] ) ) {
                        $startOpts .= ' SQL_BIG_RESULT';
                }
@@ -1735,14 +1730,6 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                        $startOpts .= ' SQL_CALC_FOUND_ROWS';
                }
 
-               if ( isset( $noKeyOptions['SQL_CACHE'] ) ) {
-                       $startOpts .= ' SQL_CACHE';
-               }
-
-               if ( isset( $noKeyOptions['SQL_NO_CACHE'] ) ) {
-                       $startOpts .= ' SQL_NO_CACHE';
-               }
-
                if ( isset( $options['USE INDEX'] ) && is_string( $options['USE INDEX'] ) ) {
                        $useIndex = $this->useIndexClause( $options['USE INDEX'] );
                } else {
@@ -2390,6 +2377,12 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                $this->doSelectDomain( DatabaseDomain::newFromId( $domain ) );
        }
 
+       /**
+        * @param DatabaseDomain $domain
+        * @throws DBConnectionError
+        * @throws DBError
+        * @since 1.32
+        */
        protected function doSelectDomain( DatabaseDomain $domain ) {
                $this->currentDomain = $domain;
        }
diff --git a/includes/libs/rdbms/database/DatabaseMssql.php b/includes/libs/rdbms/database/DatabaseMssql.php
deleted file mode 100644 (file)
index db029a3..0000000
+++ /dev/null
@@ -1,1419 +0,0 @@
-<?php
-/**
- * This is the MS SQL Server Native database abstraction layer.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Database
- * @author Joel Penner <a-joelpe at microsoft dot com>
- * @author Chris Pucci <a-cpucci at microsoft dot com>
- * @author Ryan Biesemeyer <v-ryanbi at microsoft dot com>
- * @author Ryan Schmidt <skizzerz at gmail dot com>
- */
-
-namespace Wikimedia\Rdbms;
-
-use Exception;
-use RuntimeException;
-use stdClass;
-use Wikimedia\AtEase\AtEase;
-
-/**
- * @ingroup Database
- */
-class DatabaseMssql extends Database {
-       /** @var int */
-       protected $serverPort;
-       /** @var bool */
-       protected $useWindowsAuth = false;
-       /** @var int|null */
-       protected $lastInsertId = null;
-       /** @var int|null */
-       protected $lastAffectedRowCount = null;
-       /** @var int */
-       protected $subqueryId = 0;
-       /** @var bool */
-       protected $scrollableCursor = true;
-       /** @var bool */
-       protected $prepareStatements = true;
-       /** @var stdClass[][]|null */
-       protected $binaryColumnCache = null;
-       /** @var stdClass[][]|null */
-       protected $bitColumnCache = null;
-       /** @var bool */
-       protected $ignoreDupKeyErrors = false;
-       /** @var string[] */
-       protected $ignoreErrors = [];
-
-       public function implicitOrderby() {
-               return false;
-       }
-
-       public function unionSupportsOrderAndLimit() {
-               return false;
-       }
-
-       public function __construct( array $params ) {
-               $this->serverPort = $params['port'];
-               $this->useWindowsAuth = $params['UseWindowsAuth'];
-
-               parent::__construct( $params );
-       }
-
-       protected function open( $server, $user, $password, $dbName, $schema, $tablePrefix ) {
-               if ( !function_exists( 'sqlsrv_connect' ) ) {
-                       throw new DBConnectionError(
-                               $this,
-                               "Microsoft SQL Server Native (sqlsrv) functions missing.\n
-                               You can download the driver from: http://go.microsoft.com/fwlink/?LinkId=123470"
-                       );
-               }
-
-               $this->close();
-
-               if ( $schema !== null ) {
-                       throw $this->newExceptionAfterConnectError( "Got schema '$schema'; not supported." );
-               }
-
-               $this->server = $server;
-               $this->user = $user;
-               $this->password = $password;
-
-               $connectionInfo = [];
-               if ( strlen( $dbName ) ) {
-                       $connectionInfo['Database'] = $dbName;
-               }
-               if ( !$this->useWindowsAuth ) {
-                       $connectionInfo['UID'] = $user;
-                       $connectionInfo['PWD'] = $password;
-               }
-
-               AtEase::suppressWarnings();
-               $this->conn = sqlsrv_connect( $server, $connectionInfo ) ?: null;
-               AtEase::restoreWarnings();
-
-               if ( !$this->conn ) {
-                       throw $this->newExceptionAfterConnectError( $this->lastError() );
-               }
-
-               try {
-                       $this->currentDomain = new DatabaseDomain(
-                               strlen( $dbName ) ? $dbName : null,
-                               null,
-                               $tablePrefix
-                       );
-               } catch ( Exception $e ) {
-                       throw $this->newExceptionAfterConnectError( $e->getMessage() );
-               }
-       }
-
-       /**
-        * Closes a database connection, if it is open
-        * Returns success, true if already closed
-        * @return bool
-        */
-       protected function closeConnection() {
-               return sqlsrv_close( $this->conn );
-       }
-
-       /**
-        * @param bool|MssqlResultWrapper|resource $result
-        * @return bool|MssqlResultWrapper
-        */
-       protected function resultObject( $result ) {
-               if ( !$result ) {
-                       return false;
-               } elseif ( $result instanceof MssqlResultWrapper ) {
-                       return $result;
-               } elseif ( $result === true ) {
-                       // Successful write query
-                       return $result;
-               } else {
-                       return new MssqlResultWrapper( $this, $result );
-               }
-       }
-
-       /**
-        * @param string $sql
-        * @return bool|MssqlResultWrapper|resource
-        */
-       protected function doQuery( $sql ) {
-               // several extensions seem to think that all databases support limits
-               // via LIMIT N after the WHERE clause, but  MSSQL uses SELECT TOP N,
-               // so to catch any of those extensions we'll do a quick check for a
-               // LIMIT clause and pass $sql through $this->LimitToTopN() which parses
-               // the LIMIT clause and passes the result to $this->limitResult();
-               if ( preg_match( '/\bLIMIT\s*/i', $sql ) ) {
-                       // massage LIMIT -> TopN
-                       $sql = $this->LimitToTopN( $sql );
-               }
-
-               // MSSQL doesn't have EXTRACT(epoch FROM XXX)
-               if ( preg_match( '#\bEXTRACT\s*?\(\s*?EPOCH\s+FROM\b#i', $sql, $matches ) ) {
-                       // This is same as UNIX_TIMESTAMP, we need to calc # of seconds from 1970
-                       $sql = str_replace( $matches[0], "DATEDIFF(s,CONVERT(datetime,'1/1/1970'),", $sql );
-               }
-
-               // perform query
-
-               // SQLSRV_CURSOR_STATIC is slower than SQLSRV_CURSOR_CLIENT_BUFFERED (one of the two is
-               // needed if we want to be able to seek around the result set), however CLIENT_BUFFERED
-               // has a bug in the sqlsrv driver where wchar_t types (such as nvarchar) that are empty
-               // strings make php throw a fatal error "Severe error translating Unicode"
-               if ( $this->scrollableCursor ) {
-                       $scrollArr = [ 'Scrollable' => SQLSRV_CURSOR_STATIC ];
-               } else {
-                       $scrollArr = [];
-               }
-
-               if ( $this->prepareStatements ) {
-                       // we do prepare + execute so we can get its field metadata for later usage if desired
-                       $stmt = sqlsrv_prepare( $this->conn, $sql, [], $scrollArr );
-                       $success = sqlsrv_execute( $stmt );
-               } else {
-                       $stmt = sqlsrv_query( $this->conn, $sql, [], $scrollArr );
-                       $success = (bool)$stmt;
-               }
-
-               // Make a copy to ensure what we add below does not get reflected in future queries
-               $ignoreErrors = $this->ignoreErrors;
-
-               if ( $this->ignoreDupKeyErrors ) {
-                       // ignore duplicate key errors
-                       // this emulates INSERT IGNORE in MySQL
-                       $ignoreErrors[] = '2601'; // duplicate key error caused by unique index
-                       $ignoreErrors[] = '2627'; // duplicate key error caused by primary key
-                       $ignoreErrors[] = '3621'; // generic "the statement has been terminated" error
-               }
-
-               if ( $success === false ) {
-                       $errors = sqlsrv_errors();
-                       $success = true;
-
-                       foreach ( $errors as $err ) {
-                               if ( !in_array( $err['code'], $ignoreErrors ) ) {
-                                       $success = false;
-                                       break;
-                               }
-                       }
-
-                       if ( $success === false ) {
-                               return false;
-                       }
-               }
-               // remember number of rows affected
-               $this->lastAffectedRowCount = sqlsrv_rows_affected( $stmt );
-
-               return $stmt;
-       }
-
-       public function freeResult( $res ) {
-               sqlsrv_free_stmt( ResultWrapper::unwrap( $res ) );
-       }
-
-       /**
-        * @param IResultWrapper $res
-        * @return stdClass
-        */
-       public function fetchObject( $res ) {
-               // $res is expected to be an instance of MssqlResultWrapper here
-               return $res->fetchObject();
-       }
-
-       /**
-        * @param IResultWrapper $res
-        * @return array
-        */
-       public function fetchRow( $res ) {
-               return $res->fetchRow();
-       }
-
-       /**
-        * @param mixed $res
-        * @return int
-        */
-       public function numRows( $res ) {
-               $res = ResultWrapper::unwrap( $res );
-
-               $ret = sqlsrv_num_rows( $res );
-               if ( $ret === false ) {
-                       // we cannot get an amount of rows from this cursor type
-                       // has_rows returns bool true/false if the result has rows
-                       $ret = (int)sqlsrv_has_rows( $res );
-               }
-
-               return $ret;
-       }
-
-       /**
-        * @param mixed $res
-        * @return int
-        */
-       public function numFields( $res ) {
-               return sqlsrv_num_fields( ResultWrapper::unwrap( $res ) );
-       }
-
-       /**
-        * @param mixed $res
-        * @param int $n
-        * @return int
-        */
-       public function fieldName( $res, $n ) {
-               return sqlsrv_field_metadata( ResultWrapper::unwrap( $res ) )[$n]['Name'];
-       }
-
-       /**
-        * This must be called after nextSequenceVal
-        * @return int|null
-        */
-       public function insertId() {
-               return $this->lastInsertId;
-       }
-
-       /**
-        * @param MssqlResultWrapper $res
-        * @param int $row
-        * @return bool
-        */
-       public function dataSeek( $res, $row ) {
-               return $res->seek( $row );
-       }
-
-       /**
-        * @return string
-        */
-       public function lastError() {
-               $strRet = '';
-               $retErrors = sqlsrv_errors( SQLSRV_ERR_ALL );
-               if ( $retErrors != null ) {
-                       foreach ( $retErrors as $arrError ) {
-                               $strRet .= $this->formatError( $arrError ) . "\n";
-                       }
-               } else {
-                       $strRet = "No errors found";
-               }
-
-               return $strRet;
-       }
-
-       /**
-        * @param array $err
-        * @return string
-        */
-       private function formatError( $err ) {
-               return '[SQLSTATE ' .
-                       $err['SQLSTATE'] . '][Error Code ' . $err['code'] . ']' . $err['message'];
-       }
-
-       /**
-        * @return string|int
-        */
-       public function lastErrno() {
-               $err = sqlsrv_errors( SQLSRV_ERR_ALL );
-               if ( $err !== null && isset( $err[0] ) ) {
-                       return $err[0]['code'];
-               } else {
-                       return 0;
-               }
-       }
-
-       protected function wasKnownStatementRollbackError() {
-               $errors = sqlsrv_errors( SQLSRV_ERR_ALL );
-               if ( !$errors ) {
-                       return false;
-               }
-               // The transaction vs statement rollback behavior depends on XACT_ABORT, so make sure
-               // that the "statement has been terminated" error (3621) is specifically present.
-               // https://docs.microsoft.com/en-us/sql/t-sql/statements/set-xact-abort-transact-sql
-               $statementOnly = false;
-               $codeWhitelist = [ '2601', '2627', '547' ];
-               foreach ( $errors as $error ) {
-                       if ( $error['code'] == '3621' ) {
-                               $statementOnly = true;
-                       } elseif ( !in_array( $error['code'], $codeWhitelist ) ) {
-                               $statementOnly = false;
-                               break;
-                       }
-               }
-
-               return $statementOnly;
-       }
-
-       public function serverIsReadOnly() {
-               $encDatabase = $this->addQuotes( $this->getDBname() );
-               $res = $this->query(
-                       "SELECT IS_READ_ONLY FROM SYS.DATABASES WHERE NAME = $encDatabase",
-                       __METHOD__
-               );
-               $row = $this->fetchObject( $res );
-
-               return $row ? (bool)$row->IS_READ_ONLY : false;
-       }
-
-       /**
-        * @return int
-        */
-       protected function fetchAffectedRowCount() {
-               return $this->lastAffectedRowCount;
-       }
-
-       /**
-        * SELECT wrapper
-        *
-        * @param mixed $table Array or string, table name(s) (prefix auto-added)
-        * @param mixed $vars Array or string, field name(s) to be retrieved
-        * @param mixed $conds Array or string, condition(s) for WHERE
-        * @param string $fname Calling function name (use __METHOD__) for logs/profiling
-        * @param array $options Associative array of options (e.g.
-        *   [ 'GROUP BY' => 'page_title' ]), see Database::makeSelectOptions
-        *   code for list of supported stuff
-        * @param array $join_conds Associative array of table join conditions
-        *   (optional) (e.g. [ 'page' => [ 'LEFT JOIN','page_latest=rev_id' ] ]
-        * @return mixed Database result resource (feed to Database::fetchObject
-        *   or whatever), or false on failure
-        * @throws DBQueryError
-        * @throws DBUnexpectedError
-        * @throws Exception
-        */
-       public function select( $table, $vars, $conds = '', $fname = __METHOD__,
-               $options = [], $join_conds = []
-       ) {
-               $sql = $this->selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
-               if ( isset( $options['EXPLAIN'] ) ) {
-                       try {
-                               $this->scrollableCursor = false;
-                               $this->prepareStatements = false;
-                               $this->query( "SET SHOWPLAN_ALL ON" );
-                               $ret = $this->query( $sql, $fname );
-                               $this->query( "SET SHOWPLAN_ALL OFF" );
-                       } catch ( DBQueryError $dqe ) {
-                               if ( isset( $options['FOR COUNT'] ) ) {
-                                       // likely don't have privs for SHOWPLAN, so run a select count instead
-                                       $this->query( "SET SHOWPLAN_ALL OFF" );
-                                       unset( $options['EXPLAIN'] );
-                                       $ret = $this->select(
-                                               $table,
-                                               'COUNT(*) AS EstimateRows',
-                                               $conds,
-                                               $fname,
-                                               $options,
-                                               $join_conds
-                                       );
-                               } else {
-                                       // someone actually wanted the query plan instead of an est row count
-                                       // let them know of the error
-                                       $this->scrollableCursor = true;
-                                       $this->prepareStatements = true;
-                                       throw $dqe;
-                               }
-                       }
-                       $this->scrollableCursor = true;
-                       $this->prepareStatements = true;
-                       return $ret;
-               }
-               return $this->query( $sql, $fname );
-       }
-
-       /**
-        * SELECT wrapper
-        *
-        * @param mixed $table Array or string, table name(s) (prefix auto-added)
-        * @param mixed $vars Array or string, field name(s) to be retrieved
-        * @param mixed $conds Array or string, condition(s) for WHERE
-        * @param string $fname Calling function name (use __METHOD__) for logs/profiling
-        * @param array $options Associative array of options (e.g. [ 'GROUP BY' => 'page_title' ]),
-        *   see Database::makeSelectOptions code for list of supported stuff
-        * @param array $join_conds Associative array of table join conditions (optional)
-        *    (e.g. [ 'page' => [ 'LEFT JOIN','page_latest=rev_id' ] ]
-        * @return string The SQL text
-        */
-       public function selectSQLText( $table, $vars, $conds = '', $fname = __METHOD__,
-               $options = [], $join_conds = []
-       ) {
-               if ( isset( $options['EXPLAIN'] ) ) {
-                       unset( $options['EXPLAIN'] );
-               }
-
-               $sql = parent::selectSQLText( $table, $vars, $conds, $fname, $options, $join_conds );
-
-               // try to rewrite aggregations of bit columns (currently MAX and MIN)
-               if ( strpos( $sql, 'MAX(' ) !== false || strpos( $sql, 'MIN(' ) !== false ) {
-                       $bitColumns = [];
-                       if ( is_array( $table ) ) {
-                               $tables = $table;
-                               while ( $tables ) {
-                                       $t = array_pop( $tables );
-                                       if ( is_array( $t ) ) {
-                                               $tables = array_merge( $tables, $t );
-                                       } else {
-                                               $bitColumns += $this->getBitColumns( $this->tableName( $t ) );
-                                       }
-                               }
-                       } else {
-                               $bitColumns = $this->getBitColumns( $this->tableName( $table ) );
-                       }
-
-                       foreach ( $bitColumns as $col => $info ) {
-                               $replace = [
-                                       "MAX({$col})" => "MAX(CAST({$col} AS tinyint))",
-                                       "MIN({$col})" => "MIN(CAST({$col} AS tinyint))",
-                               ];
-                               $sql = str_replace( array_keys( $replace ), array_values( $replace ), $sql );
-                       }
-               }
-
-               return $sql;
-       }
-
-       public function deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds,
-               $fname = __METHOD__
-       ) {
-               $this->scrollableCursor = false;
-               try {
-                       parent::deleteJoin( $delTable, $joinTable, $delVar, $joinVar, $conds, $fname );
-               } catch ( Exception $e ) {
-                       $this->scrollableCursor = true;
-                       throw $e;
-               }
-               $this->scrollableCursor = true;
-       }
-
-       public function delete( $table, $conds, $fname = __METHOD__ ) {
-               $this->scrollableCursor = false;
-               try {
-                       parent::delete( $table, $conds, $fname );
-               } catch ( Exception $e ) {
-                       $this->scrollableCursor = true;
-                       throw $e;
-               }
-               $this->scrollableCursor = true;
-
-               return true;
-       }
-
-       /**
-        * Estimate rows in dataset
-        * Returns estimated count, based on SHOWPLAN_ALL output
-        * This is not necessarily an accurate estimate, so use sparingly
-        * Returns -1 if count cannot be found
-        * Takes same arguments as Database::select()
-        * @param string $table
-        * @param string $var
-        * @param string $conds
-        * @param string $fname
-        * @param array $options
-        * @param array $join_conds
-        * @return int
-        */
-       public function estimateRowCount( $table, $var = '*', $conds = '',
-               $fname = __METHOD__, $options = [], $join_conds = []
-       ) {
-               $conds = $this->normalizeConditions( $conds, $fname );
-               $column = $this->extractSingleFieldFromList( $var );
-               if ( is_string( $column ) && !in_array( $column, [ '*', '1' ] ) ) {
-                       $conds[] = "$column IS NOT NULL";
-               }
-
-               // http://msdn2.microsoft.com/en-us/library/aa259203.aspx
-               $options['EXPLAIN'] = true;
-               $options['FOR COUNT'] = true;
-               $res = $this->select( $table, $var, $conds, $fname, $options, $join_conds );
-
-               $rows = -1;
-               if ( $res ) {
-                       $row = $this->fetchRow( $res );
-
-                       if ( isset( $row['EstimateRows'] ) ) {
-                               $rows = (int)$row['EstimateRows'];
-                       }
-               }
-
-               return $rows;
-       }
-
-       /**
-        * Returns information about an index
-        * If errors are explicitly ignored, returns NULL on failure
-        * @param string $table
-        * @param string $index
-        * @param string $fname
-        * @return array|bool|null
-        */
-       public function indexInfo( $table, $index, $fname = __METHOD__ ) {
-               # This does not return the same info as MYSQL would, but that's OK
-               # because MediaWiki never uses the returned value except to check for
-               # the existence of indexes.
-               $sql = "sp_helpindex '" . $this->tableName( $table ) . "'";
-               $res = $this->query( $sql, $fname );
-
-               if ( !$res ) {
-                       return null;
-               }
-
-               $result = [];
-               foreach ( $res as $row ) {
-                       if ( $row->index_name == $index ) {
-                               $row->Non_unique = !stristr( $row->index_description, "unique" );
-                               $cols = explode( ", ", $row->index_keys );
-                               foreach ( $cols as $col ) {
-                                       $row->Column_name = trim( $col );
-                                       $result[] = clone $row;
-                               }
-                       } elseif ( $index == 'PRIMARY' && stristr( $row->index_description, 'PRIMARY' ) ) {
-                               $row->Non_unique = 0;
-                               $cols = explode( ", ", $row->index_keys );
-                               foreach ( $cols as $col ) {
-                                       $row->Column_name = trim( $col );
-                                       $result[] = clone $row;
-                               }
-                       }
-               }
-
-               return $result ?: false;
-       }
-
-       /**
-        * INSERT wrapper, inserts an array into a table
-        *
-        * $arrToInsert may be a single associative array, or an array of these with numeric keys, for
-        * multi-row insert.
-        *
-        * Usually aborts on failure
-        * If errors are explicitly ignored, returns success
-        * @param string $table
-        * @param array $arrToInsert
-        * @param string $fname
-        * @param array $options
-        * @return bool
-        * @throws Exception
-        */
-       public function insert( $table, $arrToInsert, $fname = __METHOD__, $options = [] ) {
-               # No rows to insert, easy just return now
-               if ( !count( $arrToInsert ) ) {
-                       return true;
-               }
-
-               if ( !is_array( $options ) ) {
-                       $options = [ $options ];
-               }
-
-               $table = $this->tableName( $table );
-
-               if ( !( isset( $arrToInsert[0] ) && is_array( $arrToInsert[0] ) ) ) { // Not multi row
-                       $arrToInsert = [ 0 => $arrToInsert ]; // make everything multi row compatible
-               }
-
-               // We know the table we're inserting into, get its identity column
-               $identity = null;
-               // strip matching square brackets and the db/schema from table name
-               $tableRawArr = explode( '.', preg_replace( '#\[([^\]]*)\]#', '$1', $table ) );
-               $tableRaw = array_pop( $tableRawArr );
-               $res = $this->doQuery(
-                       "SELECT NAME AS idColumn FROM SYS.IDENTITY_COLUMNS " .
-                               "WHERE OBJECT_NAME(OBJECT_ID)='{$tableRaw}'"
-               );
-               if ( $res && sqlsrv_has_rows( $res ) ) {
-                       // There is an identity for this table.
-                       $identityArr = sqlsrv_fetch_array( $res, SQLSRV_FETCH_ASSOC );
-                       $identity = array_pop( $identityArr );
-               }
-               sqlsrv_free_stmt( $res );
-
-               // Determine binary/varbinary fields so we can encode data as a hex string like 0xABCDEF
-               $binaryColumns = $this->getBinaryColumns( $table );
-
-               // INSERT IGNORE is not supported by SQL Server
-               // remove IGNORE from options list and set ignore flag to true
-               if ( in_array( 'IGNORE', $options ) ) {
-                       $options = array_diff( $options, [ 'IGNORE' ] );
-                       $this->ignoreDupKeyErrors = true;
-               }
-
-               $ret = null;
-               foreach ( $arrToInsert as $a ) {
-                       // start out with empty identity column, this is so we can return
-                       // it as a result of the INSERT logic
-                       $sqlPre = '';
-                       $sqlPost = '';
-                       $identityClause = '';
-
-                       // if we have an identity column
-                       if ( $identity ) {
-                               // iterate through
-                               foreach ( $a as $k => $v ) {
-                                       if ( $k == $identity ) {
-                                               if ( !is_null( $v ) ) {
-                                                       // there is a value being passed to us,
-                                                       // we need to turn on and off inserted identity
-                                                       $sqlPre = "SET IDENTITY_INSERT $table ON;";
-                                                       $sqlPost = ";SET IDENTITY_INSERT $table OFF;";
-                                               } else {
-                                                       // we can't insert NULL into an identity column,
-                                                       // so remove the column from the insert.
-                                                       unset( $a[$k] );
-                                               }
-                                       }
-                               }
-
-                               // we want to output an identity column as result
-                               $identityClause = "OUTPUT INSERTED.$identity ";
-                       }
-
-                       $keys = array_keys( $a );
-
-                       // Build the actual query
-                       $sql = $sqlPre . 'INSERT ' . implode( ' ', $options ) .
-                               " INTO $table (" . implode( ',', $keys ) . ") $identityClause VALUES (";
-
-                       $first = true;
-                       foreach ( $a as $key => $value ) {
-                               if ( isset( $binaryColumns[$key] ) ) {
-                                       $value = new MssqlBlob( $value );
-                               }
-                               if ( $first ) {
-                                       $first = false;
-                               } else {
-                                       $sql .= ',';
-                               }
-                               if ( is_null( $value ) ) {
-                                       $sql .= 'null';
-                               } else {
-                                       $sql .= $this->addQuotes( $value );
-                               }
-                       }
-                       $sql .= ')' . $sqlPost;
-
-                       // Run the query
-                       $this->scrollableCursor = false;
-                       try {
-                               $ret = $this->query( $sql );
-                       } catch ( Exception $e ) {
-                               $this->scrollableCursor = true;
-                               $this->ignoreDupKeyErrors = false;
-                               throw $e;
-                       }
-                       $this->scrollableCursor = true;
-
-                       if ( $ret instanceof IResultWrapper && !is_null( $identity ) ) {
-                               // Then we want to get the identity column value we were assigned and save it off
-                               $row = $ret->fetchObject();
-                               if ( is_object( $row ) ) {
-                                       $this->lastInsertId = $row->$identity;
-                                       // It seems that mAffectedRows is -1 sometimes when OUTPUT INSERTED.identity is
-                                       // used if we got an identity back, we know for sure a row was affected, so
-                                       // adjust that here
-                                       if ( $this->lastAffectedRowCount == -1 ) {
-                                               $this->lastAffectedRowCount = 1;
-                                       }
-                               }
-                       }
-               }
-
-               $this->ignoreDupKeyErrors = false;
-
-               return true;
-       }
-
-       /**
-        * INSERT SELECT wrapper
-        * $varMap must be an associative array of the form [ 'dest1' => 'source1', ... ]
-        * Source items may be literals rather than field names, but strings should
-        * be quoted with Database::addQuotes().
-        * @param string $destTable
-        * @param array|string $srcTable May be an array of tables.
-        * @param array $varMap
-        * @param array $conds May be "*" to copy the whole table.
-        * @param string $fname
-        * @param array $insertOptions
-        * @param array $selectOptions
-        * @param array $selectJoinConds
-        * @throws Exception
-        */
-       protected function nativeInsertSelect( $destTable, $srcTable, $varMap, $conds, $fname = __METHOD__,
-               $insertOptions = [], $selectOptions = [], $selectJoinConds = []
-       ) {
-               $this->scrollableCursor = false;
-               try {
-                       parent::nativeInsertSelect(
-                               $destTable,
-                               $srcTable,
-                               $varMap,
-                               $conds,
-                               $fname,
-                               $insertOptions,
-                               $selectOptions,
-                               $selectJoinConds
-                       );
-               } catch ( Exception $e ) {
-                       $this->scrollableCursor = true;
-                       throw $e;
-               }
-               $this->scrollableCursor = true;
-       }
-
-       /**
-        * UPDATE wrapper. Takes a condition array and a SET array.
-        *
-        * @param string $table Name of the table to UPDATE. This will be passed through
-        *                Database::tableName().
-        *
-        * @param array $values An array of values to SET. For each array element,
-        *                the key gives the field name, and the value gives the data
-        *                to set that field to. The data will be quoted by
-        *                Database::addQuotes().
-        *
-        * @param array $conds An array of conditions (WHERE). See
-        *                Database::select() for the details of the format of
-        *                condition arrays. Use '*' to update all rows.
-        *
-        * @param string $fname The function name of the caller (from __METHOD__),
-        *                for logging and profiling.
-        *
-        * @param array $options An array of UPDATE options, can be:
-        *                   - IGNORE: Ignore unique key conflicts
-        *                   - LOW_PRIORITY: MySQL-specific, see MySQL manual.
-        * @return bool
-        * @throws DBUnexpectedError
-        * @throws Exception
-        */
-       function update( $table, $values, $conds, $fname = __METHOD__, $options = [] ) {
-               $table = $this->tableName( $table );
-               $binaryColumns = $this->getBinaryColumns( $table );
-
-               $opts = $this->makeUpdateOptions( $options );
-               $sql = "UPDATE $opts $table SET " . $this->makeList( $values, LIST_SET, $binaryColumns );
-
-               if ( $conds !== [] && $conds !== '*' ) {
-                       $sql .= " WHERE " . $this->makeList( $conds, LIST_AND, $binaryColumns );
-               }
-
-               $this->scrollableCursor = false;
-               try {
-                       $this->query( $sql );
-               } catch ( Exception $e ) {
-                       $this->scrollableCursor = true;
-                       throw $e;
-               }
-               $this->scrollableCursor = true;
-               return true;
-       }
-
-       /**
-        * Makes an encoded list of strings from an array
-        * @param array $a Containing the data
-        * @param int $mode Constant
-        *      - LIST_COMMA:          comma separated, no field names
-        *      - LIST_AND:            ANDed WHERE clause (without the WHERE). See
-        *        the documentation for $conds in Database::select().
-        *      - LIST_OR:             ORed WHERE clause (without the WHERE)
-        *      - LIST_SET:            comma separated with field names, like a SET clause
-        *      - LIST_NAMES:          comma separated field names
-        * @param array $binaryColumns Contains a list of column names that are binary types
-        *      This is a custom parameter only present for MS SQL.
-        *
-        * @throws DBUnexpectedError
-        * @return string
-        */
-       public function makeList( $a, $mode = LIST_COMMA, $binaryColumns = [] ) {
-               if ( !is_array( $a ) ) {
-                       throw new DBUnexpectedError( $this, __METHOD__ . ' called with incorrect parameters' );
-               }
-
-               if ( $mode != LIST_NAMES ) {
-                       // In MS SQL, values need to be specially encoded when they are
-                       // inserted into binary fields. Perform this necessary encoding
-                       // for the specified set of columns.
-                       foreach ( array_keys( $a ) as $field ) {
-                               if ( !isset( $binaryColumns[$field] ) ) {
-                                       continue;
-                               }
-
-                               if ( is_array( $a[$field] ) ) {
-                                       foreach ( $a[$field] as &$v ) {
-                                               $v = new MssqlBlob( $v );
-                                       }
-                                       unset( $v );
-                               } else {
-                                       $a[$field] = new MssqlBlob( $a[$field] );
-                               }
-                       }
-               }
-
-               return parent::makeList( $a, $mode );
-       }
-
-       /**
-        * @param string $table
-        * @param string $field
-        * @return int Returns the size of a text field, or -1 for "unlimited"
-        */
-       public function textFieldSize( $table, $field ) {
-               $table = $this->tableName( $table );
-               $sql = "SELECT CHARACTER_MAXIMUM_LENGTH,DATA_TYPE FROM INFORMATION_SCHEMA.Columns
-                       WHERE TABLE_NAME = '$table' AND COLUMN_NAME = '$field'";
-               $res = $this->query( $sql );
-               $row = $this->fetchRow( $res );
-               $size = -1;
-               if ( strtolower( $row['DATA_TYPE'] ) != 'text' ) {
-                       $size = $row['CHARACTER_MAXIMUM_LENGTH'];
-               }
-
-               return $size;
-       }
-
-       /**
-        * Construct a LIMIT query with optional offset
-        * This is used for query pages
-        *
-        * @param string $sql SQL query we will append the limit too
-        * @param int $limit The SQL limit
-        * @param bool|int $offset The SQL offset (default false)
-        * @return array|string
-        * @throws DBUnexpectedError
-        */
-       public function limitResult( $sql, $limit, $offset = false ) {
-               if ( $offset === false || $offset == 0 ) {
-                       if ( strpos( $sql, "SELECT" ) === false ) {
-                               return "TOP {$limit} " . $sql;
-                       } else {
-                               return preg_replace( '/\bSELECT(\s+DISTINCT)?\b/Dsi',
-                                       'SELECT$1 TOP ' . $limit, $sql, 1 );
-                       }
-               } else {
-                       // This one is fun, we need to pull out the select list as well as any ORDER BY clause
-                       $select = $orderby = [];
-                       $s1 = preg_match( '#SELECT\s+(.+?)\s+FROM#Dis', $sql, $select );
-                       $s2 = preg_match( '#(ORDER BY\s+.+?)(\s*FOR XML .*)?$#Dis', $sql, $orderby );
-                       $postOrder = '';
-                       $first = $offset + 1;
-                       $last = $offset + $limit;
-                       $sub1 = 'sub_' . $this->subqueryId;
-                       $sub2 = 'sub_' . ( $this->subqueryId + 1 );
-                       $this->subqueryId += 2;
-                       if ( !$s1 ) {
-                               // wat
-                               throw new DBUnexpectedError( $this, "Attempting to LIMIT a non-SELECT query\n" );
-                       }
-                       if ( !$s2 ) {
-                               // no ORDER BY
-                               $overOrder = 'ORDER BY (SELECT 1)';
-                       } else {
-                               if ( !isset( $orderby[2] ) || !$orderby[2] ) {
-                                       // don't need to strip it out if we're using a FOR XML clause
-                                       $sql = str_replace( $orderby[1], '', $sql );
-                               }
-                               $overOrder = $orderby[1];
-                               $postOrder = ' ' . $overOrder;
-                       }
-                       $sql = "SELECT {$select[1]}
-                                       FROM (
-                                               SELECT ROW_NUMBER() OVER({$overOrder}) AS rowNumber, *
-                                               FROM ({$sql}) {$sub1}
-                                       ) {$sub2}
-                                       WHERE rowNumber BETWEEN {$first} AND {$last}{$postOrder}";
-
-                       return $sql;
-               }
-       }
-
-       /**
-        * If there is a limit clause, parse it, strip it, and pass the remaining
-        * SQL through limitResult() with the appropriate parameters. Not the
-        * prettiest solution, but better than building a whole new parser. This
-        * exists becase there are still too many extensions that don't use dynamic
-        * sql generation.
-        *
-        * @param string $sql
-        * @return array|mixed|string
-        */
-       public function LimitToTopN( $sql ) {
-               // Matches: LIMIT {[offset,] row_count | row_count OFFSET offset}
-               $pattern = '/\bLIMIT\s+((([0-9]+)\s*,\s*)?([0-9]+)(\s+OFFSET\s+([0-9]+))?)/i';
-               if ( preg_match( $pattern, $sql, $matches ) ) {
-                       $row_count = $matches[4];
-                       $offset = $matches[3] ?: $matches[6] ?: false;
-
-                       // strip the matching LIMIT clause out
-                       $sql = str_replace( $matches[0], '', $sql );
-
-                       return $this->limitResult( $sql, $row_count, $offset );
-               }
-
-               return $sql;
-       }
-
-       /**
-        * @return string Wikitext of a link to the server software's web site
-        */
-       public function getSoftwareLink() {
-               return "[{{int:version-db-mssql-url}} MS SQL Server]";
-       }
-
-       /**
-        * @return string Version information from the database
-        */
-       public function getServerVersion() {
-               $server_info = sqlsrv_server_info( $this->conn );
-               $version = $server_info['SQLServerVersion'] ?? 'Error';
-
-               return $version;
-       }
-
-       /**
-        * @param string $table
-        * @param string $fname
-        * @return bool
-        */
-       public function tableExists( $table, $fname = __METHOD__ ) {
-               list( $db, $schema, $table ) = $this->tableName( $table, 'split' );
-
-               if ( $db !== false ) {
-                       // remote database
-                       $this->queryLogger->error( "Attempting to call tableExists on a remote table" );
-                       return false;
-               }
-
-               if ( $schema === false ) {
-                       $schema = $this->dbSchema();
-               }
-
-               $res = $this->query( "SELECT 1 FROM INFORMATION_SCHEMA.TABLES
-                       WHERE TABLE_TYPE = 'BASE TABLE'
-                       AND TABLE_SCHEMA = '$schema' AND TABLE_NAME = '$table'" );
-
-               if ( $res->numRows() ) {
-                       return true;
-               } else {
-                       return false;
-               }
-       }
-
-       /**
-        * Query whether a given column exists in the mediawiki schema
-        * @param string $table
-        * @param string $field
-        * @param string $fname
-        * @return bool
-        */
-       public function fieldExists( $table, $field, $fname = __METHOD__ ) {
-               list( $db, $schema, $table ) = $this->tableName( $table, 'split' );
-
-               if ( $db !== false ) {
-                       // remote database
-                       $this->queryLogger->error( "Attempting to call fieldExists on a remote table" );
-                       return false;
-               }
-
-               $res = $this->query( "SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS
-                       WHERE TABLE_SCHEMA = '$schema' AND TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" );
-
-               if ( $res->numRows() ) {
-                       return true;
-               } else {
-                       return false;
-               }
-       }
-
-       public function fieldInfo( $table, $field ) {
-               list( $db, $schema, $table ) = $this->tableName( $table, 'split' );
-
-               if ( $db !== false ) {
-                       // remote database
-                       $this->queryLogger->error( "Attempting to call fieldInfo on a remote table" );
-                       return false;
-               }
-
-               $res = $this->query( "SELECT * FROM INFORMATION_SCHEMA.COLUMNS
-                       WHERE TABLE_SCHEMA = '$schema' AND TABLE_NAME = '$table' AND COLUMN_NAME = '$field'" );
-
-               $meta = $res->fetchRow();
-               if ( $meta ) {
-                       return new MssqlField( $meta );
-               }
-
-               return false;
-       }
-
-       protected function doSavepoint( $identifier, $fname ) {
-               $this->query( 'SAVE TRANSACTION ' . $this->addIdentifierQuotes( $identifier ), $fname );
-       }
-
-       protected function doReleaseSavepoint( $identifier, $fname ) {
-               // Not supported. Also not really needed, a new doSavepoint() for the
-               // same identifier will overwrite the old.
-       }
-
-       protected function doRollbackToSavepoint( $identifier, $fname ) {
-               $this->query( 'ROLLBACK TRANSACTION ' . $this->addIdentifierQuotes( $identifier ), $fname );
-       }
-
-       protected function doBegin( $fname = __METHOD__ ) {
-               if ( !sqlsrv_begin_transaction( $this->conn ) ) {
-                       $this->reportQueryError( $this->lastError(), $this->lastErrno(), 'BEGIN', $fname );
-               }
-       }
-
-       /**
-        * End a transaction
-        * @param string $fname
-        */
-       protected function doCommit( $fname = __METHOD__ ) {
-               if ( !sqlsrv_commit( $this->conn ) ) {
-                       $this->reportQueryError( $this->lastError(), $this->lastErrno(), 'COMMIT', $fname );
-               }
-       }
-
-       /**
-        * Rollback a transaction.
-        * No-op on non-transactional databases.
-        * @param string $fname
-        */
-       protected function doRollback( $fname = __METHOD__ ) {
-               if ( !sqlsrv_rollback( $this->conn ) ) {
-                       $this->queryLogger->error(
-                               "{fname}\t{db_server}\t{errno}\t{error}\t",
-                               $this->getLogContext( [
-                                       'errno' => $this->lastErrno(),
-                                       'error' => $this->lastError(),
-                                       'fname' => $fname,
-                                       'trace' => ( new RuntimeException() )->getTraceAsString()
-                               ] )
-                       );
-               }
-       }
-
-       /**
-        * @param string $s
-        * @return string
-        */
-       public function strencode( $s ) {
-               // Should not be called by us
-               return str_replace( "'", "''", $s );
-       }
-
-       /**
-        * @param string|int|null|bool|Blob $s
-        * @return string|int
-        */
-       public function addQuotes( $s ) {
-               if ( $s instanceof MssqlBlob ) {
-                       return $s->fetch();
-               } elseif ( $s instanceof Blob ) {
-                       // this shouldn't really ever be called, but it's here if needed
-                       // (and will quite possibly make the SQL error out)
-                       $blob = new MssqlBlob( $s->fetch() );
-                       return $blob->fetch();
-               } else {
-                       if ( is_bool( $s ) ) {
-                               $s = $s ? 1 : 0;
-                       }
-                       return parent::addQuotes( $s );
-               }
-       }
-
-       /**
-        * @param string $s
-        * @return string
-        */
-       public function addIdentifierQuotes( $s ) {
-               // http://msdn.microsoft.com/en-us/library/aa223962.aspx
-               return '[' . $s . ']';
-       }
-
-       /**
-        * @param string $name
-        * @return bool
-        */
-       public function isQuotedIdentifier( $name ) {
-               return strlen( $name ) && $name[0] == '[' && substr( $name, -1, 1 ) == ']';
-       }
-
-       /**
-        * MS SQL supports more pattern operators than other databases (ex: [,],^)
-        *
-        * @param string $s
-        * @param string $escapeChar
-        * @return string
-        */
-       protected function escapeLikeInternal( $s, $escapeChar = '`' ) {
-               return str_replace( [ $escapeChar, '%', '_', '[', ']', '^' ],
-                       [ "{$escapeChar}{$escapeChar}", "{$escapeChar}%", "{$escapeChar}_",
-                               "{$escapeChar}[", "{$escapeChar}]", "{$escapeChar}^" ],
-                       $s );
-       }
-
-       protected function doSelectDomain( DatabaseDomain $domain ) {
-               if ( $domain->getSchema() !== null ) {
-                       throw new DBExpectedError(
-                               $this,
-                               __CLASS__ . ": domain '{$domain->getId()}' has a schema component"
-                       );
-               }
-
-               $database = $domain->getDatabase();
-               if ( $database !== $this->getDBname() ) {
-                       $sql = 'USE ' . $this->addIdentifierQuotes( $database );
-                       list( $res, $err, $errno ) =
-                               $this->executeQuery( $sql, __METHOD__, self::QUERY_IGNORE_DBO_TRX );
-
-                       if ( $res === false ) {
-                               $this->reportQueryError( $err, $errno, $sql, __METHOD__ );
-                               return false; // unreachable
-                       }
-               }
-               // Update that domain fields on success (no exception thrown)
-               $this->currentDomain = $domain;
-
-               return true;
-       }
-
-       /**
-        * @param array $options An associative array of options to be turned into
-        *   an SQL query, valid keys are listed in the function.
-        * @return array
-        */
-       public function makeSelectOptions( $options ) {
-               $tailOpts = '';
-               $startOpts = '';
-
-               $noKeyOptions = [];
-               foreach ( $options as $key => $option ) {
-                       if ( is_numeric( $key ) ) {
-                               $noKeyOptions[$option] = true;
-                       }
-               }
-
-               $tailOpts .= $this->makeGroupByWithHaving( $options );
-
-               $tailOpts .= $this->makeOrderBy( $options );
-
-               if ( isset( $noKeyOptions['DISTINCT'] ) || isset( $noKeyOptions['DISTINCTROW'] ) ) {
-                       $startOpts .= 'DISTINCT';
-               }
-
-               if ( isset( $noKeyOptions['FOR XML'] ) ) {
-                       // used in group concat field emulation
-                       $tailOpts .= " FOR XML PATH('')";
-               }
-
-               // we want this to be compatible with the output of parent::makeSelectOptions()
-               return [ $startOpts, '', $tailOpts, '', '' ];
-       }
-
-       public function getType() {
-               return 'mssql';
-       }
-
-       /**
-        * @param array $stringList
-        * @return string
-        */
-       public function buildConcat( $stringList ) {
-               return implode( ' + ', $stringList );
-       }
-
-       /**
-        * Build a GROUP_CONCAT or equivalent statement for a query.
-        * MS SQL doesn't have GROUP_CONCAT so we emulate it with other stuff (and boy is it nasty)
-        *
-        * This is useful for combining a field for several rows into a single string.
-        * NULL values will not appear in the output, duplicated values will appear,
-        * and the resulting delimiter-separated values have no defined sort order.
-        * Code using the results may need to use the PHP unique() or sort() methods.
-        *
-        * @param string $delim Glue to bind the results together
-        * @param string|array $table Table name
-        * @param string $field Field name
-        * @param string|array $conds Conditions
-        * @param string|array $join_conds Join conditions
-        * @return string SQL text
-        * @since 1.23
-        */
-       public function buildGroupConcatField( $delim, $table, $field, $conds = '',
-               $join_conds = []
-       ) {
-               $gcsq = 'gcsq_' . $this->subqueryId;
-               $this->subqueryId++;
-
-               $delimLen = strlen( $delim );
-               $fld = "{$field} + {$this->addQuotes( $delim )}";
-               $sql = "(SELECT LEFT({$field}, LEN({$field}) - {$delimLen}) FROM ("
-                       . $this->selectSQLText( $table, $fld, $conds, null, [ 'FOR XML' ], $join_conds )
-                       . ") {$gcsq} ({$field}))";
-
-               return $sql;
-       }
-
-       public function buildSubstring( $input, $startPosition, $length = null ) {
-               $this->assertBuildSubstringParams( $startPosition, $length );
-               if ( $length === null ) {
-                       /**
-                        * MSSQL doesn't allow an empty length parameter, so when we don't want to limit the
-                        * length returned use the default maximum size of text.
-                        * @see https://docs.microsoft.com/en-us/sql/t-sql/statements/set-textsize-transact-sql
-                        */
-                       $length = 2147483647;
-               }
-               return 'SUBSTRING(' . implode( ',', [ $input, $startPosition, $length ] ) . ')';
-       }
-
-       /**
-        * Returns an associative array for fields that are of type varbinary, binary, or image
-        * $table can be either a raw table name or passed through tableName() first
-        * @param string $table
-        * @return array
-        */
-       private function getBinaryColumns( $table ) {
-               $tableRawArr = explode( '.', preg_replace( '#\[([^\]]*)\]#', '$1', $table ) );
-               $tableRaw = array_pop( $tableRawArr );
-
-               if ( $this->binaryColumnCache === null ) {
-                       $this->populateColumnCaches();
-               }
-
-               return $this->binaryColumnCache[$tableRaw] ?? [];
-       }
-
-       /**
-        * @param string $table
-        * @return array
-        */
-       private function getBitColumns( $table ) {
-               $tableRawArr = explode( '.', preg_replace( '#\[([^\]]*)\]#', '$1', $table ) );
-               $tableRaw = array_pop( $tableRawArr );
-
-               if ( $this->bitColumnCache === null ) {
-                       $this->populateColumnCaches();
-               }
-
-               return $this->bitColumnCache[$tableRaw] ?? [];
-       }
-
-       private function populateColumnCaches() {
-               $res = $this->select( 'INFORMATION_SCHEMA.COLUMNS', '*',
-                       [
-                               'TABLE_CATALOG' => $this->getDBname(),
-                               'TABLE_SCHEMA' => $this->dbSchema(),
-                               'DATA_TYPE' => [ 'varbinary', 'binary', 'image', 'bit' ]
-                       ] );
-
-               $this->binaryColumnCache = [];
-               $this->bitColumnCache = [];
-               foreach ( $res as $row ) {
-                       if ( $row->DATA_TYPE == 'bit' ) {
-                               $this->bitColumnCache[$row->TABLE_NAME][$row->COLUMN_NAME] = $row;
-                       } else {
-                               $this->binaryColumnCache[$row->TABLE_NAME][$row->COLUMN_NAME] = $row;
-                       }
-               }
-       }
-
-       /**
-        * @param string $name
-        * @param string $format One of "quoted" (default), "raw", or "split".
-        * @return string|array When the requested $format is "split", a list of database, schema, and
-        *  table name is returned. Database and schema can be `false`.
-        */
-       function tableName( $name, $format = 'quoted' ) {
-               # Replace reserved words with better ones
-               switch ( $name ) {
-                       case 'user':
-                               return $this->realTableName( 'mwuser', $format );
-                       default:
-                               return $this->realTableName( $name, $format );
-               }
-       }
-
-       /**
-        * call this instead of tableName() in the updater when renaming tables
-        * @param string $name
-        * @param string $format One of "quoted" (default), "raw", or "split".
-        * @return string|array When the requested $format is "split", a list of database, schema, and
-        *  table name is returned. Database and schema can be `false`.
-        * @private
-        */
-       function realTableName( $name, $format = 'quoted' ) {
-               $table = parent::tableName( $name, $format );
-               if ( $format == 'split' ) {
-                       // Used internally, we want the schema split off from the table name and returned
-                       // as a list with 3 elements (database, schema, table)
-                       return array_pad( explode( '.', $table, 3 ), -3, false );
-               }
-               return $table;
-       }
-
-       /**
-        * Delete a table
-        * @param string $tableName
-        * @param string $fName
-        * @return bool|IResultWrapper
-        * @since 1.18
-        */
-       public function dropTable( $tableName, $fName = __METHOD__ ) {
-               if ( !$this->tableExists( $tableName, $fName ) ) {
-                       return false;
-               }
-
-               // parent function incorrectly appends CASCADE, which we don't want
-               $sql = "DROP TABLE " . $this->tableName( $tableName );
-
-               return $this->query( $sql, $fName );
-       }
-
-       /**
-        * Called in the installer and updater.
-        * Probably doesn't need to be called anywhere else in the codebase.
-        * @param bool|null $value
-        * @return bool|null
-        */
-       public function prepareStatements( $value = null ) {
-               $old = $this->prepareStatements;
-               if ( $value !== null ) {
-                       $this->prepareStatements = $value;
-               }
-
-               return $old;
-       }
-
-       /**
-        * Called in the installer and updater.
-        * Probably doesn't need to be called anywhere else in the codebase.
-        * @param bool|null $value
-        * @return bool|null
-        */
-       public function scrollableCursor( $value = null ) {
-               $old = $this->scrollableCursor;
-               if ( $value !== null ) {
-                       $this->scrollableCursor = $value;
-               }
-
-               return $old;
-       }
-
-       public function buildStringCast( $field ) {
-               return "CAST( $field AS NVARCHAR )";
-       }
-
-       public static function getAttributes() {
-               return [ self::ATTR_SCHEMAS_AS_TABLE_GROUPS => true ];
-       }
-}
-
-/**
- * @deprecated since 1.29
- */
-class_alias( DatabaseMssql::class, 'DatabaseMssql' );
index b1a88ed..a9223ac 100644 (file)
@@ -1085,13 +1085,6 @@ abstract class DatabaseMysqlBase extends Database {
                return "IGNORE INDEX (" . $this->indexName( $index ) . ")";
        }
 
-       /**
-        * @return string
-        */
-       function lowPriorityOption() {
-               return 'LOW_PRIORITY';
-       }
-
        /**
         * @return string
         */
index ddb3944..4c18911 100644 (file)
@@ -82,8 +82,10 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                }
 
                $mysqli = mysqli_init();
-
-               $connFlags = 0;
+               // Make affectedRows() for UPDATE reflect the number of matching rows, regardless
+               // of whether any column values changed. This is what callers want to know and is
+               // consistent with what Postgres, SQLite, and SQL Server return.
+               $connFlags = MYSQLI_CLIENT_FOUND_ROWS;
                if ( $this->getFlag( self::DBO_SSL ) ) {
                        $connFlags |= MYSQLI_CLIENT_SSL;
                        $mysqli->ssl_set(
index cb1b842..b1521dc 100644 (file)
@@ -142,7 +142,12 @@ class DatabaseSqlite extends Database {
                        throw $this->newExceptionAfterConnectError( "DB path or directory required" );
                }
 
-               if ( !self::isProcessMemoryPath( $path ) && !is_readable( $path ) ) {
+               // Check if the database file already exists but is non-readable
+               if (
+                       !self::isProcessMemoryPath( $path ) &&
+                       file_exists( $path ) &&
+                       !is_readable( $path )
+               ) {
                        throw $this->newExceptionAfterConnectError( 'SQLite database file is not readable' );
                } elseif ( !in_array( $this->trxMode, self::$VALID_TRX_MODES, true ) ) {
                        throw $this->newExceptionAfterConnectError( "Got mode '{$this->trxMode}' for BEGIN" );
@@ -163,6 +168,7 @@ class DatabaseSqlite extends Database {
                }
 
                try {
+                       // Open the database file, creating it if it does not yet exist
                        $this->conn = new PDO( "sqlite:$path", null, null, $attributes );
                } catch ( PDOException $e ) {
                        throw $this->newExceptionAfterConnectError( $e->getMessage() );
@@ -263,28 +269,6 @@ class DatabaseSqlite extends Database {
                return preg_match( '/^(:memory:$|file:(:memory:|[^?]+\?mode=memory(&|$)))/', $path );
        }
 
-       /**
-        * Check if the searchindext table is FTS enabled.
-        * @return bool False if not enabled.
-        */
-       public function checkForEnabledSearch() {
-               if ( self::$fulltextEnabled === null ) {
-                       self::$fulltextEnabled = false;
-                       $table = $this->tableName( 'searchindex' );
-                       $res = $this->query(
-                               "SELECT sql FROM sqlite_master WHERE tbl_name = '$table'",
-                               __METHOD__,
-                               self::QUERY_IGNORE_DBO_TRX
-                       );
-                       if ( $res ) {
-                               $row = $res->fetchRow();
-                               self::$fulltextEnabled = stristr( $row['sql'], 'fts' ) !== false;
-                       }
-               }
-
-               return self::$fulltextEnabled;
-       }
-
        /**
         * Returns version of currently supported SQLite fulltext search module or false if none present.
         * @return string
@@ -451,6 +435,36 @@ class DatabaseSqlite extends Database {
                return false;
        }
 
+       protected function doSelectDomain( DatabaseDomain $domain ) {
+               if ( $domain->getSchema() !== null ) {
+                       throw new DBExpectedError(
+                               $this,
+                               __CLASS__ . ": domain '{$domain->getId()}' has a schema component"
+                       );
+               }
+
+               $database = $domain->getDatabase();
+               // A null database means "don't care" so leave it as is and update the table prefix
+               if ( $database === null ) {
+                       $this->currentDomain = new DatabaseDomain(
+                               $this->currentDomain->getDatabase(),
+                               null,
+                               $domain->getTablePrefix()
+                       );
+
+                       return true;
+               }
+
+               if ( $database !== $this->getDBname() ) {
+                       throw new DBExpectedError(
+                               $this,
+                               __CLASS__ . ": cannot change database (got '$database')"
+                       );
+               }
+
+               return true;
+       }
+
        /**
         * Use MySQL's naming (accounts for prefix etc) but remove surrounding backticks
         *
@@ -765,6 +779,8 @@ class DatabaseSqlite extends Database {
        }
 
        public function serverIsReadOnly() {
+               $this->assertHasConnectionHandle();
+
                $path = $this->getDbFilePath();
 
                return ( !self::isProcessMemoryPath( $path ) && !is_writable( $path ) );
index 7e54221..6b02867 100644 (file)
@@ -679,10 +679,14 @@ interface IDatabase {
         *     and then the first rows are taken until the limit is reached. LIMIT
         *     is applied to a result set after OFFSET.
         *
-        *   - FOR UPDATE: Boolean: lock the returned rows so that they can't be
+        *   - LOCK IN SHARE MODE: Boolean: lock the returned rows so that they can't be
         *     changed until the next COMMIT. Cannot be used with aggregate functions
         *     (COUNT, MAX, etc., but also DISTINCT).
         *
+        *   - FOR UPDATE: Boolean: lock the returned rows so that they can't be
+        *     changed nor read with LOCK IN SHARE MODE until the next COMMIT.
+        *     Cannot be used with aggregate functions (COUNT, MAX, etc., but also DISTINCT).
+        *
         *   - DISTINCT: Boolean: return only unique result rows.
         *
         *   - GROUP BY: May be either an SQL fragment string naming a field or
@@ -707,16 +711,11 @@ interface IDatabase {
         * And also the following boolean MySQL extensions, see the MySQL manual
         * for documentation:
         *
-        *    - LOCK IN SHARE MODE
         *    - STRAIGHT_JOIN
-        *    - HIGH_PRIORITY
         *    - SQL_BIG_RESULT
         *    - SQL_BUFFER_RESULT
         *    - SQL_SMALL_RESULT
         *    - SQL_CALC_FOUND_ROWS
-        *    - SQL_CACHE
-        *    - SQL_NO_CACHE
-        *
         *
         * @param string|array $join_conds Join conditions
         *
@@ -929,7 +928,6 @@ interface IDatabase {
         *   for logging and profiling.
         * @param array $options An array of UPDATE options, can be:
         *   - IGNORE: Ignore unique key conflicts
-        *   - LOW_PRIORITY: MySQL-specific, see MySQL manual.
         * @return bool Return true if no exception was thrown (deprecated since 1.33)
         * @throws DBError
         */
@@ -1119,8 +1117,8 @@ interface IDatabase {
         *
         * @param string $db
         * @return bool True unless an exception was thrown
-        * @throws DBConnectionError If databasesAreIndependent() is true and an error occurs
-        * @throws DBError
+        * @throws DBConnectionError If databasesAreIndependent() is true and connection change fails
+        * @throws DBError On query error or if database changes are disallowed
         * @deprecated Since 1.32 Use selectDomain() instead
         */
        public function selectDB( $db );
@@ -1133,8 +1131,9 @@ interface IDatabase {
         * This should only be called by a load balancer or if the handle is not attached to one
         *
         * @param string|DatabaseDomain $domain
+        * @throws DBConnectionError If databasesAreIndependent() is true and connection change fails
+        * @throws DBError On query error, if domain changes are disallowed, or the domain is invalid
         * @since 1.32
-        * @throws DBConnectionError
         */
        public function selectDomain( $domain );
 
index cbc8ca3..72fbbf4 100644 (file)
@@ -3,7 +3,7 @@
 use Wikimedia\Rdbms\ILoadBalancer;
 use Wikimedia\Rdbms\IDatabase;
 
-/**@{
+/** @{
  * Database related constants
  */
 define( 'DBO_DEBUG', IDatabase::DBO_DEBUG );
@@ -16,12 +16,12 @@ define( 'DBO_SYSDBA', IDatabase::DBO_SYSDBA );
 define( 'DBO_DDLMODE', IDatabase::DBO_DDLMODE );
 define( 'DBO_SSL', IDatabase::DBO_SSL );
 define( 'DBO_COMPRESS', IDatabase::DBO_COMPRESS );
-/**@}*/
+/** @} */
 
-/**@{
+/** @{
  * Valid database indexes
  * Operation-based indexes
  */
 define( 'DB_REPLICA', ILoadBalancer::DB_REPLICA );
 define( 'DB_MASTER', ILoadBalancer::DB_MASTER );
-/**@}*/
+/** @} */
index 812064a..4b6afe7 100644 (file)
@@ -31,9 +31,12 @@ use InvalidArgumentException;
  * @since 1.28
  */
 interface ILBFactory {
+       /** @var int Don't save DB positions at all */
        const SHUTDOWN_NO_CHRONPROT = 0; // don't save DB positions at all
-       const SHUTDOWN_CHRONPROT_ASYNC = 1; // save DB positions, but don't wait on remote DCs
-       const SHUTDOWN_CHRONPROT_SYNC = 2; // save DB positions, waiting on all DCs
+       /** @var int Save DB positions, but don't wait on remote DCs */
+       const SHUTDOWN_CHRONPROT_ASYNC = 1;
+       /** @var int Save DB positions, waiting on all DCs */
+       const SHUTDOWN_CHRONPROT_SYNC = 2;
 
        /**
         * Construct a manager of ILoadBalancer objects
@@ -140,6 +143,8 @@ interface ILBFactory {
        /**
         * Get cached (tracked) load balancers for all main database clusters
         *
+        * The default cluster name is ILoadBalancer::CLUSTER_MAIN_DEFAULT
+        *
         * @return ILoadBalancer[] Map of (cluster name => ILoadBalancer)
         * @since 1.29
         */
@@ -154,7 +159,8 @@ interface ILBFactory {
        public function getAllExternalLBs();
 
        /**
-        * Execute a function for each tracked load balancer
+        * Execute a function for each currently tracked (instantiated) load balancer
+        *
         * The callback is called with the load balancer as the first parameter,
         * and $params passed as the subsequent parameters.
         *
@@ -164,7 +170,8 @@ interface ILBFactory {
        public function forEachLB( $callback, array $params = [] );
 
        /**
-        * Prepare all tracked load balancers for shutdown
+        * Prepare all currently tracked (instantiated) load balancers for shutdown
+        *
         * @param int $mode One of the class SHUTDOWN_* constants
         * @param callable|null $workCallback Work to mask ChronologyProtector writes
         * @param int|null &$cpIndex Position key write counter for ChronologyProtector
index 46d8c06..98607ce 100644 (file)
@@ -177,11 +177,10 @@ class LoadBalancer implements ILoadBalancer {
                                $server['replica'] = true;
                        }
                        $this->servers[$i] = $server;
-                       $serverGroupLoads = [ self::GROUP_GENERIC => $server['load'] ];
-                       $serverGroupLoads += ( $server['groupLoads'] ?? [] );
-                       foreach ( $serverGroupLoads as $group => $ratio ) {
+                       foreach ( ( $server['groupLoads'] ?? [] ) as $group => $ratio ) {
                                $this->groupLoads[$group][$i] = $ratio;
                        }
+                       $this->groupLoads[self::GROUP_GENERIC][$i] = $server['load'];
                }
 
                $localDomain = isset( $params['localDomain'] )
index fe9e26f..981aeb0 100644 (file)
@@ -58,7 +58,8 @@ class LogPage {
        private $type;
 
        /** @var string One of '', 'block', 'protect', 'rights', 'delete',
-        *   'upload', 'move', 'move_redir' */
+        *   'upload', 'move', 'move_redir'
+        */
        private $action;
 
        /** @var string Comment associated with action */
index 6dfa8d3..3416dbe 100644 (file)
@@ -543,9 +543,9 @@ class Exif {
                }
        }
 
-       /**#@-*/
+       /** #@- */
 
-       /**#@+
+       /** #@+
         * @return array
         */
 
@@ -565,7 +565,7 @@ class Exif {
                return $this->mFilteredExifData;
        }
 
-       /**#@-*/
+       /** #@- */
 
        /**
         * The version of the output format
@@ -721,7 +721,7 @@ class Exif {
                }
        }
 
-       /**#@-*/
+       /** #@- */
 
        /**
         * Validates if a tag has a legal value according to the Exif spec
index ffbc378..3bb0771 100644 (file)
@@ -178,7 +178,8 @@ class ObjectCache {
                } elseif ( isset( $params['class'] ) ) {
                        $class = $params['class'];
                        // Automatically set the 'async' update handler
-                       $params['asyncHandler'] = $params['asyncHandler'] ?? 'DeferredUpdates::addCallableUpdate';
+                       $params['asyncHandler'] = $params['asyncHandler']
+                               ?? [ DeferredUpdates::class, 'addCallableUpdate' ];
                        // Enable reportDupes by default
                        $params['reportDupes'] = $params['reportDupes'] ?? true;
                        // Do b/c logic for SqlBagOStuff
index 6cc63bf..e97dc41 100644 (file)
@@ -67,7 +67,7 @@ class SqlBagOStuff extends MediumSpecificBagOStuff {
        protected $connFailureErrors = [];
 
        /** @var int */
-       private static $GARBAGE_COLLECT_DELAY_SEC = 1;
+       private static $GC_DELAY_SEC = 1;
 
        /** @var string */
        private static $OP_SET = 'set';
@@ -177,7 +177,7 @@ class SqlBagOStuff extends MediumSpecificBagOStuff {
                # Don't keep timing out trying to connect for each call if the DB is down
                if (
                        isset( $this->connFailureErrors[$serverIndex] ) &&
-                       ( time() - $this->connFailureTimes[$serverIndex] ) < 60
+                       ( $this->getCurrentTime() - $this->connFailureTimes[$serverIndex] ) < 60
                ) {
                        throw $this->connFailureErrors[$serverIndex];
                }
@@ -356,7 +356,7 @@ class SqlBagOStuff extends MediumSpecificBagOStuff {
                        $keysByTable[$serverIndex][$tableName][] = $key;
                }
 
-               $exptime = $this->convertToExpiry( $exptime );
+               $exptime = $this->getExpirationAsTimestamp( $exptime );
 
                $result = true;
                /** @noinspection PhpUnusedLocalVariableInspection */
@@ -473,7 +473,7 @@ class SqlBagOStuff extends MediumSpecificBagOStuff {
 
        protected function cas( $casToken, $key, $value, $exptime = 0, $flags = 0 ) {
                list( $serverIndex, $tableName ) = $this->getTableByKey( $key );
-               $exptime = $this->convertToExpiry( $exptime );
+               $exptime = $this->getExpirationAsTimestamp( $exptime );
 
                /** @noinspection PhpUnusedLocalVariableInspection */
                $silenceScope = $this->silenceTransactionProfiler();
@@ -563,7 +563,7 @@ class SqlBagOStuff extends MediumSpecificBagOStuff {
                return $ok;
        }
 
-       protected function doChangeTTLMulti( array $keys, $exptime, $flags = 0 ) {
+       public function changeTTLMulti( array $keys, $exptime, $flags = 0 ) {
                return $this->modifyMulti(
                        array_fill_keys( $keys, null ),
                        $exptime,
@@ -584,7 +584,7 @@ class SqlBagOStuff extends MediumSpecificBagOStuff {
        protected function isExpired( $db, $exptime ) {
                return (
                        $exptime != $this->getMaxDateTime( $db ) &&
-                       wfTimestamp( TS_UNIX, $exptime ) < time()
+                       wfTimestamp( TS_UNIX, $exptime ) < $this->getCurrentTime()
                );
        }
 
@@ -593,7 +593,7 @@ class SqlBagOStuff extends MediumSpecificBagOStuff {
         * @return string
         */
        protected function getMaxDateTime( $db ) {
-               if ( time() > 0x7fffffff ) {
+               if ( (int)$this->getCurrentTime() > 0x7fffffff ) {
                        return $db->timestamp( 1 << 62 );
                } else {
                        return $db->timestamp( 0x7fffffff );
@@ -611,14 +611,18 @@ class SqlBagOStuff extends MediumSpecificBagOStuff {
                        // Only purge on one in every $this->purgePeriod writes
                        mt_rand( 0, $this->purgePeriod - 1 ) == 0 &&
                        // Avoid repeating the delete within a few seconds
-                       ( time() - $this->lastGarbageCollect ) > self::$GARBAGE_COLLECT_DELAY_SEC
+                       ( $this->getCurrentTime() - $this->lastGarbageCollect ) > self::$GC_DELAY_SEC
                ) {
                        $garbageCollector = function () use ( $db ) {
-                               $this->deleteServerObjectsExpiringBefore( $db, time(), null, $this->purgeLimit );
+                               $this->deleteServerObjectsExpiringBefore(
+                                       $db, $this->getCurrentTime(),
+                                       null,
+                                       $this->purgeLimit
+                               );
                                $this->lastGarbageCollect = time();
                        };
                        if ( $this->asyncHandler ) {
-                               $this->lastGarbageCollect = time(); // avoid duplicate enqueues
+                               $this->lastGarbageCollect = $this->getCurrentTime(); // avoid duplicate enqueues
                                ( $this->asyncHandler )( $garbageCollector );
                        } else {
                                $garbageCollector();
@@ -627,7 +631,7 @@ class SqlBagOStuff extends MediumSpecificBagOStuff {
        }
 
        public function expireAll() {
-               $this->deleteObjectsExpiringBefore( time() );
+               $this->deleteObjectsExpiringBefore( $this->getCurrentTime() );
        }
 
        public function deleteObjectsExpiringBefore(
@@ -927,8 +931,9 @@ class SqlBagOStuff extends MediumSpecificBagOStuff {
        protected function markServerDown( DBError $exception, $serverIndex ) {
                unset( $this->conns[$serverIndex] ); // bug T103435
 
+               $now = $this->getCurrentTime();
                if ( isset( $this->connFailureTimes[$serverIndex] ) ) {
-                       if ( time() - $this->connFailureTimes[$serverIndex] >= 60 ) {
+                       if ( $now - $this->connFailureTimes[$serverIndex] >= 60 ) {
                                unset( $this->connFailureTimes[$serverIndex] );
                                unset( $this->connFailureErrors[$serverIndex] );
                        } else {
@@ -936,7 +941,6 @@ class SqlBagOStuff extends MediumSpecificBagOStuff {
                                return;
                        }
                }
-               $now = time();
                $this->logger->info( __METHOD__ . ": Server #$serverIndex down until " . ( $now + 60 ) );
                $this->connFailureTimes[$serverIndex] = $now;
                $this->connFailureErrors[$serverIndex] = $exception;
index f158e4d..fcfb83d 100644 (file)
@@ -2168,7 +2168,7 @@ class Article implements Page {
                return $cacheable;
        }
 
-       /**#@-*/
+       /** #@- */
 
        /**
         * Lightweight method to get the parser output for a page, checking the parser cache
index 16b83d1..4f08995 100644 (file)
@@ -736,13 +736,10 @@ EOT
        }
 
        /**
-        * Print out the various links at the bottom of the image page, e.g. reupload,
-        * external editing (and instructions link) etc.
+        * Add the re-upload link (or message about not being able to re-upload) to the output.
         */
        protected function uploadLinksBox() {
-               global $wgEnableUploads;
-
-               if ( !$wgEnableUploads ) {
+               if ( !$this->getContext()->getConfig()->get( 'EnableUploads' ) ) {
                        return;
                }
 
@@ -751,27 +748,27 @@ EOT
                        return;
                }
 
-               $out = $this->getContext()->getOutput();
-               $out->addHTML( "<ul>\n" );
-
-               # "Upload a new version of this file" link
                $canUpload = $this->getTitle()->quickUserCan( 'upload', $this->getContext()->getUser() );
                if ( $canUpload && UploadBase::userCanReUpload(
                                $this->getContext()->getUser(),
                                $this->mPage->getFile() )
                ) {
+                       // "Upload a new version of this file" link
                        $ulink = Linker::makeExternalLink(
                                $this->getUploadUrl(),
                                $this->getContext()->msg( 'uploadnewversion-linktext' )->text()
                        );
-                       $out->addHTML( "<li id=\"mw-imagepage-reupload-link\">"
-                               . "<div class=\"plainlinks\">{$ulink}</div></li>\n" );
+                       $attrs = [ 'class' => 'plainlinks', 'id' => 'mw-imagepage-reupload-link' ];
+                       $linkPara = Html::rawElement( 'p', $attrs, $ulink );
                } else {
-                       $out->addHTML( "<li id=\"mw-imagepage-upload-disallowed\">"
-                               . $this->getContext()->msg( 'upload-disallowed-here' )->escaped() . "</li>\n" );
+                       // "You cannot overwrite this file." message
+                       $attrs = [ 'id' => 'mw-imagepage-upload-disallowed' ];
+                       $msg = $this->getContext()->msg( 'upload-disallowed-here' )->text();
+                       $linkPara = Html::element( 'p', $attrs, $msg );
                }
 
-               $out->addHTML( "</ul>\n" );
+               $uploadLinks = Html::rawElement( 'div', [ 'class' => 'mw-imagepage-upload-links' ], $linkPara );
+               $this->getContext()->getOutput()->addHTML( $uploadLinks );
        }
 
        /**
index 173fdc6..8cc5a39 100644 (file)
@@ -1063,6 +1063,7 @@ class WikiPage implements Page, IDBAccessObject {
         * Insert or update the redirect table entry for this page to indicate it redirects to $rt
         * @param Title $rt Redirect target
         * @param int|null $oldLatest Prior page_latest for check and set
+        * @return bool Success
         */
        public function insertRedirectEntry( Title $rt, $oldLatest = null ) {
                $dbw = wfGetDB( DB_MASTER );
@@ -1089,9 +1090,14 @@ class WikiPage implements Page, IDBAccessObject {
                                ],
                                __METHOD__
                        );
+                       $success = true;
+               } else {
+                       $success = false;
                }
 
                $dbw->endAtomic( __METHOD__ );
+
+               return $success;
        }
 
        /**
@@ -1461,18 +1467,19 @@ class WikiPage implements Page, IDBAccessObject {
                }
 
                if ( $isRedirect ) {
-                       $this->insertRedirectEntry( $redirectTitle );
+                       $success = $this->insertRedirectEntry( $redirectTitle );
                } else {
                        // This is not a redirect, remove row from redirect table
                        $where = [ 'rd_from' => $this->getId() ];
                        $dbw->delete( 'redirect', $where, __METHOD__ );
+                       $success = true;
                }
 
                if ( $this->getTitle()->getNamespace() == NS_FILE ) {
                        RepoGroup::singleton()->getLocalRepo()->invalidateImageRedirect( $this->getTitle() );
                }
 
-               return ( $dbw->affectedRows() != 0 );
+               return $success;
        }
 
        /**
@@ -3503,7 +3510,7 @@ class WikiPage implements Page, IDBAccessObject {
                self::purgeInterwikiCheckKey( $title );
        }
 
-       /**#@-*/
+       /** #@- */
 
        /**
         * Purge the check key for cross-wiki cache entries referencing this page
index 8e0cf5c..d411046 100644 (file)
@@ -2036,6 +2036,7 @@ class Sanitizer {
         *
         * @param string $html HTML fragment
         * @return string
+        * @return-taint tainted
         */
        static function stripAllTags( $html ) {
                // Use RemexHtml to tokenize $html and extract the text
index e324d04..d59e1c8 100644 (file)
@@ -235,7 +235,7 @@ class ResourceLoaderClientHtml {
                // Change "client-nojs" class to client-js. This allows easy toggling of UI components.
                // This must happen synchronously on every page view to avoid flashes of wrong content.
                // See also #getDocumentAttributes() and /resources/src/startup.js.
-               $script = <<<JAVASCRIPT
+               $script = <<<'JAVASCRIPT'
 document.documentElement.className = document.documentElement.className
        .replace( /(^|\s)client-nojs(\s|$)/, "$1client-js$2" );
 JAVASCRIPT;
@@ -265,15 +265,12 @@ RLPAGEMODULES = {$pageModulesJson};
 JAVASCRIPT;
                }
 
-               if ( $this->context->getDebug() ) {
-                       $chunks[] = Html::inlineScript( $script, $nonce );
-               } else {
-                       $chunks[] = Html::inlineScript(
-                               ResourceLoader::filter( 'minify-js', $script, [ 'cache' => false ] ),
-                               $nonce
-                       );
+               if ( !$this->context->getDebug() ) {
+                       $script = ResourceLoader::filter( 'minify-js', $script, [ 'cache' => false ] );
                }
 
+               $chunks[] = Html::inlineScript( $script, $nonce );
+
                // Inline RLQ: Embedded modules
                if ( $data['embed']['general'] ) {
                        $chunks[] = $this->getLoad(
index af30313..eed2aed 100644 (file)
@@ -1004,6 +1004,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                        || $this->dependencies
                        || $this->messages
                        || $this->skipFunction
+                       || $this->packageFiles
                );
                return $canBeStylesOnly ? self::LOAD_STYLES : self::LOAD_GENERAL;
        }
index c01e507..dff9a39 100644 (file)
@@ -34,7 +34,8 @@ class ResourceLoaderFilePath {
        protected $remoteBasePath;
 
        /**
-        * @var string Path to the file */
+        * @var string Path to the file
+        */
        protected $path;
 
        /**
index a982de2..8f026dc 100644 (file)
@@ -346,13 +346,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
         * @return array
         */
        private function getBaseModules() {
-               global $wgIncludeLegacyJavaScript;
-
                $baseModules = [ 'jquery', 'mediawiki.base' ];
-               if ( $wgIncludeLegacyJavaScript ) {
-                       $baseModules[] = 'mediawiki.legacy.wikibits';
-               }
-
                return $baseModules;
        }
 
index 9375ef2..84e6edd 100644 (file)
@@ -22,7 +22,6 @@
  */
 
 use MediaWiki\MediaWikiServices;
-use Wikimedia\Rdbms\DatabaseSqlite;
 
 /**
  * Search engine hook for SQLite
@@ -34,14 +33,15 @@ class SearchSqlite extends SearchDatabase {
         * @return bool
         */
        private function fulltextSearchSupported() {
-               // Avoid getConnectionRef() in order to get DatabaseSqlite specifically
-               /** @var DatabaseSqlite $dbr */
-               $dbr = $this->lb->getConnection( DB_REPLICA );
-               try {
-                       return $dbr->checkForEnabledSearch();
-               } finally {
-                       $this->lb->reuseConnection( $dbr );
-               }
+               $dbr = $this->lb->getMaintenanceConnectionRef( DB_REPLICA );
+               $sql = (string)$dbr->selectField(
+                       $dbr->addIdentifierQuotes( 'sqlite_master' ),
+                       'sql',
+                       [ 'tbl_name' => $dbr->tableName( 'searchindex', 'raw' ) ],
+                       __METHOD__
+               );
+
+               return ( stristr( $sql, 'fts' ) !== false );
        }
 
        /**
index 328958c..681d6cf 100644 (file)
@@ -694,6 +694,6 @@ final class Session implements \Countable, \Iterator, \ArrayAccess {
                $this->remove( $offset );
        }
 
-       /**@}*/
+       /** @} */
 
 }
index 3810565..c635b97 100644 (file)
@@ -939,6 +939,6 @@ final class SessionManager implements SessionManagerInterface {
                self::$globalSessionRequest = null;
        }
 
-       /**@}*/
+       /** @} */
 
 }
index 5165506..782ac16 100644 (file)
@@ -31,7 +31,8 @@ namespace MediaWiki\Session;
  */
 class Token {
        /** CSRF token suffix. Plus and terminal backslash are included to stop
-        * editing from certain broken proxies. */
+        * editing from certain broken proxies.
+        */
        const SUFFIX = '+\\';
 
        /** @var string */
index 65cd2d2..ba7785c 100644 (file)
@@ -13,7 +13,8 @@ use MediaWiki\Session\Token;
  */
 abstract class AuthManagerSpecialPage extends SpecialPage {
        /** @var string[] The list of actions this special page deals with. Subclasses should override
-        * this. */
+        * this.
+        */
        protected static $allowedActions = [
                AuthManager::ACTION_LOGIN, AuthManager::ACTION_LOGIN_CONTINUE,
                AuthManager::ACTION_CREATE, AuthManager::ACTION_CREATE_CONTINUE,
index f9b4542..bbbd6a8 100644 (file)
@@ -1504,12 +1504,17 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        $namespaces = explode( ';', $opts[ 'namespace' ] );
 
                        if ( $opts[ 'associated' ] ) {
+                               $namespaceInfo = MediaWikiServices::getInstance()->getNamespaceInfo();
                                $associatedNamespaces = array_map(
-                                       function ( $ns ) {
-                                               return MediaWikiServices::getInstance()->getNamespaceInfo()->
-                                                       getAssociated( $ns );
+                                       function ( $ns ) use ( $namespaceInfo ){
+                                               return $namespaceInfo->getAssociated( $ns );
                                        },
-                                       $namespaces
+                                       array_filter(
+                                               $namespaces,
+                                               function ( $ns ) use ( $namespaceInfo ) {
+                                                       return $namespaceInfo->hasTalkNamespace( $ns );
+                                               }
+                                       )
                                );
                                $namespaces = array_unique( array_merge( $namespaces, $associatedNamespaces ) );
                        }
index 743a5a5..d609d22 100644 (file)
@@ -54,7 +54,8 @@ abstract class LoginSignupSpecialPage extends AuthManagerSpecialPage {
        protected $securityLevel;
 
        /** @var bool True if the user if creating an account for someone else. Flag used for internal
-        * communication, only set at the very end. */
+        * communication, only set at the very end.
+        */
        protected $proxyAccountCreation;
        /** @var User FIXME another flag for passing data. */
        protected $targetUser;
index b8dce3f..27cd2ab 100644 (file)
@@ -106,4 +106,25 @@ abstract class RedirectSpecialArticle extends RedirectSpecialPage {
                Hooks::run( "RedirectSpecialArticleRedirectParams", [ &$redirectParams ] );
                $this->mAllowedRedirectParams = $redirectParams;
        }
+
+       /**
+        * @inheritDoc
+        */
+       public function getRedirectQuery( $subpage ) {
+               $query = parent::getRedirectQuery( $subpage );
+               $title = $this->getRedirect( $subpage );
+               // Avoid double redirect for action=edit&redlink=1 for existing pages
+               // (compare to the check in EditPage::edit)
+               if (
+                       $query &&
+                       ( $query['action'] === 'edit' || $query['action'] === 'submit' ) &&
+                       (bool)$query['redlink'] &&
+                       $title instanceof Title &&
+                       $title->exists()
+               ) {
+                       return false;
+               }
+               return $query;
+       }
+
 }
index 40172ab..f2c9644 100644 (file)
@@ -200,6 +200,7 @@ class SpecialPageFactory {
                'Mytalk' => \SpecialMytalk::class,
                'Myuploads' => \SpecialMyuploads::class,
                'AllMyUploads' => \SpecialAllMyUploads::class,
+               'NewSection' => \SpecialNewSection::class,
                'PermanentLink' => \SpecialPermanentLink::class,
                'Redirect' => \SpecialRedirect::class,
                'Revisiondelete' => \SpecialRevisionDelete::class,
@@ -225,7 +226,7 @@ class SpecialPageFactory {
         *
         * @var array
         * @since 1.33
-        * */
+        */
        public static $constructorOptions = [
                'ContentHandlerUseDB',
                'DisableInternalSearch',
index b2161db..59d2806 100644 (file)
@@ -34,7 +34,8 @@ use MediaWiki\MediaWikiServices;
  */
 class SpecialBlock extends FormSpecialPage {
        /** @var User|string|null User to be blocked, as passed either by parameter (url?wpTarget=Foo)
-        * or as subpage (Special:Block/Foo) */
+        * or as subpage (Special:Block/Foo)
+        */
        protected $target;
 
        /** @var int DatabaseBlock::TYPE_ constant */
@@ -760,9 +761,6 @@ class SpecialBlock extends FormSpecialPage {
                        isset( $data['EditingRestriction'] ) &&
                        $data['EditingRestriction'] === 'partial';
 
-               // Handled by field validator callback
-               // self::validateTargetField( $data['Target'] );
-
                # This might have been a hidden field or a checkbox, so interesting data
                # can come from it
                $data['Confirm'] = !in_array( $data['Confirm'], [ '', '0', null, false ], true );
index 184cdbb..01f7e56 100644 (file)
@@ -101,7 +101,7 @@ class SpecialChangeContentModel extends FormSpecialPage {
                                throw new ErrorPageError(
                                        'changecontentmodel-emptymodels-title',
                                        'changecontentmodel-emptymodels-text',
-                                       $this->title->getPrefixedText()
+                                       [ $this->title->getPrefixedText() ]
                                );
                        }
                        $fields['pagetitle']['readonly'] = true;
index 4f5c150..0425a58 100644 (file)
@@ -286,7 +286,7 @@ class SpecialContributions extends IncludableSpecialPage {
         */
        protected function contributionsSub( $userObj ) {
                if ( $userObj->isAnon() ) {
-                       // Show a warning message that the user being searched for doesn't exists.
+                       // Show a warning message that the user being searched for doesn't exist.
                        // User::isIP returns true for IP address and usemod IPs like '123.123.123.xxx',
                        // but returns false for IP ranges. We don't want to suggest either of these are
                        // valid usernames which we would with the 'contributions-userdoesnotexist' message.
index 8396b4d..9b5dd3f 100644 (file)
@@ -64,7 +64,7 @@ class SpecialCreateAccount extends LoginSignupSpecialPage {
                $user = $this->getUser();
                $status = AuthManager::singleton()->checkAccountCreatePermissions( $user );
                if ( !$status->isGood() ) {
-                       // track block with a cookie if it doesn't exists already
+                       // Track block with a cookie if it doesn't exist already
                        if ( $user->isBlockedFromCreateAccount() ) {
                                MediaWikiServices::getInstance()->getBlockManager()->trackBlockWithCookie( $user );
                        }
diff --git a/includes/specials/SpecialNewSection.php b/includes/specials/SpecialNewSection.php
new file mode 100644 (file)
index 0000000..c124c14
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+/**
+ * Redirect from Special:NewSection/$1 to index.php?title=$1&action=edit&section=new.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ */
+class SpecialNewSection extends RedirectSpecialPage {
+       public function __construct() {
+               parent::__construct( 'NewSection' );
+               $this->mAllowedRedirectParams = [ 'preloadtitle', 'nosummary', 'editintro',
+                       'preload', 'preloadparams[]', 'summary' ];
+       }
+
+       /**
+        * @inheritDoc
+        */
+       public function getRedirect( $subpage ) {
+               if ( $subpage === null || $subpage === '' ) {
+                       return false;
+               }
+               $this->mAddedRedirectParams['title'] = $subpage;
+               $this->mAddedRedirectParams['action'] = 'edit';
+               $this->mAddedRedirectParams['section'] = 'new';
+               return true;
+       }
+
+       protected function showNoRedirectPage() {
+               $this->setHeaders();
+               $this->outputHeader();
+               $this->showForm();
+       }
+
+       private function showForm() {
+               $form = HTMLForm::factory( 'ooui', [
+                       'page' => [
+                               'type' => 'text',
+                               'name' => 'page',
+                               'label-message' => 'newsection-page',
+                               'required' => true,
+                       ],
+               ], $this->getContext(), 'newsection' );
+               $form->setSubmitTextMsg( 'newsection-submit' );
+               $form->setSubmitCallback( [ $this, 'onFormSubmit' ] );
+               $form->show();
+       }
+
+       public function onFormSubmit( $formData ) {
+               $title = $formData['page'];
+               try {
+                       $page = Title::newFromTextThrow( $title );
+               } catch ( MalformedTitleException $e ) {
+                       return Status::newFatal( $e->getMessageObject() );
+               }
+               $query = [ 'action' => 'edit', 'section' => 'new' ];
+               $url = $page->getFullUrlForRedirect( $query );
+               $this->getOutput()->redirect( $url );
+       }
+
+       public function isListed() {
+               return true;
+       }
+
+       protected function getGroupName() {
+               return 'redirects';
+       }
+}
index 04db704..711d447 100644 (file)
@@ -56,6 +56,7 @@ class SpecialNewpages extends IncludableSpecialPage {
                $opts->add( 'feed', '' );
                $opts->add( 'tagfilter', '' );
                $opts->add( 'invert', false );
+               $opts->add( 'associated', false );
                $opts->add( 'size-mode', 'max' );
                $opts->add( 'size', 0 );
 
@@ -229,6 +230,7 @@ class SpecialNewpages extends IncludableSpecialPage {
                $username = $this->opts->consumeValue( 'username' );
                $tagFilterVal = $this->opts->consumeValue( 'tagfilter' );
                $nsinvert = $this->opts->consumeValue( 'invert' );
+               $nsassociated = $this->opts->consumeValue( 'associated' );
 
                $size = $this->opts->consumeValue( 'size' );
                $max = $this->opts->consumeValue( 'size-mode' ) === 'max';
@@ -251,6 +253,13 @@ class SpecialNewpages extends IncludableSpecialPage {
                                'default' => $nsinvert,
                                'tooltip' => 'invert',
                        ],
+                       'nsassociated' => [
+                               'type' => 'check',
+                               'name' => 'associated',
+                               'label-message' => 'namespace_association',
+                               'default' => $nsassociated,
+                               'tooltip' => 'namespace_association',
+                       ],
                        'tagFilter' => [
                                'type' => 'tagfilter',
                                'name' => 'tagfilter',
index 68fda49..81c9d56 100644 (file)
@@ -43,7 +43,7 @@ class SpecialUpload extends SpecialPage {
                return true;
        }
 
-       /** Misc variables **/
+       /** Misc variables */
 
        /** @var WebRequest|FauxRequest The request this form is supposed to handle */
        public $mRequest;
@@ -56,21 +56,21 @@ class SpecialUpload extends SpecialPage {
        public $mLocalFile;
        public $mUploadClicked;
 
-       /** User input variables from the "description" section **/
+       /** User input variables from the "description" section */
 
        /** @var string The requested target file name */
        public $mDesiredDestName;
        public $mComment;
        public $mLicense;
 
-       /** User input variables from the root section **/
+       /** User input variables from the root section */
 
        public $mIgnoreWarning;
        public $mWatchthis;
        public $mCopyrightStatus;
        public $mCopyrightSource;
 
-       /** Hidden variables **/
+       /** Hidden variables */
 
        public $mDestWarningAck;
 
@@ -84,7 +84,7 @@ class SpecialUpload extends SpecialPage {
        /** @var bool Subclasses can use this to determine whether a file was uploaded */
        public $mUploadSuccessful = false;
 
-       /** Text injection points for hooks not using HTMLForm **/
+       /** Text injection points for hooks not using HTMLForm */
        public $uploadFormTextTop;
        public $uploadFormTextAfterSummary;
 
@@ -690,7 +690,7 @@ class SpecialUpload extends SpecialPage {
         */
        protected function processVerificationError( $details ) {
                switch ( $details['status'] ) {
-                       /** Statuses that only require name changing **/
+                       /** Statuses that only require name changing */
                        case UploadBase::MIN_LENGTH_PARTNAME:
                                $this->showRecoverableUploadError( $this->msg( 'minlength1' )->escaped() );
                                break;
@@ -708,7 +708,7 @@ class SpecialUpload extends SpecialPage {
                                $this->showRecoverableUploadError( $this->msg( 'windows-nonascii-filename' )->parse() );
                                break;
 
-                       /** Statuses that require reuploading **/
+                       /** Statuses that require reuploading */
                        case UploadBase::EMPTY_FILE:
                                $this->showUploadError( $this->msg( 'emptyfile' )->escaped() );
                                break;
@@ -781,7 +781,7 @@ class SpecialUpload extends SpecialPage {
                }
        }
 
-       /*** Functions for formatting warnings ***/
+       /** Functions for formatting warnings */
 
        /**
         * Formats a result of UploadBase::getExistsWarning as HTML
index ec34db8..fa78cbe 100644 (file)
@@ -31,13 +31,20 @@ use MediaWiki\MediaWikiServices;
  * @ingroup SpecialPage
  */
 class SpecialVersion extends SpecialPage {
+
+       /**
+        * @var bool
+        */
        protected $firstExtOpened = false;
 
        /**
-        * Stores the current rev id/SHA hash of MediaWiki core
+        * @var string The current rev id/SHA hash of MediaWiki core
         */
        protected $coreId = '';
 
+       /**
+        * @var string[]|false Lazy initialized key/value with message content
+        */
        protected static $extensionTypes = false;
 
        public function __construct() {
@@ -379,7 +386,7 @@ class SpecialVersion extends SpecialPage {
         *
         * @since 1.17
         *
-        * @return array
+        * @return string[]
         */
        public static function getExtensionTypes() {
                if ( self::$extensionTypes === false ) {
index 204b033..c78913c 100644 (file)
@@ -40,7 +40,7 @@ class Licenses extends HTMLFormField {
 
        /** @var string|null */
        protected $selected;
-       /**#@-*/
+       /** #@- */
 
        /**
         * @param array $params
@@ -191,7 +191,7 @@ class Licenses extends HTMLFormField {
                return str_repeat( "\t", $depth ) . Xml::element( 'option', $attribs, $val ) . "\n";
        }
 
-       /**#@-*/
+       /** #@- */
 
        /**
         * Accessor for $this->lines
index 5788bb2..8131671 100644 (file)
@@ -22,6 +22,8 @@
 /**
  * @ingroup Pager
  */
+use MediaWiki\MediaWikiServices;
+
 class NewPagesPager extends ReverseChronologicalPager {
 
        /**
@@ -50,9 +52,6 @@ class NewPagesPager extends ReverseChronologicalPager {
                $conds = [];
                $conds['rc_new'] = 1;
 
-               $namespace = $this->opts->getValue( 'namespace' );
-               $namespace = ( $namespace === 'all' ) ? false : intval( $namespace );
-
                $username = $this->opts->getValue( 'username' );
                $user = Title::makeTitleSafe( NS_USER, $username );
 
@@ -65,14 +64,6 @@ class NewPagesPager extends ReverseChronologicalPager {
                        }
                }
 
-               if ( $namespace !== false ) {
-                       if ( $this->opts->getValue( 'invert' ) ) {
-                               $conds[] = 'rc_namespace != ' . $this->mDb->addQuotes( $namespace );
-                       } else {
-                               $conds['rc_namespace'] = $namespace;
-                       }
-               }
-
                if ( $user ) {
                        $conds[] = ActorMigration::newMigration()->getWhere(
                                $this->mDb, 'rc_user', User::newFromName( $user->getText(), false ), false
@@ -84,6 +75,8 @@ class NewPagesPager extends ReverseChronologicalPager {
                        $conds[] = ActorMigration::newMigration()->isAnon( $rcQuery['fields']['rc_user'] );
                }
 
+               $conds = array_merge( $conds, $this->getNamespaceCond() );
+
                # If this user cannot see patrolled edits or they are off, don't do dumb queries!
                if ( $this->opts->getValue( 'hidepatrolled' ) && $this->getUser()->useNPPatrol() ) {
                        $conds['rc_patrolled'] = RecentChange::PRC_UNPATROLLED;
@@ -130,6 +123,32 @@ class NewPagesPager extends ReverseChronologicalPager {
                return $info;
        }
 
+       // Based on ContribsPager.php
+       function getNamespaceCond() {
+               $namespace = $this->opts->getValue( 'namespace' );
+               if ( $namespace === 'all' || $namespace === '' ) {
+                       return [];
+               }
+
+               $namespace = intval( $namespace );
+               $invert = $this->opts->getValue( 'invert' );
+               $associated = $this->opts->getValue( 'associated' );
+
+               $eq_op = $invert ? '!=' : '=';
+               $bool_op = $invert ? 'AND' : 'OR';
+
+               if ( !$associated ) {
+                       return [ "rc_namespace $eq_op " . $this->mDb->addQuotes( $namespace ) ];
+               }
+
+               $associatedNS = MediaWikiServices::getInstance()->getNamespaceInfo()->getAssociated( $namespace );
+               return [
+                       "rc_namespace $eq_op " . $this->mDb->addQuotes( $namespace ) .
+                       $bool_op .
+                       " rc_namespace $eq_op " . $this->mDb->addQuotes( $associatedNS )
+               ];
+       }
+
        function getIndexField() {
                return 'rc_timestamp';
        }
index 2ed8729..7307cc1 100644 (file)
@@ -50,6 +50,34 @@ class NamespaceInfo {
        /** @var ServiceOptions */
        private $options;
 
+       /**
+        * Definitions of the NS_ constants are in Defines.php
+        *
+        * @todo Make this const when HHVM support is dropped (T192166)
+        *
+        * @var array
+        * @internal
+        */
+       public static $canonicalNames = [
+               NS_MEDIA            => 'Media',
+               NS_SPECIAL          => 'Special',
+               NS_TALK             => 'Talk',
+               NS_USER             => 'User',
+               NS_USER_TALK        => 'User_talk',
+               NS_PROJECT          => 'Project',
+               NS_PROJECT_TALK     => 'Project_talk',
+               NS_FILE             => 'File',
+               NS_FILE_TALK        => 'File_talk',
+               NS_MEDIAWIKI        => 'MediaWiki',
+               NS_MEDIAWIKI_TALK   => 'MediaWiki_talk',
+               NS_TEMPLATE         => 'Template',
+               NS_TEMPLATE_TALK    => 'Template_talk',
+               NS_HELP             => 'Help',
+               NS_HELP_TALK        => 'Help_talk',
+               NS_CATEGORY         => 'Category',
+               NS_CATEGORY_TALK    => 'Category_talk',
+       ];
+
        /**
         * TODO Make this const when HHVM support is dropped (T192166)
         *
@@ -642,4 +670,15 @@ class NamespaceInfo {
                        return 'page';
                }
        }
+
+       /**
+        * Retrieve the indexes for the namespaces defined by core.
+        *
+        * @since 1.34
+        *
+        * @return int[]
+        */
+       public static function getCommonNamespaces() {
+               return array_keys( self::$canonicalNames );
+       }
 }
index 722e5ef..b657f13 100644 (file)
@@ -72,26 +72,25 @@ class TitleValue implements LinkTarget {
        /**
         * Constructs a TitleValue.
         *
-        * @note TitleValue expects a valid DB key; typically, a TitleValue is constructed either
-        * from a database entry, or by a TitleParser. We could apply "some" normalization here,
-        * such as substituting spaces by underscores, but that would encourage the use of
-        * un-normalized text when constructing TitleValues. For constructing a TitleValue from
-        * user input or external sources, use a TitleParser.
+        * @note TitleValue expects a valid namespace and name; typically, a TitleValue is constructed
+        * either from a database entry, or by a TitleParser. For constructing a TitleValue from user
+        * input or external sources, use a TitleParser.
         *
         * @param int $namespace The namespace ID. This is not validated.
-        * @param string $dbkey The page title in valid DBkey form. No normalization is applied.
+        * @param string $title The page title in either DBkey or text form. No normalization is applied
+        *   beyond underscore/space conversion.
         * @param string $fragment The fragment title. Use '' to represent the whole page.
         *   No validation or normalization is applied.
         * @param string $interwiki The interwiki component
         *
         * @throws InvalidArgumentException
         */
-       public function __construct( $namespace, $dbkey, $fragment = '', $interwiki = '' ) {
+       public function __construct( $namespace, $title, $fragment = '', $interwiki = '' ) {
                if ( !is_int( $namespace ) ) {
                        throw new ParameterTypeException( '$namespace', 'int' );
                }
-               if ( !is_string( $dbkey ) ) {
-                       throw new ParameterTypeException( '$dbkey', 'string' );
+               if ( !is_string( $title ) ) {
+                       throw new ParameterTypeException( '$title', 'string' );
                }
                if ( !is_string( $fragment ) ) {
                        throw new ParameterTypeException( '$fragment', 'string' );
@@ -101,13 +100,13 @@ class TitleValue implements LinkTarget {
                }
 
                // Sanity check, no full validation or normalization applied here!
-               Assert::parameter( !preg_match( '/^_|[ \r\n\t]|_$/', $dbkey ), '$dbkey',
-                       "invalid DB key '$dbkey'" );
-               Assert::parameter( $dbkey !== '' || ( $fragment !== '' && $namespace === NS_MAIN ),
-                       '$dbkey', 'should not be empty unless namespace is main and fragment is non-empty' );
+               Assert::parameter( !preg_match( '/^[_ ]|[\r\n\t]|[_ ]$/', $title ), '$title',
+                       "invalid name '$title'" );
+               Assert::parameter( $title !== '' || ( $fragment !== '' && $namespace === NS_MAIN ),
+                       '$title', 'should not be empty unless namespace is main and fragment is non-empty' );
 
                $this->namespace = $namespace;
-               $this->dbkey = $dbkey;
+               $this->dbkey = strtr( $title, ' ', '_' );
                $this->fragment = $fragment;
                $this->interwiki = $interwiki;
        }
index c363029..f0ded1f 100644 (file)
@@ -236,7 +236,6 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
         * @param int $dbIndex DB_MASTER or DB_REPLICA
         *
         * @return IDatabase
-        * @throws MWException
         */
        private function getConnectionRef( $dbIndex ) {
                return $this->loadBalancer->getConnectionRef( $dbIndex, [ 'watchlist' ] );
@@ -385,7 +384,6 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
         * @param UserIdentity $user
         * @param LinkTarget[] $titles
         * @return bool
-        * @throws MWException
         */
        public function removeWatchBatchForUser( UserIdentity $user, array $titles ) {
                if ( $this->readOnlyMode->isReadOnly() ) {
@@ -718,7 +716,6 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
         * @since 1.27
         * @param UserIdentity $user
         * @param LinkTarget $target
-        * @throws MWException
         */
        public function addWatch( UserIdentity $user, LinkTarget $target ) {
                $this->addWatchBatchForUser( $user, [ $target ] );
@@ -729,7 +726,6 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
         * @param UserIdentity $user
         * @param LinkTarget[] $targets
         * @return bool
-        * @throws MWException
         */
        public function addWatchBatchForUser( UserIdentity $user, array $targets ) {
                if ( $this->readOnlyMode->isReadOnly() ) {
@@ -790,7 +786,6 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
         * @param UserIdentity $user
         * @param LinkTarget $target
         * @return bool
-        * @throws MWException
         */
        public function removeWatch( UserIdentity $user, LinkTarget $target ) {
                return $this->removeWatchBatchForUser( $user, [ $target ] );
@@ -1035,18 +1030,18 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
                                if ( $seenTime > $value->get( $subKey ) ) {
                                        // Revision is newer than the last one seen
                                        $value->set( $subKey, $seenTime );
-                                       $this->latestUpdateCache->set( $key, $value, IExpiringStore::TTL_PROC_LONG );
+                                       $this->latestUpdateCache->set( $key, $value, BagOStuff::TTL_PROC_LONG );
                                } elseif ( $seenTime === false ) {
                                        // Revision does not exist
                                        $value->set( $subKey, wfTimestamp( TS_MW ) );
-                                       $this->latestUpdateCache->set( $key, $value, IExpiringStore::TTL_PROC_LONG );
+                                       $this->latestUpdateCache->set( $key, $value, BagOStuff::TTL_PROC_LONG );
                                } else {
                                        return false; // nothing to update
                                }
 
                                return $value;
                        },
-                       IExpiringStore::TTL_HOUR
+                       BagOStuff::TTL_HOUR
                );
 
                // If the page is watched by the user (or may be watched), update the timestamp
@@ -1076,7 +1071,7 @@ class WatchedItemStore implements WatchedItemStoreInterface, StatsdAwareInterfac
 
                return $this->latestUpdateCache->getWithSetCallback(
                        $key,
-                       IExpiringStore::TTL_PROC_LONG,
+                       BagOStuff::TTL_PROC_LONG,
                        function () use ( $key ) {
                                return $this->stash->get( $key ) ?: null;
                        }
index fad38e3..2b18c58 100644 (file)
@@ -15,6 +15,7 @@
                "resources/src/jquery/jquery.color.js",
                "resources/src/jquery/jquery.highlightText.js",
                "resources/src/jquery/jquery.mw-jump.js",
+               "resources/src/mediawiki.base/legacy.wikibits.js",
                "resources/src/mediawiki.legacy",
                "resources/src/mediawiki.libs.jpegmeta/jpegmeta.js",
                "resources/src/mediawiki.skinning",
index f490dfe..c6fe5ba 100644 (file)
@@ -78,7 +78,8 @@
                        "Omar Ghrida",
                        "AHmed Khaled",
                        "البراء صالح",
-                       "Dyolf77 (WMF)"
+                       "Dyolf77 (WMF)",
+                       "HitomiAkane"
                ]
        },
        "tog-underline": "سطر تحت الوصلات:",
        "zip-bad": "ملف ZIP هذا معطوب أو لا يمكن قراءته لسبب آخر.\nلا يمكن التحقق من سلامته.",
        "zip-unsupported": "هذا ملف ZIP يستخدم بعض مزايا ZIP التي لا يدعمها ميدياويكي.\nلا يمكن التحقق من سلامته.",
        "uploadstash": "تحميل مخبأ",
-       "uploadstash-summary": " توفر هذه الصفحة الوصول إلى الملفات التي يتم تحميلها (أو في أثناء عملية التحميل) ولكنها لم تنشر بعد. هذه الملفات هي غير مرئية لأحد إلا للمستخدم الذين تم الرفع لهم.",
+       "uploadstash-summary": "توفر هذه الصفحة الوصول إلى الملفات التي يتم رفعها ولكنها لم تُنشَر بعد في الويكي، هذه الملفات غير مرئية لأحد إلا للمستخدم الذي رفعها.",
        "uploadstash-clear": "مسح الملفات المخبأة",
        "uploadstash-nofiles": "ليس لديك أي ملفات مخبأة.",
        "uploadstash-badtoken": "فشل أداء ذلك العمل، ربما لأن وثائق تفويض التحرير الخاصة بك منتهية الصلاحية. من فضلك حاول مرة أخرى.",
        "changecontentmodel": "تغيير نموذج المحتوى لصفحة",
        "changecontentmodel-legend": "غير نموذج المحتوى",
        "changecontentmodel-title-label": "عنوان الصفحة",
+       "changecontentmodel-current-label": "نموذج المحتوى الحالي:",
        "changecontentmodel-model-label": "نموذج محتوى جديد",
        "changecontentmodel-reason-label": "السبب:",
        "changecontentmodel-submit": "تغيير",
        "block-log-flags-angry-autoblock": "المنع التلقائي المتقدم مفعل",
        "block-log-flags-hiddenname": "اسم المستخدم مخفي",
        "range_block_disabled": "إمكانية مدير النظام لمنع نطاق معطلة.",
+       "ipb-prevent-user-talk-edit": "يجب السماح بتحرير صفحة نقاشه لمنع جزئي، ما لم يتضمن تقييدا على نطاق نقاش المستخدم.",
        "ipb_expiry_invalid": "تاريخ الانتهاء غير صحيح.",
        "ipb_expiry_old": "توقيت انتهاء المنع واقع في الماضي.",
        "ipb_expiry_temp": "عمليات منع أسماء المستخدمين المخفية يجب أن تكون دائمة.",
        "move-page-legend": "نقل الصفحة",
        "movepagetext": "باستخدام  الاستمارة بالأسفل بإمكانك أن تغير اسم الصفحة، وأن تنقل تاريخها إلى الاسم الجديد.\nالعنوان القديم سيصبح تحويلة للعنوان الجديد.\nيمكنك أن تترك التحويلات التي تشير إلى العنوان الأصلي كما هي لتقوم البوتات بتحديثها تلقائياً.\nإذا اخترت أن تقوم بالتحديث يدوياً، فتأكد من عدم وجود تحويلات [[Special:DoubleRedirects|مزدوجة]] أو [[Special:BrokenRedirects|مكسورة]] وقم بتصحيحها.\nأنت المسؤول عن التأكد من أن الوصلات تصل إلى الصفحات التي يفترض أن تصل إليها.\n\nلاحظ أنه <strong>لن يتم</strong> نقل الصفحة إذا وجدت صفحة في العنوان الجديد، إلا إذا كانت صفحة تحويل، ولا تاريخ لها.\nهذا يعني أنك تستطيع استرجاع الصفحة إلى مكانها لو قمت بخطأ، ولا يمكنك نسخ هذه الصفحة فوق صفحة موجودة.\n\n<strong>ملاحظة:</strong>\n\nهذا قد يكون تغييراً كارثياً وغير متوقع لصفحة مشهورة؛\nمن فضلك تأكد أنك تفهم عواقب هذا الفعل قبل أن تستمر.",
        "movepagetext-noredirectfixer": "باستخدام  الاستمارة بالأسفل بإمكانك أن تغير اسم الصفحة، وأن تنقل تاريخها إلى الاسم الجديد.\nالعنوان القديم سيصبح تحويلة للعنوان الجديد.\nيمكنك تحديث التحويلات التي تشير إلى العنوان الأصلي تلقائياً.\nلو اخترت ألا تفعل، تأكد من عدم وجود تحويلات [[Special:DoubleRedirects|مزدوجة]] أو [[Special:BrokenRedirects|مكسورة]].\nأنت المسؤول عن التأكد من أن الوصلات تصل إلى الصفحات التي يفترض أن تصل إليها.\n\nلاحظ أنه <strong>لن يتم</strong>  نقل الصفحة إذا كان هناك صفحة بنفس العنوان الجديد، إلا إذا كانت فارغة، أو تحويلة لا تاريخ لها.\nهذا يعني أنك تستطيع استرجاع الصفحة إلى مكانها لو قمت بخطأ، وأنك لا يمكنك الكتابة على صفحة موجودة.\n\n<strong>ملاحظة</strong> \n\nهذا قد يكون تغييراً كارثياً وغير متوقع لصفحة مشهورة؛\nمن فضلك تأكد أنك تفهم عواقب هذا الفعل قبل أن تستمر.",
+       "movepagetext-noredirectsupport": "سيؤدي استخدام النموذج أدناه إلى إعادة تسمية صفحة، مع نقل كل تاريخها إلى الاسم الجديد،\nأنت مسئول عن التأكد من أن الروابط لا تزال تشير إلى المكان الذي من المفترض أن تذهب إليه.\n\nلاحظ أنه <strong>لن</strong> يتم نقل الصفحة إذا كانت هناك بالفعل صفحة في العنوان الجديد:\nهذا يعني أنه يمكنك إعادة تسمية صفحة إلى المكان الذي تمت إعادة تسميتها منه إذا ارتكبت خطأً، ولا يمكنك استبدال صفحة موجودة.\n\n<strong>ملاحظة:</strong>\nيمكن أن يكون هذا تغييرا جذريا وغير متوقع لصفحة شائعة؛\nيُرجَى التأكد من أنك تفهم عواقب هذا قبل المتابعة.",
        "movepagetalktext": "لو علمت على هذا الصندوق، فصفحة النقاش المرفقة يتم نقلها أوتوماتيكيا للعنوان الجديد، إلا لو كانت صفحة نقاش غير فارغة هناك بالفعل.\n\nفي هذه الحالة، فسيتعين عليك نقل أو دمج الصفحة يدويا لو رغبت في ذلك.",
        "moveuserpage-warning": "<strong>تحذير:</strong> أنت على وشك نقل صفحة مستخدم. من فضلك لاحظ أن الصفحة وحدها سوف تنقل وأن المستخدم <em>لن</em> تعاد تسميته.",
        "movecategorypage-warning": "<strong>تحذير:</strong> أنت على وشك نقل صفحة التصنيف إلى عنوان جديد؛ <em>لن</em> تنقل الصفحات المندرجة تحت التصنيف إلى العنوان الجديد.",
        "permanentlink": "وصلة دائمة",
        "permanentlink-revid": "معرف المراجعة",
        "permanentlink-submit": "الذهاب إلى المراجعة",
+       "newsection": "قسم جديد",
+       "newsection-page": "الصفحات المستهدفة",
+       "newsection-submit": "انتقل إلى صفحة",
        "dberr-problems": "عذرا! هذا الموقع يعاني من صعوبات تقنية.",
        "dberr-again": "جرب الانتظار بضع دقائق وإعادة التحميل.",
        "dberr-info": "(لا يمكن الوصول إلى قاعدة البيانات: $1)",
index 0fd9873..f863d06 100644 (file)
@@ -25,7 +25,8 @@
                        "Sagsag",
                        "Bodhisattwa",
                        "Vlad5250",
-                       "ৰাজীৱ গোস্বামী"
+                       "ৰাজীৱ গোস্বামী",
+                       "আফতাবুজ্জামান"
                ]
        },
        "tog-underline": "সংযোগসমূহ অধোৰেখিত কৰক:",
        "enotif_body_intro_changed": "{{SITENAME}}ৰ পৃষ্ঠা $1, $PAGEEDITDATE তাৰিখে {{gender:$2|$2}}ৰ দ্বাৰা সলনি কৰা হৈছিল, বৰ্তমানৰ সংস্কৰণৰ বাবে $3 চাওক।",
        "enotif_lastvisited": "আপোনাৰ শেষ পৰিদৰ্শনৰ পিছত হোৱা সকলো সালসলনিৰ বাবে $1 চাওক ।",
        "enotif_lastdiff": "এই পৰিৱৰ্তনটো চাবৰ বাবে $1 চাওক ।",
-       "enotif_anon_editor": "বà§\87নামà§\80 à¦¸à¦¦à¦¸à§\8dয $1",
+       "enotif_anon_editor": "নামহà§\80ন à¦¬à§\8dযবহারà¦\95ারà§\80 $1",
        "enotif_body": "প্ৰিয় $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nসম্পাদকৰ সাৰাংশ: $PAGESUMMARY $PAGEMINOREDIT\n\nসম্পাদকজনক যোগাযোগ কৰক:\nমেইল: $PAGEEDITOR_EMAIL\nৱিকি: $PAGEEDITOR_WIKI\n\nআপুনি এই পৃষ্ঠাটো প্ৰৱেশ কৰি নোচোৱালৈকে আন সালসলনিৰ কোনো জাননী দিয়া নহ’ব। আপুনি আপোনাৰ লক্ষ্য-তালিকাৰ পৃষ্ঠাবোৰৰ জাননী ফ্লেগ পূৰ্বৰ অৱস্থালৈও ঘূৰাই নিব পাৰে ।\n\nআপোনাৰ {{SITENAME}} জাননী ব্যৱস্থা\n\n--\nআপোনাৰ ই-মেইল জাননী ছেটিং সলনি কৰিবলৈ চাওক\n{{canonicalurl:{{#special:Preferences}}}}\n\nআপোনাৰ লক্ষ্য-তালিকাৰ ছেটিং সলনি কৰিবলৈ চাওক\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nআপোনাৰ লক্ষ্য-তালিকাৰ পৰা পৃষ্ঠা বিলোপ কৰিবলৈ চাওক\n$UNWATCHURL\n\nপ্ৰতিক্ৰিয়া আৰু অধিক সহযোগিতাৰ বাবে:\n$HELPPAGE",
        "created": "সৃষ্টি কৰা হ’ল",
        "changed": "সলোৱা হৈছে",
index ea05ebc..189dddb 100644 (file)
        "search-interwiki-more": "(más)",
        "search-interwiki-more-results": "más resultaos",
        "search-relatedarticle": "Rellacionáu",
+       "search-invalid-sort-order": "Nun se reconoció la ordenación por $1, aplicaráse la ordenación predeterminada. Los tipos d'ordenación válidos son: $2",
        "searchrelated": "rellacionáu",
        "searchall": "toos",
        "showingresults": "Abaxo s'{{PLURAL:$1|amuesa hasta <strong>un</strong> resultáu|amuesen <strong>$1</strong> resultaos}}, principando por #<strong>$2</strong>.",
        "rcfilters-clear-all-filters": "Borrar tolos filtros",
        "rcfilters-show-new-changes": "Ver los cambeos nuevos dende $1",
        "rcfilters-search-placeholder": "Filtriar cambeos (usa'l menú o busca'l nome del filtru)",
+       "rcfilters-search-placeholder-mobile": "Filtros",
        "rcfilters-invalid-filter": "Filtru inválidu",
        "rcfilters-empty-filter": "Nun hai filtros activos. Amuésense toles contribuciones.",
        "rcfilters-filterlist-title": "Filtros",
        "newtitle": "Títulu nuevu:",
        "move-watch": "Vixilar les páxines d'orixe y destín",
        "movepagebtn": "Treslladar la páxina",
-       "pagemovedsub": "Treslláu correctu",
+       "pagemovedsub": "Treslláu correutu",
        "cannotmove": "La páxina nun pudo treslladase {{PLURAL:$1|pol siguiente motivu|polos siguientes motivos}}:",
        "movepage-moved": "<strong>«$1» treslladóse a «$2»</strong>",
        "movepage-moved-redirect": "Creóse una redireición.",
        "passwordpolicies-policy-passwordnotinlargeblacklist": "La contraseña nun pué tar na llista de les 100.000 contraseñes más usaes.",
        "passwordpolicies-policyflag-forcechange": "tien de camudase al aniciar sesión",
        "passwordpolicies-policyflag-suggestchangeonlogin": "suxerir cambiu al aniciar sesión",
+       "mycustomjsredirectprotected": "Nun tienes permisu pa editar esta páxina en JavaScript porque ye una redireición que nun apunta dientro del to espaciu d'usuariu.",
        "easydeflate-invaliddeflate": "El conteníu dau nun ta comprimíu correutamente",
        "unprotected-js": "Por razones de seguridá, JavaScript nun puede cargase dende páxines ensin protexer. Crea javascript sólo nel espaciu de nomes MediaWiki: o como subpáxina d'usuariu",
        "userlogout-continue": "¿Desees zarrar la sesión?"
index c4273e9..b8a53e4 100644 (file)
@@ -14,6 +14,7 @@
        "tog-hideminor": "नँवा बदलावमें छोट बदलाव लुकुआवा जाय",
        "tog-hidepatrolled": "नँवा बदलावमें परीक्षित बदलाव लुकुआवा जाय",
        "tog-newpageshidepatrolled": "नवा पन्नन कय सूची में परीक्षित पन्ना लुकुआवा जाय",
+       "tog-hidecategorization": "पृष्ठों का श्रेणीकरण छिपाएं",
        "tog-extendwatchlist": "खाली हालिए कय नाहीं, बल्कि कुल बदलाव कय देखावे कय लिए ध्यानसूची कय विस्तारित करा जाय",
        "tog-usenewrc": "नँवा बदलाव में अउर ध्यानसूची बदलाव कय पन्ना अनुसार समूह में बाँटा जाय",
        "tog-numberheadings": "शीर्षक स्व-क्रमांकित करा जाय",
@@ -23,6 +24,7 @@
        "tog-watchdefault": "हमार सम्पादन करल पन्ना अव फाइल कय ध्यानसूची में जोडो",
        "tog-watchmoves": "हमरे द्वारा  घुसकाइल पन्ना अव फ़ाइल कय हमरे ध्यानसूची में जोडो",
        "tog-watchdeletion": "हमार हटावल पन्ना अव फाइल कय हमरे ध्यानसूची में जोडो",
+       "tog-watchuploads": "मेरे द्वारा अपलोड की गयी नई फ़ाइलें मेरी ध्यानसूची में जोडें",
        "tog-watchrollback": "हमार प्रत्यापन्न (रोलबैक) करल  पन्ना कय हमरे ध्यानसूची में जोडो।",
        "tog-minordefault": "हमार कुल सम्पादन छोट बदलाव होय",
        "tog-previewontop": "सम्पादन बक्सा कय ऊप्पर झलक देखावो",
        "tog-enotifminoredits": "छोटे परिवर्तन कय लिए भी हम्म्य ई-मेल पठवो",
        "tog-enotifrevealaddr": "अधिसूचना ई-मेल में हमार ई-मेल ठाँव देखावो",
        "tog-shownumberswatching": "ध्यान रख्खय वाले सदस्यन् कय संख्या देखावो",
-       "tog-oldsig": "à¤\85भिन à¤\95य हस्ताक्षर:",
+       "tog-oldsig": "à¤\86पà¤\95ा à¤µà¤°à¥\8dतमान हस्ताक्षर:",
        "tog-fancysig": "हस्ताक्षर कय विकिपाठ जैसन मानों (बिना स्वचालित कड़ी कय)",
-       "tog-uselivepreview": "सà¤\9cिव à¤\9dलà¤\95 à¤¦à¥\87à¤\96ा à¤\9cाय",
+       "tog-uselivepreview": "सà¤\9cà¥\80वन à¤\9dलà¤\95 à¤\95ा à¤\89पयà¥\8bà¤\97 à¤\95रà¥\87à¤\82",
        "tog-forceeditsummary": "यदि सम्पादन सारांश नाई दिहा है तो हम्मै बतावा जाय",
        "tog-watchlisthideown": "हमरे ध्यानसूची से हमार करल बदलाव लुकुवाओ",
        "tog-watchlisthidebots": "हमरे ध्यानसूची से बॉट कय करल परिवर्तन लुकुवाओ",
        "tog-watchlisthideminor": "हमरे ध्यानसूची से छोट बदलाव लुकुवाओ",
        "tog-watchlisthideliu": "हमरे ध्यानसूची में ल़ाग इन करल सदस्यन् कय सम्पादन ना देखावा जाय",
+       "tog-watchlistreloadautomatically": "जब भी छननी बदलने पर ध्यानसूची को अपने आप ही लोड करें (जावास्क्रिप्ट अनिवार्य)",
+       "tog-watchlistunwatchlinks": "देखनेवाली सूची प्रविष्टियों के लिए सीधा अनदेखा/देखा चिह्न ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) पृष्ठों को परिवर्तन के साथ जोड़ें (टॉगल के कार्य करने हेतु जावास्क्रिप्ट आवश्यक है)",
        "tog-watchlisthideanons": "आइ॰पी सदस्यन् कय करल सम्पादन हमरे ध्यानसूची में ना देखाओ",
        "tog-watchlisthidepatrolled": "परीक्षित सम्पादन हमरे ध्यानसूची में लुकुवाओ",
+       "tog-watchlisthidecategorization": "पृष्ठों का श्रेणीकरण छुपाएँ",
        "tog-ccmeonemails": "हमरे द्वारा अउर सदस्यन् कय पठावल् ई-मेल कय प्रति हमहु कय पठओ",
        "tog-diffonly": "अवतरणन् में अन्तर देखावत समय पुरान अवतरण ना देखाओ",
        "tog-showhiddencats": "लुकुवावल श्रेणि देखाओ",
-       "tog-norollbackdiff": "समà¥\8dपादन à¤µà¤¾à¤ªà¤¿à¤¸ à¤²à¥\87वà¥\87à¤\95 à¤¬à¤¾à¤¦ à¤\85नà¥\8dतर à¤¨à¤¾ à¤¦à¥\87à¤\96ाà¤\93",
+       "tog-norollbackdiff": "समà¥\8dपादन à¤µà¤¾à¤ªà¤¸ à¤²à¥\87नà¥\87 à¤\95à¥\87 à¤¬à¤¾à¤¦ à¤\85नà¥\8dतर à¤¨ à¤¦à¤¿à¤\96ायà¥\87à¤\82",
        "tog-useeditwarning": "जब हम कवनो सम्पादन पन्ना कय बिना सहेजे बदलाव कय साथे छोड दि तव हम्मै बतावो।",
-       "tog-prefershttps": "लॉगिन करेक बाद हमेशा सुरक्षित कनेक्शन कय प्रयोग करो",
+       "tog-prefershttps": "सत्र आरम्भ करते समय सदैव सुरक्षित कनेक्शन का प्रयोग करें",
+       "tog-showrollbackconfirmation": "रोलबैक लिंक पर क्लिक करते समय एक पुष्टिकरण संकेत दिखाएं",
        "underline-always": "हमेशा",
        "underline-never": "कब्बो नाई",
        "underline-default": "देखावट या ब्राउज़र डिफ़ॉल्ट",
        "october-date": "अक्टूबर $1",
        "november-date": "नोभेम्बर $1",
        "december-date": "डिसेम्बर $1",
+       "period-am": "पूर्वाह्न",
+       "period-pm": "अपराह्न",
        "pagecategories": "{{PLURAL:$1|श्रेणी|श्रेणिन्}}",
        "category_header": "\"$1\" श्रेणी में पन्ना",
        "subcategories": "उपश्रेणिन्",
        "newwindow": "(नवा विंडो में खुलत अहै)",
        "cancel": "रद्द करा जाय",
        "moredotdotdot": "अउर...",
-       "morenotlisted": "à¤\88 à¤ªà¥\82रा à¤¸à¥\82à¤\9aà¥\80 à¤¨à¤¾à¤\88 होय।",
+       "morenotlisted": "हà¥\8bà¤\87 à¤¸à¤\95त à¤¹à¥\88 à¤¸à¥\82à¤\9aà¥\80 à¤ªà¥\82रà¥\80 à¤¨à¤¾ होय।",
        "mypage": "पन्ना",
        "mytalk": "बातचीत",
-       "anontalk": "à¤\88 à¤\86à¤\87॰पà¥\80 à¤\95य à¤\96रतिन à¤¬à¤¾à¤¤à¤\9aà¥\80त",
+       "anontalk": "बतà¤\95हà¥\80",
        "navigation": "घुमाई",
        "and": "&#32;अउर",
        "faq": "साधारण सवाल",
        "returnto": "$1 मे लौटो।",
        "tagline": "{{SITENAME}} से",
        "help": "मदद",
+       "help-mediawiki": "मीडियाविकि के बारे मा सहायता",
        "search": "खोजा जाय",
+       "search-ignored-headings": " #<!-- इस पंक्ति को जैसा है वैसा ही रहने दें। --> <pre>\n# शीर्षक, जिसे खोजते समय अनदेखा कर दिया जाता है।\n# इसमें कोई भी बदलाव तुरंत दिखाई देता है, जब वह शीर्षक इंडेक्स हो जाता है।\n# आप किसी पृष्ठ को फिर से इंडेक्स करने के लिए रिक्त सम्पादन कर सकते हैं।\n# इन चिन्हों का पालन करें:\n#   * हर चीज जो \"#\" से शुरू होता है, वह केवल टिप्पणी है।\n#   * हर बिना रिक्त पंक्ति एक सटीक शीर्षक है, जो रूप आदि हर चीज को अनदेखा कर देता है।\nसन्दर्भ\nबाहरी कड़ियाँ\nइन्हें भी देखें\n #</pre> <!-- इस पंक्ति को जैसा है वैसा ही रहने दें।  -->",
        "searchbutton": "खोजा जाय",
        "go": "जावा जाय",
        "searcharticle": "जावा जाय",
        "history": "पन्ना कय इतिहास",
        "history_short": "इतिहास",
+       "history_small": "इतिहास",
        "updatedmarker": "हमरे अन्तिम दाँइ आवे कय बाद कय अपडेट",
        "printableversion": "छापए लायक संस्करण",
        "permalink": "स्थायी कड़ी",
        "talk": "चर्चा",
        "views": "दर्शाव",
        "toolbox": "औजार कय बक्सा",
+       "tool-link-userrights": "{{GENDER:$1|सदस्य}} समूह बदलें",
+       "tool-link-userrights-readonly": "{{GENDER:$1|सदस्य}} समूह देखें",
+       "tool-link-emailuser": "इस {{GENDER:$1|सदस्य}} को ई-मेल करें।",
        "imagepage": "फ़ाइल पन्ना देखा जाय",
        "mediawikipage": "सनेशा पन्ना देखा जाय",
        "templatepage": "साँचा पन्ना देखा जाय",
        "nstab-template": "साँचा",
        "nstab-help": "मदद पन्ना",
        "nstab-category": "श्रेणी",
+       "mainpage-nstab": "प्रधान पन्ना",
        "nosuchaction": "अईसन कवनो काम नाई है",
        "nosuchactiontext": "इ यू॰आर॰एल से निर्दिष्ट काम अवैध है।\nआप यू॰आर॰एल गलत लिखा गा है, या कवनो गलत कड़ी कय प्रयोग करा गा है।\nई {{SITENAME}} कय सॉफ़्टवेयर में त्रुटि भी होई सकत है।",
        "nosuchspecialpage": "अईसन कौनो विशेष पन्ना नाई है",
        "databaseerror-query": "अनुरोध: $1",
        "databaseerror-function": "फ़ंक्शन: $1",
        "databaseerror-error": "त्रुटि: $1",
+       "transaction-duration-limit-exceeded": "उच्च प्रतिकृति अंतराल निर्माण से बचने के लिए, यह मसौदा निरस्त किया गया क्योंकि लेखन काल ($1) दूसरी सीमा $2 को पार कर गया।\nयदि आप कई आयटमों को एक साथ परिवर्तित कर रहे हैं तो इसके स्थान पर अधिक संख्या में छोटी संक्रियायें करें।",
        "laggedslavemode": "'''चेतावनी:''' यह पृष्ठ अद्यतनीत जानकारी-युक्त ना होने की आशंका है।",
        "readonly": "डाटाबेस लॉक करा है",
        "enterlockreason": "लॉक करने का कारण दीजिए, साथ ही लॉक खुलने के समय का लगभग आकलन दिजीये।",
-       "readonlytext": "शायद मेंटेनन्स के चलते डाटाबेस नये संपादन और अन्य बदलावों से लॉक किया गया है, जिसके बाद यह सामान्य स्थिति में आ जाना चाहिये।\n\nजिस प्रबंधक ने यह लॉक किया था उसने यह कारण दिया है: $1",
+       "readonlytext": "शायद à¤®à¥\87à¤\82à¤\9fà¥\87ननà¥\8dस à¤\95à¥\87 à¤\9aलतà¥\87 à¤¡à¤¾à¤\9fाबà¥\87स à¤¨à¤¯à¥\87 à¤¸à¤\82पादन à¤\94र à¤\85नà¥\8dय à¤¬à¤¦à¤²à¤¾à¤µà¥\8bà¤\82 à¤¸à¥\87 à¤²à¥\89à¤\95 à¤\95िया à¤\97या à¤¹à¥\88, à¤\9cिसà¤\95à¥\87 à¤¬à¤¾à¤¦ à¤¯à¤¹ à¤¸à¤¾à¤®à¤¾à¤¨à¥\8dय à¤¸à¥\8dथिति à¤®à¥\87à¤\82 à¤\86 à¤\9cाना à¤\9aाहियà¥\87।\n\nà¤\9cिस à¤\95ारà¥\8dयà¤\95ारà¥\80 à¤ªà¥\8dरबà¤\82धà¤\95 à¤¨à¥\87 à¤¯à¤¹ à¤²à¥\89à¤\95 à¤\95िया à¤¥à¤¾ à¤\89सनà¥\87 à¤¯à¤¹ à¤\95ारण à¤¦à¤¿à¤¯à¤¾ à¤¹à¥\88: $1",
        "missing-article": "डाटाबेस में $2 के अंदर कहीं भी \"$1\" नहीं मिला।\n\nआम तौर पर हटाए जा चुके पृष्ठ की इतिहास कड़ी का प्रयोग करने पर ऐसा होता है।\n\nअगर ऐसा नहीं है, तो शायद आपने सॉफ़्टवेयर में त्रुटि खोज ली है।\nकृपया यू॰आर॰एल पते समेत किसी [[Special:ListUsers/sysop|प्रबंधक]] को इसका ब्यौरा दें।",
        "missingarticle-rev": "(अवतरण#: $1)",
        "missingarticle-diff": "(अंतर: $1, $2)",
        "readonly_lag": "उपमुख्य डाटाबेस सर्वर मुख्य डाटाबेस सर्वर के बराबर अद्यातानीत होने तक मुख्य डाटाबेस सर्वर लॉक हो गया है।",
+       "nonwrite-api-promise-error": "'Promise-Non-Write-API-Action' को एचटीटीपी शीर्षक द्वारा भेजा पर एपीआई में लेखन मॉड्यूल है।",
        "internalerror": "आन्तरिक त्रुटि",
        "internalerror_info": "आन्तरिक त्रुटि: $1",
        "internalerror-fatal-exception": "प्रकार की गंभीर अपवाद \"$1\"",
        "badarticleerror": "यह पन्ना पे ई काम नाई कई सका जात अहै।",
        "cannotdelete": "\"$1\" पन्ना या फ़ाइल कय नाई हटाय सका जात अहै।\nशायद केहु अउर एका पहिलवे हटाई दिहे है।",
        "cannotdelete-title": "\"$1\" पन्ना नाई मेटाए सका जात है",
+       "delete-scheduled": "पृष्ठ \"$1\" को हटाने के लिए अनुसूचित किया गया है।\nकृपया शान्त रहें।",
        "delete-hook-aborted": "हुक द्वारा हटाना बीच में ही छोड़ा गया।\nइसने कोई कारण नहीं बताया।",
        "no-null-revision": "\"$1\" पृष्ठ के लिए बिना बदलावों का नया अवतरण बनाने में असफल।",
        "badtitle": "खराब शीर्षक",
        "title-invalid-empty": "निवेदित पन्ना कय शीर्षक खाली है या खाली नामस्थान है।",
        "title-invalid-utf8": "निवेदित पन्ना कय शीर्षक अवैध यू०टी०एफ़-८ कय सिलसिला राखत है।",
        "title-invalid-interwiki": "निवेदित पन्ना कय शीर्षक एकठु अंतर-विकी कड़ी रक्खत है जवने कय शीर्षक मा प्रयोग नाइ कै सका जात है।",
+       "title-invalid-talk-namespace": "निवेदित पृष्ठ का शीर्षक एक वार्ता पृष्ठ से सन्दर्भित है जो मौजूद नहीं है।",
+       "title-invalid-characters": "निवेदित पृष्ठ का शीर्षक अवैध कैरेक्टर: \"$1\" रखता है।",
+       "title-invalid-relative": "शीर्षक एक सन्दर्भित मार्ग रखता है। सन्दर्भित पृष्ठ के शीर्षक (./, ../)अवैध हैं, क्योंकि वे अधिकांश रूप पहुँच से बाहर हैं जब उन्हें उपयोगकर्ता के ब्रौज़र से प्रयोग में लाने का प्रयास किया जाता है।",
+       "title-invalid-magic-tilde": "निवेदित पृष्ठ का शीर्षक अवैध जादूई टिल्ड सिलसिला रखता है।",
+       "title-invalid-too-long": "माँग किए गए पृष्ठ का शीर्षक बहुत लम्बा है। इसे यू०टी०एफ़० कोडिंग मे $1 {{PLURAL:$1|बाइट|बाइट्स}} से बढ़कर नहीं होना चाहिए और इसे यू०टी०एफ़०-८ एनकोडिंग में होना चाहिए।",
+       "title-invalid-leading-colon": "निवेदित पृष्ठ का शीर्षक प्रारंभ में अवैध कोलन रखता है।",
        "perfcached": "नीचे दिया हुआ डेटा कैशे मेमोरी से लिया हुआ है, अतः हो सकता है कि इसका पूर्ण अद्यतन न हुआ हो। कैशे मेमोरी में अधिकतम {{PLURAL:$1|एक  नतीजा|$1 नतीजे}} उपलब्ध हैं।",
        "perfcachedts": "नीचे दिया हुआ डेटा कैशे मेमोरी से है, और इसका अंतिम अद्यतन $1 को हुआ था। कैशे मेमोरी में अधिकतम {{PLURAL:$4|एक  नतीजा|$4 नतीजे}} उपलब्ध हैं।",
        "querypage-no-updates": "इस पृष्ठ का नवीनीकरण करना मना है। अभी यहाँ के डाटा को ताज़ा नहीं कर सकते।",
        "viewsource": "स्रोत देखा जाय",
        "viewsource-title": "$1 कय लिए स्रोत देखा जाय",
        "actionthrottled": "काम खतम कई दिहा है",
-       "actionthrottledtext": "सà¥\8dपà¥\88म à¤\95य à¤°à¥\8bà¤\95à¥\87à¤\95à¥\8d à¤²à¤¿à¤¯à¥\87, à¤\87 à¤\95ाम à¤\8fतना à¤\95म à¤¸à¤®à¤¯ à¤®à¥\87à¤\82 à¤\8fà¤\95ठà¥\81 à¤¸à¥\80मा à¤¸à¥\87 à¤¢à¥\87र à¤¦à¤¾à¤\81à¤\87 à¤\95रà¥\87 à¤\95य à¤®à¤¿à¤¨à¤¾à¤¹à¥\80 à¤¹à¥\88, à¤\85व à¤\86प à¤\87 à¤¸à¥\80मा à¤\95य à¤ªà¤¾à¤° à¤\95à¤\88 à¤\9aà¥\81à¤\95ा à¤\97ा à¤¹à¥\88।\nà¤\95à¥\83पया à¤\95à¥\81à¤\9b à¤¸à¤®à¤¯ à¤¬à¤¾à¤¦ à¤«à¤¿à¤° à¤¸à¥\87 à¤ªà¥\8dरयास à¤\95रा à¤\9cाय।",
+       "actionthrottledtext": "सà¥\8dपà¥\88म à¤\95à¥\80 à¤°à¥\8bà¤\95थाम à¤\95à¥\87 à¤²à¤¿à¤¯à¥\87, à¤¯à¤¹ à¤\95à¥\8dरिया à¤\87तनà¥\87 à¤\95म à¤¸à¤®à¤¯ à¤®à¥\87à¤\82 à¤\8fà¤\95 à¤¸à¥\80मा à¤¸à¥\87 à¤\85धिà¤\95 à¤¬à¤¾à¤° à¤\95रनà¥\87 à¤¸à¥\87 à¤®à¤¨à¤¾à¤\88 à¤¹à¥\88, à¤\94र à¤\86प à¤\87स à¤¸à¥\80मा à¤\95à¥\8b à¤ªà¤¾à¤° à¤\95र à¤\9aà¥\81à¤\95à¥\87 à¤¹à¥\88à¤\82।\nà¤\95à¥\83पया à¤\95à¥\81à¤\9b à¤¸à¤®à¤¯ à¤¬à¤¾à¤¦ à¤ªà¥\81न: à¤¯à¤¤à¥\8dन à¤\95रà¥\87à¤\82।",
        "protectedpagetext": "ई पन्ना संपादन अव अउर काम से सुरक्षित किहा है।",
        "viewsourcetext": "आप इ पन्ना कय स्रोत देखी सका जात है औ ओकर नकल उतार सका जात है:",
-       "viewyourtext": "à¤\86प à¤\88 à¤ªà¤¨à¥\8dना à¤®à¥\87à¤\82 ''à¤\86पन à¤¸à¤®à¥\8dपादन'' à¤\95य à¤¸à¥\8dरà¥\8bत à¤¦à¥\87à¤\96à¥\80 à¤¸à¤\95ा à¤\9cात à¤¹à¥\88 à¤\94 à¤\93à¤\95र à¤¨à¤\95ल à¤\89तार à¤¸à¤\95ा à¤\9cात à¤¹à¥\88:",
+       "viewyourtext": "à¤\86प à¤\87स à¤ªà¥\83षà¥\8dठ à¤®à¥\87à¤\82 ''à¤\85पनà¥\87 à¤¸à¤®à¥\8dपादन'' à¤\95ा à¤¸à¥\8dरà¥\8bत à¤¦à¥\87à¤\96 à¤¸à¤\95तà¥\87 à¤¹à¥\88à¤\82 à¤\94र à¤\89सà¤\95à¥\80 à¤¨à¤\95ल à¤\89तार à¤¸à¤\95तà¥\87 à¤¹à¥\88à¤\82:",
        "protectedinterface": "इ पन्ना  विकी कय सॉफ़्टवेयर कय इंटरफ़ेस पाठ देत है,अव एकर गलत प्रयोग से बचावेक लिये सुरक्षित करा है।\nकुल विकिन् कय लिए अनुवाद जोड़य या बदलय कय लिए कृपया मीडियाविकि कय क्षेत्रीयकरण प्रकल्प [https://translatewiki.net/ translatewiki.net] कय प्रयोग करा जाय।",
        "editinginterface": "<strong>चेतावनी:</strong> आप एकठु अइसन पन्ना कय बदलय जावा जात हैं जवन सॉफ़्टवेयर कय इंटरफ़ेस पाठ देत है।\nइ पन्ना कय बदलय से अउर सदस्यन् कय देखावेवाला इंटरफ़ेस कय शकल सूरत में बदलाव आई जाइ।",
        "translateinterface": "कुल विकिन् कय ट्रान्सलेशन करय अव बदलय खर्तिन [https://translatewiki.net/ ट्रान्शलेटविकि.नेट] कय प्रयोग करा जाय ।",
-       "cascadeprotected": "à¤\88 à¤ªà¤¨à¥\8dना à¤¸à¥\81रà¤\95à¥\8dषित à¤¹à¥\88, à¤\95ाहà¥\87 à¤¸à¥\87 à¤\87 à¤¨à¤¿à¤\9aà¥\87 à¤¦à¤¿à¤¹à¤¾ {{PLURAL:$1|पनà¥\8dना|पनà¥\8dननà¥\8d}} à¤\95य à¤¸à¥\81रà¤\95à¥\8dषा-सà¥\80ढ़à¥\80 à¤®à¥\87à¤\82 है:\n$2",
+       "cascadeprotected": "यह à¤ªà¥\83षà¥\8dठ à¤¸à¥\81रà¤\95à¥\8dषित à¤¹à¥\88à¤\82, à¤\95à¥\8dयà¥\8bà¤\82à¤\95ि à¤¯à¤¹ à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित {{PLURAL:$1|पà¥\83षà¥\8dठ|पà¥\83षà¥\8dठà¥\8bà¤\82}} à¤\95à¥\80 à¤¸à¥\81रà¤\95à¥\8dषा-सà¥\80ढ़à¥\80 à¤®à¥\87à¤\82 à¤¸à¤®à¤¾à¤µà¤¿à¤·à¥\8dà¤\9f है:\n$2",
        "namespaceprotected": "आप कय '''$1''' नामस्थान में रहल पन्नन कय बदलै कय अनुमति नाइ है।",
        "customcssprotected": "आप कय इ CSS पन्ना कय संपादन करेक अनुमति नाई है, काहे से एहमा अउर सदस्य कय व्यक्तिगत सेटिंग्स शामिल है।",
+       "customjsonprotected": "आपको इस JSON पृष्ठ को संपादित करने की अनुमति नहीं है, क्योंकि इसमें अन्य सदस्य की व्यक्तिगत सेटिंग्स शामिल हैं।",
        "customjsprotected": "आप कय इ जावास्क्रिप्ट पन्ना कय संपादन करेक अनुमति नाई है, काहे से एहमा अउर सदस्य कय व्यक्तिगत सेटिंग्स शामिल है।",
+       "sitecssprotected": "आपको इस सी.एस.एस पृष्ठ को सम्पादित करने की अनुमति नहीं है क्योंकि यह सभी प्रयोक्ताओं को प्रभावित कर सकता है।",
+       "sitejsonprotected": "आपको इस JSON पृष्ठ को सम्पादित करने की अनुमति नहीं है क्योंकि यह सभी प्रयोक्ताओं को प्रभावित कर सकता है।",
+       "sitejsprotected": "आपको इस जावास्क्रिप्ट पृष्ठ को सम्पादित करने की अनुमति नहीं है क्योंकि यह सभी प्रयोक्ताओं को प्रभावित कर सकता है।",
        "mycustomcssprotected": "आप कय इ CSS पन्ना कय संपादन करेक अनुमति नाई है ।",
+       "mycustomjsonprotected": "आपके पास इस JSON पृष्ठ को सम्पादित करने का अधिकार नहीं है।",
        "mycustomjsprotected": "आप कय इ जावास्क्रिप्ट पन्ना कय संपादन करेक अधिकार नाई है ।",
        "myprivateinfoprotected": "आप कय लगे आपन व्यक्तिगत जानकारी बदलेक अनुमति नाई है।",
        "mypreferencesprotected": "आप कय लगे आपन वरीयता बदलेक  अनुमति नाई है।",
        "ns-specialprotected": "विशेष पन्ना सम्पादित नाई होइहैं।",
        "titleprotected": "सदस्य [[User:$1|$1]] इ शीर्षक कय पन्ना बनावे से सुरक्षित करे हँय।\nएकरे लिये कारण होय: <em>$2</em>",
-       "filereadonlyerror": "\"$1\" फ़ाइल को बदलने में असक्षम क्योंकि भण्डार \"$2\" इस समय 'केवल पाठन हेतु' (रीड ओनली) है।\n\nजिस प्रबंधक ने ये प्रबंध लगाया है उन्होंने निम्न विवरण प्रदान किया है: \"$3\"।",
+       "filereadonlyerror": "\"$1\" फ़ाइल को बदलने में असक्षम क्योंकि भण्डार \"$2\" इस समय 'केवल पाठन हेतु' (रीड ओनली) है।\n\nजिस कार्यकारी प्रबंधक ने ये प्रबंध लगाया है उन्होंने निम्न विवरण प्रदान किया है: \"$3\"।",
+       "invalidtitle": "अवैध शीर्षक",
        "invalidtitle-knownnamespace": "\"$2\" नामस्थान अउर \"$3\" नाँव वाला गलत शीर्षक",
        "invalidtitle-unknownnamespace": "अज्ञात नामस्थान संख्या $1 अउर नाँव \"$2\" वाला गलत शीर्षक",
        "exception-nologin": "लॉग इन नाइ करे हव",
        "virus-scanfailed": "जाँच विफल (कूट $1)",
        "virus-unknownscanner": "अज्ञात ऐंटीवायरस:",
        "logouttext": "'''अब आप खाता से बहरे आइ गवा गय।'''\nध्यान दिहा जाय कि जब तक आप आपन ब्राउज़र कैशे खाली नाई करा जाई, कुछ पन्ना अईसन देखाइ जैसय कि आप अबहिनो लॉगिन करा गा है।",
+       "logging-out-notify": "आप का लॉग आउट कीन जात अहै, कृपया इंतजार करैं।",
+       "logout-failed": "अभी प्रस्थान नहीं हो रहा है:$1",
+       "cannotlogoutnow-title": "अभी प्रस्थान नहीं हो रहा है",
+       "cannotlogoutnow-text": "$1 के उपयोग समय प्रस्थान नहीं किया जा सकता है।",
        "welcomeuser": "आप कय स्वागत है, $1!",
        "welcomecreation-msg": "आप कय खाता बनी गए।\nआपन [[Special:Preferences|{{SITENAME}} वरीयता]] बदलेक ना भूलावा जाइ।",
        "yourname": "सदस्यनावँ:",
        "createacct-yourpasswordagain-ph": "गुप्त कुंजी फिर से लिखो",
        "userlogin-remembermypassword": "हम्मै लॉग्ड इन रखो",
        "userlogin-signwithsecure": "सुरक्षित कनेक्शन कय प्रयोग करो",
+       "cannotlogin-title": "लॉग इन नहीं किया जा सकता",
+       "cannotlogin-text": "लॉग इन संभव नहीं है",
+       "cannotloginnow-title": "अभी लॉग इन नहीं किया जा सकता",
+       "cannotloginnow-text": "$1 का उपयोग करते समय लॉग इन नहीं हो सकता है।",
+       "cannotcreateaccount-title": "खाता नहीं खोल सकते",
+       "cannotcreateaccount-text": "सीधे खाता बनाना इस विकि में सक्रिय नहीं है।",
        "yourdomainname": "आप कय डोमेन:",
        "password-change-forbidden": "आप इ विकि पे पासवर्ड नाई बदल सका जात है।",
        "externaldberror": "या तो प्रमाणिकरण डाटाबेस में त्रुटि होई गवा है या फिर आप कय आपन बहरेक खाता अपडेट करेक अनुमति नाई है।",
        "login": "लॉग इन",
+       "login-security": "अपनी पहचान सत्यापित करें",
        "nav-login-createaccount": "लाग इन / खाता खोला जाय",
        "logout": "बहरे निकरा जाय",
        "userlogout": "बहरे निकरा जाय",
        "userlogin-resetpassword-link": "आपन गुप्त कुंजी भूलाई गवा गय?",
        "userlogin-helplink2": "लॉग इन करे में सहायता",
        "userlogin-loggedin": "आप {{GENDER:$1|$1}} कय रूप में पहीलवे से लॉग्ड इन होवा जात है।\nकवनो अउर सदस्य कय रूप में लॉग इन करय खरतिन निचे दिहा फ़ॉर्म कय प्रयोग करा जाय।",
+       "userlogin-reauth": "आप {{GENDER:$1|$1}} हो, इसके लिए आपको एक और बार खाते में लॉग इन करना होगा।",
        "userlogin-createanother": "एकठु अउर खाता खोला जाय",
        "createacct-emailrequired": "ई-मेल ठाँव",
        "createacct-emailoptional": "ई-मेल ठाँव (वैकल्पिक)",
        "createacct-email-ph": "आपन ई-मेल ठाँव लिखा जाय",
        "createacct-another-email-ph": "ईमेल ठाँव दिहा जाय",
        "createaccountmail": "एकठु अस्थायी मनलागा (रैंडम) गुप्त कुंजी चुना जाय अउर ओका निर्दिष्ट ई-मेल ठहर पे भेजा जाय",
+       "createaccountmail-help": "इसका उपयोग बिना पासवर्ड जाने किसी और के लिए खाता खोलने के लिए उपयोग किया जाता है।",
        "createacct-realname": "असली नावँ (वैकल्पिक)",
        "createacct-reason": "कारण",
        "createacct-reason-ph": "आप दुसर खाता काहे बनावा जात है",
+       "createacct-reason-help": "खाता निर्माण लॉग में यह सन्देश दिखाई देगा।",
        "createacct-submit": "आपन खाता बनावा जाय",
-       "createacct-another-submit": "एकठु अउर खाता खोला जाय",
+       "createacct-another-submit": "खाता बनाएँ",
+       "createacct-continue-submit": "खाता निर्माण जारी रखें",
+       "createacct-another-continue-submit": "खाता निर्माण जारी रखें",
        "createacct-benefit-heading": "{{SITENAME}} आपय जैसन मनईन बनाए हँय।",
        "createacct-benefit-body1": "{{PLURAL:$1|सम्पादन}}",
        "createacct-benefit-body2": "{{PLURAL:$1|पन्ना}}",
        "createacct-benefit-body3": "{{PLURAL:$1|योगदानकर्ता}}",
        "badretype": "आप जवन गुप्त कुंजी दिहे हव उ एक दूसरे से नाइ मिलत है। फिर से लिखा जाय।",
+       "usernameinprogress": "इस प्रयोक्ता का खाता निर्माण अभी चालू है।\nकृपया प्रतीक्षा करें।",
        "userexists": "आप कय दिहल सदस्यनाम पहिले से प्रयोग में है।\nकृपया कवनो दुसर सदस्यनाम चुना जाय।",
+       "createacct-normalization": "आपका उपयोगकर्ता नाम तकनीकी प्रतिबंधों के कारण \"$2\" में समायोजित किया जाएगा।",
        "loginerror": "लॉग इन त्रुटि",
        "createacct-error": "खाता बनावेमे त्रुटि",
        "createaccounterror": "खाता नाइ बनी पाय: $1",
        "nocookiesnew": "आप कय खाता खोल दिहा गा है, लेकिन आप लॉग नाइ करा गा है।\n{{SITENAME}} पे लॉग इन करेक लिये कुकीज़ कय प्रयोग होत है।\nआप कुकीज़ बन्द करा गा है।\nकृपया अपने ब्राउज़र में कुकीज़ सक्षम करा जाय, औ फिर आपन सदस्यनावँ अव गुप्त कुंजी से लॉग इन करा जाय।",
        "nocookieslogin": "{{SITENAME}} पे लॉग इन करेक लिये कुकीज़ कय प्रयोग होत है।\nआप कुकीज़ बन्द करा गा है।\nकृपया अपने ब्राउज़र में कुकीज़ सक्षम करा जाय, औ फिर से कोशिस करा जाय।",
        "nocookiesfornew": "स्रोत कय पुष्टि ना होइ पावे कय कारण इ खाता  नाई बनाई गा है। \nसुनिश्चित करा जाय कि आप कय कुकीज़ बन्द है कि नाईं, पन्ना कय फिरसे लोड करा जाय अव फिरसे प्रयास करा जाय।",
+       "createacct-loginerror": "खाता सफलतापूर्वक निर्मित किया गया लेकिन आप स्वतः लॉग-इन नहीं कर सके। कृपया [[Special:UserLogin|हाथ से]] लॉग-इन करें।",
        "noname": "आप सही सदस्यनाम नाइ दिहा गा है।",
        "loginsuccesstitle": "लॉग इन होइ गवा",
        "loginsuccess": "'''आप {{SITENAME}} में \"$1\" सदस्यनाम से लॉग इन होई {{GENDER:$1|चुके|चुकी|चुके}} हव।'''",
        "wrongpasswordempty": "गुप्त कुंजी खाली है।\nफिरसे लिखो।",
        "passwordtooshort": "आप कय गुप्त कुंजी  कम से कम {{PLURAL:$1|1 अक्षर|$1 अक्षरन्}} कय होएक चाहि।",
        "passwordtoolong": "गुप्त-शब्द {{PLURAL:$1|$1 अक्षर}} से ढेर लम्मा नाइ होइ सकत है।",
+       "passwordtoopopular": "आप आम पासवर्ड नहीं चुन सकते हैं। कृपया कठिन पासवर्ड चुनें।",
+       "passwordinlargeblacklist": "आपके द्वारा भरा गया पासवर्ड बहुत सामान्य रूप से प्रयोग होने वाले पासवर्डों की सूची में है। कृपया और अधिक अद्वितीय पासवर्ड चुने।",
        "password-name-match": "आप कय गुप्त कुंजी आप कय सदस्यनावँ से फरक होएक चाहि।",
        "password-login-forbidden": "इ सदस्यनाँव अउर गुप्त कुंजी कय उपयोग नाई कै सका जात अहै।",
        "mailmypassword": "गुप्त कुंजी पुनःस्थापित करा जाय",
        "eauthentsent": "दर्ज करल ई-मेल ठहर पे एकठु फुरवासाखी ई-मेल भेज दिहा गा है।\nआप का उ ई-मेल में दिहा निर्देशन् कय अनुसार ई-मेल ठहर कय सत्यापन करेक परि,ओकरे बादय ही हिँया से कवनो दूसर ई-मेल भेज जाई।",
        "throttled-mailpassword": "पिछला {{PLURAL:$1|एक घंटा|$1 घंटन्}} मे एकठु गुप्त कुंजी स्मरण-पत्र भेजी गा है।\nदुरुपयोग से बचाव कय लिए हर {{PLURAL:$1|एक घंटा|$1 घंटन्}} में एक्कय गुप्त कुंजी स्मरण-पत्र भेजी जात है।",
        "mailerror": "ई-मेल भेजय में त्रुटि: $1",
-       "acct_creation_throttle_hit": "à¤\86प à¤\95य à¤\86à¤\87॰पà¥\80 à¤ à¤¹à¤° à¤¸à¥\87 à¤\86वà¥\87 à¤µà¤¾à¤²à¥\87 à¤®à¤¨à¤\88 à¤²à¥\8bà¤\97 à¤ªà¤¿à¤\9bला à¤\9aà¥\8cबà¥\80स à¤\98à¤\82à¤\9fनà¥\8d à¤®à¥\87à¤\82 à¤\87 à¤µà¤¿à¤\95ि à¤ªà¥\87 {{PLURAL:$1|à¤\8fà¤\95 à¤\96ाता|$1 à¤\96ाता}} à¤¬à¤¨à¤¾à¤\88 à¤\9aà¥\81à¤\95ा à¤¹à¥\88à¤\82, à¤\87 à¤¸à¤®à¤¯à¤¾à¤µà¤§à¤¿ à¤®à¥\87à¤\82 à¤\88 à¤\85धिà¤\95तम à¤¸à¥\80मा à¤¹à¥\8bय।\n à¤¯à¤¹ à¤¸à¤®à¤¯ à¤\87 à¤\86à¤\87॰पà¥\80  à¤\95य à¤ªà¥\8dरयà¥\8bà¤\97 à¤\95रय à¤µà¤¾à¤²à¥\87 à¤\86à¤\97à¤\82तà¥\81à¤\95 à¤\85à¤\89र à¤\96ाता à¤¨à¤¾à¤\87 à¤\96à¥\8bल à¤¸à¤\95त à¤¹à¥\88à¤\82।",
+       "acct_creation_throttle_hit": "à¤\87स à¤µà¤¿à¤\95ि à¤\95à¥\87 à¤\86à¤\97à¤\82तà¥\81à¤\95 à¤\87स à¤\86à¤\87॰पà¥\80॰ à¤\95à¥\8b à¤\95ाम à¤®à¥\87à¤\82 à¤²à¥\87तà¥\87 à¤¹à¥\81यà¥\87 à¤ªà¤¿à¤\9bलà¥\87 $2 à¤®à¥\87à¤\82 {{PLURAL:$1|१ à¤\96ाता à¤¨à¤¿à¤°à¥\8dमित à¤\95िया|$1 à¤\96ातà¥\87 à¤¨à¤¿à¤°à¥\8dमित à¤\95र à¤\9aà¥\81à¤\95à¥\87 à¤¹à¥\88à¤\82}} à¤\9cà¥\8b à¤\95ि à¤\87स à¤¸à¤®à¤¯ à¤®à¥\87à¤\82 à¤\85धिà¤\95तम à¤\85नà¥\81मत à¤¸à¥\80मा à¤¹à¥\88।\nà¤\87सà¤\95à¥\87 à¤ªà¤°à¤¿à¤£à¤¾à¤®à¤¸à¥\8dवरà¥\82प, à¤\87स à¤\86à¤\87॰पà¥\80॰ à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97 à¤\95रनà¥\87 à¤µà¤¾à¤²à¥\87 à¤¸à¤¦à¤¸à¥\8dय à¤\87स à¤¸à¤®à¤¯ à¤\94र à¤\96ातà¥\87 à¤¨à¤¿à¤°à¥\8dमित à¤¨à¤¹à¥\80à¤\82 à¤\95र à¤¸à¤\95तà¥\87।",
        "emailauthenticated": "आप कय ई-मेल ठहर $2 कय $3 बजे सत्यापित कै गय।",
        "emailnotauthenticated": "आप कय ई-मेल ठहर कय यकिन नाइ भा है।\nनीचे दीहा कवनो भी सुविधा कय लिये आप कय ई-मेल नाई भेजी जाई।",
        "noemailprefs": "इ सुविधन् कय प्रयोग करेक खर्तिन आपन पसंद में ई-मेल ठहर दिहा जाय।",
        "createacct-another-realname-tip": "असली नाँव देब आवश्यक नाई है।\nयदि आप देवा जाई तव एकर प्रयोग सदस्यन् कय योगदान कय लिये श्रेय (attribution) देक लिये कई जाई।",
        "pt-login": "लॉग इन",
        "pt-login-button": "लॉग इन",
+       "pt-login-continue-button": "लॉग इन जारी रखें",
        "pt-createaccount": "खाता बनावा जाय",
        "pt-userlogout": "बहरे निकरा जाय",
        "php-mail-error-unknown": "PHP कय mail() फ़ंक्शन में अज्ञात त्रुटि होई गवा।",
        "resetpass_submit": "गुप्तकुंजी लिखा जाए अव लॉग इन करा जाय",
        "changepassword-success": "आप कय गुप्तकुंजी बदल़ी गय!",
        "changepassword-throttled": "आप अबहिनय में कयु दाँइ लॉग इन करेक प्रयास किहा गा है।\nफिरसे प्रयास करय से पहीले तनी $1 रुका जाय।",
+       "botpasswords": "बॉट पासवर्ड",
+       "botpasswords-summary": "<em>बॉट पासवर्ड</em> सदस्य खाते को एपीआई के द्वारा बिना मुख्य खाते के जानकारी के उपयोग करने देता है। बॉट पासवर्ड का उपयोग कर के प्रवेश करने पर यदि पाबंदी होने पर सदस्य अधिकार उपलब्ध रहेगा।\n\nयदि आपको इस बारे में कुछ नहीं पता तो इसका उपयोग न करें। कोई भी आपसे इसे निर्मित करने के लिए नहीं पूछेगा।",
+       "botpasswords-disabled": "बॉट पासवर्ड अभी निष्क्रिय है।",
+       "botpasswords-no-central-id": "बॉट पासवर्ड का उपयोग करने के लिए आपको मुख्य खाते से प्रवेश करना होगा।",
+       "botpasswords-existing": "वर्तमान बॉट पासवर्ड",
+       "botpasswords-createnew": "बॉट के लिए नया पासवर्ड बनाएँ",
+       "botpasswords-editexisting": "बॉट के वर्तमान पासवर्ड को बदलें",
+       "botpasswords-label-needsreset": "(कूटशब्द रीसेट करने की आवश्यकता है)",
+       "botpasswords-label-appid": "बोट कय नांव:",
+       "botpasswords-label-create": "बनावा",
+       "botpasswords-label-update": "अपडेट",
+       "botpasswords-label-cancel": "रद्द करा",
+       "botpasswords-label-delete": "मिटावा",
+       "botpasswords-label-resetpassword": "पासवर्ड बदला",
+       "botpasswords-label-grants": "लागू अनुदान:",
+       "botpasswords-help-grants": "अनुदान आपको अधिकारों तक पहुँचने देता है, जो आपके खाते के पास पहले से है। अनुदान को सक्रिय करने से कोई अधिकार प्राप्त नहीं होगा, जो आपके खाते में न हो। अधिक जानकारी के लिए [[Special:ListGrants|अनुदान सारणी]] देखें।",
+       "botpasswords-label-grants-column": "दिया गवा",
+       "botpasswords-bad-appid": "बॉट नाम \"$1\" मान्य नाही हय।",
+       "botpasswords-insert-failed": "बॉट नाम \"$1\" का जोड़य मा फेल होइ गा। का ई पहिले जोड़ा रहा?",
+       "botpasswords-update-failed": "बॉट नाम \"$1\" का अपडेट करय मा फेल होइ गा। का ई मिटाय दीन गवा रहा?",
+       "botpasswords-created-title": "बॉट पासवर्ड बनि गवा",
+       "botpasswords-created-body": "सदस्य \"$2\" के बॉट नाम \"$1\" के बरे पासवर्ड बनि गवा।",
+       "botpasswords-updated-title": "बॉट पासवर्ड अपडेट भवा",
+       "botpasswords-updated-body": "सदस्य \"$2\" के बॉट नाम \"$1\" का पासवर्ड सफलतापूर्वक अद्यतन हुआ।",
+       "botpasswords-deleted-title": "बॉट पासवर्ड मिटि गवा",
+       "botpasswords-deleted-body": "सदस्य \"$2\" के बॉट नाम \"$1\" का पासवर्ड हट गया।",
+       "botpasswords-newpassword": "<strong>$1</strong> के साथ लॉगिन करने के लिए आपका नया पासवर्ड <strong>$2</strong> है। <em>भविष्य के लिए इसे याद रखें</em> <br> (पुराने बॉट के लिए लॉगिन नाम और बॉट का सदस्य नाम समान चाहिए होता है, तो आप <strong>$3</strong> का उपयोग अपने सदस्य नाम के रूप में और <strong>$4</strong> का उपयोग अपने पासवर्ड के रूप में कर सकते हैं।)",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider उपलब्ध नहीं है।",
+       "botpasswords-restriction-failed": "इस प्रवेश में बॉट पासवर्ड रुकावट डाल रहा है।",
+       "botpasswords-invalid-name": "जो सदस्य नाम आप बता रहे हो, उसमें बॉट पासवर्ड अलग करने वाला (\"$1\") नहीं है।",
+       "botpasswords-not-exist": "सदस्य \"$1\" के आप बॉट पासवर्ड नहीं है, जिसका नाम \"$2\" है।",
+       "botpasswords-needs-reset": "{{GENDER:$1|उपयोगकर्ता}} \"$1\" के बरे बॉट नाम \"$2\" कय बॉट पासवर्ड रीसेट होय का चाही।",
+       "botpasswords-locked": "आप बॉट पासवर्ड के साथ लॉगिन नहीं कर सकते क्योंकि आपका खाता अवरुद्ध किया गया है।",
        "resetpass_forbidden": "गुप्तकुंजी नाइ बदल़ सका जात है",
+       "resetpass_forbidden-reason": "पासवर्ड नहीं बदला : $1",
        "resetpass-no-info": "इ पन्ना कय सीधय प्रयोग करेक लिए आप कय लॉग इन करेक परि।",
        "resetpass-submit-loggedin": "गुप्तकुंजी बदला जाय",
        "resetpass-submit-cancel": "रद्द करा जाय",
        "resetpass-abort-generic": "गुप्तकुंजी में बदलाव कवनो एक्सटेंशन से रुकि गवा है।",
        "resetpass-expired": "आप कय पासवर्ड कय वैधता अवधि खतम होई चुका है। कृपया लॉग इन करेक लिए एकठु नँवा पासवर्ड सेट करा जाय।",
        "resetpass-expired-soft": "आप कय पासवर्ड कय वैधता समय होइ गवा है अव ओका रीसेट करेक ज़रूरत है। कृपया एकठु नँवा पासवर्ड चुना जाय, या बाद में रीसेट करेक लिए \"{{int:authprovider-resetpass-skip-label}}\" पे क्लिक करा जाय।",
+       "resetpass-validity": "आपकय पासवर्ड मान्य नहीं अहै: $1\n\nकृपया लॉग इन करय बरे नवा पासवर्ड सेट करा।",
        "resetpass-validity-soft": "आप कय पासवर्ड मान्य नाई है: $1 \n\nकृपया अब एक नवा पासवर्ड चुना जाय, या ओका बाद में पुनर्स्थापित करेक लिए \"{{int:authprovider-resetpass-skip-label}}\" पे क्लिक करा जाय।",
        "passwordreset": "गुप्त कुंजी पुनःस्थापित(रीसेट) करा जाय",
        "passwordreset-text-one": "आपन गुप्तकुंजी रीसेट करेक लिए ई फ़ॉर्म भरा जाय।",
        "passwordreset-emailtext-user": "{{SITENAME}} ($4) पे सदस्य $1 आपकय {{PLURAL:$3|खाता}} कय गुप्तकुंजी कय रीसेट करेक अनुरोध करे हैं। इ ई-मेल ठहर से इ {{PLURAL:$3|खाता जोडान है}}:\n\n$2\n\n{{PLURAL:$3|ई}} अस्थायी गुप्तकुंजी {{PLURAL:$5|दिन}} कय बाद काम नाइ करि।\nआप लॉग इन कइकै एकठु नँवा गुप्त कुंजी अभीन लै लेक चाहि। यदि इ अनुरोध केहु दुसर करे है, या फिर आप कय आपन गुप्त कुंजी याद आई गा है, अव आप {{PLURAL:$3|आपन}} गुप्तकुंजी नाई बदलेक चाहा जात है, आप इ संदेश कय अनदेखा कई कय आपन पुरान गुप्तकुंजी कय प्रयोग कइ सका जात है।",
        "passwordreset-emailelement": "सदस्यनाँव: \n$1\n\nअस्थायी गुप्तकुंजी: \n$2",
        "passwordreset-emailsentemail": "एक गुप्तकुंजी रीसेट ई-मेल भेज दिहा गा है।",
+       "passwordreset-emailsentusername": "यदि कोई ईमेल इस खाते से जुड़ी है तो पासवर्ड आपके ईमेल में भेज दिया जाएगा।",
+       "passwordreset-nocaller": "कॉलर प्रदान किया जाना चाहिए",
+       "passwordreset-nosuchcaller": "कॉलर मौजूद नहीं है: $1",
+       "passwordreset-ignored": "पासवर्ड रीसेट नहीं सम्हारा नहीं गा। होइ सकत है कि कउनो प्रदाता कॉन्फ़िगर न कीन गा होय?",
+       "passwordreset-invalidemail": "अमान्य ईमेल पता",
+       "passwordreset-nodata": "न तौ यूजर नाम अउर न ही ईमेल पता कय आपूर्ति कीन गय।",
        "changeemail": "ईमेल ठाँव बदला जाय",
        "changeemail-header": "अपना ई-मेल पता परिवर्तित करने के लिए इस फ़ॉर्म को पूरा करें। इस बदलाव की पुष्टि करने के लिये आपको अपना कूटशब्द पुनः लिखना पड़ेगा।",
        "changeemail-no-info": "इ पन्ना कय सीधय प्रयोग करेक लिए आप कय लॉग इन करेक परि।",
        "changeemail-oldemail": "अबहिन कय ई-मेल ठहर:",
        "changeemail-newemail": "नँवा ई-मेल ठहर:",
+       "changeemail-newemail-help": "अगर आप आपन ईमेल (इलेक्ट्रॉनिक-डाक) पता का खाली रखा चाहत है तौ आप एह जगह का छोड़ि सकत हैं। लिकिन आपन पासवर्ड भूलि गये पय ओहका ईमेल से न पाय सकब्या।",
        "changeemail-none": "(केहु नाँइ)",
        "changeemail-password": "आप कय {{SITENAME}} गुप्तकुंजी:",
        "changeemail-submit": "ई-मेल बदला जाय",
        "changeemail-throttled": "आप अबहिनय में कयु दाँइ लॉग इन करेक प्रयास किहा गा है।\nफिरसे प्रयास करय से पहीले तनी $1 रुका जाय।",
+       "changeemail-nochange": "कृपया कौनो एक अलग नवा ईमेल पता प्रविष्ट करा ।",
        "resettokens": "टोकन रीसेट करा जाय",
        "resettokens-text": "जो टोकन आपके खाते से सम्बद्ध कुछ विशिष्ट व्यक्तिगत जानकारी प्रदान करते हैं, आप उन्हें यहाँ रीसेट कर सकते हैं।\n\nयदि आपने उन्हें गलती से किसी को दिखा दिया है या फिर आपका खाता हैक हो गया है तो आपको इन्हें रीसेट कर देना चाहिए।",
        "resettokens-no-tokens": "रीसेट करेक लिए कवनो टोकन नाई है।",
        "sig_tip": "आप कय हस्ताक्षर अव समय",
        "hr_tip": "सिधा लाइन (कम इस्तेमाल करा जाई)",
        "summary": "सारांश:",
-       "subject": "विषय/शीर्षक:",
+       "subject": "विषय:",
        "minoredit": "ई छोट सम्पादन होय ।",
        "watchthis": "ई पन्ना कय ध्यानसुची मे डारा जाय",
        "savearticle": "पन्ना सहेजा जाय",
+       "savechanges": "बदलाव सहेजा जाय",
+       "publishpage": "पन्ना प्रकाशित करैं",
+       "publishchanges": "बदलाव प्रकाशित करैं",
+       "savearticle-start": "पन्ना सहेजा...",
+       "savechanges-start": "बदलाव सहेजा...",
+       "publishpage-start": "पन्ना प्रकाशित करा",
+       "publishchanges-start": "बदलाव प्रकाशित करा...",
        "preview": "झलक",
        "showpreview": "झलक देखावा जाय",
        "showdiff": "बदलाव देखावा जाय",
        "selfredirect": "<strong>चेतावनी:</strong> आप इ पन्नवा कय इहि से निर्देश करय जावा जात है.\nआप या तव गलत लक्ष्य पे पुनर्निर्देश करा गा है, या तव गलत पन्ना संपादन करा जात है ।\nअगर आप \"$1\" पे फिरसे क्लिक करा जाइ तो इ पुनर्निर्देश बनि जाइ ।",
        "missingcommenttext": "कृपया नीचे टिप्पणी दिहा जाय।",
        "missingcommentheader": "'''ध्यान दिहा जाय:''' आप इ टिप्पणी कय कवनो शिर्षक नाइ दिहा गा है।\nअगर आप दुबारा \"$1\" पे क्लिक करा जाई तव आप कय बदलाव बिना शिर्षक कय सहेज जाई।",
-       "summary-preview": "सारांश कय झलक:",
+       "summary-preview": "बदलाव à¤¸à¤¾à¤°à¤¾à¤\82श à¤\95य à¤\9dलà¤\95:",
        "subject-preview": "विषय/शीर्षक कय झलक:",
        "previewerrortext": "आपके परिवर्तनों का पूर्वावलोकन करने का प्रयास करते समय एक त्रुटि हुई।",
        "blockedtitle": "सदस्य अवरुद्ध है",
-       "blockedtext": "'''आप कय सदस्यनाँव या आइ॰पी ठहर पे रोक लाग है ।'''\n\nरोक $1 लगायँ रहें।\nरोक कय कारण ''$2'' होय \n\n* रोक कय सुरुवात भय: $8\n* रोक खतम होइ: $6\n* रोक इकाई: $7\n\nइ रोक कय बारे में चर्चा करेक लिए आप $1 या कवनो दुसर [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धक]] से संपर्क कै सका जात है।\nअगर आप [[Special:Preferences|आपन पसंद]] में वैध ई-मेल पता देवा गा है तब्बै आप 'ई-मेल भेजय' वाला सुविधा कय इस्तेमाल कई सका जात है औ आप कय एकर इस्तेमाल करै कय कवनो रोक नाइ लगावा है।\nआप कय अभीन कय आइ॰पी ठहर $3 होय अव रोक क्रमांक #$5 होय।\nआपन कवनो भी प्रश्न में कृपया इ कुल जानकारी शामिल करा जाइ।",
+       "blocked-email-user": "<strong>आपकय सदस्यनाम ईमेल भेजय से प्रतिबन्धित कीन गा अहै। अब्यो आप विकि पय अन्य पृष्ठऽन् का सम्पादित कइ सकत हैं।</strong> आपका प्रतिबन्धित करय कय पूरी जानकारी [[Special:MyContributions|खाता योगदान]] पय देख सकत हैं।\n\nई प्रतिबन्ध $1 लगाइस है।\n\nएहकय कारण <em>$2</em> दीन गा।\n\n* प्रतिबन्ध आरम्भ: $8\n* प्रतिबन्ध समाप्ति: $6\n* प्रतिबन्धी प्रयोजन: $7\n* प्रतिबन्ध पता #$5",
+       "blockedtext-partial": "आपकय खाता या आईपी पता का एह पृष्ठ पय संपादन करय से रोक दीन गा अहै ।बहरहाल, आप एह विकी पय अन्य पृष्ठऽन् पय सम्पादन कइ सकत हैं।</strong> एह अवरोध से संबंधित विस्तृत जानकारी आप [[Special:MyContributions|यहाँ]] जाइके पाइ सकत हैं।\n\nई अवरोध $1 द्वारा कीन गवा रहा।\n\nजे एह अवरोध बरे ई कारण देहे अहैं: <em>$2</em>.\n\n* शुरुआत की तिथि: $8\n* समाप्ति तिथि: $6\n* अवरोधित: $7\n* अवरोध संख्या: #$5",
+       "blockedtext": "'''<strong>आप कय सदस्यनाँव या आइ॰पी ठहर पे रोक लाग है ।</strong>'''\n\nरोक $1 लगायँ रहें।\nरोक कय कारण ''<em>$2</em>'' होय \n\n* रोक कय सुरुवात भय: $8\n* रोक खतम होइ: $6\n* रोक इकाई: $7\n\nइ रोक कय बारे में चर्चा करेक लिए आप $1 या कवनो दुसर [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धक]] से संपर्क कै सका जात है।\nअगर आप [[Special:Preferences|आपन पसंद]] में वैध ई-मेल पता देवा गा है तब्बै आप 'ई-मेल भेजय' वाला सुविधा कय इस्तेमाल कई सका जात है औ आप कय एकर इस्तेमाल करै कय कवनो रोक नाइ लगावा है।\nआप कय अभीन कय आइ॰पी ठहर $3 होय अव रोक क्रमांक #$5 होय।\nआपन कवनो भी प्रश्न में कृपया इ कुल जानकारी शामिल करा जाइ।",
        "autoblockedtext": "एक्ठु अउर सदस्य आपय कय आइ॰पी कय प्रयोग करत रहें औ ओन्है $1 रोक लगाए रहें। इही कय नाते आपो कय आइ॰पी ठहर स्वचालित रूप से रुक गा है।\nरोक करय कय कारण होय:\n\n:''$2''\n\n* रोक कय सुरुवात : $8\n* रोक खतम होइ: $6\n* रोकि जाय वाले सदस्य: $7\n\nरोक कय चर्चा करय कय लिए आप $1 या कवनो दुसर [[{{MediaWiki:Grouppage-sysop}}|प्रबंधक]] से संपर्क कै सका जात है।\n\nकृपया ध्यान देवा जाय कि यदि आप कय \"इ सदस्य कय ई-मेल भेजा जाय\" वाला सुविधा कय प्रयोग करय चाहा जात है तव आपकय [[Special:Preferences|पसंद]] में वैध ई-मेल ठहर होएक चाहि औ एकर प्रयोग आपकय खर्तिन खुला होएक चाही।\n\nआपकय मौजूदा आइ॰पी ठहर $3 होय औ अवरोध क्रमांक #$5 होय।\nआप कय कवनो प्रश्न में कृपया ई कुल जानकारी शामिल होएक चाही।",
        "blockednoreason": "कवनो कारण नाइ दिहा है",
        "whitelistedittext": "पन्ना संपादन करेक लिये आप कय $1 करेक परि।",
        "accmailtext": "[[User talk:$1|$1]] कय लिए एक यंत्र जनित गुप्त कुंजी $2 कय भेज दिहा गा है। लॉगिन करेक बाद एका '''[[Special:ChangePassword|गुप्त कुंजी बदला जाय]]'' वाला पन्नन् पे बदल सका जात है।",
        "newarticle": "(नँवा)",
        "newarticletext": "आप अईसन पन्ना पे आवा गा है जवन अभीन तक नाई बनावा है।\nपन्ना बनावेक लिये नीचे कय बौक्स में पाठ लिखा जाय। ढेर जानकारी कय लिये [$1 सहायता पन्ना] देखा जाय।\nअगर आप हिँया गलती से आवा गा हैं तव आपन ब्राउज़र कय बैक ('''back''') बटन पे क्लिक करा जाय।",
-       "anontalkpagetext": "----''ई बातचीत पन्ना उ बेनामी सदस्यन् कय खर्तीन होय जे या तव खाता नाई खोलें है या खाता कय प्रयोग नाइ करत हैं।\nइहिकै नाते वय लोगन कय पहिचान कय खर्तीन हम्मन कय वय लोगन कय आइ॰पी ठहर कय प्रयोग करेक परत है।\nआइ॰पी ठहर कयु सदस्यन् कय एक्कय होइ सकत है।\nयदि आप कवनो बेनामी सदस्य होआ जाय अव आप कय लागत है कि आप कय बारे में अप्रासंगिक टीका टिप्पणी कई गा है तव कृपया [[Special:CreateAccount|सदस्यता लिहा जाय]] या [[Special:UserLogin|सत्रारंभ करा जाय]] ताकि अउर बेनामी सदस्यन् में से आप कय अलग से पहिचान सका जाय।''",
-       "noarticletext": "अभीन इ पन्ना पे कवनो सामग्री नाई है।\nआप अउर पन्नन् में [[Special:Search/{{PAGENAME}}|इ शीर्षक कय खोज]] कई सका जात है,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} सम्बन्धित लॉग खोज सका जात है],\nया इस पृष्ठ को [{{fullurl:{{FULLPAGENAME}}|action=edit}} सम्पादित] कर सकते हैं</span>।",
+       "anontalkpagetext": "----''<em>ई बातचीत पन्ना उ बेनामी सदस्यन् कय खर्तीन होय जे या तव खाता नाई खोलें है या खाता कय प्रयोग नाइ करत हैं।</em>\nइहिकै नाते वय लोगन कय पहिचान कय खर्तीन हम्मन कय वय लोगन कय आइ॰पी ठहर कय प्रयोग करेक परत है।\nआइ॰पी ठहर कयु सदस्यन् कय एक्कय होइ सकत है।\nयदि आप कवनो बेनामी सदस्य होआ जाय अव आप कय लागत है कि आप कय बारे में अप्रासंगिक टीका टिप्पणी कई गा है तव कृपया [[Special:CreateAccount|सदस्यता लिहा जाय]] या [[Special:UserLogin|सत्रारंभ करा जाय]] ताकि अउर बेनामी सदस्यन् में से आप कय अलग से पहिचान सका जाय।''",
+       "noarticletext": "अभीन इ पन्ना पे कवनो सामग्री नाई है।\nआप अउर पन्नन् में [[Special:Search/{{PAGENAME}}|इ शीर्षक कय खोज]] कई सका जात है,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} सम्बन्धित लॉग खोज सका जात है],\nया [{{fullurl:{{FULLPAGENAME}}|action=edit}} ई पन्ना बनावा]</span>।",
        "noarticletext-nopermission": "अभीन इ पन्ना पे कवनो चिज नाई है।\nआप अउर पन्नन् में [[Special:Search/{{PAGENAME}}|इ शीर्षक कय खोज]] कई सका जात है,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} से सम्बन्धित लॉग खोज सका जात है] </span>लेकिन आप कय इ पन्ना बनावे कय अनुमति नाई है ।",
        "missing-revision": "\"{{FULLPAGENAME}}\" पन्ना कय अवतरण #$1 नाई है।\n\nखास कइकै ई एकठु मेटावल पन्ना कय पुरान लिंक पे क्लिक करय से होत है।\nढेर जानकारी कय खर्तिन आप [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] देख सका जात है।",
        "userpage-userdoesnotexist": "सदस्य खाता \"$1\" पंजीकृत नाई है।\nकृपया जाँच लिहा जाय कि आप ई पन्ना संपादन करय या बनावे चाहा जात है या नाहीं।",
        "userpage-userdoesnotexist-view": "सदस्य \"$1\" पंजीकृत नाइ है।",
        "blocked-notice-logextract": "ई सदस्य अभीन अवरोधित है।\nसदंर्भ कय लिए ताज़ातरीन अवरोध लॉग प्रविष्टि नीचा दीहा है:",
-       "clearyourcache": "'''ध्यान दिहा जाय:'''  सहेजय कय बाद बदलाव देखयक खर्तिन आप कय आपन ब्राउज़र कय कैश खाली करेक परी सकत है।\n* '''फ़ायरफ़ॉक्स / सफ़ारी:''' ''Reload'' (रीलोड) दबावत समय ''Shift'' (शिफ़्ट) दबावा जाय, या फिर ''Ctrl-F5'' (कंट्रोल-F5) या ''Ctrl-R'' (कंट्रोल-R) दबावा जाय (मैक पे ''⌘-R'')\n* '''गूगल क्रोम:''' ''Ctrl-Shift-R'' (कंट्रोल-शिफ़्ट-R) दबावा जाय (मैक पे ''⌘-Shift-R'')\n* '''इन्टर्नेट एक्सप्लोरर:''' ''Ctrl'' (कंट्रोल) दबाईकय ''Refresh'' (रिफ़्रेश) करा जाय या ''Ctrl-F5'' (कंट्रोल-F5) दबावा जाय\n* '''ऑपेरा:''' ''Tools → Preferences'' (उपकरण → पसंद) में कैश साफ़ करा जाय",
+       "clearyourcache": "<strong>Note:</strong> After saving, you may have to bypass your browser's cache to see the changes.\n* <strong>Firefox / Safari:</strong> Hold <em>Shift</em> while clicking <em>Reload</em>, or press either <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> on a Mac)\n* <strong>Google Chrome:</strong> Press <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> on a Mac)\n* <strong>Internet Explorer:</strong> Hold <em>Ctrl</em> while clicking <em>Refresh</em>, or press <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Go to <em>Menu → Settings</em> (<em>Opera → Preferences</em> on a Mac) and then to <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
        "usercssyoucanpreview": "'''टिप''': सहेजय से पहिले आपन नँवा सी॰एस॰एस जाँचय खर्तिन \"{{int:showpreview}}\" बटन कय प्रयोग करा जाय।",
        "userjsyoucanpreview": "'''टिप''': सहेजय से पहिले आपन नँवा जावास्क्रिप्ट जाँचय खर्तिन \"{{int:showpreview}}\" बटन कय प्रयोग करा जाय।",
        "usercsspreview": "'''ध्यान दिहा जाय कि आप आपन सी॰एस॰एस कय झलक देखा जात है।'''\n'''इ अभीन तक नाई सहेजा है!'''",
        "readonlywarning": "'''सावधान: डाटाबेस कय रख-रखाव कय खत्तिर बंद कै दिहा गा है, इहि कय नाते आप कय बदलाव अभीन नाइ सहेजि सका जात है।\nअगर आप चाहा जाय तव इ चिज कय बाद कय खत्तिर कॉपी-पेस्ट कइकय कवनो टेक्स्ट फ़ाइल में रखि सका जात है।'''\n\nबंद करय वाले प्रबंधक बंद करे कय इ कारण दिहे हैं: $1",
        "protectedpagewarning": "'''चेतावनी: इ पन्ना कय सुरक्षित कई  गा है अव एका खालि प्रबंधक सम्पादित कई सकत हँय।'''\nनँवा लॉग प्रविष्टि संदर्भ कय लिये नीचे दीहा है:",
        "semiprotectedpagewarning": "<strong>नोट:</strong> ई पन्ना बचावा है इही कय नाते खालि रजिष्टर करल सदस्य एका सम्पादन कई सकत हैं ।\nसंदर्भ कय खर्तिन अन्तिम दाइ कय लाग निचे दिहा है:",
-       "cascadeprotectedwarning": "'''सावधान:''' इ पन्ना निचे दिहा सुरक्षा-सीढ़ी {{PLURAL:$1|पन्ना से|पन्नन् से}} जोडाएक नाते सुरक्षित है, अव खाली प्रबंधक एहमा बदलाव कै सकत हैं:",
+       "cascadeprotectedwarning": "<strong>सावधान:</strong> यह पृष्ठ निम्नलिखित सुरक्षा-सीढ़ी वाले {{PLURAL:$1|पृष्ठ से|पन्नों से}} जुड़ा हुआ होने के कारण सुरक्षित है, और केवल [[Special:ListGroupRights|आवश्यक अधिकार वाले]] ही इसमें बदलाव कर सकते हैं:",
        "titleprotectedwarning": "'''चेतावनी: इ पन्ना सुरक्षित है अव एका बनावेक खत्तिर [[Special:ListGroupRights|विशेष अधिकारन्]] कय आवश्यकता है।'''\nसंदर्भ कय खत्तिर नँवा लॉग प्रविष्टि नीचे दीहा है:",
        "templatesused": "ई पन्ना में इस्तेमाल करल {{PLURAL:$1|साँचा}}:",
        "templatesusedpreview": "ई झलक में इस्तेमाल करल {{PLURAL:$1|साँचा}}:",
        "postedit-confirmation-created": "पन्ना बनी गा है।",
        "postedit-confirmation-restored": "पन्ना पुरान स्थिति पे लाई गय।",
        "postedit-confirmation-saved": "आप कय सम्पादन सहेजी गय।",
+       "postedit-confirmation-published": "आपकय संपादन प्रकाशित भवा।",
        "edit-already-exists": "नवा पन्ना नाई बनाई सका जात है।\nई पन्ना पहीलवे से मौजूद है।",
        "defaultmessagetext": "सनेशा कय डिफ़ॉल्ट पाठ",
        "content-failed-to-parse": "$1 कय लिए $2 सामग्री कय पार्स करय में विफल, त्रुटि: $3",
        "invalid-content-data": "अवैध डाटा सामग्री",
-       "content-not-allowed-here": "[[:$2]] पन्ना पे \"$1\" सामग्री मिनाही है।",
+       "content-not-allowed-here": "\"$1\" सामग्री को, [[:$2]] पृष्ठ में  \"$3\" स्लॉट की अनुमति नहीं है",
        "editwarning-warning": "इ पन्ना से हटे कय बाद आप कय करल बदलाव गायब होइ जाइ।\nयदि आप लॉग इन करा गा है तव आप इ सूचना कय देखाब आपन पसंद कय \"{{int:prefs-editing}}\" भाग में बंद कई सका जात है।",
+       "editpage-invalidcontentmodel-title": "सामग्री मॉडल समर्थित नहीं बा",
+       "editpage-invalidcontentmodel-text": "सामग्री मॉडल \"$1\" समर्थित नहीं बा।",
        "editpage-notsupportedcontentformat-title": "सामग्री स्वरूप समर्थित नाई है",
        "editpage-notsupportedcontentformat-text": "$1 सामग्री स्वरूप $2 सामग्री मॉडल द्वारा समर्थित नाई है।",
+       "slot-name-main": "मुख्य",
        "content-model-wikitext": "विकिटेक्स्ट",
        "content-model-text": "सामान्य पाठ",
        "content-model-javascript": "जावास्क्रिप्ट",
        "content-json-empty-object": "खाली चिज",
        "content-json-empty-array": "खाली एरे",
+       "deprecated-self-close-category": "अमान्य खुदै-बंद HTML टैग कय उपयोग करय वाले पृष्ठ",
        "duplicate-args-category": "टेम्पलेट कॉल में डुप्लिकेट तर्क का उपयोग करते हुए पन्ने",
        "duplicate-args-category-desc": "पेज जैसे तर्कों के डुप्लिकेट का उपयोग करने वाले टेम्पलेट कॉल, जैसे <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> और <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''चेतावनी:''' इ पन्ना पे बहुत ढेर संख्या में कीमती पार्सर फ़ंक्शनों कय प्रयोग कई गा है।\n\nएकर प्रयोग $2 से कम दाइ होएक चाहि, इ समय प्रयोग $1 दाइ कै गा {{PLURAL:$1|है}}।",
        "post-expand-template-argument-warning": "'''चेतावनी:''' इ पन्ना पे कवनो साँचा में कम-से-कम एकठु अइसन प्राचल है जवन बढ़ावे पे बहुत बड़ा होइ जाइ।\nअइसन प्राचलन् कय छोड़ दिहा गा है।",
        "post-expand-template-argument-category": "अईसन पन्ना जवनेमें प्राचल छोड़ी दिहा है",
        "parser-template-loop-warning": "साँचा चक्र मिला: [[$1]]",
+       "template-loop-category": "टेम्पलेट लूप वाले पृष्ठ",
+       "template-loop-category-desc": "पन्ना मा एक टेम्पलेट लूप होत है, मतलब  एक टेम्पलेट जौन खुद का पुनरावर्ती कहत है।",
+       "template-loop-warning": "<strong> चेतावनी: </strong>ई पन्ना [[:$1]] उनका कॉल करत है जेहके कारण टेम्पलेट लूप (एक अनंत रिकर्सिव कॉल) होत है।",
        "parser-template-recursion-depth-warning": "साँचा पुनरावर्ती गहराई सीमा पार ($1)",
        "language-converter-depth-warning": "भाषा कन्वर्टर गहीराई सीमा से बहरे गय ( $1 )",
        "node-count-exceeded-category": "पन्ना जवनन् में नोड-संख्या सीमा पार कई गा है",
        "expansion-depth-exceeded-warning": "पन्ना में विस्तार गहराई पार कई गा है",
        "parser-unstrip-loop-warning": "Unstrip लूप मिला",
        "unstrip-depth-warning": "Unstrip पुनरावर्तन सीमा पार कई गय ($1)",
+       "unstrip-depth-category": "पन्ना जिन पय गहराई कय सीमा का पार कय दीन गवा है",
+       "unstrip-size-warning": "बिना सीमा कय आकार कय सीमा पार होइ गय ($1)",
+       "unstrip-size-category": "ऊ पन्ना जहाँ अनस्ट्रिप साइज़ कय सीमा पार होइ गय अहय",
        "converter-manual-rule-error": "मैन्यूअल भाषा परिवर्तन नियम में त्रुटि",
        "undo-success": "ई संपादन पहिले जैसन रहा वईसय कई सका जात है ।\nअईसन करेक लिये कृपया निचे लिखल पाठ कय ध्यान से दखीकय बदलाव सहेजा जाय।",
        "undo-failure": "एकरे बीचे अउर बदलाव होएक कारण ई संपादन पहिले जैसन करब संभव नाई है।",
+       "undo-main-slot-only": "ई सम्पादन पहिले जइसा नहीं कीन जाय सका काहेकि एहमा मुख्य स्लॉट से बाहर सामग्रियाँ जुड़ी अहँय।",
        "undo-norev": "ई बदलाव वापिस नाई भय काहे से या तो एका पहीलवे से पलटाई गा है या फिर पन्ना हटाई दिहा है।",
        "undo-nochange": "अईसन लागत है की ई सम्पादन कय पहिलवे पहिले जैसन कई दीहा है ।",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|बातचीत]]) कय करल बदलाव $1 कय पहिले जईसन कई गय",
        "histfirst": "सबसे पुरान",
        "histlast": "सबसे नँवा",
        "historysize": "($1 {{PLURAL:$1|बाइट}})",
-       "historyempty": "(खाली)",
+       "historyempty": "खाली",
        "history-feed-title": "अवतरण इतिहास",
        "history-feed-description": "विकि मे उपलब्ध इ पन्ना कय अवतरण इतिहास",
        "history-feed-item-nocomment": "$1 $3 कय $4 बजे",
        "history-feed-empty": "अनुरोधित करल पन्ना  अस्तित्व में नाई है।\nई पन्ना या तो मेटावा है या फिर एकर नाँव बदल दिहा है।\n[[Special:Search|विकि पे खोजा जाय]] कय प्रयोग करा जाय।",
+       "history-edit-tags": "चुना गवा अवतरणऽन् कय टैग सम्पादित करा।",
        "rev-deleted-comment": "(सम्पादन सारांश हटाई गय)",
        "rev-deleted-user": "(सदस्यनाँव हटाई गय)",
        "rev-deleted-event": "(लाग जानकारी हटाइ गय)",
        "revdelete-submit": "चयनित {{PLURAL:$1|अवतरण}} पे लागू करा जाय",
        "revdelete-success": "'''अवतरण दृश्यता सफलतापूर्वक अपडेट कई गय।'''",
        "revdelete-failure": "'''अवतरण दृश्यता अपडेट नाइ भय:'''\n$1",
-       "logdelete-success": "'''लॉग दृष्यता बदलि गय।'''",
+       "logdelete-success": "लॉग दृष्यता बदलि गय।",
        "logdelete-failure": "'''लॉग दृश्यता कय जमाव नाई भय:'''\n$1",
        "revdel-restore": "देखावा जाय/लुकुआवा जाय",
        "pagehist": "पन्ना कय इतिहास",
        "mergehistory-empty": "कवनो भी अवतरण नाई मिलाई सका जात अहै।",
        "mergehistory-done": "$1 {{PLURAL:$3|कय}} $3 अवतरण [[:$2]] में एकट्ठा कई {{PLURAL:$3|गय}}।",
        "mergehistory-fail": "इतिहास एकट्ठा नाई कई सका जात है, कृपया पन्ना औ समय कय फिरसे जाँच करा जाय।",
+       "mergehistory-fail-bad-timestamp": "समय संख्या अमान्य",
+       "mergehistory-fail-invalid-source": "अमान्य स्रोत पृष्ठ",
+       "mergehistory-fail-invalid-dest": "अमान्य लक्ष्य पृष्ठ",
+       "mergehistory-fail-no-change": "इतिहास विलय कौनो भी अवतरण कय विलय नहीं कइ सका। कृपया लेख अव समय का दुबारा देखैं।",
+       "mergehistory-fail-permission": "इतिहास विलय खातिर अधिकार कम अहै।",
+       "mergehistory-fail-self-merge": "स्रोत अउर लक्ष्य पन्ना एक्कै अहँय।",
+       "mergehistory-fail-timestamps-overlap": "स्रोत अवतरण भेजय वाले अवतरण के बाद आवत अहै।",
        "mergehistory-fail-toobig": "इतिहास विलय करना संभव नहीं है क्योंकि अवतरण सीमा $1 से अधिक {{PLURAL:$1|अवतरण|अवतरणों}} को स्थानांतरित करना होगा।",
        "mergehistory-no-source": "स्रोत पन्ना $1 मौजूद नाई है।",
        "mergehistory-no-destination": "लक्ष्य पन्ना $1 मौजूद नाई है।",
        "diff-multi-sameuser": "(इ सदस्य कय {{PLURAL:$1|करल बीच कय एक अवतरण नाई देखाई गय |करल बीच कय कुल $1 अवतरण नाइ देखाइ गय}})",
        "diff-multi-otherusers": "({{PLURAL:$2|एकठु दुसर सदस्य|$2 सदस्यन्}} कय {{PLURAL:$1|करल  बीच कय एकठु अवतरण नाई देखाइ गय|करल बीच कय कुल $1 अवतरण नाइ देखाइ गय}})",
        "diff-multi-manyusers": "({{PLURAL:$2|एकठु योगदानकर्ता|$2 योगदानकर्तन्}} कय {{PLURAL:$1|करल बीच कय एकठु|करल बीच कय $1}} अवतरण नाई देखाइ गय।)",
+       "diff-paragraph-moved-tonew": "पैराग्राफ का स्थानांतरित कय दीन गा रहा| नये जगह पय जाय बरे क्लिक करैं|",
+       "diff-paragraph-moved-toold": "पैराग्राफ का स्थानांतरित कय दीन गा रहा| पुरान जगह पय जाय बरे क्लिक करैं|",
        "difference-missing-revision": "इ अंतर {{PLURAL:$2|कय एकठु अवतरण|कय $2 अवतरण}} ($1) नाइ {{PLURAL:$2|मिला}}।\n\nई आम तौर पे एकठु हटावल पन्ना कय अवतरण में अंतर खोजय पे होत है।ढेर जानकारी [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे कय लॉग] में मिली।",
        "searchresults": "खोज परिणाम",
+       "search-filter-title-prefix": "पृष्ठऽन् मा केवल उहै खोजा जाइ रहे जिनकै शीर्षक \"$1\" से शुरू  होथें",
+       "search-filter-title-prefix-reset": "सगरौ पन्ना खोजा",
        "searchresults-title": "\"$1\" कय खरतीन खोज परिणाम",
        "titlematches": "पन्ना शीर्षक मिलान",
        "textmatches": "पन्ना पाठ मिलान",
        "search-category": "(श्रेणी $1)",
        "search-file-match": "(फ़ाइल सामग्री से मिलत है)",
        "search-suggest": "आप कय मतलब ई तव नाई रहा:$1",
-       "search-interwiki-caption": "दुसर परियोजना",
+       "search-rewritten": "$1 कय खोज परिणाम निम्न हैं। बजाय $2 के बरे खोजयँ।",
+       "search-interwiki-caption": "बहिन परियोजना से परिणाम",
        "search-interwiki-default": "$1 से परिणाम:",
        "search-interwiki-more": "(अउर)",
+       "search-interwiki-more-results": "जादा रिजल्ट",
        "search-relatedarticle": "सम्बंधित",
        "searchrelated": "सम्बंधित",
        "searchall": "कुल",
        "prefs-watchlist-edits": "बढ़ावल ध्यानसूची में देखावे खत्तिर अधिकतम बदलाव:",
        "prefs-watchlist-edits-max": "अधिकतम संख्या: एक हज़ार",
        "prefs-watchlist-token": "ध्यानसूची टोकन",
+       "prefs-watchlist-managetokens": "टोकन प्रबंधित करा",
        "prefs-misc": "अउर",
        "prefs-resetpass": "गुप्त कुंजी बदला जाय",
        "prefs-changeemail": "ईमेल ठाँव बदला जाय",
        "restoreprefs": "पहिलकय सेटिङ मिलावा जाय (कुल जगही में)",
        "prefs-editing": "संपादन",
        "searchresultshead": "खोजा जाय",
-       "stub-threshold": "<a href=\"#\" class=\"stub\">आधार कड़िन्</a> कय सबसे बडा आकार (बाइट):",
+       "stub-threshold": "आधार कड़ी हेतु प्रारूपण ($1):",
+       "stub-threshold-sample-link": "नमूना",
        "stub-threshold-disabled": "अक्षम करा है",
        "recentchangesdays": "नँवा बदलाव में देखावे कय दिन:",
        "recentchangesdays-max": "सबसे ढेर $1 {{PLURAL:$1|दिन}}",
        "default": "डिफ़ॉल्ट",
        "prefs-files": "फ़ाइल",
        "prefs-custom-css": "खासमखास सी॰एस॰एस",
+       "prefs-custom-json": "कस्टम JSON",
        "prefs-custom-js": "खासमखास जावास्क्रिप्ट",
        "prefs-common-config": "कुल स्किन कय लिए साझा सी॰एस॰एस/जावास्क्रिप्ट:",
        "prefs-reset-intro": "आप इ पन्ना से अपने पसंद कय, साइट कय मूल पसंद कय जइसन बनाय सका जात है।\nएकरे बाद आप वापिस पुरान जगहि पे नाइ आय पावा जाइ।",
        "youremail": "ई-मेल:",
        "username": "{{GENDER:$1|सदस्यनाँव}}:",
        "prefs-memberingroups": "{{GENDER:$2|सदस्य}} {{PLURAL:$1|समूह}}:",
+       "group-membership-link-with-expiry": "$1 ($2 तक)",
        "prefs-registration": "रजिष्ट्रेसन समय:",
        "yourrealname": "वास्तविक नाँव:",
        "yourlanguage": "भाषा",
        "prefs-dateformat": "तिथि प्रारूप",
        "prefs-timeoffset": "समयांतर",
        "prefs-advancedediting": "सामान्य विकल्प",
+       "prefs-developertools": "डेवलपर औजार",
        "prefs-editor": "सम्पादक",
        "prefs-preview": "झलक",
        "prefs-advancedrc": "उन्नत विकल्प",
        "prefs-advancedwatchlist": "उन्नत विकल्प",
        "prefs-displayrc": "प्रदर्शन विकल्प",
        "prefs-displaywatchlist": "प्रदर्शन विकल्प",
+       "prefs-changesrc": "परिवर्तन देखावा गवा",
+       "prefs-changeswatchlist": "परिवर्तन देखावा गा",
+       "prefs-pageswatchlist": "देखा जाय चुका पन्ना",
        "prefs-tokenwatchlist": "टोकन",
        "prefs-diffs": "अंतर",
        "prefs-help-prefershttps": "ई प्राथमिकता आप कय अगला लॉगिन मे प्रभावी होई।",
        "prefswarning-warning": "आप अपने पसंद मा परिवर्तन करा गा है जवन अभिन अतक नाइ सहेजि गा है ।अगर आप \"$1\" कय किल्क किहे बिना इ पन्ना छोडा जाइ तव आप कय पसंद नाइ सहेजी जाइ।",
        "prefs-tabs-navigation-hint": "सुझाव: आप टैब्स सूची में टैब्स कय बीचे आवे-जाय खत्तीर बाँवा औ दहिना तीर कुंजिन् कय उपयोग कै सका जात है।",
-       "userrights": "सदस्य अधिकार व्यवस्थापन",
-       "userrights-lookup-user": "सदसà¥\8dय à¤¸à¤®à¥\82हनà¥\8d à¤\95य à¤µà¥\8dयवसà¥\8dथापन à¤\95रा à¤\9cाय",
+       "userrights": "सदस्य अधिकार",
+       "userrights-lookup-user": "यà¤\95 à¤¸à¤¦à¤¸à¥\8dय à¤\9aà¥\81ना",
        "userrights-user-editname": "सदस्यनावँ दिहा जाय:",
-       "editusergroup": "सदसà¥\8dय à¤¸à¤®à¥\82हनà¥\8d à¤\95य à¤¸à¤\82पादन à¤\95रा à¤\9cाय",
+       "editusergroup": "सदसà¥\8dय à¤¸à¤®à¥\82हनà¥\8d à¤\95ा à¤¦à¥\87à¤\96ावा",
        "editinguser": "सदस्य '''[[User:$1|$1]]''' $2 कय अधिकार बदला जाय",
+       "viewinguserrights": "{{GENDER:$1|user}} के उपयोगकर्ता अधिकारऽन् का देखब <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "सदस्य समूहन् कय संपादन करा जाय",
-       "saveusergroups": "सदस्य समूहन् कय व्यवस्थापन सहेजा जाय",
+       "userrights-viewusergroup": "{{GENDER:$1|सदस्य}} समूह देखयं",
+       "saveusergroups": "{{GENDER:$1|सदस्य}} समूह सहेजें",
        "userrights-groupsmember": "निचे कय {{PLURAL:$1|समूह|समूहन्}} कय सदस्य:",
        "userrights-groupsmember-auto": "निचे कय {{PLURAL:$1|समूह|समूहन्}} कय अंतर्निहित सदस्य:",
        "userrights-groups-help": "आप इ सदस्य कय समूह-सदस्यता बदलि सका जात है:\n* बक्सा पे सही कय निशान लागेक माने होय कि सदस्य उ समूह मा है।\n* बक्सा पे सही कय निशान ना लागेक माने होय कि सदस्य उ समूह में नाइ है।\n* एक * कय माने होय कि एक दाइ जोड़ेक बाद उ समूह कय नाइ हटाय सका जात है, औ हटावे कय बाद नाइ जोडि सका जात है।",
        "userrights-nodatabase": "डाटाबेस $1 या तो मौजूद नाइ है या फिर स्थानीय नाइ है।",
        "userrights-changeable-col": "गोल (ग्रुप) जवन आप बदलि सका जात है ।",
        "userrights-unchangeable-col": "गोल (ग्रुप) जवन आप नाइ बदलि सका जात है ।",
+       "userrights-expiry-current": "$1 समाप्ती",
+       "userrights-expiry-none": "समाप्त नहीं होत",
+       "userrights-expiry": "खतम:",
+       "userrights-expiry-existing": "वर्तमान समाप्ति समय: $3, $2",
+       "userrights-expiry-othertime": "कवनो अउर समय:",
+       "userrights-expiry-options": "एक दिन:1 day,एक सप्ताह:1 week,एक महीना:1 month,तीन महीना:3 months,छः महीने:6 months,एक वर्ष:1 year",
+       "userrights-invalid-expiry": "\"$1\" समूह के बरे तिथि अमान्य अहय।",
+       "userrights-expiry-in-past": "\"$1\" समूह के बरे समाप्ती काय समय पहिलेन बीत चुका।",
        "userrights-conflict": "सदस्य अधिकार बदलाव में अंतर्विरोध! कृपया आपन बदलाव जाँचा जाय और फिरसे सुनिश्चित करा जाय।",
        "group": "गोल:",
        "group-user": "सदस्य:",
        "group-autoconfirmed": "अपने आप बनल सदस्य",
        "group-bot": "बॉट",
        "group-sysop": "प्रबंधक",
+       "group-interface-admin": "अन्तरफलक प्रबंधक",
        "group-bureaucrat": "प्रशासक",
        "group-suppress": "ओवरसाईट्स",
        "group-all": "(कुल)",
        "group-autoconfirmed-member": "{{GENDER:$1|अपने आप बनल सदस्य}}",
        "group-bot-member": "{{GENDER:$1|बॉट}}",
        "group-sysop-member": "{{GENDER:$1|प्रबंधक}}",
+       "group-interface-admin-member": "{{GENDER:$1|अन्तरफलक प्रबंधक}}",
        "group-bureaucrat-member": "{{GENDER:$1|प्रशासक}}",
        "group-suppress-member": "{{GENDER:$1|ओवरसाईट}}",
        "grouppage-user": "{{ns:project}}:सदस्य",
        "grouppage-autoconfirmed": "{{ns:project}}:अपने आप बनल सदस्य",
        "grouppage-bot": "{{ns:project}}:बॉट",
        "grouppage-sysop": "{{ns:project}}:प्रबंधक",
+       "grouppage-interface-admin": "{{ns:project}}:अन्तरफलक प्रबंधक",
        "grouppage-bureaucrat": "{{ns:project}}:प्रशासक",
        "grouppage-suppress": "{{ns:project}}:कॉपीराइट",
        "right-read": "पन्ना पढा जाय",
        "right-createpage": "पन्ना बनावा जाय (जवन चर्चा पन्ना नाई होय)",
        "right-createtalk": "बातचीत पन्ना बनावा जाय",
        "right-createaccount": "नँवा सदस्य खाता बनावा जाय",
+       "right-autocreateaccount": "बाहरी खाता से खुदै प्रवेश",
        "right-minoredit": "अपने बदलाव कय छोट चिन्हित करा जाय",
        "right-move": "पन्ना घुसकावा जाय",
        "right-move-subpages": "पन्ना उपपन्नन सहित घुस्कावा जाय",
        "right-editcontentmodel": "पन्ना कय सामग्री नमुना कय बदला जाय",
        "right-editinterface": "सॉफ़्टवेयर इंटरफ़ेस सम्पादित करा जाय",
        "right-editusercss": "अउर सदस्यन् कय सी॰एस॰एस पन्ना सम्पादन करा जाय",
+       "right-edituserjson": "अन्य सदस्यों की JSON फाइलें सम्पादित करें",
        "right-edituserjs": "अउर सदस्यन् कय जावास्क्रिप्ट पन्ना कय सम्पादन करा जाय",
+       "right-editsitecss": "Sitewide CSS सम्पादित करें",
+       "right-editsitejson": "Sitewide JSON सम्पादित करें",
        "right-editmyusercss": "आपन सदस्य स्तर कय सी॰एस॰एस फ़ाइल कय सम्पादन करा जाय",
+       "right-editmyuserjson": "आपन सदस्य JSON फ़ाइल कय सम्पादन करैं",
        "right-editmyuserjs": "आपन सदस्य स्तर कय जावास्क्रिप्ट फ़ाइल सम्पादन करा जाय",
+       "right-editmyuserjsredirect": "आपन खुद कय उपयोगकर्ता जावास्क्रिप्ट फ़ाइलऽन् कय संपादित करैं जौन पुनर्निर्देशित होथीं",
        "right-viewmywatchlist": "आपन ध्यानसूची देखा जाय",
        "right-editmywatchlist": "आपन ध्यानसूची सम्पादन करा जाय। ध्यान दिहा जाय कि कुछ काम इ अधिकार कय बिनव ध्यानसूची में पन्ना जोडिहैं।",
        "right-viewmyprivateinfo": "आपन व्यक्तिगत डाटा देखा जाय (जैसय ई-मेल ठहर, असली नाँव)",
        "right-override-export-depth": "पन्ना निर्यात करा जाय, पाँच स्तर कय गहराई तक जुड़ल पन्ना लइकय",
        "right-sendemail": "अउर सदस्यन् कय ई-मेल पठवा जाय",
        "right-managechangetags": "डेटाबेस से [[Special:Tags|चिप्पियाँ]] बनायें और हटायें",
+       "grant-uploadfile": "नई फाइल अपलोड करा",
+       "grant-basic": "सामान्य अधिकार",
        "newuserlogpage": "सदस्य खाता बनावे कय लॉग",
        "newuserlogpagetext": "ई सदस्य खाता बनावे कय लॉग होय।",
        "rightslog": "सदस्य अधिकार लॉग",
        "action-writeapi": "लेखन ए॰पी॰आई कय प्रयोग करे कय",
        "action-delete": "ई पन्ना मेटावे कय",
        "action-deleterevision": "इ अवतरण कय हटावे कय",
+       "action-deletelogentry": "लॉग प्रविष्टियऽन् का हटावा",
        "action-deletedhistory": "इ पन्ना कय मेटावल इतिहास कय देखे कय",
        "action-browsearchive": "हटावल पन्ना खोजे कय",
        "action-undelete": "ई पन्ना कय पुनर्स्थापित करे कय",
        "action-editmyprivateinfo": "आपन व्यक्तिगत जानकारी बदला जाय",
        "action-editcontentmodel": "पन्ना कय सामग्री नमुना कय बदला जाय",
        "action-managechangetags": "डेटाबेस से चिप्पि बनायें और हटायें",
+       "action-editsitecss": "Sitewide CSS सम्पादित करैं",
+       "action-editsitejson": "Sitewide JSON सम्पादित करैं",
+       "action-editsitejs": "Sitewide JavaScript संपादित करैं",
+       "action-editmyusercss": "आपन सदस्य सी॰एस॰एस फ़ाइल कय सम्पादन करैं",
+       "action-editmyuserjson": "आपन सदस्य JSON फ़ाइल कय सम्पादन करैं",
+       "action-editmyuserjs": "आपन सदस्य स्तर कय Javaसcript फ़ाइल संपादित करैं",
+       "action-editmyuserjsredirect": "आपन खुद कय उपयोगकर्ता जावास्क्रिप्ट फ़ाइलऽन् कय संपादित करैं जौन पुनर्निर्देशित होथीं",
+       "action-viewsuppressed": "कौनो भी उपयोगकर्ता से लुकुवावा गवा संशोधन देखॅंय",
        "nchanges": "$1 {{PLURAL:$1|बदलाव}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|अंतिम दाइ देखय कय बाद से}}",
        "enhancedrc-history": "इतिहास",
        "filehist-comment": "टिप्पणी",
        "imagelinks": "फ़ाइल कय उपयोग",
        "linkstoimage": "निचे दिहा {{PLURAL:$1|पन्ना}} में इ फ़ाइल कय कड़ि हैं:",
-       "linkstoimage-more": "{{PLURAL:$1|$1}} से ढेर पन्ना एहमा जोडात है।\nनिम्नोक्त सूची फ़ाइल से जुड़य वाले {{PLURAL:$1|$1 पन्ना}} देखावत है।\n[[Special:WhatLinksHere/$2|पूरा सूची]] उपलब्ध है।",
+       "linkstoimage-more": "$1 {{PLURAL:$1|page uses|उपयोग भवा पन्ना}} से ढेर पन्ना एहमा जोडात है।\nनिम्नोक्त सूची फ़ाइल से जुड़य वाले  {{PLURAL:$1|first page|पहिला $1 पन्ना}} देखावत है।\n[[Special:WhatLinksHere/$2|पूरा सूची]] उपलब्ध है।",
        "nolinkstoimage": "इ फाइल से कवनो पन्ना नाइ जोडान है ।",
        "morelinkstoimage": "इ फ़ाइल कय [[Special:WhatLinksHere/$1|अउर कड़ि]] देखा जाय।",
        "linkstoimage-redirect": "$1(फ़ाइल पुनर्निर्देश) $2",
        "filerevert-legend": "फ़ाइल कय पहिले जैसन करा जाय",
        "filerevert-intro": "आप '''[[Media:$1|$1]]''' कय [$4 $2 कय $3 बजे कय अवतरण] कय पहिले जैसन करा जात है ।",
        "filerevert-comment": "कारण:",
-       "filerevert-defaultcomment": "$1 कय $2 बजे कय अवतरण कय पहिले जैसन कै गय",
+       "filerevert-defaultcomment": "$2, $1 ($3) के अवतरण को पूर्ववत किया",
        "filerevert-submit": "पहिले जैसन करा जाय",
        "filerevert-success": "'''[[Media:$1|$1]]''' कय [$4 $2 कय $3 बजे कय अवतरण] कय पहिले जैसन कै गा है।",
        "filerevert-badversion": "दिहल समय से मिलए वाला इ फ़ाइल कय कवनो पुरान अवतरण नाइ है।",
        "apisandbox-examples": "उदाहरण",
        "apisandbox-results": "परिणाम",
        "apisandbox-request-url-label": "अनुरोध URL:",
-       "apisandbox-request-time": "अनुरोध समय: $1",
+       "apisandbox-request-time": "अनुरोध समय: {{PLURAL:$1|$1 मि}}",
        "booksources": "किताबीन कय स्रोत",
        "booksources-search-legend": "किताबीन कय स्रोत खोजा जाय",
        "booksources-search": "खोजा जाय",
        "booksources-text": "निचँवा पुरान व नँवा किताब बेचय वाले वेबसाइट कय एड्रेस हैं,जवने मा आप कय खोजल किताबिन् कय बारे मे ढेर जानकारी मिलि सकत है :",
        "booksources-invalid-isbn": "इ ISBN सही नाइ लागत है ,मुल स्रोत से नकल करत कय कवनो गल्ती होइ गा होइ ,जाँचा लीन जाय ।",
        "specialloguserlabel": "करयवाला:",
-       "speciallogtitlelabel": "पà¥\8dरयà¥\8bà¤\9cन (शà¥\80रà¥\8dषà¤\95 à¤¯à¤¾ à¤¸à¤¦à¤¸à¥\8dयनाà¤\81व):",
+       "speciallogtitlelabel": "à¤\89दà¥\8dदà¥\87शà¥\8dय (शà¥\80रà¥\8dषà¤\95 à¤¯à¤¾ {{ns:सदसà¥\8dय}}:सदसà¥\8dय à¤\95à¥\87 à¤¬à¤°à¥\87 à¤¸à¤¦à¤¸à¥\8dयनाम):",
        "log": "लॉग",
        "all-logs-page": "कुल सार्वजनिक लॉग",
        "alllogstext": "{{SITENAME}} की सभी उपलब्ध लॉगों की प्रविष्टियों का मिला-जुला प्रदर्शन।\nआप और बारीकी के लिए लॉग का प्रकार, सदस्य नाम (लघु-दीर्घ-अक्षर संवेदी), या प्रभावित पृष्ठ (लघु-दीर्घ-अक्षर संवेदी) चुन सकते हैं।",
        "cachedspecial-viewing-cached-ts": "आप इ पन्ना कय कैश करल अवतरण देखा जात है ,जवन कि पुरै सही नाइ होइ सकत है ।",
        "cachedspecial-refresh-now": "हालिए कय देखा जाय ।",
        "categories": "श्रेणी",
-       "categoriespagetext": "निम्नोक्त {{PLURAL:$1|श्रेणी|श्रेणि}} मा पन्ना या मीडिया है।\nजवन श्रेणिन् कय [[Special:UnusedCategories|अप्रयुक्त श्रेणि]] यहँ नाइ देखाई गा हैं।\n[[Special:WantedCategories|वांछित श्रेणि]] भी देखा जाय।",
+       "categoriespagetext": "निम्नोक्त {{PLURAL:$1|श्रेणी|श्रेणियों}} में पृष्ठ या मीडिया है और यह अप्रयुक्त नहीं भी हो सकती है।\n[[Special:WantedCategories|वांछित श्रेणियाँ]] भी देखें।",
        "categoriesfrom": "इ अक्षर से शुरु होय वाला श्रेणी देखावा जाय:",
        "deletedcontributions": "हटावल सदस्य योगदान",
        "deletedcontributions-title": "हटावल सदस्य योगदान",
        "deletepage": "पन्ना मेटावा जाय",
        "confirm": "सुनिश्चित करा जाय",
        "excontent": "लेख रहा: '$1'",
-       "excontentauthor": "लिà¤\96ा à¤°à¤¹à¤¾: '$1' (à¤\94 à¤\96ालà¥\80 '[[Special:Contributions/$2|$2]]' à¤\95य à¤¯à¥\8bà¤\97दान à¤°à¤¹à¤¾à¥¤)",
+       "excontentauthor": "पाठ à¤¥à¤¾: '$1', à¤\94र à¤¸à¤¿à¤°à¥\8dफ '[[Special:Contributions/$2|$2]]' à¤\95ा à¤¯à¥\8bà¤\97दान à¤¥à¤¾à¥¤ ([[User talk:$2|वारà¥\8dता]])",
        "exbeforeblank": "खाली करय से पहिले पाठ रहा: '$1'",
        "delete-confirm": "\"$1\" मिटावा जाय",
        "delete-legend": "मेटावा जाय",
        "editcomment": "संपादन सारांश रहा: <em>$1</em>।",
        "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|बातचीत]])से [[User:$1|$1]] कय करल पिछला संशोधन उल्टाई कय पहिले जैसन कै गय",
        "revertpage-nouser": "(सदस्य नाँव हटाइ गा है) कय संपादन कय हटाइकए {{GENDER:$1|[[User:$1|$1]]}} कय अन्तिम अवतरण कय पहिले जैसन कै गय।",
-       "rollback-success": "$1 कय संपादन हटाइ गय;\n$2 कय संपादित अन्तिम अवतरण कय पुनर्स्थापित कै गय।",
+       "rollback-success": "{{GENDER:$3|$1}} के संपादन हटाए;\n{{GENDER:$4|$2}} द्वारा संपादित अन्तिम अवतरण को पुनर्स्थापित किया।",
        "sessionfailure-title": "सत्र विफलता",
        "sessionfailure": "ऐसा प्रतीत होता है कि आपके लॉगिन सत्र के साथ कोई समस्या है।\nसत्र अपहरण से बचाने के लिए सावधानी के तौर पर आपका यह क्रियाकलाप रद्द कर दिया गया है।\nकृपया पीछे जाएँ और पृष्ठ को पुनः लोड करें, तब दुबारा कोशिश करें।",
        "protectlogpage": "सुरक्षा लॉग",
        "contributions": "{{GENDER:$1|सदस्य}} योगदान",
        "contributions-title": "$1 कय योगदान",
        "mycontris": "योगदान",
+       "anoncontribs": "योगदान",
        "contribsub2": "{{GENDER:$3|$1}} ($2) कय खर्तीन",
        "contributions-userdoesnotexist": "सदस्य \"$1\" पंजीकृत नाइ है।",
        "nocontribs": "इन कसौटियों से मिलनेवाले बदलाव मिले नहीं।",
        "sp-contributions-newbies-sub": "नँवा सदस्यन कय खर्तीन",
        "sp-contributions-newbies-title": "नँवा सदस्यन् कय योगदान",
        "sp-contributions-blocklog": "ब्लॉक सूची",
-       "sp-contributions-suppresslog": "हà¤\9fावल à¤¸à¤¦à¤¸à¥\8dय योगदान",
-       "sp-contributions-deleted": "हà¤\9fावल à¤¸à¤¦à¤¸à¥\8dय योगदान",
+       "sp-contributions-suppresslog": "à¤\9bà¥\81पाà¤\8f à¤\97à¤\8f {{GENDER:$1|सदसà¥\8dय}} à¤\95à¥\87 योगदान",
+       "sp-contributions-deleted": "हà¤\9fाà¤\8f à¤\97à¤\8f {{GENDER:$1|सदसà¥\8dय}} योगदान",
        "sp-contributions-uploads": "अपलोड",
        "sp-contributions-logs": "लॉग",
        "sp-contributions-talk": "बातचीत",
-       "sp-contributions-userrights": "सदस्य अधिकार प्रबंधन",
+       "sp-contributions-userrights": "{{GENDER:$1|सदस्य}} अधिकार प्रबंधन",
        "sp-contributions-blocked-notice": "ई सदस्य अभीन अवरोधित है।\nसदंर्भ कय लिए ताज़ातरीन अवरोध लॉग प्रविष्टि नीचे दीहा है:",
        "sp-contributions-blocked-notice-anon": "ई आईपी ठहर अभीन अवरोधित है।\nसदंर्भ कय लिए ताज़ातरीन अवरोध लॉग प्रविष्टि नीचा दीहा है:",
        "sp-contributions-search": "योगदान कय खर्तीन खोज",
        "block": "सदस्य कय अवरोधित करा जाय।",
        "unblock": "सदस्य कय अवरोध हटावा जाय।",
        "blockip": "{{GENDER:$1|सदस्य}}",
-       "blockiptext": "विशिष्ठ IP पते अथवा सदस्य नाम को लिखने के अधिकार से बाध्य करने के लिए निम्न पत्र का प्रयोग करें।\nयह सिर्फ बर्बरता को रोकने के लिए ही किया जाना चाहिए, और [[{{MediaWiki:Policy-url}}|नीति]] के अनुसार ही करना चाहिए।\nनीचे विशिष्ठ कारण भी लिखें (उदाहरण के लिए, सटीक पृष्ठों को दर्शाते हुए, जिनमें बर्बरता की गई हो)।",
+       "blockiptext": "विशिष्ठ IP पते अथवा सदस्य नाम को लिखने के अधिकार से बाध्य करने के लिए निम्न पत्र का प्रयोग करें।\nयह सिर्फ बर्बरता को रोकने के लिए ही किया जाना चाहिए, और [[{{MediaWiki:Policy-url}}|नीति]] के अनुसार ही करना चाहिए।\nनीचे विशिष्ठ कारण भी लिखें (उदाहरण के लिए, सटीक पृष्ठों को दर्शाते हुए, जिनमें बर्बरता की गई हो)।\nआप [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing सीआईडीआर] सिंटैक्स का उपयोग करके आईपी पता श्रेणियां ब्लॉक कर सकते हैं। आईपीवी4 के लिए सबसे बड़ी स्वीकार्य सीमा /$1 है और आईपीवी6 के लिए /$2 है।",
        "ipaddressorusername": "आईपी एड्रेस या सदस्यनाँव:",
        "ipbreason": "कारण:",
        "ipbreason-dropdown": "*अवरोधित करने के साधारण कारण\n** अवैध सदस्यनाम\n** एक से अधिक खातें खोलकर उनका दुरुपयोग करना\n** गलत जानकारी भरना\n** पृष्ठों में कचरा भरना\n** पृष्ठों से सामग्री हटाना‍‍‍‍‍\n** बाहरी जालस्थलों की फ़ालतू कड़ियां देना \n** सदस्यों को तंग करना",
        "import-nonewrevisions": "कोई अवतरण आयात नहीं किये गये (या तो सभी अवतरण पहले से मौजूद हैं, या त्रुटियों के कारण छोड़े गये)।",
        "xml-error-string": "$1 पंक्ति $2 मा, कॉलम $3 (बाईट $4): $5",
        "import-upload": "XML डाटा अपलोड कीन जाय",
-       "import-token-mismatch": "सत्र सामग्री खो गई है। \nकृपया पुनः प्रयास करें।",
+       "import-token-mismatch": "सत्र सामग्री खो गई है।\n\nशायद आपने सत्रान्त कर दिया। <strong>कृपया इसकी पुष्टि करें कि आप अभी तक प्रविष्ट हैं और पुनः प्रयास करें</strong>।\nयदि अब भी समस्या हल नहीं हुई, तो [[Special:UserLogout|सत्रान्त]] करें और पुनः प्रवेश करें एवं यह जाँचें की आपका ब्राउज़र इस साइट के लिए कुकीज़ को अनुमत करता है।",
        "import-invalid-interwiki": "इ विकि से आयात नाइ होइ सकत है।",
        "import-options-wrong": "गलत {{PLURAL:$2|विकल्प}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "दिहल उपसर्ग पन्ना शीर्षक अमान्य है।",
        "javascripttest": "जावास्क्रिप्ट परीक्षण",
        "javascripttest-pagetext-unknownaction": "अज्ञात काम \"$1\".",
        "javascripttest-qunit-intro": "mediawiki.org पे [$1 परीक्षण कय प्रलेखन] देखा जाय।",
-       "tooltip-pt-userpage": "आप कय सदस्य पन्ना",
+       "tooltip-pt-userpage": "आप कय {{GENDER:|सदस्य पन्ना}}",
        "tooltip-pt-anonuserpage": "आप जिस आईपी से बदलाव कर रहें हैं उसका सदस्य पन्ना निचे है",
-       "tooltip-pt-mytalk": "आप कय बातचित पन्ना",
+       "tooltip-pt-mytalk": "{{GENDER:|आप कय}} बातचित पन्ना",
        "tooltip-pt-anontalk": "इस आईपी एड्रेससे हुए बदलावों के बारे में वार्ता",
-       "tooltip-pt-preferences": "आप कय पसंद",
+       "tooltip-pt-preferences": "{{GENDER:|आप कय}} पसंद",
        "tooltip-pt-watchlist": "आप कय ध्यान दिहल पन्नन कय सूची",
-       "tooltip-pt-mycontris": "आप कय योगदान कय सुची",
+       "tooltip-pt-mycontris": "{{GENDER:|आप कय}} योगदान कय सुची",
        "tooltip-pt-login": "आप कय खाता प्रवेश खत्तिर प्रोत्साहित कै जात है, लेकिन ई अनिवार्य नाई है",
        "tooltip-pt-logout": "बहरे निकरा जाय",
        "tooltip-pt-createaccount": "हमारा सुझाव है की आप खाता बनाएँ और लॉगिन करें, परन्तु यह अनिवार्य नहीं है",
        "tooltip-t-recentchangeslinked": "ई पन्ना से जोडान पन्नवन पे तुरंत करल बदलाव",
        "tooltip-feed-rss": "इ पन्ना कय आरएसएस फ़ीड",
        "tooltip-feed-atom": "ई पन्ना कय Atom फ़ीड",
-       "tooltip-t-contributions": "इ सदस्य कय योगदान कय सुची देखा जाय",
-       "tooltip-t-emailuser": "इ सदस्य कय इमेल पठवा जाय",
+       "tooltip-t-contributions": "{{GENDER:$1|इ सदस्य}} कय योगदान कय सुची देखा जाय",
+       "tooltip-t-emailuser": "{{GENDER:$1|इ सदस्य}} कय इमेल पठवा जाय",
        "tooltip-t-info": "इ पन्ना कय बारे मे ढेर जानकारी",
        "tooltip-t-upload": "फ़ाइल अपलोड करा जाय",
        "tooltip-t-specialpages": "कुल विशेष पन्नन कय सूची",
        "lastmodifiedatby": "इ पन्ना कय अन्तिम बदलाव $2, $1 पे $3 करें रहें।",
        "othercontribs": "$1 कय काम कय अनुसार।",
        "others": "अउर",
-       "siteusers": "{{SITENAME}} {{PLURAL:$2|सदस्य|सदस्य}} $1",
+       "siteusers": "{{SITENAME}} {{PLURAL:$2|{{GENDER:$1|सदस्य}}|सदस्य}} $1",
        "anonusers": "{{SITENAME}} अनाम {{PLURAL:$2|सदस्य|सदस्य}} $1",
        "creditspage": "पन्ना श्रेय नामावली",
        "nocredits": "इस पृष्ठ के लिये क्रेडिट जानकारी नहीं है।",
        "spam_reverting": "$1 को कड़ी ना होने वाले पुराने अवतरण को पुनर्स्थापित कर रहें हैं",
        "spam_blanking": "सभी अवतरणोंमें $1 को कड़ियां हैं, पूरा पाठ निकाल रहें हैं",
        "spam_deleting": "सभी अवतरणों में $1 की कड़ी थी, हटाया जा रहा है",
-       "simpleantispam-label": "ऐन्टी-स्पैम जाँच।\nइसे <strong>नहीं</strong> भरें!",
+       "simpleantispam-label": "ऐन्टी-स्पैम जाँच।\nइसे <strong>not</strong> भरें!",
        "pageinfo-title": "\"$1\" कय जानकारी",
        "pageinfo-not-current": "क्षमा करें, पुराने अवतरणों के लिए यह जानकारी प्रदान करना संभव नहीं है।",
        "pageinfo-header-basic": "मूल जानकारी",
        "autoredircomment": "[[$1]] पे अनुप्रेषित",
        "autosumm-new": "'$1' कय साथे नँवा पन्ना बनावा गय",
        "autosumm-newblank": "खाली पन्ना बनावा गय",
-       "lag-warn-normal": "पिछले $1 {{PLURAL:$1|सेकिंड|सेकिंड}} में हुए बदलाव संभवतः इस सूची में नहीं आएँगे।",
-       "lag-warn-high": "आँकड़ाकोष सेवक में अधिक देर की वजह से $1 {{PLURAL:$1|सेकिंड|सेकिंड}} से पहले तक के बदलाव ही इस सूची में निश्चित रूप से दिखेंगे।",
+       "lag-warn-normal": "पिछले $1 {{PLURAL:$1|Second|सेकिंड}} में हुए बदलाव संभवतः इस सूची में नहीं आएँगे।",
+       "lag-warn-high": "आँकड़ाकोष सेवक में अधिक देर की वजह से $1 {{PLURAL:$1|Second|सेकिंड}} से पहले तक के बदलाव ही इस सूची में निश्चित रूप से दिखेंगे।",
        "watchlistedit-normal-title": "ध्यानसूची बदला जाय",
        "watchlistedit-normal-legend": "ध्यानसूची से शीर्षक हटावा जाय",
        "watchlistedit-normal-explain": "आपकी ध्यानसूची में सूचीबद्ध पृष्ठ नीचे दिये गये हैं।\nपृष्ठ सूची से हटाने के लिये उसके आगे दिये बक्से पर क्लिक करें, और \"{{int:Watchlistedit-normal-submit}}\" पर क्लिक करें।\nआप [[Special:EditWatchlist/raw|रॉ ध्यानसूची का संपादन]] भी कर सकते हैं।",
        "version-libraries": "इन्स्टाल करल लाइब्रेरी",
        "version-libraries-library": "लाइब्रेरी",
        "version-libraries-version": "संस्करण",
-       "redirect-summary": "यह विशेष पृष्ठ फ़ाइलनाम प्रदान करने पर फ़ाइल नाम को, पृष्ठ आइ॰दी अथवा अवतरण आइ॰दी देने पर पृष्ठ को, और सदस्य आइ॰दी देने पर सदस्य पृष्ठ को पुनर्प्रेषित करता है। उदाहरण: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], या [[{{#Special:Redirect}}/user/101]]।",
+       "redirect": "फ़ाइल, सदस्य, पृष्ठ, अवतरण या लॉग आईडी द्वारा अनुप्रेषित",
+       "redirect-summary": "यह विशेष पृष्ठ फ़ाइलनाम प्रदान करने पर फ़ाइल नाम को, पृष्ठ आइ॰दी अथवा अवतरण आइ॰दी देने पर पृष्ठ को, और सदस्य आइ॰दी देने पर सदस्य पृष्ठ को पुनर्प्रेषित करता है। उदाहरण: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]],[[{{#Special:Redirect}}/user/101]] या\n[[{{#Special:Redirect}}/logid/186]] ।",
        "redirect-submit": "जावा जाय",
        "redirect-lookup": "ढूँढा जाय:",
        "redirect-value": "मूल्य:",
        "htmlform-cloner-create": "अउर जोडा जाय",
        "htmlform-cloner-delete": "हटावा जाय",
        "logentry-delete-delete": "$1 ने पृष्ठ $3 {{GENDER:$2|हटा}} दिहा गय",
-       "logentry-delete-restore": "$1 ने पृष्ठ $3 कय {{GENDER:$2|पुनर्स्थापित}} कै गय",
+       "logentry-delete-restore": "$1 ने पृष्ठ $3($4) कय {{GENDER:$2|पुनर्स्थापित}} कै गय",
        "logentry-delete-event": "$1 ने $3 पृष्ठ की लॉग {{PLURAL:$5|प्रविष्टि|प्रविष्टियों}} की दृश्यता {{GENDER:$2|बदली}}: $4",
        "logentry-delete-revision": "$1 ने $3 पृष्ठ के {{PLURAL:$5|एक अवतरण|$5 अवतरणों}} की दृश्यता {{GENDER:$2|बदली}}: $4",
        "logentry-delete-event-legacy": "$1 ने $3 पृष्ठ पर लॉग क्रियाओं की दृश्यता {{GENDER:$2|बदली}}",
        "logentry-rights-rights-legacy": "$1 ने $3 के सदस्य समूह {{GENDER:$2|बदले}}",
        "logentry-rights-autopromote": "$1 के सदस्य समूह स्वतः $4 से बदलकर $5 {{GENDER:$2|किये}} गए",
        "logentry-upload-upload": "$1 {{GENDER:$2|ने}} $3 अपलोड किया",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|अपलोड कीन गा}} $3 कय एक नवा अवतरण",
        "rightsnone": "(कउनो नाहीं)",
        "feedback-adding": "पृष्ठ पे प्रतिक्रिया जोडत है ...",
        "feedback-back": "पीछे",
        "feedback-thanks": "धन्यवाद! आपकी प्रतिक्रिया पृष्ठ में नियुक्त किया गया है \"[ $2  $1 ]\"।",
        "feedback-thanks-title": "धन्यवाद!",
        "feedback-useragent": "प्रयोगकर्ता एजेन्ट:",
-       "searchsuggest-search": "खोज",
+       "searchsuggest-search": "{{SITENAME}} में खोजा जाय",
        "searchsuggest-containing": "...से युक्त",
        "api-error-badtoken": "आंतरिक त्रुटि: खराब टोकन।",
        "api-error-emptypage": "नँवा अव खाली पन्ना बनावै कय अनुमति नाइ है",
        "special-characters-title-endash": "डैश",
        "special-characters-title-emdash": "बड्का डैश",
        "special-characters-title-minus": "माइनस चिन्ह",
+       "randomrootpage": "कउनो भी मूल पन्ना",
+       "log-action-filter-upload-upload": "नवा अपलोड",
+       "log-action-filter-upload-overwrite": "फिर से अपलोड",
+       "log-action-filter-upload-revert": "पहिले जैसन करा जाय",
+       "authmanager-create-disabled": "खाता बनावै कय रोक लगाए दिहा गा हैं।",
+       "authmanager-email-label": "ईमेल",
+       "authmanager-email-help": "ईमेल पता",
+       "authmanager-realname-label": "वास्तविक नांव",
+       "authmanager-realname-help": "सदस्य कय वास्तविक नांव",
+       "authmanager-provider-password": "पासवर्ड-आधारित प्रमाणीकरण",
+       "authmanager-provider-password-domain": "पासवर्ड- अउर डोमेन-आधारित प्रमाणीकरण",
+       "authmanager-provider-temporarypassword": "अस्थाई पासवर्ड",
+       "authprovider-resetpass-skip-label": "छोड़ा",
+       "authprovider-resetpass-skip-help": "पासवर्ड का रीसेट करय का छोड़ द्या।",
+       "authform-notoken": "टोकन लापता अहय",
+       "authform-wrongtoken": "गलत टोकन",
+       "specialpage-securitylevel-not-allowed-title": "अनुमति नाइ हय",
+       "authpage-cannot-login": "लॉगिन शुरू करय मा असमर्थ।",
+       "cannotauth-not-allowed-title": "अनुमति नहीं मिली।",
+       "changecredentials": "साख बदला",
+       "changecredentials-submit": "साख बदला",
+       "changecredentials-invalidsubpage": "$1 सही परिचय कय प्रकार ना होय।",
+       "changecredentials-success": "आपकै परिचय बदला गवा।",
+       "removecredentials": "परिचय निकारा",
+       "removecredentials-submit": "परिचय निकारा",
+       "removecredentials-invalidsubpage": "$1 सही परिचय कय प्रकार ना होय।",
+       "removecredentials-success": "आपकै परिचय निकार दीन गवा।",
+       "credentialsform-provider": "परिचय प्रकार :",
+       "credentialsform-account": "खाता कय नाव:",
+       "cannotlink-no-provider-title": "जोड़य लायेक कउनो खाता नाही हय",
+       "cannotlink-no-provider": "जोड़य लायेक कउनो खाता नाही हय।",
+       "linkaccounts": "खाता जोड़ा",
+       "linkaccounts-success-text": "खाता जोड़ा गवा।",
+       "linkaccounts-submit": "खाता जोड़ा",
+       "cannotunlink-no-provider-title": "अनलिंक करय बरे कउनो जुड़ा हुआ खाता नाही हय",
+       "cannotunlink-no-provider": "अइसा कउनो भी जुड़ा हुआ खाता नाही हय जेहका अनलिंक कीन जाय सकय।",
+       "unlinkaccounts": "खाता अनलिंक करा",
+       "unlinkaccounts-success": "खाता अनलिंक भवा",
+       "specialmute": "आवाज़ बंद करा जाय",
        "userlogout-continue": "का आप लॉग आउट करा चाहत अहैं?"
 }
index 91544a0..bfaac9d 100644 (file)
        "databaseerror": "حطا دیتابیس",
        "databaseerror-text": "یک ارورء مان دیتابیسء شوهازیگء ودی بیت. هنچوش بیتء کنت ائ یک نکسء مان سفتورء هن پیداگ بکنت انت.",
        "databaseerror-textcl": "یک ارورء مان دیتابیسء شوهازیگء پیداگ بوت.",
-       "databaseerror-query": "شوهاز: $1",
+       "databaseerror-query": "پٹ ءُ پۏل: $1",
        "databaseerror-function": "Function: $1",
        "databaseerror-error": "ارور: $1",
        "laggedslavemode": "هوژاری: صفحه شاید نوکین په روچ بییگان داشته می بیت",
        "loginsuccesstitle": "مان بیت اِت",
        "loginsuccess": "''''شما الان وارد {{SITENAME}} په عنوان \"$1\".'''",
        "nosuchuser": "هچ کارزورکے گۏں \"$1\"ءَ ناما نݔست اِنت.\nکارزوروکیءِ نام پہ گالءِ مزنی ءُ ھُردی‌ئا حساس اِنت.\nوتی لکتگݔں گالاں شرّ بہ چار اِت یا[[Special:CreateAccount|نۏکݔں سابے جۏڈݔن]]اِت.",
-       "nosuchusershort": "هچ کاربری گون نام  \"$1\"نیستن.\nوتی املايا کنترل کنیت",
-       "nouserspecified": "شما باید یک نام کاربری مشخص کنیت.",
+       "nosuchusershort": "ھچ کارزورۏکے گۏں ''$1''ء نام‌ئا نے",
+       "nouserspecified": "شما باید یک کارزورۏکی نامے بہ لک اݔت.",
        "login-userblocked": "ائ کابر بلاک بیتگ. لاگین مان سیستمء اجازت نه انت.",
        "wrongpassword": "گالگوَز اشی نئں واجہ میر. الکاپݔں گالگوَزا بہ لِک.",
        "wrongpasswordempty": "کلمه رمز وارد بیتگین هالیکنت. دگه سعی کن",
        "history-feed-item-nocomment": "$1 ته $2",
        "history-feed-empty": "لوٹتگین صفحه موجود نهنت.\nشاید آی چه ویکی حذف بوتت یا نامی بدل بوتت.\nآزمایش کن[[Special:Search|گردگ ته ویکی]] په مربطین نوکین صفحات.",
        "rev-deleted-comment": "(ویرایشء خلاصگ هزپ بوت)",
-       "rev-deleted-user": "(نام کاربری زورگ بیتت)",
+       "rev-deleted-user": "(کارزورۏکی نام گرگ بیتہ)",
        "rev-deleted-event": "(کار آمار زورگ بیتت)",
        "rev-deleted-user-contribs": "[یوزرنام یانکه یانکه آی پی ادرس هزپ بیتگ انت  - ویرایش چیرداتگین مان هواربیتگان]",
        "rev-deleted-text-permission": "ائ ویرایش چه ائ پیج '''هزپ بیتگ انت'''.\nبلکین اطلاعات گون آئی همگرنچء مان [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} هزپانی سیاهگ] موجوت بیت انت.",
        "shown-title": "پیش دار $1 {{PLURAL:$1|نتیجه|نتیجه}} ته هر صفحه",
        "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) دیدگ",
        "searchmenu-exists": "'''صفحه گون نام \"[[$1]]\" ته ای ویکی نیستن'''",
-       "searchmenu-new": "<strong>ائ تاکء اڈ کتن «[[:$1]]» مان ائ ویکی!</strong> {{PLURAL:$2|0=|ءُ هنچوش شمئی ودیگ بیتگین تاک گون شمئی شوهاز.|هنچوش شمئی شوهازء آسر.}}",
+       "searchmenu-new": "<strong>اے تاکء جۏڑݔنگ«[[:$1]]» مہ اے ویکی‌ئا!</strong> {{PLURAL:$2|0=|ءُ هنچۏش شمئی درگپتگݔـں تاک گۏں شمئی شۏھازا.|هنچۏش شمئی شۏھاز.}}",
        "searchprofile-articles": "صفحات محتوا",
        "searchprofile-images": "ملتیمدیا",
        "searchprofile-everything": "هر چیز",
        "timezoneregion-indian": "اقیانوس هند",
        "timezoneregion-pacific": "اقیانوس آرام",
        "allowemail": "فعال کن ایمیل چه دگه کابران",
-       "prefs-searchoptions": "شوهاز",
+       "prefs-searchoptions": "شۏھاز",
        "prefs-namespaces": "نام فصا",
        "default": "پیش فرض",
        "prefs-files": "فایلان",
        "prefs-tabs-navigation-hint": "بزان: شما توان ات چه چپی و راستی پیشداروکین بٹن ان  پر حرکت زبانگ انی توکا مان زبانگانی لیست کارمرز بکن ات.",
        "userrights": "مدیریت حقوق کاربر",
        "userrights-lookup-user": "مدیریت گروه کاربر",
-       "userrights-user-editname": "یک نام کاربری وارد کن",
+       "userrights-user-editname": "کارزورۏکی نامے بہ لِک اݔت",
        "editusergroup": "اصلاح گروه کاربر",
        "editinguser": "ٹگل مان ایهتیارات کاربریء کاربر '''[[User:$1|$1]]''' $2",
        "userrights-editusergroup": "اصلاح گروه کاربر",
        "usereditcount": "$1 {{PLURAL:$1|اصلاح|اصلاحات}}",
        "usercreated": "شربوتگ  $1 ته $2",
        "newpages": "نوکین صفحات",
-       "newpages-username": "نام کاربری:",
+       "newpages-username": "کارزورۏکی نام:",
        "ancientpages": "صفحات قدیمی",
        "move": "جاه په جاه",
        "movethispage": "ای صفحه جاه په جاه کن",
        "sp-contributions-talk": "گپ",
        "sp-contributions-userrights": "مدیریت کاربرنی حق",
        "sp-contributions-search": "گردگ په مشارکتان",
-       "sp-contributions-username": "آدرس آی پی یا نام کاربری",
+       "sp-contributions-username": "آیپی یا کارزورۏکی نام",
        "sp-contributions-submit": "گردگ",
        "whatlinkshere": "اے لینکے کہ ادا ھہ",
        "whatlinkshere-title": "صفحاتی که لینگ بوتگنت په \"$1\"",
        "whatlinkshere-filters": "فیلتران",
        "blockip": "محدود کتن کاربر",
        "blockiptext": "چه ای فرم جهلی په نوشتن دسترسی په یک خاصین آدرس آی پی یا نام کاربری استفاده کن.\nشی فقط انجام بیت په خاطر جلوگیری چه هرابکاری  په اساس [[{{MediaWiki:Policy-url}}|سیاست]].\nیک حاصین دلیلی بنویس جهلء (مثلا، گوشگ صفخات خاصی که هراب بپتگنت).",
-       "ipaddressorusername": "آدرس آي پی یا نام کاربری:",
+       "ipaddressorusername": "آیپی یا کارزورۏکی نام:",
        "ipbreason": "دلیل:",
        "ipbreason-dropdown": "* متداولین دلایل محدودیت\n** وارد کتن غلطین اطلاحات\n** زورگ محتوا چه صفحات\n** لینکان اسپمی په دراین سایت\n**وارد کتن بی ربطین/نامفومین چیز په صفحات\n** ترسناکین رفتار/ آزار\n**سوء استفاده چه چنت حساب\n** غیر قابل قبولین نام کاربری",
        "ipbcreateaccount": "مهل حساب شرکنت",
        "block-log-flags-hiddenname": "پناهین کاربر",
        "range_block_disabled": "توانایی مدیران سیستم په شرکتن محدوده محدودیت غیر فعالنت.",
        "ipb_expiry_invalid": "وهد هلگ نامعتبر انت.",
-       "ipb_expiry_temp": "پناهین نام کاربری محدودیاتن بایدن دایمی بنت.",
+       "ipb_expiry_temp": "باید اِنت کہ اندݔمی کارزورۏکی نام مسدود بہ بیت",
        "ipb_hide_invalid": "نه تونیت ای حسابءَ بندی کن؛ بلکین بازین اصلاحی هستن.",
        "ipb_already_blocked": "\"$1\" الان محدودنت.",
        "ipb-needreblock": "دسترسی $1 چه قبل بند ات. آیا لوٹیت تنظیم‌های آن را تغییر دهیت؟",
        "move-leave-redirect": "یک تغییر مسیر بل",
        "protectedpagemovewarning": "'''هوژاری:''' ای صفحه کبل بوتت که فقط مدیران بتواننت آیءَ جاه په جاه کننت.",
        "semiprotectedpagemovewarning": "'''توجه:''' ای صفحه کبل بوتت که فقط تثب نامی کاربران بتوانن آیءَ جاه په جاه کننت.",
-       "export": "خرÙ\88ج ØµÙ\81حات",
+       "export": "درآتکگÝ\94Úº ØªØ§Ú©Ø§Úº",
        "exporttext": "شما تونیت متن درکینت و تاریح اصلاح یک بخصوص این صفحه ایء یا مجموعه چنت صفحه تلمتلین ته لهتی XML.\nشی بوتن که وارد دگه ویکی بیگ گون [[Special:Import|import page]].\n\nپه خروج صفحات، عناوین آیء ته جهلگی باکس وارد کن, هر عنوان ته یک حطی، و انتخاب کن که آیا شمل لوٹیت هنوکین نسخه و کل کدیمی نسخ،گون خطوط تاریح صفحه, یا فقط هنوکین نسخه گون اطلاعاتی درباره آهری اصلاح.\n\nپه اهری مورد شما تونیت هنچوش چه یک لینکی استفاده کنیت،مثلا [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] په صفحه ی \"[[{{MediaWiki:Mainpage}}]]\".",
        "exportcuronly": "فقط شامل هنوکین بازبینی، نه تاریح کامل",
        "exportnohistory": "----\n'''توجه:''' گردگ تاریح کامل صفحات چه طریق ای فرم په خاطر دلایل اجرایی غیر فعال بوتت.",
index f29ed77..23a3b89 100644 (file)
                        "Macofe",
                        "Matma Rex",
                        "ShimunUfesoj",
-                       "Vlad5250"
+                       "Vlad5250",
+                       "Brazal.dang"
                ]
        },
        "tog-underline": "Linyahan an kilyawan:",
        "tog-hideminor": "Tagoon an saradít na mga pagliwat sa dae pa sana nahaloy na mga pagbabàgo",
        "tog-hidepatrolled": "Tagóa an patrolyadong mga paghirá sa nakakaági pa sanáng pagbabàgo",
        "tog-newpageshidepatrolled": "Tagoon an patrolyadong mga pahina gikan sa baguhong listahan nin pahina",
+       "tog-hidecategorization": "Itago an pagkagrupo kan mga pahina",
        "tog-extendwatchlist": "Palakbanga an bantay-listahan (watchlist) na maipahiling an gabos na pinagbago, bako sana an pinakahurihang binago",
        "tog-usenewrc": "Pangrupong mga kaliwatan sa kada pahina kan mga dae pa sana nahaloy na mga kaliwatan asin bantay-listahan",
        "tog-numberheadings": "Tolos-bilang na mga pamayohán",
        "tog-watchlisthideliu": "Tagoon an mga pagbabagong nahimo kan mga nakalaog na paragamit gikan sa bantayang listahan",
        "tog-watchlisthideanons": "Tagoon an mga pagbabagong nahimo kan mga bakong bistadong paragamit gikan sa bantayang listahan",
        "tog-watchlisthidepatrolled": "Tagoon an mga patrolyadong pagbabago gikan sa bantayang listahan",
+       "tog-watchlisthidecategorization": "Itago an pagkagrupo kan mga pahina",
        "tog-ccmeonemails": "Ipadara sako an mga kopya kan e-koreo na pinadara ko sa ibang mga paragamit",
        "tog-diffonly": "Dai tabi ihayag an laog kan pahina sa ibaba nin mga diffs",
        "tog-showhiddencats": "Ihayag an nakatagong mga kategorya",
        "tog-norollbackdiff": "Omidohon an diff matapos himoon an pagbalikot",
        "tog-useeditwarning": "Patanidan ako kunsoarin na ako nagbaya sa pahinang pigliliwat na dae naitatagama an mga kaliwatan",
        "tog-prefershttps": "Pirmeng gumamit nin sarong seguradong koneksyon kunsoarin na ika nakalaog na",
-       "underline-always": "Parati",
+       "underline-always": "Pirmi",
        "underline-never": "Dae pa lamang",
        "underline-default": "Kublit o kilyaw na panugmad",
        "editfont-style": "Baguhon an estilo nin kalwig sa sinasakupan",
        "october-date": "Oktobre $1",
        "november-date": "Nobyembre $1",
        "december-date": "Disyembre $1",
+       "period-am": "Aga",
+       "period-pm": "Hapon",
        "pagecategories": "{{PLURAL:$1|Kategorya|Mga kategorya}}",
        "category_header": "Mga pahina sa kategoryang \"$1\"",
        "subcategories": "Mga sub-kategorya",
        "morenotlisted": "Ining listahan bakong kumpleto.",
        "mypage": "Pahina",
        "mytalk": "Mag-ulay",
-       "anontalk": "Urulay para kaining IP estada",
+       "anontalk": "Mag-ulay",
        "navigation": "Paglibotlibot",
        "and": "&#32;asin",
        "faq": "PHK (Pirmehang Hinahapot na mga Kahaputan)",
        "returnto": "Magbalik sa $1.",
        "tagline": "Gikan sa {{SITENAME}}",
        "help": "Katabangan",
+       "help-mediawiki": "Tabang tungkol sa MediaWiki",
        "search": "Maghanap",
        "search-ignored-headings": " #<!-- walaton ining linya eksaktong siring sana kaini --> <pre> \n# Mga Kapamayuhanan na pinagpapabayaan sa paghahanap. \n# Mga Kaliwatan kaini magkaka-epekto matapos na an pahina na igwang kapamayuhanan maipaghukdo. \n# Ika makakapagpuwersa sa pahina na maihuhukdo otro sa paagi nin paghimo nin sarong blangko na pagliwat. # An Sintaks iyo ining minasunod: \n# * An gabos magpoon sa sarong karakter na \"#\" sagkod sa tapos kan linya iyo an sarong komento \n# * An lambang linya na bakong blangko iyo an eksaktong titulo na pababayaan, kaso asin gabos na bagay \nMga Panultulan\nPanluwas na mga sugpon\nHilingon man \n#</pre> <!-- walaton ining linya eksaktong siring sana kaini -->",
        "searchbutton": "Maghanap",
-       "go": "Dumani",
-       "searcharticle": "Lakaw",
+       "go": "Dumanán",
+       "searcharticle": "Dumanán",
        "history": "Historiya nin pahina",
        "history_short": "Historiya",
+       "history_small": "historiya",
        "updatedmarker": "dinagdagan poon kan sakong huring pagbisita",
        "printableversion": "Nalilimbag na bersyon",
-       "permalink": "Permanenteng kilyawan",
+       "permalink": "Permanenteng sugpon",
        "print": "Ilimbag",
        "view": "Tànawon",
        "view-foreign": "Hilingon sa $1",
        "delete": "Puraon",
        "undelete_short": "Dae puraon an {{PLURAL:$1|sarong pagliwat|$1 mga pagliwat}}",
        "viewdeleted_short": "Hilingon {{PLURAL:$1|sarong pinura na pagliwat|$1 mga pinura na pagliwat}}",
-       "protect": "Protektari",
+       "protect": "Protektaran",
        "protect_change": "Ribayan",
        "unprotect": "Ribayan an proteksyon",
        "newpage": "Bàguhong pahina",
        "talk": "Urulayan",
        "views": "Mga Tanawon",
        "toolbox": "Mga gamiton:",
+       "tool-link-userrights": "Ribayan {{GENDER:$1|paragamit}} an grupo",
+       "tool-link-userrights-readonly": "Hilingon {{GENDER:$1|paragamit}} an grupo",
+       "tool-link-emailuser": "E-surat kaining {{GENDER:$1|paragamit}}",
        "imagepage": "Tànawon an pahina nin sagunson (file)",
        "mediawikipage": "Tànawon an pahina kan mensahe",
        "templatepage": "Tànawon an pahina kan panguyog",
        "viewhelppage": "Tànawon an pahina nin pagtabang",
-       "categorypage": "Tànawon an pahina nin kategorya",
+       "categorypage": "Tànawon an pahina nin kategoriya",
        "viewtalkpage": "Tànawon an urulay",
        "otherlanguages": "Sa ibang mga lengguwahe",
        "redirectedfrom": "(Pinagbalikwat gikan sa $1)",
        "pool-timeout": "Timeout naghahalat para makapanugpon",
        "pool-queuefull": "An grupong panproseso panoon",
        "pool-errorunknown": "Bakong bistadong sala",
+       "poolcounter-usage-error": "Sala sa paggamit: $1",
        "aboutsite": "Dapít sa {{SITENAME}}",
        "aboutpage": "Project:Mapanonongod",
        "copyright": "An kalamnan manunumpungan sa laog kan $1 o baya notado na ining laen.",
        "disclaimers": "Mga Pangindahan",
        "disclaimerpage": "Project:Pangkagabsán na pangindahan",
        "edithelp": "Pantabang sa pagliliwat",
+       "helppage-top-gethelp": "Katabangan",
        "mainpage": "Panginot na Pahina",
        "mainpage-description": "Panginot na Pahina",
        "policy-url": "Project:Kalakawan",
        "hidetoc": "tagoon",
        "collapsible-collapse": "Pahalipoton",
        "collapsible-expand": "Pahiwason",
+       "confirmable-confirm": "Sigurado {{GENDER:$1|ka}} na?",
        "confirmable-yes": "Iyo",
        "confirmable-no": "Dae",
        "thisisdeleted": "Hilingon o isulit an $1?",
        "filerenameerror": "Dai natàwan nin bàgong ngaran an file na \"$1\" sa \"$2\".",
        "filedeleteerror": "Dai naparà an file na \"$1\".",
        "directorycreateerror": "Dai nagibo an direktorya na \"$1\".",
+       "directoryreadonlyerror": "Ang directory \"$1\" pambasa lang.",
+       "directorynotreadableerror": "Ang directory \"$1\" dae nababasa.",
        "filenotfound": "Dai nahanap an file na \"$1\".",
        "unexpected": "Dai pighuhunà na balór: \"$1\"=\"$2\".",
        "formerror": "Salâ: Dae maisusumiter an porma.",
        "badarticleerror": "Ining aksyon dae magigibo sa pahinang ini.",
        "cannotdelete": "An pahina o an sagunson (file) na \"$1\" dae tabi napupura.\nIni puwede nang napura kan iba.",
        "cannotdelete-title": "Dae mapura an pahina na \"$1\"",
+       "delete-scheduled": "Ang pahina \"$1\" nakatakda nang puraon.\nMagin mapagpasensiya.",
        "delete-hook-aborted": "An pagpura pinundo kan pangawit.\nIni dae nagtao nin kapaliwanagan.",
        "no-null-revision": "Dae makakamukna nin baguhong bunyaw na rebisyon para sa pahina \"$1\"",
        "badtitle": "Raot na titulo",
        "cascadeprotected": "Ining pahina pinagprotehiran gikan sa pagliliwat nin huli ta kabaling pinagbalyo sa minasunod na {{PLURAL:$1|pahina, na iyo ngani an|mga pahina, na iyo ngani an mga}} protektado na igwa nin \"pasurunod\" na opsyong pinagbuksan:\n$2",
        "namespaceprotected": "Ika mayong permiso sa pagliwat nin mga pahina sa <strong>$1</strong> na ngarang-espasyo.",
        "customcssprotected": "Ika mayong permiso sa pagliwat kaining pahinang CSS, nin huli ta ini naglalaman kan personal na panuytoy (settings) kan ibang paragamit.",
+       "customjsonprotected": "Ika mayong permiso sa pagliwat kaining pahinang JSON, nin huli ta ini naglalaman kan personal na panuytoy (settings) kan ibang paragamit.",
        "customjsprotected": "Ika mayong permiso sa pagliwat kaining pahinang JavaScript, nin huli ta ini naglalaman kan personal na panuytoy (settings) kan ibang paragamit.",
+       "sitecssprotected": "Ika mayong permiso sa pagliwat kaining pahinang CSS, nin huli ta ini pwedeng makaapekto sa ibang bisita.",
+       "sitejsonprotected": "Ika mayong permiso sa pagliwat kaining pahinang JSON, nin huli ta ini pwedeng makaapekto sa ibang bisita.",
+       "sitejsprotected": "Ika mayong permiso sa pagliwat kaining pahinang JavaScript, nin huli ta ini pwedeng makaapekto sa ibang bisita.",
        "mycustomcssprotected": "Ika mayo nin permiso sa pagliwat kaining CSS na pahina.",
+       "mycustomjsonprotected": "Ika mayo nin permiso sa pagliwat kaining JSON na pahina.",
        "mycustomjsprotected": "Ika mayo nin permiso sa pagliwat kaining JavaScript na pahina.",
        "myprivateinfoprotected": "Ika daeng permiso na magliliwat kan pribado mong impormasyon.",
        "mypreferencesprotected": "Ika daeng permiso na magliliwat kan saimong mga kamuyahan.",
        "ns-specialprotected": "Mga espesyal na pahina dae makakapagliwat.",
        "titleprotected": "Ining titulo pinagprotektaran poon pagkamukna ni [[User:$1|$1]].\nAn rason na pinagtao iyo na <em>$2</em>.",
        "filereadonlyerror": "Dae kinayang baguhon an sagunson (file) \"$1$ nin huli ta an repositoryo kan sagunson \"$2\" yaon sa kamugtakan na basahon sana.\n\nAn administrador na iyo an nagkandado kaini nagpahayag kaining kapaliwanagan: \"$3\".",
+       "invalidtitle": "Salang titulo.",
        "invalidtitle-knownnamespace": "Imbalidong titulo na igwang espasyadong ngaran na \"$2\" asin teksto na \"$3\"",
        "invalidtitle-unknownnamespace": "Imbalidong titulo na igwang nin bakong bistado na bilang kan espasyadong ngaran na $1 asin teksto na \"$2\"",
        "exception-nologin": "Dai ka nakapaglaog",
        "virus-scanfailed": "An paghingipid (scan) nagpalya (Koda $1)",
        "virus-unknownscanner": "bakong bistadong antivirus:",
        "logouttext": "'''Ika ngunyan nakaluwas na.'''\n\nTandai tabi na an nagkapirang mga pahina puwedeng maipagpapadagos na ipagpapahiling siring sa ika baga yaon sa laog pa, sagkod na maiklarado an saimong pankilyaw na kaaganan.",
+       "logging-out-notify": "Ika ipigluluwas na, maghalat tabi.",
+       "logout-failed": "Dae pa makaluwas ngunyan: $1",
+       "cannotlogoutnow-title": "Dae pa makaluwas ngunyan",
+       "cannotlogoutnow-text": "Dai posible an paglaog kun magamit nin $1.",
        "welcomeuser": "Marhayong pag-abot, $1!",
        "welcomecreation-msg": "An saimong panindog pinagmukna na.\nDae malingaw na liwaton an saimong [[Special:Preferences|{{SITENAME}} mga kamuyahan]].",
        "yourname": "Pangaran kan paragamit:",
        "createacct-yourpasswordagain-ph": "Pakikaag otro an sekretong panlaog",
        "userlogin-remembermypassword": "Dagos mo akong giromdomon na nakalaog",
        "userlogin-signwithsecure": "Gamiton an seguradong koneksyon",
+       "cannotlogin-title": "Dai makalaog",
+       "cannotlogin-text": "Dai posible an paglaog.",
+       "cannotloginnow-title": "Dae pa makalaog ngunyan",
+       "cannotloginnow-text": "Dai posible an paglaog kun magamit nin $1.",
+       "cannotcreateaccount-title": "Dai makagibo nin account",
+       "cannotcreateaccount-text": "An direktang pagkmukna nin panindog dai pinapagana sa wiki na ini.",
        "yourdomainname": "An saimong kasakupan:",
        "password-change-forbidden": "Ika dae makapagliwat nin sekretong panlaog sa wiking ini.",
        "externaldberror": "Igwa gayod sala sa arinman kan patunay sa datos-sarayan o ika dae pinagtugutan na bâgohon an saimong panluwas na panindog.",
        "login": "Maglaog",
+       "login-security": "Patunayan an saimong pagkakabisto",
        "nav-login-createaccount": "Maglaog / magmukna nin panindog",
        "logout": "Magluwas",
        "userlogout": "Magluwas",
        "userlogin-resetpassword-link": "Nalingawan mo an saimong pasa-taramon?",
        "userlogin-helplink2": "Katabangan sa paglalaog",
        "userlogin-loggedin": "Ika nakalaog na tabi bilang si {{GENDER:$1|$1}}.\nGamita an porma sa ibaba sa paglaog bilang ibang paragamit.",
+       "userlogin-reauth": "Kaipuhan maglaog ulit para mapatunayan na ika {{GENDER:$1|$1}}.",
        "userlogin-createanother": "Magmukna nin ibang panindog",
        "createacct-emailrequired": "Estada kan e-surat",
        "createacct-emailoptional": "E-surat na estada (opsyonal)",
        "createacct-reason": "Rason",
        "createacct-reason-ph": "Tadaw ta ika magmumukna nin ibang panindog",
        "createacct-submit": "Muknaon an saimong panindog",
-       "createacct-another-submit": "Magmukna nin ibang panindog",
+       "createacct-another-submit": "Magmukna nin panindog",
+       "createacct-continue-submit": "Magpadagos sa paggibo nin panlaog",
+       "createacct-another-continue-submit": "Magpadagos sa paggibo nin panlaog",
        "createacct-benefit-heading": "{{SITENAME}} pinaghimo kan mga tawong siring mo.",
        "createacct-benefit-body1": "{{PLURAL:$1|niliwat|mga niliwat}}",
        "createacct-benefit-body2": "{{PLURAL:$1|pahina|mga pahina}}",
        "createacct-benefit-body3": "pinakahuring {{PLURAL:$1|paraambag|mga paraambag}}",
        "badretype": "An mga sekretong panlaog mong pinagtatak bakong pareho.",
+       "usernameinprogress": "An pagmukna kaning palaog kan paragamit nagpuon na. Maghalat tabi.",
        "userexists": "Paragamit na ngarang piglaog may naggagamit na.\nPakipili nin ibang ngaran tabi.",
        "loginerror": "An paglaog napasalâ",
        "createacct-error": "Kasalaan sa pagmumukna nin panindog",
        "nocookieslogin": "{{SITENAME}} naggagamit nin mga cookies para sa maglaog na mga paragamit.\nIka igwang mga cookies na dae pinagana.\nTabi paganaha sinda asin otroha giraray.",
        "nocookiesfornew": "An panindog kan paragamit dae pinagmukna, nin huli ta dae nyamo kumpirmado an pinaggikanan kaini.\nPakipaseguro na saimong pinagana an cookies, ikarga giraray ining pahina asin probaran mo otro.",
        "noname": "Ika dae tabi nakapagkaag nin sarong balidong pangaran nin paragamit.",
-       "loginsuccesstitle": "Matrayumpo an saimong paglaog",
+       "loginsuccesstitle": "Nakapaglaog na",
        "loginsuccess": "'''Ika ngunyan nakalaog na sa {{SITENAME}} bilang si \"$1\".'''",
        "nosuchuser": "Dae pang paragamit na ginagamit an pangaran na \"$1\".\nAn mga ngaran nin paragamit sensitibo gayo sa tipahan.\nPakireparo kan saimong espeling, o [[Special:CreateAccount|Magmukna nin bagong panindog]].",
        "nosuchusershort": "Mayo po tabing paragamit na an pangaran \"$1\".\nPaki-tsek an saimong espeling.",
        "eauthentsent": "Sarong pankumpirmasyon na e-surat an ipinadara sa isinambit na estada nin e-surat.\nBago an ibang e-surat ipinapadara sa panindog, ika igwang susunudon na mga instruksyon na yaon sa e-surat, tanganing kumpirmaron na an panindog tunay talagang saimo.",
        "throttled-mailpassword": "Sarong e-surat sa pagliliwat kan sekretong panlaog an ipinadara na, sa laog nin {{PLURAL:$1|hour|$1 hours}}.\nTangarig malikayan an abuso, saro sanang e-surat sa pagliliwat kan sekretong panlaog an ipinapadara sa lambang {{PLURAL:$1|hour|$1 hours}}.",
        "mailerror": "Salâ an pagpadará kan koreo: $1",
-       "acct_creation_throttle_hit": "Mga bisita kaining wiki na ginagamit an saimong IP address nagmukna nin {{PLURAL:$1|1 panindog|$1 mga panindog}} sa nakaaging aldaw, na iyo ngani an maximum na pinagtutugot sa laog kan peryodong panahon.\nBilang resulta, an mga bisita na naggagamit kaining IP address dae nguna makakamukna nin mga panindog.",
+       "acct_creation_throttle_hit": "Mga bisita kaining wiki na ginagamit an saimong IP address nagmukna nin {{PLURAL:$1|1 panindog|$1 mga panindog}} sa nakaaging aldaw $2, na iyo ngani an maximum na pinagtutugot sa laog kan peryodong panahon.\nBilang resulta, an mga bisita na naggagamit kaining IP address dae nguna makakamukna nin mga panindog.",
        "emailauthenticated": "An saimong e-surat na estada pinagkumpirma kan $2 mga alas $3.",
        "emailnotauthenticated": "An saimong e-surat na estada dae pa tabi pinagkumpirma.\nMayo tabing e-surat na ipagpapadara para sa arinman kan mga minasunod na mga estima.",
        "noemailprefs": "Magkaag nin sarong e-koreong address sa saimong mga kabotan para gumana ining mga estima.",
        "createacct-another-realname-tip": "An totoong pangaran opsyonal.\nKun gustuhon mong itao ini, ini paggagamiton sa pagtatao nin pagkakabistohan kan paragamit para sa saindang mga kaggibohan.",
        "pt-login": "Maglaog",
        "pt-login-button": "Maglaog",
+       "pt-login-continue-button": "Magpadagos sa paglaog",
        "pt-createaccount": "Magmukna nin panindog",
        "pt-userlogout": "Magluwas",
        "php-mail-error-unknown": "Bakong bantog na kasalaan sa PHP mail() function.",
        "retypenew": "Itaták giraray an bàgong panlaog:",
        "resetpass_submit": "Ipwesto an sekretong panlaog dangan maglaog",
        "changepassword-success": "An saimong pasa-taramon matrayumpong pinagliwat na!",
+       "changepassword-throttled": "Nakapaghimo ka na nin grabe kadakol na pagprubar na maglaog sa dae pa sana nahahaloy. Tabi man pakihalat nin $1 bago ka magprubar giraray.",
+       "botpasswords": "Mga sekretong panlaog kan bot",
+       "botpasswords-disabled": "An mga Bot paswords pinugulan.",
+       "botpasswords-existing": "Mga sekretong panlaog kan bot",
+       "botpasswords-createnew": "Magibo nin bagong sekretong panlaog kan bot",
+       "botpasswords-editexisting": "Baguhon an dati nang sekretong panlaog kan bot",
+       "botpasswords-label-needsreset": "(an sekretong panlaog kaipuhan baguhon)",
+       "botpasswords-label-appid": "Ngaran kan bot:",
+       "botpasswords-label-create": "Muknaon",
+       "botpasswords-label-update": "Panumpay",
+       "botpasswords-label-cancel": "Kanselaron",
+       "botpasswords-label-delete": "Puraon",
+       "botpasswords-label-resetpassword": "Pakibago kan sekretong panlaog",
+       "botpasswords-label-grants-column": "Tinugutan",
+       "botpasswords-bad-appid": "An ngaran kan bot \"$1\" dae tugma.",
+       "botpasswords-created-title": "Gibo na an sekretong panlaog kan bot",
+       "botpasswords-deleted-title": "An sekretong panlaog kan bot pinura na",
+       "botpasswords-no-provider": "Dai available an BotPasswordsSessionProvider.",
        "resetpass_forbidden": "An mga sekretong panlaog dae puwedeng maribayan",
+       "resetpass_forbidden-reason": "An mga sekretong panlaog dae puwedeng maribayan: $1",
        "resetpass-no-info": "Ika dapat nakalaog na tanganing direktang makagamit kaining pahina.",
        "resetpass-submit-loggedin": "Ribayan an sekretong panlaog",
        "resetpass-submit-cancel": "I-kansela",
        "resetpass-abort-generic": "Pagliwat kan sikretong panlaog ipinagpauntok kan sarong ekstensyon.",
        "resetpass-expired": "An saimong pasa-taramon nagpalso na. Tabi man pakikaag nin sarong baguhong pasa-taramon tanganing makalaog ka.",
        "resetpass-expired-soft": "An saimong pasa-taramon nagpalso na, asin kinakaipuhan na baguhon. Tabi man pakipili nin sarong baguhong pasa-taramon ngunyan, o i-klik an \"{{int:authprovider-resetpass-skip-label}}\" kun baguhon sa aro-atyan.",
+       "resetpass-validity": "An saimong pasa-taramon nagpalso na. $1\n\nTabi man pakikaag nin sarong baguhong pasa-taramon tanganing makalaog ka.",
+       "resetpass-validity-soft": "An saimong pasa-taramon nagpalso na, asin kinakaipuhan na baguhon. $1\nTabi man pakipili nin sarong baguhong pasa-taramon ngunyan, o i-klik an \"{{int:authprovider-resetpass-skip-label}}\" kun baguhon sa aro-atyan.",
        "passwordreset": "Pakibago kan sekretong panlaog",
        "passwordreset-text-one": "Kumpletuhon ining porma sa pagliwat otro kan saimong pasa-taramon.",
        "passwordreset-text-many": "{{PLURAL:$1|Kaagi an saro sa mga kaaganan tanganing makaresibe nin sarong temporaryong pasa-taramon sa paagi kan e-surat.}}",
        "passwordreset-emailtext-user": "Paragamit $1 sa {{SITENAME}} naghahagad nin sarong pagiromdom kan detalye nin saimong panindog para sa {{SITENAME}}\n($4). An minasunod na paragamit {{PLURAL:$3|panindog iyo an|mga panindog iyo an}} na asosyado kaining e-koreong address:\n\n$2\n\n\n{{PLURAL:$3|Ining temporaryong sekretong panlaog|Ining mga temporaryong panlaog}} mapapaso sa {{PLURAL:$5|sarong aldaw|$5 mga aldaw}}.\nIka dapat na maglaog asin magpili nin sarong bagong sekretong panlaog ngunyan. Kun ibang tawo an naghimo kaining kahagadan, o kun saimo nang nagiromdoman an saimong orihinal na sekretong panlaog, asin habo mo nang ribayan ini, ipasapara mo na sana an mensaheng ini asin ipadagos mo nang gamiton an saimong lumang sekretong panlaog.",
        "passwordreset-emailelement": "Paragamit-ngaran: \n$1\n\nTemporaryong sekretong panlaog: \n$2",
        "passwordreset-emailsentemail": "Sarong e-surat sa pagliliwat kan sekretong panlaog an ipinadara na.",
+       "passwordreset-emailsentusername": "Sarong e-surat sa pagliliwat kan sekretong panlaog an ipinadara na.",
+       "passwordreset-nosuchcaller": "Mayo nin taga-apod:$1",
+       "passwordreset-invalidemail": "Dae pwede an e-surat",
        "changeemail": "Ribayan an e-koreong address",
        "changeemail-header": "Ribayan an panindog na e-koreong address",
        "changeemail-no-info": "Ika dapat nakalaog na tanganing direktang makagamit kaining pahina.",
        "sig_tip": "An saimong pirma na igwang tatak-oras",
        "hr_tip": "Pabalagbag na linya (gamiton paminsan-minsan)",
        "summary": "Sumaryo:",
-       "subject": "Subheto/kapamayuhan:",
+       "subject": "Tema",
        "minoredit": "Ini sarong dikiton na pagliwat",
        "watchthis": "Bantayan ining pahina",
        "savearticle": "Itagáma an pahina",
+       "savechanges": "Itagama an mga kaliwatan",
+       "publishpage": "I-publikar an pahina",
+       "publishchanges": "I-publikar an mga pagbabago",
+       "savearticle-start": "Itagama an pahina",
+       "savechanges-start": "Itagama an mga kaliwatan",
+       "publishpage-start": "I-publikar an pahina...",
+       "publishchanges-start": "I-publikar an mga pagbabago...",
        "preview": "Tànawón",
        "showpreview": "Ipahiling an patanaw",
        "showdiff": "Ipahiling an mga kaliwatan",
        "anoneditwarning": "<strong>Patanid:</strong> Ika dae nakalaog. An saimong estada kan IP mahihiling kan publiko kun ika makahimo nin arinman na mga pagliliwat. Kun ika <strong>[$1 naglaog]</strong> o <strong>[$2 magmukna nin panindog]</strong>, an saimong mga pagliliwat ipagpapanungod sa saimong ngaran-paragamit, kaiba an iba pang mga benepisyo.",
        "anonpreviewwarning": "Dae ka tabi nakalaog. An pagtatagama matala kan saimong IP address sa historya nin pagliwat sa pahinang ini.",
        "missingsummary": "<strong>Pagiromdom:</strong>Ika dae pa nakapagtao nin sumaryo sa pagliwat. Kun i-klik mo an \"$1\" giraray, an saimong pagliwat ipagtatagama na mayo kaiyan.",
-       "missingcommenttext": "Pakikaag nin sarong komento sa ibaba.",
+       "missingcommenttext": "Magkaag nin komento sa ibaba.",
        "missingcommentheader": "'''Pagiromdom:''' Ika dae tabi nagtao nin sarong panultol (subject)/Pamayong linya (headline) para kaining sinambit mo.\nKun saimong pinduton an \"$1\" giraray, an saimong pigliwat matatagama na mayo kaiyan.",
-       "summary-preview": "Paenot na patanaw nin sumaryo:",
-       "subject-preview": "Paenot na patanaw sa Subheto/kapamayuhan:",
+       "summary-preview": "Paenot na patanawkang sumaryo kan pagliwat:",
+       "subject-preview": "Paenot na patanaw sa tema:",
        "blockedtitle": "An paragamit pinagbagat",
        "blockedtext": "'''An saimong paragamit na ngaran o IP address pinagkubkob.'''\n\nAn pagkubkob hinimo ni $1.\nAn rason na ipinagtao iyo an  ''$2''.\n\n* Pagpoon kan pagkubkob: $8\n* Pagpasó kan pagkubkob: $6\n* Katuyuhan kan parakubkob: $7\n\nIka puwedeng magkontak sa $1 or ibang [[{{MediaWiki:Grouppage-sysop}}|administrador]] tanganing pag-orolayan an pagkubkob.\nIka dae makakagamit kan 'e-koreo kaining paragamit' na panuytuyan laen lang na may sarong balidong e-koreo address na ipinahayag sa saimong [[Special:Preferences|panindog na mga kabotan]] asin ika dae pinagkubkob para sa paggamit kaini.\nAn saimong presenteng IP address iyo $3, asin an kubkob ID iyo #$5.\nPakibale na lang tabi an gabos na mga detalye sa itaas sa anuman na mga kahaputan na saimong himoon.",
        "autoblockedtext": "An saimong IP address awtomatikong pinagkubkob nin huli ta ini pinaggamit kan ibang paragamit, na pinagkubkob ni $1.\nAn rason na ipinagtao iyo na:\n\n:''$2''\n\n* Pagpoon kan pagkubkob: $8\n* Pagpasó kan pagkubkob: $6\n* Katuyuhan kan parakubkob: $7\n\nPuwede mong kontakon si $1 o saro sa [[{{MediaWiki:Grouppage-sysop}}|mga administrador]] tanganing pag-orolayan an kubkob.\n\nPatanid tabi dae mo puwedeng gamiton an \"e-koreo kaining paragamit\" estima laen lang kun ika igwa nin sarong balidong e-koreo address na rehistrado sa saimong [[Special:Preferences|paragamit na mga kabotan]] asin ika dae pinagkubkob para sa paggamit kaini.\n\nAn saimong presenteng IP address iyo an $3, asin and Kubkob ID iyo an #$5.\nPakibale tabi an gabos na mga detalye sa itaas sa arinman na mga kahaputan na saimong himoon.",
        "userjspreview": "'''Giromdomon tabi na pigtetest/pighihiling mo sana an patanaw kan saimong JavaScript nin paragamit, dai pa ini naitagama!'''",
        "sitecsspreview": "'''Giromdoma baya na ika nagtatanaw pa sana kaining CSS.'''\n'''Ini dae pa tabi naitatagama!'''",
        "sitejspreview": "'''Giromdoma baya na ika nagtatatanaw pa sana kaining koda sa JavaScript.'''\n'''Ini dae pa tabi naitatagama!'''",
-       "userinvalidconfigtitle": "'''Patanid:''' Mayong ''skin'' na \"$1\". Giromdomon tabî na an .css asin .js na mga páhina naggagamit nin titulong nakasurat sa sadit na letras, halimbawa {{ns:user}}:Foo/vector.css bakong {{ns:user}}:Foo/Vector.css.",
+       "userinvalidconfigtitle": "'''Patanid:''' Mayong ''skin'' na \"$1\". Giromdomon tabî na an .css, .json, asin .js na mga páhina naggagamit nin titulong nakasurat sa sadit na letras, halimbawa {{ns:user}}:Foo/vector.css bakong {{ns:user}}:Foo/Vector.css.",
        "updated": "(Pinagsugpunan na)",
        "note": "'''Paisi:'''",
        "previewnote": "'''Giromdoma na ini sarong patanaw pa sana.'''\nAn saimong mga pinagriliwat dae pa tabi naitatagama!",
        "continue-editing": "Magduman sa lugar nin pagliliwat",
        "previewconflict": "Mahihilíng sa patànaw na ini an tekstong nasa itaas na lugar nin paghirá arog sa maipapahiling kun ini an itatagama mo.",
-       "session_fail_preview": "'''Despensa! Dai mi naipadagos an paghirá mo huli sa pagkawara nin datos kan sesyon.\nProbaran tabì giraray. Kun dai man giraray magibo, probaran na magluwas dangan maglaog giraray.'''",
-       "session_fail_preview_html": "'''Sori po! Dae tabi nyamo maiproseso an saimong pagliwat nin huli sa kawaraan kan datos sa sesyon.'''\n\n''Nin huli ta {{SITENAME}} igwa nin bakong pang naprosesong HTML pinagpagana, an patanaw ipinagtago bilang pag-ingat kontra sa atake kan JavaScript.''\n\n'''Kun ini sarong lehitimong pagprubar nin pagliwat, paki-otro tabi giraray.'''\nKun ini dae man giraray guminana, magprubar na [[Special:UserLogout|magluwas]] asin maglaog giraray.",
+       "session_fail_preview": "'''Despensa! Dai mi naipadagos an paghirá mo huli sa pagkawara nin datos kan sesyon.\nProbaran tabì giraray. Kun dai man giraray magibo, probaran [[Special:UserLogout|na magluwas]] dangan maglaog giraray.'''",
+       "session_fail_preview_html": "'''Sori po! Dae tabi nyamo maiproseso an saimong pagliwat nin huli sa kawaraan kan datos sa sesyon.'''\n\n<em>Nin huli ta {{SITENAME}} igwa nin bakong pang naprosesong HTML pinagpagana, an patanaw ipinagtago bilang pag-ingat kontra sa atake kan JavaScript.<em>\n\n'''Kun ini sarong lehitimong pagprubar nin pagliwat, paki-otro tabi giraray.'''\nKun ini dae man giraray guminana, magprubar na [[Special:UserLogout|magluwas]] asin maglaog giraray, asin siguraduhon na ang browser nag-aako nin cookies sa site na ini.",
        "token_suffix_mismatch": "'''Dai pigtogotan an paghirá mo ta sinabrit kan client mo an punctuation characters.\nDai pigtogotan ining paghirá tangarig maibitaran na maraot an teksto kan pahina.\nNanyayari nanggad ini kun naggagamit ka nin bakong maraháy asin dai bistong web-based proxy service.'''",
        "edit_form_incomplete": "'''An ibang mga parte kan porma nin pagliwat dae nakaabot sa serbidor; paki-dobleng mansay na an saimong mga pinagliwat bilog na yaon pa asin paki-otro giraray.'''",
        "editing": "Pigliliwat an $1",
        "readonlywarning": "'''Patanid tabi: An datos-sarayan nakakandado para sa maintenance, kaya ika dae makakapagtagama kan saimong mga pinagriliwat sa ngunyan.'''\nIka mapuwedeng makakopya asin idukot an saimong teksto pasiring sa sarong sagunson kan teksto asin itagama ini sa bandang huri.\n\nAn administrador na iyo an nagkandado kaini naghayag kaining kapaliwanagan: $1",
        "protectedpagewarning": "'''Patanid tabi: Ining pahina pinagprotektaran tanganing an mga paragamit sana na igwang pribilihiyo bilang administrador an makakapagliwat kaini.'''\nAn pinakahuring entrada sa talaan pinaghaya sa ibaba bilang reperensiya:",
        "semiprotectedpagewarning": "'''Note:''' Ining pahina pinagprotektaran na tanganing an mga rehistradong mga paragamit sana an mapuwedeng makapagliwat kaini.\nAn pinakahuring entrada sa talaan pinaghaya sa ibaba bilang reperensiya:",
-       "cascadeprotectedwarning": "<strong>Patanid:</strong> Ining pahina pinagprotehiran na tanganing an mga paragamit na igwa nin pan-administrador na mga pribilihiyo an makakaliwat kaini nin huli ta ini kabaling pinagbalyo sa minasunod na protektadong pasurunod na {{PLURAL:$1|pahina|mga pahina}}:",
+       "cascadeprotectedwarning": "<strong>Patanid:</strong> Ining pahina pinagprotehiran na tanganing an mga paragamit na igwa nin pan-administrador na mga [[Special:ListGroupRights|pribilihiyo]] an makakaliwat kaini nin huli ta ini kabaling pinagbalyo sa minasunod na protektadong pasurunod na {{PLURAL:$1|pahina|mga pahina}}:",
        "titleprotectedwarning": "'''Patanid tabi: Ining pahina pinagprotektaran na tanganing [[Special:ListGroupRights|espesipikong karapatan]] minakaipo tanganing magmukna kaini.'''\nAn pinakahuring entrada sa talaan pinaghaya sa ibaba bilang reperensiya:",
        "templatesused": "{{PLURAL:$1|Template|Mga Panguyog}} na pinaggamit kaining pahina:",
        "templatesusedpreview": "{{PLURAL:$1|Template|Mga Panguyog}} na pinaggamit kaining patanaw:",
        "postedit-confirmation-created": "An pahina nakamukna na.",
        "postedit-confirmation-restored": "An pahina naibalik na otro.",
        "postedit-confirmation-saved": "An saimong niliwat ipinagtagama na.",
+       "postedit-confirmation-published": "An saimong pagliwai nai-publikar na.",
        "edit-already-exists": "Dai maggibo an bàgong pahina.\nIgwa na kaini.",
        "defaultmessagetext": "Tugmadong mensahe sa teksto",
        "content-failed-to-parse": "Nagpalya sa paglunhay an $2 na laman para sa $1 na modelo: $3",
        "invalid-content-data": "Imbalidong datos nin laman",
-       "content-not-allowed-here": "\"$1\" na laman dae pinagtutugutan sa pahina [[:$2]]",
+       "content-not-allowed-here": "\"$1\" na laman dae pinagtutugutan sa pahina [[:$2]] sa \"$3\"",
        "editwarning-warning": "Sa pagbaya kaining pahina magkakausa saimo na mawara an anuman na mga kaliwatan na saimong pinaghimo. Kun ika nakapaglaog na, ika puwedeng makapagpauntok kaining patanid sa \"{{int:prefs-editing}}\" na seksyon kan saimong mga kamuyahan.",
+       "editpage-invalidcontentmodel-title": "Kalamnan nin pormat bakong suportado",
+       "editpage-invalidcontentmodel-text": "An modelo kan laog \"$1\" dai suportado.",
        "editpage-notsupportedcontentformat-title": "Kalamnan nin pormat bakong suportado",
        "editpage-notsupportedcontentformat-text": "An pormat nin kalamnan na $1 bakong suportado kan modelong kalamnan na $2.",
+       "slot-name-main": "Kapamayuhanan",
        "content-model-wikitext": "wiki-teksto",
        "content-model-text": "yanong-teksto",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
+       "content-json-empty-object": "Halion an bagay",
+       "content-json-empty-array": "Halion an array",
        "duplicate-args-warning": "<strong>Patanid:</strong> [[:$1]] nag-aapod [[:$2]] na igwa nin sobra sa sarong halaga para sa \"$3\" na parametro. An pinakahuring halaga sanang ipinagtao an magagamit.",
        "expensive-parserfunction-warning": "'''Patanid tabi:''' Ining pahina naglalaman nin grabe kadakulon na ekspensibong programang pambaranga sa punksyon nin mga pag-aapod.\n\nIni dapat magkaigwa nin menos sanang $2 {{PLURAL:$2|apod|mga apod}}, igwa na {{PLURAL:$1|ngunyan nin $1 apod|ngunyan nin $1 mga apod}}.",
        "expensive-parserfunction-category": "Mga pahina na igwa nin grabe kadakulon na mga ekspensibong programang pambaranga sa punksyon nin mga pag-aapod",
        "revdelete-no-file": "An sagunson na pinaghayag dae tabi eksistido.",
        "revdelete-show-file-confirm": "Segurado ka tabi na gusto mo matanaw sarong pinagpurang pagbabago kan sagunson \"<nowiki>$1</nowiki>\" poon $2 sa $3?",
        "revdelete-show-file-submit": "Iyo tabi",
+       "revdelete-selected-text": "{{PLURAL:$1|Selected revision|Mga napiling rebisyon}} kan [[:$2]]:",
        "logdelete-selected": "{{PLURAL:$1|Selected log event|Mga piniling talaan kan mga pangyayari}}:",
        "revdelete-confirm": "Pakikumpirma tabi na ika tuyong gumibo kaini, na saimong naintindihan an mga konsekuwensiya, asin ta ika pinaghihimo ini na uyon sa [[{{MediaWiki:Policy-url}}|an palisiya]].",
        "revdelete-suppress-text": "An paglulubog dapat '''sana''' magagamit para sa minasunod na mga kaso:\n*Potensiyal na libeloso an impormasyon\n*Bakong angay an personal na impormasyon\n*:''mga estada nin ini-erokan asin mga numero kan telepono, nasyunal na numero nin kabistohan, asin iba pa.''",
        "mergehistory-empty": "Mayong mga pagbabago na puwedeng mapagtiripon.",
        "mergehistory-done": "$3 {{PLURAL:$3|pagbabago|mga pagbabago}} sa $1 matrayumpong napagtiripon na magin [[:$2]].",
        "mergehistory-fail": "Dae tabi makayanan na makapaghimo nin historiyang pagtiripon, tabi pakihiling giraray an pahina asin parametro kan oras.",
+       "mergehistory-fail-bad-timestamp": "Imbalido an timestamp.",
+       "mergehistory-fail-invalid-source": "Imbalido an ginikanang pahina.",
+       "mergehistory-fail-invalid-dest": "Imbalido an papadumanan na pahina.",
+       "mergehistory-fail-self-merge": "Gikanan asin destinasyong mga pahina dae puwedeng magkapareho.",
        "mergehistory-no-source": "Gikanang pahina $1 bakong eksistido.",
        "mergehistory-no-destination": "Destinasyong pahina $1 bakong eksistido.",
        "mergehistory-invalid-source": "Gikanang pahina kaipuhan magin saro na balidong titulo.",
        "diff-multi-manyusers": "({{PLURAL:$1|Sarong intermediate na pagbabago|$1 mga intermediate na mga pagbabago}} na sobra sa $2 {{PLURAL:$2|paragamit|mga paragamit}} dae pinaghahayag)",
        "difference-missing-revision": "{{PLURAL:$2|sarong rebisyon|$2 mga rebisyon}} kaining diperensiya ($1) {{PLURAL:$2|na iyo an|kaidto na iyo an}} dae nanagboan.\n\nIni pirmihan na pinagkakausa sa paagi nin pagsusunod nin luwas sa petsang diff na kasugponan pasiring sa sarong pahina na pinagpura na.\nAn mga detalye mapuwedeng matatagboan sa [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} talaan kan pinagpuraan].",
        "searchresults": "Resulta kan paghahánap",
+       "search-filter-title-prefix-reset": "Maghanap sa gabos na pahina",
        "searchresults-title": "Resulta kan paghahanap para sa \"$1\"",
        "titlematches": "Angay an título kan artíkulo",
        "textmatches": "Angay an teksto nin páhina",
        "notextmatches": "Mayong ángay na teksto nin páhina",
        "prevn": "an nakaagi{{PLURAL:$1|$1}}",
        "nextn": "an masunód{{PLURAL:$1|$1}}",
+       "prev-page": "← nakaaging pahina",
+       "next-page": "sunod na pahina →",
        "prevn-title": "Dati $1 {{PLURAL:$1|resulta|mga resulta}}",
        "nextn-title": "Sunod $1  {{PLURAL:$1|resulta|mga resulta}}",
        "shown-title": "Ipahiling $1  {{PLURAL:$1|resulta|mga resulta}} sa kada pahina",
        "search-result-category-size": "{{PLURAL:$1|1 miyembro|$1 mga miyembro}} ({{PLURAL:$2|1 subkategorya|$2 mga subkategorya}}, {{PLURAL:$3|1 sagunson|$3 mga sagunson}})",
        "search-redirect": "(panukdong hali sa $1)",
        "search-section": "(Seksyon $1)",
+       "search-category": "(kategorya $1)",
        "search-file-match": "(minatugma sa nilalaog kan saguson)",
        "search-suggest": "Boot mong ipakahulugan: $1",
+       "search-rewritten": "Nagpahiling nin resulta para sa $1. Naghanap nin bako sa $2.",
        "search-interwiki-caption": "Tugang na mga proyekto",
        "search-interwiki-default": "$1 na mga resulta:",
        "search-interwiki-more": "(dakol pa)",
+       "search-interwiki-more-results": "Dakul pang resulta",
        "search-relatedarticle": "Kauyon",
        "searchrelated": "kauyon",
        "searchall": "gabós",
        "powersearch-togglelabel": "Pamili:",
        "powersearch-toggleall": "Gabos",
        "powersearch-togglenone": "Wara",
+       "powersearch-remember": "Girumdumon an pinili para sa mga susunod na paghanap",
        "search-external": "Panluwas na paghahanap",
        "searchdisabled": "Pigpopogolan mûna an paghanap sa {{SITENAME}}. Mientras tanto, pwede ka man maghanap sa Google. Giromdomon tabî na an mga indise kan laog ninda sa {{SITENAME}} pwede ser na lumâ na.",
        "search-error": "May salang nangyari habang naghahanap:$1",
+       "search-warning": "May salang nangyari habang naghahanap: $1",
        "preferences": "Mga kabòtan",
        "mypreferences": "Mga Kamuyahan ko",
        "prefs-edits": "Bilang kan mga hirá:",
-       "prefsnologintext2": "Tabi man $1 tanganing maikaag an mga kamuyahan nin paragamit.",
+       "prefsnologintext2": "Tabi man maglaog tanganing maikaag an mga kamuyahan nin paragamit.",
        "prefs-skin": "''Skin''",
        "skin-preview": "Tânawon",
        "datedefault": "Mayong kabôtan",
        "prefs-personal": "Pambisto nin parágamit",
        "prefs-rc": "Mga kaaagi pa sanang pagribay",
        "prefs-watchlist": "Pigbabantayan",
+       "prefs-editwatchlist": "Hirahón an pigbabantayan",
+       "prefs-editwatchlist-label": "Baguhon an mga entry sa saimong bantay-listahan:",
+       "prefs-editwatchlist-edit": "Hilingon asin magtanggal nin mga titulo sa saimong bantay-listahan",
+       "prefs-editwatchlist-raw": "Liwaton an hilaw na bantay-listahan",
+       "prefs-editwatchlist-clear": "Linigon an bantay-listahan",
        "prefs-watchlist-days": "Mga aldaw na ipahiling sa batay-listahan:",
        "prefs-watchlist-days-max": "Maksimum $1 {{PLURAL:$1|aldaw|mga aldaw}}",
        "prefs-watchlist-edits": "Máximong número nin pagbabâgo na ipapahiling sa pinadakulang lista nin pigbabantayan:",
        "prefs-watchlist-token": "Token sa Bantay-listahan:",
        "prefs-misc": "Lain",
        "prefs-resetpass": "Liwaton an sekretong panlaog",
-       "prefs-changeemail": "Liwaton an e-surat na adres",
+       "prefs-changeemail": "Ribayan an e-koreong address",
        "prefs-setemail": "Tuytuyon an e-surat na adres",
        "prefs-email": "E-surat na mga pagpipilian",
        "prefs-rendering": "Hitsurahon",
        "restoreprefs": "Balikon an gabos na panugmad na mga panuytoy (sa gabos na mga seksyon)",
        "prefs-editing": "Pighihira",
        "searchresultshead": "Hanápon",
-       "stub-threshold": "Kasagkoran kan <a href=\"#\" class=\"stub\">takod kan tambô</a> pigpopormato:",
+       "stub-threshold": "Kasagkoran kan <a href=\"#\" class=\"stub\">takod kan tambô</a> pigpopormato ($1):",
+       "stub-threshold-sample-link": "ehemplo",
        "stub-threshold-disabled": "Pinagpundo",
        "recentchangesdays": "Mga aldáw na ipapahilíng sa mga nakakaági pa sanáng pagbabàgó:",
        "recentchangesdays-max": "Maksimum $1 {{PLURAL:$1|aldaw|mga aldaw}}",
-       "recentchangescount": "Numero kan mga pagliliwat na ipapahiling na pirmihan:",
-       "prefs-help-recentchangescount": "Kabali kaini an dae pa nahaloy na mga kaliwatan, mga historiyang pahina, asin mga talaan.",
+       "recentchangescount": "Numero kan mga pagliliwat na ipapahiling sa pinakabago, historia kan pahina, paglaog:",
+       "prefs-help-recentchangescount": "Maksimum na numero: 1000",
        "prefs-help-watchlist-token2": "Ini an sikretong susi sa bahugan kan web sa saimong bantay-listahan.\nAn siisay man na makaaram kaini makakapagbasa kan saimong bantay-listahan, kaya dae mo ipagheras ini.\n[[Special:ResetTokens|I-klik digde kun kaipo mong baguhon it]].",
        "savedprefs": "Itinagama na an mga kabôtan mo.",
        "timezonelegend": "Pan-oras na sona:",
        "timezoneregion-indian": "Indiyang Kadagatan",
        "timezoneregion-pacific": "Pasipikong Kadagatan",
        "allowemail": "Togotan an mga ''e''-surat halî sa ibang mga parágamit",
+       "email-blacklist-label": "Pagbawalan an mga paragamit na ini na suratan ako:",
        "prefs-searchoptions": "Hanapa",
        "prefs-namespaces": "Pangarang mga espasyo",
        "default": "pwestong normal",
        "prefs-files": "Mga dokumento",
        "prefs-custom-css": "Kustombreng CSS",
+       "prefs-custom-json": "Custom JSON",
        "prefs-custom-js": "Kustombreng JavaScript",
-       "prefs-common-config": "Pinagheras na CSS/JavaScript para sa gabos na mga kalapatan:",
+       "prefs-common-config": "Pinagheras na CSS/JSON/JavaScript para sa gabos na mga kalapatan:",
        "prefs-reset-intro": "Ika makakagamit kaining pahina tanganing ilapat giraray an saimong mga kabotan sa panugmad kan sayt.\nIni dae tabi matitingkog.",
        "prefs-emailconfirm-label": "Kumpirmasyon sa E-koreo",
        "youremail": "E-surat:",
        "username": "{{GENDER:$1|Pangaran nin paragamit}}:",
        "prefs-memberingroups": "{{GENDER:$2|Miyembro}} kan {{PLURAL:$1|grupo|mga grupo}}:",
+       "group-membership-link-with-expiry": "$1 (hanggan $2)",
        "prefs-registration": "Rehistrasyong oras:",
        "yourrealname": "Totoong pangaran:",
        "yourlanguage": "Tataramon:",
        "gender-female": "Siya nagliliwat nin mga pahina sa wiki",
        "prefs-help-gender": "An panuytoy kaining kamuyahan opsyonal.\nAn panuklob minagamit kan saiyang kahalagahan sa pagpanungod saimo asin sa pagsambit saimo sa iba pa na naggagamit nin maninigong gramatikal na kabolosan.\nIning impormasyon isasapubliko.",
        "email": "E-koreo",
-       "prefs-help-realname": "Opsyonal an totoong pangaran asin kun itatao mo ini, gagamiton ini yangarig an mga sinurat mo maatribuir saimo.",
+       "prefs-help-realname": "Opsyonal an totoong pangaran asin kun itatao mo ini, gagamiton ini tangarig an mga sinurat mo maatribuir saimo.",
        "prefs-help-email": "An e-surat na adres sarong opsyonal, alagad ini kinakaipohan para sa pagtuytoy otro kan sekretong panlaog, kun ika malingaw kan saimong sekretong panlaog.",
        "prefs-help-email-others": "Ika kan man pumili na magtugot sa iba na makontak ka sa e-surat sa paagi nin sarong kasugponan na yaon sa saimong pahina nin paragamit o olay.\nAn saimong e-surat na adres dae ipagbuyagyag kunsoarin na an ibang paragamit makontak saimo.",
        "prefs-help-email-required": "Kaipuhan an e-koreo.",
        "prefs-dateformat": "Pampetsang pormat",
        "prefs-timeoffset": "Pan-oras na tapal",
        "prefs-advancedediting": "Pankagabsan na mga Pagpipilian",
+       "prefs-developertools": "Mga kagamitan nin Paragibo",
        "prefs-editor": "Paraliwat",
        "prefs-preview": "Patânaw",
        "prefs-advancedrc": "Pangenot na mga pagpipilian",
        "prefs-advancedwatchlist": "Abantidong mga pagpipilian",
        "prefs-displayrc": "Ihayag an mga pagpipilian",
        "prefs-displaywatchlist": "Ipahiling ang mga pagpipilian",
+       "prefs-changesrc": "Ipinahiling an mga pagbabago",
+       "prefs-changeswatchlist": "Ipinahiling an mga pagbabago",
+       "prefs-pageswatchlist": "Mga binabantayan na mga pahina",
        "prefs-tokenwatchlist": "Paduos",
        "prefs-diffs": "Diffs",
        "prefs-help-prefershttps": "Ining kamuyahan magkaka-epekto sa masunod mong paglaog.",
        "prefs-tabs-navigation-hint": "Pantama: Ika makakagamit nin wala asin too na pansusing pana tanganing magnabigar sa tahaw kan mga tanda na yaon sa listahan nin mga panandaan.",
-       "userrights": "Pagmaneho kan mga derecho nin paragamit",
-       "userrights-lookup-user": "Magmaného kan mga grupo nin parágamit",
+       "userrights": "Karapatan kan paragamit",
+       "userrights-lookup-user": "Magpili nin parágamit",
        "userrights-user-editname": "Ilaog an pangaran kan parágamit:",
-       "editusergroup": "Hirahón an mga Grupo kan Parágamit",
+       "editusergroup": "Ipahiling an mga Grupo kan Parágamit",
        "editinguser": "Sinasanglian an mga karapatan kan paragamit na si {{GENDER:$1|paragamit}} <strong>[[User:$1|$1]]</strong> $2",
-       "userrights-editusergroup": "Hirahón an mga grupo kan parágamit",
-       "saveusergroups": "Itagama an mga Grupo nin Páragamit",
+       "userrights-editusergroup": "Hirahón an mga {{GENDER:$1|grupo kan parágamit}}",
+       "userrights-viewusergroup": "Hilingon {{GENDER:$1|paragamit}} an grupo",
+       "saveusergroups": "Itagama an {{GENDER:$1|mga Grupo nin Páragamit}}",
        "userrights-groupsmember": "Myembro kan:",
        "userrights-groupsmember-auto": "Implisitong miyembro kan:",
        "userrights-groups-help": "Ika puwedeng magbago kan mga grupo na kinabalihan kaining paragamit:\n*An natsekan na kahon minapasabot na an paragamit kabali sa grupong yan.\n*An mayong tsek na kahon minapasabot na an paragamit bakong kabali sa grupong yan.\n* A * minapahiwatig na ika dae puwedeng makapaghale kan grupo kun naidagdag mo na ini, or vice versa.",
        "userrights-nodatabase": "An datos-sarayan $1 bakong eksistido o bakong lokal.",
        "userrights-changeable-col": "Mga grupo na mapuwede mong baguhon",
        "userrights-unchangeable-col": "Mga grupo na dae mo mapuwedeng baguhon",
+       "userrights-expiry-current": "Mapalso sa $1",
+       "userrights-expiry-none": "Dai napapalso",
+       "userrights-expiry": "Mápasó:",
+       "userrights-expiry-existing": "Eksistidong oras nin pagpalso: $3, $2",
+       "userrights-expiry-othertime": "Ibang oras:",
+       "userrights-expiry-options": "1 aldaw:1 aldaw, 1 semana:1 semana, 1 bulan:1 bulan, 3 bulan:3 bulan, 6 bulan:6 bulan, 1 taon:1 taon",
        "userrights-conflict": "Kumplikto sa mga kaliwatan nin mga katanosan kan paragamit! Tabi man pakirikisa asin kumpirmaron an saimong mga kaliwatan.",
        "group": "Grupo:",
        "group-user": "Mga Paragamit",
        "group-autoconfirmed-member": "{{GENDER:$1|auto-kumpirmadong paragamit}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|administrador}}",
+       "group-interface-admin-member": "{{GENDER:$1|administrador kan interface}}",
        "group-bureaucrat-member": "{{GENDER:$1|burokrata}}",
        "group-suppress-member": "{{GENDER:$1|tagapagmato}}",
        "grouppage-user": "{{ns:project}}:Mga Paragamit",
        "grouppage-autoconfirmed": "{{ns:project}}:Mga enseguidang nakonpirmar na parágamit",
        "grouppage-bot": "{{ns:project}}:Mga bot",
        "grouppage-sysop": "{{ns:project}}:Mga tagamató",
+       "grouppage-interface-admin": "{{ns:project}}:Mga administrador kan interface",
        "grouppage-bureaucrat": "{{ns:project}}:Mga bureaucrat",
        "grouppage-suppress": "{{ns:project}}:Tagapagmato",
        "right-read": "Magbasa kan mga pahina",
        "right-move": "Ibalyo an mga pahina",
        "right-move-subpages": "Ibalyo an mga pahina kaiba an saindang mga sub-pahina",
        "right-move-rootuserpages": "Ibalyo an ugat nin mga pahina kan paragamit",
+       "right-move-categorypages": "Ilipat an mga pahina kan kategorya",
        "right-movefile": "Ibalyo an mga sagunson",
        "right-suppressredirect": "Dae tabi magmukna nin paotrong direksyon gikan sa ginikanang mga pahina kunsoarin magbabalyo nin mga pahina",
        "right-upload": "Ipagkarga an mga sagunson (file)",
        "right-browsearchive": "Hanapon an pinagpurang mga pahina",
        "right-undelete": "Dae puraon an pahina",
        "right-suppressrevision": "Hilngon otro asin balikon an mga pagbabagong itinago gikan sa mga administrador",
+       "right-viewsuppressed": "Hilingon an mga rebisyon na nakatago sa iba pang mga paragamit",
        "right-suppressionlog": "Tanawon an pribadong mga talaan",
        "right-block": "Kubkubon an ibang mga paragamit sa pagliliwat",
        "right-blockemail": "Kubkubon an paragamit na makapagpadara nin e-koreo",
        "right-protect": "Baguhon an mga kad-at nin proteksyon asin liwaton an mga pahina nin protektadong surunsunan",
        "right-editprotected": "Liwaton an mga pahina na protektado bilang \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Liwaton an mga pahina na protektado bilang \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "liwaton an modelong laog kan pahina",
        "right-editinterface": "Liwaton an paragamit na olay-panlaog",
        "right-editusercss": "Liwaton an CSS na mga sagunson kan ibang mga paragamit",
        "right-edituserjson": "Liwaton an JSON na mga sagunson kan ibang mga paragamit",
        "right-edituserjs": "Liwaton an JavaScript na mga sagunson kan ibang mga paragamit",
+       "right-editsitecss": "Liwaton an buong CSS",
+       "right-editsitejson": "Liwaton an buong JSON",
+       "right-editsitejs": "Liwaton an buong JavaScript",
        "right-editmyusercss": "Liwaton an saimong sadireng paragamit na sagunson sa CSS",
        "right-editmyuserjson": "Liwaton an saimong sadireng paragamit na sagunson sa JSON",
        "right-editmyuserjs": "Liwaton an saimong sadireng paragamit na sagunson sa JavaScript",
        "right-siteadmin": "Kandaduhan asin dae pagkandaduhan an datos-sarayan",
        "right-override-export-depth": "Eksportaron an mga pahina kabali na an pinagkilyawan na mga pahina sagkod sa rarom na 5",
        "right-sendemail": "Magpadara nin e-koreo sa ibang mga paragamit",
-       "grant-editmycssjs": "Liwaton an saimong paragamit CSS/JavaScript",
-       "grant-editmyoptions": "Liwaton an saimong paragamit na mga kamuyahan",
+       "right-managechangetags": "Maggibo asin maghali [[Special:Tags|tags]]",
+       "grant-group-page-interaction": "Interaksyon sa mga pahina",
+       "grant-group-file-interaction": "Interaksyon sa mga medya",
+       "grant-group-watchlist-interaction": "Interaksyon sa saimong bantay-listahan",
+       "grant-group-email": "Ipadara an e-surat",
+       "grant-group-private-information": "Hilingon an mga pribadong data manungod saimo",
+       "grant-group-other": "Iba pang aktibidad",
+       "grant-blockusers": "Bagaton asin maghali nin pagkabagat kan mga paragamit",
+       "grant-createaccount": "Magmukna nin panindog",
+       "grant-createeditmovepage": "Maggibo, magliwat asin maglipat nin pahina",
+       "grant-delete": "Puraon an mga pahina, mga rebisyon asin entry kan log",
+       "grant-editmycssjs": "Liwaton an saimong paragamit CSS/JSON/JavaScript",
+       "grant-editmyoptions": "Liwaton an saimong paragamit na mga kamuyahan asin configurayson kan JSON",
+       "grant-editmywatchlist": "Liwaton an saimong bantay-listahan",
+       "grant-editpage": "Liwaton an mga yaun nang pahina",
+       "grant-editprotected": "Liwaton an mga napoprotektaran na pahina",
+       "grant-privateinfo": "Hilingon an mga pribadong impormasyon",
+       "grant-protect": "Magprotekta asin magtanggal nin proteksyon sa mga pahina",
+       "grant-sendemail": "Magpadara nin e-koreo sa ibang mga paragamit",
+       "grant-uploadeditmovefile": "Magkarga, magribay asin maglipat nin mga sagunson",
+       "grant-uploadfile": "Magkarga nin bagong mga sagunson",
        "grant-viewdeleted": "Tanawon an pinagpurang mga sagunson asin pahina",
+       "grant-viewmywatchlist": "Tanawon an saimong bantay-listahan",
        "newuserlogpage": "Paragamit na talaan nin pagmukna",
        "newuserlogpagetext": "Ini an talaan kan mga pagmukna nin paragamit.",
        "rightslog": "Usip nin derechos nin paragamit",
        "rightslogtext": "Ini an historial kan mga pagbabâgo sa mga derecho nin parágamit.",
        "action-read": "basaha ining pahina",
        "action-edit": "liwatón ining pahina",
-       "action-createpage": "magmukna nin mga pahina",
+       "action-createpage": "Muknaon ining pahina",
        "action-createtalk": "Magmukna nin mga pahina sa orolayan",
        "action-createaccount": "Muknaon ining panindog kan paragamit",
+       "action-history": "Hilingon an historiya kaining pahina",
        "action-minoredit": "marakahan ining pagliwat bilang menor",
        "action-move": "ibalyo ining pahina",
        "action-move-subpages": "ibalyo ining pahina, asin kaiba an mga sub-pahina",
        "action-move-rootuserpages": "ibalyo an ugat kan mga pahina nin mga paragamit",
+       "action-move-categorypages": "Ilipat an mga pahina kan kategorya",
        "action-movefile": "ibalyo ining sagunson",
        "action-upload": "ikarga ining mga sagunson",
        "action-reupload": "sampawan ining eksistidong sagunson",
        "action-writeapi": "gamita an panurat na API",
        "action-delete": "puraon ining pahina",
        "action-deleterevision": "puraon ining pagbabago",
+       "action-deletelogentry": "puraon an mga entry kan log",
        "action-deletedhistory": "tanawon an pinagpurang historiya kaining pahina",
+       "action-deletedtext": "hilingon an pinura na mga rebisyon",
        "action-browsearchive": "hanapon an pinagpurang mga pahina",
        "action-undelete": "dae pagpuraon ining pahina",
        "action-suppressrevision": "hilngon otro asin ibalik ining pinagtagong pagbabago",
        "action-userrights-interwiki": "liwaton an paragamit na mga karapatan kan mga paragamit nin ibang wikis",
        "action-siteadmin": "ikandado o dae ikandado an datos-sarayan",
        "action-sendemail": "magpadara nin mga e-koreo",
+       "action-editmyoptions": "liwaton an sadiri mong mga kamuyahan",
        "action-editmywatchlist": "liwaton an saimong bantay-listahan",
        "action-viewmywatchlist": "tanawon an saimong bantay-listahan",
        "action-viewmyprivateinfo": "tanawon an saimong pribadong impormasyon",
        "action-editmyprivateinfo": "liwaton an saimong pribadong impormasyon",
+       "action-editcontentmodel": "liwaton an modelong laog kan pahina",
+       "action-purge": "tanggalon an pahinang ini",
+       "action-apihighlimits": "maggamit nin harahalangkaw na sagkodan sa mga kahaputan kan API",
+       "action-autoconfirmed": "Dai magin apektado sa paagi kan rata na nakabase sa IP na mga sagkodan",
+       "action-bigdelete": "Puraon an mga pahina na igwang darakulang mga historiya",
+       "action-blockemail": "bagaton an paragamit na makapagpadara nin e-koreo",
+       "action-bot": "Pagtratuhon bilang awtomatikong proseso",
+       "action-editprotected": "Liwaton an mga pahina na protektado bilang \"{{int:protect-level-sysop}}\"",
+       "action-editsemiprotected": "Liwaton an mga pahina na protektado bilang \"{{int:protect-level-autoconfirmed}}\"",
+       "action-editinterface": "Liwaton an interface kan paragamit",
+       "action-editusercss": "Liwaton an CSS na mga sagunson kan ibang mga paragamit",
+       "action-edituserjson": "Liwaton an JSON na mga sagunson kan ibang mga paragamit",
+       "action-edituserjs": "Liwaton an JavaScript na mga sagunson kan ibang mga paragamit",
+       "action-editsitecss": "Liwaton an buong CSS",
+       "action-editsitejson": "Liwaton an buong JSON",
+       "action-editsitejs": "Liwaton an buong JavaScript",
+       "action-editmyusercss": "Liwaton an saimong sadireng paragamit na sagunson sa CSS",
+       "action-editmyuserjson": "Liwaton an saimong sadiring paragamit na sagunson sa JSON",
+       "action-editmyuserjs": "Liwaton an saimong sadiring paragamit na sagunson sa JavaScript",
+       "action-viewsuppressed": "Hilingon an mga rebisyon na nakatago dawa na isay na paragamit",
+       "action-hideuser": "Kubkubon an pangaran nin paragamit, itago ini sa publiko",
+       "action-ipblock-exempt": "Sampawan an pangubkob kan IP, awtomatikong-kubkob asin panhalawig na kubkob",
+       "action-unblockself": "Halion an bagat sa sadiri",
+       "action-noratelimit": "Dae magin apektado sa paagi kan rata nin mga sagkodan",
+       "action-reupload-own": "Patungan an eksistido nang mga pahina na ipinagkarga sa paagi mo",
+       "action-nominornewtalk": "Dae gayod nagkaigwa nin menor na pagliwat sa mga pahina nin orolayan minasulpang nin bunyaw kan bagong mga mensahe",
+       "action-markbotedits": "Markahan an pinagbalik na mga niliwat bilang bot na panliwat",
+       "action-patrolmarks": "Tanawon an pinakahuring mga pagbabago na markadong patrol",
+       "action-override-export-depth": "Eksportaron an mga pahina kabali na an pinagkilyawan na mga pahina sagkod sa rarom na 5",
+       "action-suppressredirect": "Dae tabi magmukna nin paotrong direksyon gikan sa ginikanang mga pahina kunsoarin magbabalyo nin mga pahina",
        "nchanges": "$1 {{PLURAL:$1|kaliwatan|mga kaliwatan}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|poon kaidtong huring bisita}}",
        "enhancedrc-history": "historiya",
        "recentchanges-legend-heading": "<strong>Kabalaynan:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (hilngon man [[Special:NewPages|listahan kan mga baguhong pahina]])",
        "recentchanges-legend-plusminus": "(''±saro-duwa-tolo'')",
+       "recentchanges-submit": "Ipahiling",
+       "rcfilters-tag-remove": "Halion '$1'",
+       "rcfilters-other-review-tools": "Ibang gamit sa pagsuri",
+       "rcfilters-group-results-by-page": "Grupong resulta ayon sa pahina",
+       "rcfilters-activefilters": "Mga aktibong pangsara",
+       "rcfilters-activefilters-hide": "Itago",
+       "rcfilters-activefilters-show": "Ipahiling",
+       "rcfilters-limit-title": "Mga resultang ipapahiling",
+       "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|kaliwatan|mga kaliwatan}}, $2",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|aldaw|mga aldaw}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|oras|mga oras}}",
+       "rcfilters-quickfilters": "Itagama an saraan",
+       "rcfilters-quickfilters-placeholder-title": "Mayo pang pangsara na nakatagama",
+       "rcfilters-savedqueries-defaultlabel": "Itagama an saraan",
+       "rcfilters-savedqueries-rename": "Pangaranan liwat",
+       "rcfilters-savedqueries-remove": "Puraon",
+       "rcfilters-savedqueries-new-name-label": "Pangaran",
+       "rcfilters-savedqueries-apply-label": "Magmukna nin pangsara",
+       "rcfilters-savedqueries-cancel-label": "Kanselaron",
+       "rcfilters-clear-all-filters": "Klaradohon an mga saraan",
+       "rcfilters-show-new-changes": "Hilingon an mga pagbabago poon $1",
+       "rcfilters-search-placeholder-mobile": "Mga saraan",
+       "rcfilters-invalid-filter": "Imbalidong pangsara",
+       "rcfilters-empty-filter": "Mayong aktibong pangsara. Gabos na kaarambagan ipinapahiling.",
+       "rcfilters-filterlist-title": "Mga pangsara",
+       "rcfilters-filterlist-whatsthis": "Pano ini naggagana?",
+       "rcfilters-highlightmenu-title": "Magpili nin kulay",
+       "rcfilters-filterlist-noresults": "Mayong pangsara na nahiling",
+       "rcfilters-filter-editsbyself-label": "Mga kaliwatan mo",
+       "rcfilters-filter-editsbyself-description": "An saimong mga kaarambagan",
+       "rcfilters-filter-editsbyother-label": "Mga kaliwatan nin iba",
+       "rcfilters-filter-editsbyother-description": "Gabos na kaliwatan pwera kan saimo.",
+       "rcfilters-filter-user-experience-level-registered-label": "Rehistrado",
+       "rcfilters-filter-user-experience-level-registered-description": "Nakalaog na mga paraliwat.",
+       "rcfilters-filter-user-experience-level-unregistered-label": "Dai rehistrado",
+       "rcfilters-filter-user-experience-level-unregistered-description": "Mga paraliwat na dai nakalaog.",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Baguhan na mga paragamit",
+       "rcfilters-filter-user-experience-level-learner-label": "Mga nag-aadal",
+       "rcfilters-filter-user-experience-level-experienced-label": "Mga eksperyensyadong paragamit",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-humans-label": "Tawo (bakong bot)",
+       "rcfilters-filter-humans-description": "Mga pagliwat na ginibo kan mga tawong paraliwat.",
+       "rcfilters-filtergroup-reviewstatus": "Estado kan pagsuri",
+       "rcfilters-filter-reviewstatus-unpatrolled-label": "Dai patrolado",
+       "rcfilters-filtergroup-significance": "Importansya",
+       "rcfilters-filter-minor-label": "Sadit na kaliwatan",
+       "rcfilters-filtergroup-watchlist": "Mga binabantayan na mga pahina",
+       "rcfilters-filter-watchlist-watched-label": "Nasa bantay-listahan",
+       "rcfilters-filter-watchlist-watchednew-label": "Pinakabagong liwat sa bantay-listahan",
+       "rcfilters-filter-watchlist-notwatched-label": "Mayo sa bantay-listahan",
+       "rcfilters-filtergroup-watchlistactivity": "Aktibidad kan bantay-listahan",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Dai nahiling na pagbabago",
+       "rcfilters-filter-watchlistactivity-seen-label": "Mga nahiling na pagbabago",
+       "rcfilters-filtergroup-changetype": "Klase kan pagbago",
+       "rcfilters-filter-pageedits-label": "Pagliwat sa pahina",
+       "rcfilters-filter-pageedits-description": "Mga pagliwat sa laog kan wiki, mga orolay asin deskripsiyon kan kategoriya...",
+       "rcfilters-filter-newpages-label": "Pagmukna kan pahina",
+       "rcfilters-filter-newpages-description": "Mga kaliwatan na nagibo nin bagong pahina",
+       "rcfilters-filter-categorization-label": "Pagbago sa kategorya",
+       "rcfilters-filter-categorization-description": "Mga rekord kan pahina na ipigdugang asin pighali sa mga kaetegoriya.",
+       "rcfilters-filter-logactions-label": "Mga pagluwas na aksyon",
+       "rcfilters-filtergroup-lastrevision": "Sa ngunyan na rebisyon",
+       "rcfilters-filter-lastrevision-label": "Sa ngunyan na rebisyon",
+       "rcfilters-filter-previousrevision-label": "Bako an pinakabagong rebisyon",
+       "rcfilters-filter-previousrevision-description": "Gabos na pagbabago na bakong \"pinakabagong rebisyon\".",
+       "rcfilters-filter-excluded": "Dai kasali",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:bako</strong> $1",
+       "rcfilters-exclude-button-off": "Dai isali an pinili",
+       "rcfilters-exclude-button-on": "Dai sinalisali an pinili",
+       "rcfilters-view-namespaces-tooltip": "Saraon an resulta uyon sa espasyong_ngaran",
+       "rcfilters-liveupdates-button": "Live updates",
+       "rcfilters-liveupdates-button-title-on": "Isara an live updates",
+       "rcfilters-liveupdates-button-title-off": "Ipahiling an mga pagbabago uyon sa pangyayari",
+       "rcfilters-watchlist-markseen-button": "Markahan an gaos na pagbabago bilang nahiling na",
+       "rcfilters-watchlist-edit-watchlist-button": "Liwaton an saimong listahan kan binabantayan na mga pahina",
+       "rcfilters-preference-label": "Maggamit nin bakong JavaScript interface",
+       "rcfilters-watchlist-preference-label": "Maggamit nin bakong JavaScript interface",
+       "rcfilters-filter-showlinkedfrom-option-label": "<strong>Mga pahinang nakasugpon sa</strong> napiling pahina",
+       "rcfilters-filter-showlinkedto-label": "Ipahiling an mga pagbabago sa pahina na nakasugpon sa",
+       "rcfilters-filter-showlinkedto-option-label": "<strong>Mga pahinang nakasugpon sa</strong> napiling pahina",
+       "rcfilters-target-page-placeholder": "Magkaan nin ngaran kan pahina (o kategoriya)",
        "rcnotefrom": "Sa ibaba {{PLURAL:$5|iyo an kaliwatan|an mga kaliwatan}} poon kan <strong>$3, $4</strong> (sagkod <strong>$1</strong> an pinapahiling).",
+       "rclistfromreset": "Liwaton an pagpili kan petsa",
        "rclistfrom": "Ipahiling an baguhon na mga kaliwatan magpoon kan $3 $2",
        "rcshowhideminor": "$1 saradit na mga pagliwat",
        "rcshowhideminor-show": "Ipatanaw",
        "rcshowhidemine": "$1 sakong mga pagliliwat",
        "rcshowhidemine-show": "Ipatanaw",
        "rcshowhidemine-hide": "Itago",
+       "rcshowhidecategorization": "$1 kategorisasyon kan pahina",
+       "rcshowhidecategorization-show": "Ipahiling",
+       "rcshowhidecategorization-hide": "Itago",
        "rclinks": "Ipahilíng an $1 huring mga kaliwatan sa laog nin huring $2 na mga aldaw",
        "diff": "kalaenan",
        "hist": "sagaysay",
        "recentchangeslinked-summary": "Maglaag nin ngaran nin pahina tanganing mahiling sa mga pahinang nakatakod digdi o gikan sa pahinang idto. (Tanganing mahiling an mga miyembro kan sarong kategorya,  ilaag an Kategorya:Ngaran kan kategorya). <strong>Tekstong mahibog</strong> an mga pagbago sa mga pahina na yaon sa [[Special:Watchlist|saimong bantay-listahan]].",
        "recentchangeslinked-page": "Pahinang ngaran:",
        "recentchangeslinked-to": "Ipahiling an mga pagbabago sa mga pahina na nakatakod sa pinagtaong pahina lugod",
+       "recentchanges-page-added-to-category": "[[:$1]] idinugang sa kategoriya",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] naidungang sa kategoriya, [[Special:WhatLinksHere/$1|an pahinang ini nasa laog kan ibang pahina]]",
+       "recentchanges-page-removed-from-category": "[[:$1]] hinali sa kategoriya",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] hinali sa kategoriya, [[Special:WhatLinksHere/$1|an pahinang ini nasa laog kan ibang pahina]]",
+       "autochange-username": "Awtomatikong binago kan MediaWiki",
        "upload": "Ikarga an sagunson",
        "uploadbtn": "Ikargá an file",
        "reuploaddesc": "Ikansela an pagkarga asin magbalik sa porma kan pagkakarga",
        "uploaderror": "Salâ an pagkarga",
        "upload-recreate-warning": "'''Patanid tabi: An sagunson sa pangaran kaini pinagpura o pinagbalyo na tabi.'''\n\nAn talaan kan pagkapura asin pagkabalyo para sa pahinang ini yaon digde para sa saimong konbenyensiya:",
        "uploadtext": "Gamita an porma sa ibaba tanganing makapagkarga nin mga sagunson.\nPara hilngon o hanapon an dati nang pinagkargang mga sagunson, magduman tabi sa [[Special:FileList|listahan kan pinagkargang mga sagunson]], mga pagkarga asin pagkarga otro pinagtala man sa [[Special:Log/upload|talaan nin pagkakarga]], mga pinagpura na yaon sa [[Special:Log/delete|talaan nin pagkapura]].\n\nSa pagbali nin sarong sagunson sa sarong pahina, gamita tabi an takod kan saro sa mga minasunod na mga porma:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' sa paggamit kan bilog na bersyon kan sagunson\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|alt text]]</nowiki></code>''' sa paggamit kan 200 pixel na lawig kan pagkakua sa sarong kahon na yaon sa parteng wala nin gaygayan na yaon an 'alt text' bilang deskripsyon\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' para sa direktang nakakatakod sa sagunson na dae pinagpapahiling na sarong sagunson",
-       "upload-permitted": "Pinagtutugutang mga tipo nin sagunson: $1",
-       "upload-preferred": "Pinagpapaurog na mga tipo nin sagunson: $1",
-       "upload-prohibited": "Pinagbabawal na mga tipo nin sagunson: $1.",
+       "upload-permitted": "Pinagtutugutang mga tipo nin sagunson {{PLURAL:$2|type|types}}: $1",
+       "upload-preferred": "Pinagpapaurog na mga tipo nin sagunson {{PLURAL:$2|type|types}}: $1",
+       "upload-prohibited": "Pinagbabawal na mga tipo nin sagunson {{PLURAL:$2|type|types}}: $1.",
        "uploadlogpage": "Ikarga an katalaanan",
        "uploadlogpagetext": "Yaon sa ibaba an sarong listahan kan dae pa sanang nahahaloy na pinagkargang mga sagunson.\nHilngon tabi an [[Special:NewFiles|galleriya kan mga bagong sagunson]] para sa mas biswal na lantawon.",
        "filename": "Pangaran kan dokumento",
        "largefileserver": "Mas dakula an ''file'' sa pigtotogotan na sokol kan ''server''.",
        "emptyfile": "Garo mayong laog an ''file'' na kinarga mo. Pwede ser na salâ ining tipo nin ''filename''. Isegurado tabî kun talagang boot mong ikarga ining ''file''.",
        "windows-nonascii-filename": "Ining wiki dae tabi nagsusuporta kan mga pangaran kan sagunson na igwang espesyal na mga karakter.",
-       "fileexists": "Igwa nang ''file'' na may parehong pangaran sa ini, sosogon tabî an <strong>[[:$1]]</strong> kun dai ka seguradong ribayan ini.\n[[$1|thumb]]",
+       "fileexists": "Igwa nang ''file'' na may parehong pangaran sa ini, sosogon tabî an <strong>[[:$1]]</strong> kun {{GENDER:|ika}} dai ka seguradong ribayan ini.\n[[$1|thumb]]",
        "filepageexists": "An pahinang pandeskripsyon kaining sagunson pinagmukna na tabi sa <strong>[[:$1]]</strong>, alagad mayong sagunson na igwa kaining pangaran sa ngunyan nag-eeksister.\nAn sumaryong na saimong ipinaglaog dae minaluwas sa pahina kan deskription.\nTanganing gibohon na an saimong sumaryo magluwas duman, kaipohan mong manwal na pagliliwat kaini.\n[[$1|thumb]]",
        "fileexists-extension": "May ''file'' na may parehong pangaran: [[$2|thumb]]\n* Pangaran kan pigkakargang ''file'': <strong>[[:$1]]</strong>\n* Pangaran kan yaon nang ''file'': <strong>[[:$2]]</strong>\nMagpili tabî nin ibang pangaran.",
        "fileexists-thumbnail-yes": "An ''file'' garo ladawan kan pinasadit ''(thumbnail)''. [[$1|thumb]]\nSosogon tabî an ''file'' <strong>[[:$1]]</strong>.\nKun an sinosog na ''file'' iyo an parehong ladawan na nasa dating sokol, dai na kaipuhan magkarga nin iba pang retratito.",
        "upload-too-many-redirects": "An kilyawan nagkaigwa nin kadakol na mga kaliwatan",
        "upload-http-error": "Sarong HTTP na kasalaan an nangyari: $1",
        "upload-copy-upload-invalid-domain": "Pangungupkop nin kopya bakong puwede gikan sa kinasakupan kaini.",
+       "upload-dialog-title": "Ikargá an file",
+       "upload-dialog-button-cancel": "Kanselaron",
+       "upload-dialog-button-back": "Buwelta",
+       "upload-dialog-button-done": "Nagibo na",
+       "upload-dialog-button-save": "Itagama",
+       "upload-dialog-button-upload": "Magkarga",
+       "upload-form-label-infoform-title": "Mga Detalye",
+       "upload-form-label-infoform-name": "Pangaran",
+       "upload-form-label-infoform-description": "Deskripsyon",
+       "upload-form-label-usage-title": "Paggamit",
+       "upload-form-label-usage-filename": "Ngaran kan file",
+       "upload-form-label-own-work": "Ini sakuyang gibo",
+       "upload-form-label-infoform-categories": "Mga Kategoriya",
+       "upload-form-label-infoform-date": "Petsa",
        "backend-fail-stream": "Dae maipakupsit an sagunson $1.",
        "backend-fail-backup": "Dae makapagtago nin saro pang kopya an sagunson $1.",
        "backend-fail-notexists": "An sagunson na $1 bakong eksistido.",
        "backend-fail-read": "Dae makakabasa nin sagunson $1.",
        "backend-fail-create": "Dae makakapagsurat nin sagunson $1.",
        "backend-fail-maxsize": "Dae makakapagsuat nin sagunson $1 nin huli ta ini grabe kadakula nin {{PLURAL:$2|sarong byte|$2 bytes}}.",
-       "backend-fail-readonly": "An sarayan na panampad \"$1\" yaon sa estado na basahon-sana. An rason na pinagtao iyo na: \"''$2''\"",
+       "backend-fail-readonly": "An sarayan na panampad \"$1\" yaon sa estado na basahon-sana. An rason na pinagtao iyo na: <em>$2</em>",
        "backend-fail-synced": "An sagunson \"$1\" yaon sa estado na bakong konsistido sa laog kan mga panampad na sarayan",
        "backend-fail-connect": "Dae nakakapagsugpon sa panampad na sarayan \"$1\".",
        "backend-fail-internal": "Sarong bakong bistadong kasalaan an nangyari sa panampad na sarayan \"$1\".",
        "uploadstash-summary": "An pahinang ini minatao nin agihan pasiring sa mga sagunson na ikinarga na (o baya yaon pa sa proseso nin pagkakarga) alagad dae pa naipublisa sa wiki. An mga sagunson na ini bakong hiling sa kiisay man kundi sa paragamit na nagkarga kan mga ini.",
        "uploadstash-clear": "Pinaglinigan na makantidad na mga sagunson",
        "uploadstash-nofiles": "Ika mayo nin mahalagang mga sagunson.",
-       "uploadstash-badtoken": "An paggibo kan aksyon na yan bakong matrayumpo, baka nin huli ta an saimong kredensiyal sa pagliliwat nagpaso na.",
+       "uploadstash-badtoken": "An paggibo kan aksyon na yan bakong matrayumpo, baka nin huli ta an saimong kredensiyal sa pagliliwat nagpaso na. Uliton giraray.",
        "uploadstash-errclear": "An paglilinig kan mga sagunson bakong matrayumpo.",
        "uploadstash-refresh": "Papreskoha otro an listahan kan mga sagunson",
+       "uploadstash-bad-path-unknown-type": "Dai bistong uri  \"$1\".",
+       "uploadstash-bad-path-bad-format": "Key \"$1\" mayo sa tamang porma.",
+       "uploadstash-file-not-found": "Key \"$1\" mayo sa stash.",
        "invalid-chunk-offset": "Imbalidong tagpas na pampahale",
        "img-auth-accessdenied": "Paggamit dae pinagtugot",
        "img-auth-nopathinfo": "Nawawara an PATH_INFO.\nAn saimong serbidor dae naipamugtak tanganing makapasa kaining impormasyon.\nIni mapuwedeng yaon nakabase sa CGI asin dae makakasuporta sa img_auth.\nHilnga an https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "http-timed-out": "HTTP na kahagadan naubos na an oras.",
        "http-curl-error": "An kasalaan nagsusungko sa kilyawan: $1",
        "http-bad-status": "Igwa nin sarong problema habang yaon sa HTTP na kahagadan: $1 $2",
+       "http-internal-error": "HTTP internal error.",
        "upload-curl-error6": "Dai naabot an URL",
        "upload-curl-error6-text": "Dai nabukas an URL na tinao.  Susugon tabi giraray na an  URL tama asin an sitio bakong raot.",
        "upload-curl-error28": "sobra na an pagkalawig kan pagkarga",
        "license-header": "Paglisensiya",
        "nolicense": "Mayong pigpilî",
        "license-nopreview": "(Mayong patânaw)",
-       "upload_source_url": " (sarong tama, na bukas sa publikong URL)",
-       "upload_source_file": " (sarong ''file'' sa kompyuter mo)",
+       "upload_source_url": "(an sagunson napili tama, asin bukas sa publikong URL)",
+       "upload_source_file": "(sarong ''file'' sa kompyuter mo)",
+       "listfiles-delete": "puraon",
        "listfiles-summary": "Ining espesyal na pahina minapahiling kan gabos na ipinagkargang mga sagunson.",
        "listfiles_search_for": "Hanápon an pangaran kan retrato:",
        "imgfile": "dokumento",
        "download": "ideskarga",
        "unwatchedpages": "Dai pigbabantayan na mga pahina",
        "listredirects": "Lista nin mga paglikay",
+       "listduplicatedfiles": "Listahan kan mga files na may kapareho",
        "unusedtemplates": "Mga templatong dai ginamit",
        "unusedtemplatestext": "Ining pahina minalista kan gabos na mga pahina sa {{ns:template}} ngarang-espasyo na bakong kabali sa ibang pahina.\nGiromdoma baya na mag-tsek para sa iba pang kasugpon sa mga templato bago mo pagpuraon sinda.",
        "unusedtemplateswlh": "ibang mga takod",
        "randomincategory": "Purakan na pahina sa kategoriya",
        "randomincategory-invalidcategory": "\"$1\" bako sarong balidong pangaran nin kategoriya.",
        "randomincategory-nopages": "Mayo nin mga pahina sa [[:Category:$1]].",
+       "randomincategory-category": "Kategoriya:",
        "randomincategory-legend": "Purakan na pahina sa kategoriya",
+       "randomincategory-submit": "Dumanán",
        "randomredirect": "Random na pagredirekta",
        "randomredirect-nopages": "Mayo nin panukdo-liwat sa espasyong-ngaran na \"$1\".",
        "statistics": "Mga Estadistiko",
        "statistics-files": "Pinagkargang mga sagunson",
        "statistics-edits": "Mga pagliwat sa pahina magpoon pa na an {{SITENAME}} pinagmukna.",
        "statistics-edits-average": "Katahaw kan mga pagliliwat sa kada pahina",
-       "statistics-users": "Rehistrado [[Special:ListUsers|users]]",
+       "statistics-users": "Rehistradong mga paragamit",
        "statistics-users-active": "Mga Aktibong Paragamit",
        "statistics-users-active-desc": "Mga paragamit na may ginibong aksyon sa nakaaging {{PLURAL:$1|aldaw|$1 mga aldaw}}",
        "pageswithprop": "Mga pahina na igwang pahina nin kagrugaring",
        "mostrevisions": "Mga artikulong may pinakadakol na pagpakarháy",
        "prefixindex": "Gabos na mga pahina na igwa nin enotang panigmit",
        "prefixindex-namespace": "Gabos na mga pahina na igwa nin enotang panigmit ($1 espasyong ngaran)",
-       "prefixindex-strip": "Waknison an pangenot na panigmit na yaon sa listahan",
+       "prefixindex-submit": "Ipahiling",
+       "prefixindex-strip": "Itago an panginot na panigmit na yaon sa listahan",
        "shortpages": "Haralìpot na pahina",
        "longpages": "Mga halabang pahina",
        "deadendpages": "Mga pahinang mayong luwasan",
        "deadendpagestext": "An mga minasunod na mga phina dae nakatakod sa ibang mga pahina sa {{SITENAME}}.",
        "protectedpages": "Mga protektadong pahina",
+       "protectedpages-filters": "Mga saraan:",
        "protectedpages-indef": "Daeng sagkod na proteksyon sana",
        "protectedpages-cascade": "Mga pasurunod na proteksyon sana",
+       "protectedpages-noredirect": "Itago an mga panukdong otro",
        "protectedpagesempty": "Mayong pang páhina an napoprotehiran kaining mga parametros.",
+       "protectedpages-timestamp": "Tatak-oras",
+       "protectedpages-page": "Pahina",
+       "protectedpages-expiry": "Mápasó",
+       "protectedpages-performer": "Nagpoprotektang paragamit",
+       "protectedpages-params": "Mga parametro nin proteksyon",
+       "protectedpages-reason": "Rason",
+       "protectedpages-submit": "Ipahiling an mga pahina",
+       "protectedpages-unknown-timestamp": "Dai aram",
+       "protectedpages-unknown-performer": "Dai bistong paragamit",
        "protectedtitles": "Protektadong mga titulo",
        "protectedtitlesempty": "Mayong mga titulo sa presente an protektado kaining mga parametro.",
+       "protectedtitles-submit": "Ipahiling an mga titulo",
        "listusers": "Lista nin paragamit",
        "listusers-editsonly": "Ipahiling sana an mga paragamit na igwang mga pinagliwat",
+       "listusers-temporarygroupsonly": "Ipahiling sana an paragamit na nasa temporaryong grupo kan mga paragamit",
        "listusers-creationsort": "Salansanon sa paagi kan petsa nin pagmukna",
        "listusers-desc": "Salansanon sa paibabang pasurunod",
        "usereditcount": "$1 {{PLURAL:$1|pigliwat|mga pigliwat}}",
        "usercreated": "{{GENDER:$3|Minukna}} kan $1 sa $2",
        "newpages": "Mga bàguhong pahina",
+       "newpages-submit": "Ipahiling",
        "newpages-username": "Pangaran kan parágamit:",
        "ancientpages": "Mga pinakalumang pahina",
        "move": "Balyuhon",
        "pager-older-n": "{{PLURAL:$1|luma na nin 1|luma na nin $1}}",
        "suppress": "Tagapagmansay",
        "querypage-disabled": "Ining espesyal na pahina pinagpundo nin huli sa kaggibohang mga rason.",
+       "apihelp": "Katabangan kan API",
+       "apihelp-no-such-module": "Module \"$1\" dai natagpuan.",
        "apisandbox": "Kahong-buhangin kan API",
+       "apisandbox-jsonly": "Kaipuhan an JavaScript para magamit an API sandbox.",
        "apisandbox-api-disabled": "An API dae pinagpagana sa sityong ini.",
-       "apisandbox-intro": "Gamitong ining pahina sa pag-eksperimento kan '''MediaWiki web service API'''.\nKonsultaron an  [https://www.mediawiki.org/wiki/API:Main_page the API documentation] para sa iba pang mga detalye sa paggamit kan API. Ehemplo: [https://www.mediawiki.org/wiki/API#A_simple_example kuahon an laman kan Pangenot na Pahina]. Magpili nin aksyon tanganing hilngon an mga kadagdagan na mga ehemplo.",
+       "apisandbox-intro": "Gamitong ining pahina sa pag-eksperimento kan '''MediaWiki web service API'''.\nKonsultaron an [[mw:API:Main page|the API documentation]] para sa iba pang mga detalye sa paggamit kan API. Ehemplo: [https://www.mediawiki.org/wiki/API#A_simple_example kuahon an laman kan Pangenot na Pahina]. Magpili nin aksyon tanganing hilngon an mga kadagdagan na mga ehemplo.",
        "apisandbox-submit": "Maghimo nin kahagadan",
        "apisandbox-reset": "Klaro",
+       "apisandbox-retry": "Uliton",
+       "apisandbox-loading": "Ikinakarga an impormasyon para sa API module \"$1\"...",
+       "apisandbox-no-parameters": "An API module mayo nin parametro.",
+       "apisandbox-helpurls": "Katabangan na sugpon",
        "apisandbox-examples": "Ehemplo",
+       "apisandbox-dynamic-parameters": "Mga dugang na parametro",
+       "apisandbox-dynamic-parameters-add-label": "Magdugang nin parametro:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Ngaran kan parametro",
+       "apisandbox-dynamic-error-exists": "An ngaran kan parametro \"$1\" eksistido na.",
+       "apisandbox-add-multi": "Magdugang",
        "apisandbox-results": "Resulta",
+       "apisandbox-sending-request": "Nagpapadara nin hagad na API...",
+       "apisandbox-loading-results": "Nakaresibe nin resultang API...",
        "apisandbox-request-url-label": "Hagad URL:",
-       "apisandbox-request-time": "Hagad oras:$1",
+       "apisandbox-request-json-label": "Maghagad nin JSON:",
+       "apisandbox-request-time": "Hagad oras: {{PLURAL:$1|$1 ms}}",
+       "apisandbox-continue": "Ipadagos",
+       "apisandbox-continue-clear": "Klaro",
+       "apisandbox-multivalue-all-namespaces": "$1 (Gabos na ngaran)",
        "booksources": "Mga Ginikanan kan libro",
        "booksources-search-legend": "Maghanap para sa mga ginikanang libro",
        "booksources-search": "Hanápon",
        "booksources-text": "Mahihiling sa babâ an lista kan mga takod sa ibang ''site'' na nagbenbenta nin mga bâgo asin nagamit nang libro, asin pwede ser na igwa pang mga ibang impormasyon manonongod sa mga librong pighahanap mo:",
        "booksources-invalid-isbn": "An pinagtaong ISBN dae minaluwas na balido; paki-tsek tabi nin mga sala sa pagkopya gikan sa orihinal na piggikanan.",
+       "magiclink-tracking-rfc": "Mga pahina na naggagamit nin RFC magic links",
+       "magiclink-tracking-rfc-desc": "An pahina na ini naggagamit nin RFC magic links. Hilingon [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] kun pano maglipat.",
+       "magiclink-tracking-pmid": "Mga pahina na naggagamit nin PMID magic links",
+       "magiclink-tracking-pmid-desc": "An pahina na ini naggagamit nin PMID magic links. Hilingon [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] on pano maglipat.",
+       "magiclink-tracking-isbn": "Mga pahina na naggagamit nin ISBN magic links",
+       "magiclink-tracking-isbn-desc": "An pahina na ini naggagamit nin ISBN magic links. Hilingon [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] kun pano maglipat.",
        "specialloguserlabel": "Paragibo:",
        "speciallogtitlelabel": "Target (titulo o {{ns:user}}:paragamit-na-ngaran para sa paragamit):",
        "log": "Mga katalaanan",
+       "logeventslist-submit": "Ipahiling",
+       "logeventslist-more-filters": "Ipahiling an mga dugang na log:",
+       "logeventslist-patrol-log": "Laóg kan Pigpapatrolya",
+       "logeventslist-tag-log": "Log kan tag",
        "all-logs-page": "Gabos na pampublikong mga talaan",
        "alllogstext": "Kumbinadong pagpapahiling kan gabos na yaong mga talaan sa {{SITENAME}}.\nSaimong mapasadit an patanaw sa paagi nin pagpipili nin sarong tipo nin talaan, an ngaran nin paragamit (sensitibo sa pindutan), o an apektadong pahina (sensitibo sa pindutan man).",
        "logempty": "Mayong angay na bagay sa historial.",
        "log-title-wildcard": "Hanapon an mga titulong napopoon sa tekstong ini",
        "showhideselectedlogentries": "Ipahiling/itago an pinagpiling mga entrada sa talaan",
+       "checkbox-select": "Magpili: $1",
+       "checkbox-all": "Gabos",
+       "checkbox-none": "Mayo",
+       "checkbox-invert": "Baliktaron",
        "allpages": "Gabos na mga pahina",
        "nextpage": "Sunod na pahina ($1)",
        "prevpage": "Nakaaging pahina ($1)",
        "cachedspecial-viewing-cached-ts": "Ika nakahiling sa sarong pinagsaray na bersyon kaining pahina, na mapuwedeng bakong aktuwal na kumpleto talaga.",
        "cachedspecial-refresh-now": "Hilngon an pinakahuri.",
        "categories": "Mga Kategoriya",
-       "categoriespagetext": "An minasunod {{PLURAL:$1|kategorya na may laog na|mga kategorya na may laog na}} mga pahina o midya.\n[[Special:UnusedCategories|Dae ginamit na mga kategorya]] dae ipinapahiling digde.\nAsin man hilnga an [[Special:WantedCategories|kinakaipong mga kategorya]].",
+       "categories-submit": "Ipahiling",
+       "categoriespagetext": "An minasunod {{PLURAL:$1|kategorya na may laog na|mga kategorya na may laog na}} mga pahina o midya.\nAsin hilnga an [[Special:WantedCategories|kinakaipong mga kategorya]].",
        "categoriesfrom": "Pahilnga an mga kategorya magpoon sa:",
        "deletedcontributions": "Parâon an mga kontribusyon kan parágamit",
        "deletedcontributions-title": "Parâon an mga kontribusyon kan parágamit",
        "activeusers-intro": "Iyo in an listahan kan mga paragamit na nagkaigwa nin mga ginibo sa laog kan nakaaging $1 {{PLURAL:$1|aldaw|mga aldaw}}.",
        "activeusers-count": "$1 {{PLURAL:$1|aksyon|mga aksyon}} sa nakaaging {{PLURAL:$3|aldaw|$3 mga aldaw}}",
        "activeusers-from": "Ipahiling an mga paragamit magpoon sa:",
+       "activeusers-groups": "Ipahiling an mga paragamit na nakaayon sa grupo:",
+       "activeusers-excludegroups": "Dai ipahiling an mga paragamit na nakaayon sa grupo:",
        "activeusers-noresult": "Mayong mga paragamit na nanagboan.",
+       "activeusers-submit": "Ipahiling an mga aktibong paragamit",
        "listgrouprights": "Mga karapatan kan grupo nin paragamit",
        "listgrouprights-summary": "An minasunod iyo an listahan kan mga grupo nin paragamit na pinaghunsay kaining wiki, kaiba an saindang asosyadong mga karapatan nin paggamit.\nPuwedeng magkakaigwa nin [[{{MediaWiki:Listgrouprights-helppage}}|kadagdagang impormasyon]] mapanungod sa indibidwal na mga karapatan.",
        "listgrouprights-key": "Balaynan:\n* <span class=\"listgrouprights-granted\">Pinaggawad na mga katanosan</span>\n* <span class=\"listgrouprights-revoked\">Pinagbawi na mga katanosan</span>",
        "listgrouprights-removegroup-self": "Halia {{PLURAL:$2|grupo|mga grupo}} gikan sa sadireng panindog: $1",
        "listgrouprights-addgroup-self-all": "Idagdag an gabos na mga grupo tanganing magkaigwa nin sadireng panindog",
        "listgrouprights-removegroup-self-all": "Halion an gabos na mga grupo gikan sa sadireng panindog",
+       "listgrouprights-namespaceprotection-namespace": "Espasyong-pangaran",
+       "listgrants": "Mga pagtugot",
+       "listgrants-grant": "Pagtugot",
+       "listgrants-rights": "Mga karapatan",
+       "trackingcategories": "Magkapararehong mga kategoriya",
+       "trackingcategories-disabled": "An kategoriya dai pinapagana",
        "mailnologin": "Mayong direksyón nin destino",
        "mailnologintext": "Kaipuhan ika si [[Special:UserLogin|nakalaog]]\nasin may marhay na ''e''-surat sa saimong [[Special:Preferences|Mga kabôtan]]\npara makapadara nin ''e''-surat sa ibang parágamit.",
        "emailuser": "E-suratan ining paragamit",
        "emailccsubject": "Kopya kan saimong mensahe sa $1: $2",
        "emailsent": "Naipadará na an e-surat",
        "emailsenttext": "Naipadará na su e-surat mo.",
-       "emailuserfooter": "Ining e-surat ipinadara sa paagi nin $1 pasiring ki $2 kan \"E-surat na paragamit\" na punksyon kan {{SITENAME}}.",
+       "emailuserfooter": "Ining e-surat {{GENDER:$1|ipinadara}} sa paagi nin $1 pasiring ki {{GENDER:$2|$2}} kan \"{{int:emailuser}}\"  na punksyon kan {{SITENAME}}. Kun {{GENDER:$2|ika}} magsimbag sa e-surat, {{GENDER:$2|ang saimong}} e-surat ipapadara sa {{GENDER:$1|orihinal na tagapagpadara}}, ipapahiling an {{GENDER:$2|saimong}} e-surat sa {{GENDER:$1|pinadarahan}}.",
        "usermessage-summary": "Magwawalat nin pansistemang mensahe.",
        "usermessage-editor": "Pansistemang mensahero",
        "watchlist": "Bantay-listahan",
        "watchlistanontext": "Pakipalaog tabi tanganing makapaghiling o makapagliwat sa mga aytem na yaon sa saimong bantay-listahan.",
        "watchnologin": "Mayô sa laog",
        "addwatch": "Idagdag sa bantay-listahan",
-       "addedwatchtext": "Ining pahina \"[[:$1]]\" dinadagdag sa saimong mga [[Special:Watchlist|Bantay-listahan]].\nAn maabot na mga pagbabâgo sa páhinang ini asin sa asosyadong páhina nin olay paglilistahon duman.",
+       "addedwatchtext": "Ining pahina \"[[:$1]]\" dinadagdag sa saimong mga [[Special:Watchlist|Bantay-listahan]].",
+       "addedwatchtext-talk": "Ining pahina \"[[:$1]]\" dinadagdag sa saimong mga [[Special:Watchlist|Bantay-listahan]].",
+       "addedwatchtext-short": "Ining pahina \"$1\" dinadagdag sa saimong mga bantay-listahan.",
        "removewatch": "Halion gikan sa bantay-listahan",
        "removedwatchtext": "An pahina \"[[:$1]]\" pinaghale gikan sa [[Special:Watchlist|saimong bantay-listahan]].",
+       "removedwatchtext-short": "An pahina \"$1\" hinali sa saimong bantay-listahan.",
        "watch": "Bantayán",
        "watchthispage": "Bantayan ining pahina",
        "unwatch": "Dai pagbantayan",
        "wlheader-showupdated": "Mga pahina na pinagriliwat poon kaidtong huri kang nagbisita sainda ipinapatanaw na '''mahîbog'''",
        "wlnote": "Sa ibaba kan {{PLURAL:$1|huring pagbabago|mga huring <strong>$1</strong> pagbabago}} sa nakalihis na {{PLURAL:$2|oras|'''$2''' mga oras}}, magpoon pa kan $3, $4.",
        "wlshowlast": "Ipahilíng an nakalihis na $1 na mga oras mga $2 na mga aldaw",
+       "watchlist-hide": "Itago",
+       "watchlist-submit": "Ipahiling",
+       "wlshowhideminor": "Sadit na kaliwatan",
+       "wlshowhidebots": "Mga bots",
+       "wlshowhideliu": "rehistradong mga paragamit",
+       "wlshowhideanons": "Mga dae bistong paragamit",
+       "wlshowhidepatr": "patrolyadong mga pagliwat",
+       "wlshowhidemine": "mga pagliwat",
+       "wlshowhidecategorization": "kategorisasyon kan pahina",
        "watchlist-options": "Bantay-listahan na mga pagpipilian",
        "watching": "Pigbabantayan...",
        "unwatching": "Dai pigbabantayan...",
        "enotif_lastdiff": "Hilingón an $1 tangarig mahiling an pagbâgong ini.",
        "enotif_anon_editor": "dai bistong parágamit $1",
        "enotif_body": "Namumutan na $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nSumaryo kan paraliwat: $PAGESUMMARY $PAGEMINOREDIT\n\nKontaka an paraliwat:\ne-surat: $PAGEEDITOR_EMAIL\nwiki: $PAGEEDITOR_WIKI\n\nDae na magkakaigwa pa nin ibang pagpapaisi sa kaso na may kadagdagan pang aktibidad laen lang kun ika magbisita sa pahinang ini mantang ika nakalaog. Ika mapuwede man na makapagbago kan bandera nin pagpapaisi para sa gabos mong pinagbabantayan na mga pahina na yaon sa saimong bantay-listahan.\n\nAn saimong mainamigong {{SITENAME}} sistema nin pagpapaisi\n\n--\nSa pagbabago kan saimong e-surat na pagpapaising panuytoy, magbisita sa {{canonicalurl:{{#special:Mga Kagustuhan}}}}\n\nSa pagbabago kan saimong bantay-listahang panuytoy, magbisita sa {{canonicalurl:{{#special:EditWatchlist}}}}\n\nSa pagpura ka pahina gikan sa saimong bantay-listahan, magbisita sa $UNWATCHURL\n\nBalik-simbag asin kadagdagang asistensiya:\n$HELPPAGE",
+       "enotif_minoredit": "Ini saro sanang menor na pagliwat",
        "created": "piggibo",
        "changed": "pigbâgo",
        "deletepage": "Paraon an pahina",
        "confirm": "Kompermaron",
        "excontent": "Ini an dating laog: '$1'",
-       "excontentauthor": "ini an dating laog: '$1' (asin an unikong kontribuidor si '[[Special:Contributions/$2|$2]]')",
+       "excontentauthor": "ini an dating laog: '$1' (asin an unikong kontribuidor si '[[Special:Contributions/$2|$2]]')([[User talk:$2|talk]])",
        "exbeforeblank": "Ini an dating laog bagô blinankohán: '$1'",
        "delete-confirm": "Puraon \"$1\"",
        "delete-legend": "Paraon",
        "historywarning": "<strong>Patanid:</strong> An pahina na saimong pagpupuraon may historiya na igwa nin $1 {{PLURAL:$1|rebisyon|mga rebisyon}}:",
+       "historyaction-submit": "Ipahiling an mga rebisyon",
        "confirmdeletetext": "Paparaon mo sa base nin datos ining pahina kasabay an gabos na mga uusipón kaini.\nKonpirmaron tabì na talagang boot mong gibohon ini, nasasabotan mo an mga resulta, asin an piggigibo mo ini konporme sa\n[[{{MediaWiki:Policy-url}}]].",
        "actioncomplete": "An aksyon nakumpleto na",
        "actionfailed": "An aksyon nagpalya",
        "dellogpage": "Talaan nin pagpura",
        "dellogpagetext": "Mahihiling sa babâ an lista kan mga pinakahuring pagparâ.",
        "deletionlog": "Historial nin pagparâ",
+       "log-name-create": "Log kan pagmukna nin pahina",
+       "log-description-create": "Mahihiling sa babâ an lista kan mga pinakahuring pagmukna nin pahina.",
+       "logentry-create-create": "$1 {{GENDER:$2|minukna an}} pahina $3",
        "reverted": "Ibinalik sa mas naenot na pagpakarhay",
        "deletecomment": "Rason:",
        "deleteotherreason": "Iba/dugang na rason:",
        "delete-edit-reasonlist": "Pagliwat kan mga rason nin pagpupura",
        "delete-toobig": "Ining pahina igwa nin dakulaong historiya sa pagliwat, minasobrang $1 {{PLURAL:$1|rebisyon|mga rebisyon}}.\nAn pagpupura kan nasambit na mga pahina dae pinagtutugot tanganing maiwasan an aksidenteng pagka-antala kan {{SITENAME}}.",
        "delete-warning-toobig": "Ining pahina igwa nin dakulaong historiya sa pagliwat, minasobrang $1 {{PLURAL:$1|rebisyon|mga rebisyon}}.\nAn pagpupura kaini mapuwedeng makapag-antala sa mga operasyon kan datos-sarayan kan {{SITENAME}}; magpadagos tabi na igwang pag-iingat.",
-       "deleting-backlinks-warning": "'''Patanid:''' An ibang mga pahina nakatakod sa pahina na muya mong pagpupuraon.",
+       "deleting-backlinks-warning": "'''Patanid:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|An ibang mga pahina]] nakatakod sa pahina na muya mong pagpupuraon.",
        "rollback": "Mga paghihira na pabalík",
+       "rollback-confirmation-confirm": "Kompirmahon:",
+       "rollback-confirmation-yes": "Pabalikwaton",
+       "rollback-confirmation-no": "Kanselaron",
        "rollbacklink": "pabalikwaton",
        "rollbacklinkcount": "ibalik $1 {{PLURAL:$1|pagliwat|mga pagliwat}}",
        "rollbacklinkcount-morethan": "ibalik an sobrang $1  {{PLURAL:$1|pagliwat|mga pagliwat}}",
        "editcomment": "An sumaryo kan pagliwat: <em>$1</em>.",
        "revertpage": "Ibinalik na mga pagliwat ni [[Special:Contributions/$2|$2]] ([[User talk:$2|talk]]) sagkod sa huring rebisyon ni [[User:$1|$1]]",
        "revertpage-nouser": "Binalikwat na mga pagliliwat kan sarong nakatagong paragamit sa huring rebisyon ni {{GENDER:$1|[[User:$1|$1]]}}",
-       "rollback-success": "Binawî na mga paghirá ni $1; pigbalik sa dating bersyón ni $2.",
+       "rollback-success": "Binawî na mga paghirá ni {{GENDER:$3|$1}};; pigbalik sa dating bersyón ni {{GENDER:$4|$2}}.",
        "sessionfailure-title": "Nagpalyang sesyon",
        "sessionfailure": "Garo may problema sa paglaog mo;\nkinanselár ining aksyón bilang sarong paglikay kontra sa ''session hijacking''.\nPindotón tabî an \"back\" asin ikarga giraray an páhinang ginikanan mo, dangan probarán giraray.",
+       "changecontentmodel-legend": "baguhon an modelo nin kalamnan",
+       "changecontentmodel-title-label": "Titulo nin pahina",
+       "changecontentmodel-current-label": "Kasalukuyang modelo nin kalamnan:",
+       "changecontentmodel-model-label": "bgong modelo nin kalamnan",
+       "changecontentmodel-reason-label": "An rason:",
+       "changecontentmodel-submit": "Pinagliwat",
+       "changecontentmodel-success-text": "AN uri kan laog [[:$1]] niliwat.",
+       "logentry-contentmodel-change-revertlink": "balikon",
+       "logentry-contentmodel-change-revert": "balikon",
        "protectlogpage": "Katalaanan nin proteksyon",
        "protectlogtext": "Sa ibaba iyo an sarong listahan kan mga pagbabago sa mga proteksyon kan pahina.\nHilnga tabi an [[Special:ProtectedPages|listahan kan protektadong mga pahina]] para sa listahan kan presenteng naggaganang mga proteksyon nin pahina.",
        "protectedarticle": "protektado \"[[$1]]\"",
        "modifiedarticleprotection": "binago an nibel nin proteksión para sa \"[[$1]]\"",
        "unprotectedarticle": "pinaghaleng proteksyon gikan sa \"[[$1]]\"",
        "movedarticleprotection": "pinaglipat an panuytoy kan proteksyon gikan sa \"[[$2]]\" sagkod \"[[$1]]\"",
+       "protectedarticle-comment": "{{GENDER:$2|Protektado}} \"[[$1]]\"",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|Baguhon an lebel kan proteksyon}} kan \"[[$1]]\"",
+       "unprotectedarticle-comment": "{{GENDER:$2|Halion an proteksyon}} sa \"[[$1]]\"",
        "protect-title": "Pigpupuesta an nibel nin proteksión sa \"$1\"",
        "protect-title-notallowed": "Hilnga na lebel nin proteksyon kan \"$1\"",
        "prot_1movedto2": "[[$1]] piglipat sa [[$2]]",
        "protect-othertime": "Ibang panahon:",
        "protect-othertime-op": "laeng oras",
        "protect-existing-expiry": "Eksistidong oras nin pagpalso: $3, $2",
+       "protect-existing-expiry-infinity": "Eksistidong oras nin pagpalso: infinite",
        "protect-otherreason": "Laen/kadagdagang rason:",
        "protect-otherreason-op": "Laeng rason",
        "protect-dropdown": "*Pirmehang mga rason nin proteksyon\n** Sobrahon na bandalismo\n** Sobrahon na pag-espam\n** Kontra-produktibong iwalan sa pagliwat\n** Halangkaw na trapiko kan pahina",
        "undeletepagetext": "An minasunod na {{PLURAL:$1|pahina pinagpura na alagad yaon|$1 mga pahina pinagpura na alagad yaraon }} pa man sa arkibo asin puwedeng maipagbalik.\nAn arkibo mapupuwedeng peryodikal na paglilinigan.",
        "undelete-fieldset-title": "Ibalik an mga rebisyon",
        "undeleteextrahelp": "Tanganing maibalik an enterong historiya kan pahina, pabayae na an gabos na mga kahon nin tsek dae pagkaagan asin i-klik mo an '''''{{int:undeletebtn}}'''''.\nTanganing gibohon an piniling restorasyon, i-tsek mo an mga kahon na kinatangudan kan mga rebisyon na ipagbabalik, asin i-klik an '''''{{int:undeletebtn}}'''''.",
-       "undeleterevisions": "$1 {{PLURAL:$1|na pagriribay|na mga pagriribay}} na nakaarchibo",
+       "undeleterevisions": "$1 {{PLURAL:$1|na pagriribay|na mga pagriribay}} na napura",
        "undeletehistory": "Kun saimong ipagbalik an pahina, an gabos nga mga rebisyon ipagbabalik sa historiya.\nKun an baguhon na pahina na igwang kaparehas na ngaran naimukna na poon kan puraon, an ipinagbalik na mga rebisyon minaluwas sa nakaagi nang historiya.",
        "undeleterevdel": "An dae pagpupura dae paggigibohon kun ini magreresulta sa kaibabawan kan pahina o rebisyon kan sagunson bilang parsiyal na pinagpura.\nSa arog na mga kaso, kaipuhan mong haleon an tsek o tagoon an pinakabaguhon na pinagpurang rebisyon.",
        "undeletehistorynoadmin": "Pigparâ na ining péhina. Mahihiling an rason sa epitome sa babâ, kasabay sa mga detalye kan mga parágamit na naghira kaining páhina bago pigparâ. Sa mga administrador sana maipapahiling an mga pagribay sa mismong tekstong ini.",
        "tooltip-invert": "I-tsek ining kahon tanganing tagoon an mga pagbabago sa mga pahina na yaon sa laog kan pinagpiling espasyong-ngaran (asin an asosyado na espasyong-ngaran kun may tsek)",
        "namespace_association": "Asosyado na espasyong-ngaran",
        "tooltip-namespace_association": "I-tsek ining kahon tangani man ibali an olay o subheto na espasyong-ngaran na asosyado sa pinagpili na espasyong-ngaran",
-       "blanknamespace": "(Pangenot)",
+       "blanknamespace": "(Panginot)",
        "contributions": "{{GENDER:$1|Paragamit}} na mga kaambagan",
        "contributions-title": "Mga kontribusyon kan paragamit para sa $1",
        "mycontris": "Mga Kaarambagan",
        "anoncontribs": "Mga Kaarambagan",
        "contribsub2": "Para ki {{GENDER:$3|$1}} ($2)",
+       "contributions-subtitle": "Para ki {{GENDER:$3|$1}}",
+       "contributions-userdoesnotexist": "Paragamit na panindog \"$1\" bako tabing rehistrado.",
        "nocontribs": "Mayong mga pagbabago na nahanap na kapadis sa ining mga criteria.",
        "uctop": "sa ngunyan",
        "month": "Poon bulan (asin mas amay):",
        "year": "Poon taon (asin mas amay):",
+       "date": "Poon bulan (asin mas amay):",
        "sp-contributions-newbies": "Ipahiling an mga kaarambagan kan mga baguhong panindog sana",
        "sp-contributions-newbies-sub": "Para sa mga bàgong account",
        "sp-contributions-newbies-title": "Mga kontribusyon kan paragamit para sa baguhon an mga panindog",
        "sp-contributions-blocklog": "Bagáton an katalaanan",
-       "sp-contributions-deleted": "pinagpurang mga kontribusyon kan paragamit",
+       "sp-contributions-suppresslog": "pinagpurang mga kontribusyon kan {{GENDER:$1|paragamit}}",
+       "sp-contributions-deleted": "pinagpurang mga kontribusyon kan {{GENDER:$1|paragamit}}",
        "sp-contributions-uploads": "mga ikinarga",
        "sp-contributions-logs": "mga tinalaan",
        "sp-contributions-talk": "olayan",
-       "sp-contributions-userrights": "manihamento sa mga karapatan kan paragamit",
+       "sp-contributions-userrights": "manihamento sa mga karapatan kan {{GENDER:$1|paragamit}}",
        "sp-contributions-blocked-notice": "Ining paragamit sa presente pinagbarahan.\nAn pinakahuring entrada sa talaan nin pagbara nakahaya sa ibaba bilang reperensiya:",
        "sp-contributions-blocked-notice-anon": "Ining IP adres sa presente pinagbarahan.\nAn pinakahuring entrada sa talaan nin pagbara nakahaya sa ibaba bilang reperensiya:",
        "sp-contributions-search": "Maghanap nin mga kaarambagan",
        "sp-contributions-username": "Estada kan IP o ngaran-parágamit:",
        "sp-contributions-toponly": "Minapahiling sana nin mga pagliwat na pinakahurihang mga rebisyon",
        "sp-contributions-newonly": "Ipahiling lang an mga pag-liwat na pigmukna kan pahina",
+       "sp-contributions-hideminor": "Itago an saradit na mga pagliwat",
        "sp-contributions-submit": "Hanápon",
        "whatlinkshere": "Ano an mga makasugpon digde",
        "whatlinkshere-title": "Mga pahina na nakasugpon sa \"$1\"",
        "whatlinkshere-hidelinks": "$1 mga kasugpunan",
        "whatlinkshere-hideimages": "$1 mga katakod nin mga sagunson",
        "whatlinkshere-filters": "Mga saraan",
+       "whatlinkshere-submit": "Dumanán",
        "autoblockid": "Awtomatikong-kabarahan #$1",
        "block": "Barahon an paragamit",
        "unblock": "Haleon an bara kan paragamit",
        "blockip": "Bagáton {{KASARIAN:$1|paragamit}}",
-       "blockiptext": "Gamiton an pormularyo sa babâ para bagaton an pagsurat kan sarong espesipikong IP o ngaran nin parágamit.\nDapat gibohon sana ini para maibitaran vandalismo, asin kompirmi sa [[{{MediaWiki:Policy-url}}|palakaw]].\nMagkaag nin espisipikong rason (halimbawa, magtao nin ehemplo kan mga páhinang rinaot).",
+       "blockiptext": "Gamiton an pormularyo sa babâ para bagaton an pagsurat kan sarong espesipikong IP o ngaran nin parágamit.\nDapat gibohon sana ini para maibitaran vandalismo, asin kompirmi sa [[{{MediaWiki:Policy-url}}|palakaw]].\nMagkaag nin espisipikong rason (halimbawa, magtao nin ehemplo kan mga páhinang rinaot).\nPwede mong bagaton an IP gamit an [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] syntax;an pinakadakulang sakop na tinutugutan iyo an /$1 para sa IPv4 asin /$2 para sa IPv6.",
        "ipaddressorusername": "direksyon nin IP o gahâ:",
        "ipbreason": "Rason:",
        "ipbreason-dropdown": "*Mga komon na rason sa pagbagat\n** Nagkakaag nin salang impormasyon\n** Naghahalî nin mga laog kan páhina\n** Nagkakaag nin mga takod na ''spam'' kan mga panluwas na ''site''\n** Nagkakaag nin kalokohan/ringaw sa mga pahina\n** Gawî-gawing makatakót/makauyám\n** Nag-aabuso nin mga lain-lain na ''account''\n** Dai akong ngaran nin parágamit",
        "ipb-hardblock": "Pugulan an yaon sa laog na mga paragamit na magliliwat gikan kaining IP adres",
-       "ipbcreateaccount": "Pugulon an pagibo nin kuenta.",
-       "ipbemailban": "Pugolan ining paragamit na magpadara nin e-surat",
+       "ipbcreateaccount": "Magmukna nin panindog",
+       "ipbemailban": "Nagpapadara nin e-surat",
        "ipbenableautoblock": "Enseguidang bagaton an huring direccion nin  IP na ginamit kaining paragamit, asin kon ano pang ibang IP na proprobaran nindang gamiton",
        "ipbsubmit": "Bagáton ining parágamit",
        "ipbother": "Ibang oras:",
        "ipboptions": "2ng oras:2 hours,1ng aldaw:1 day,3ng aldaw:3 days,1ng semana:1 week,2ng semana:2 weeks,1ng bulan:1 month,3ng bulan:3 months,6 na bulan:6 months,1ng taon:1 year,daeng kasagkoran:infinite",
        "ipbhidename": "Tagoon an ngaran nin paragamit gikan sa mga pagliliwat asin mga listahan",
        "ipbwatchuser": "Bantayi ining gamit kan paragamit asin mga pahina nin olayan",
-       "ipb-disableusertalk": "Pugulan ining paragamit na magliliwat kan saiyang sadireng pahina nin olayan habang ini barado",
+       "ipb-disableusertalk": "Magliwat kan saiyang sadiring pahina nin olayan",
        "ipb-change-block": "Barahan-otro an paragamit na igwa kaining mga panuytoy",
        "ipb-confirm": "Kumpirmaron an pagbara",
+       "ipb-partial": "Parsyal",
+       "ipb-pages-label": "Mga Pahina",
+       "ipb-namespaces-label": "Espasyong-ngaran",
        "badipaddress": "Dai pwede ining IP",
        "blockipsuccesssub": "Nagibo na an pagbagát",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] pinagbarahan.<br />\nHilngon an [[Special:BlockList|listahan kan binarahan]] tanganing repasohon an mga binara.",
        "ipb-unblock": "Bawion an pagbagat nin ngaran nin paragamit o direccion nin IP",
        "ipb-blocklist": "Hilingon an mga presenteng binagat",
        "ipb-blocklist-contribs": "Mga kontribusyon para sa {{KASARIAN:$1|$1}}",
+       "ipb-blocklist-duration-left": "$1 wala",
+       "block-actions": "Mga aksyon na babagaton:",
        "block-expiry": "Pasó:",
+       "block-options": "Mga dugang na pagpipilian:",
+       "block-prevent-edit": "Pinagliliwat",
+       "block-reason": "Rason:",
+       "block-target": "Ngaran kan paragamit o IP adres:",
        "unblockip": "Paagihon an parâgamit",
        "unblockiptext": "Gamiton an pormulario sa baba para puede giraray suratan an dating binagat na direccion nin IP address o ngaran nin paragamit.",
        "ipusubmit": "Haleon ining bara",
        "unblocked": "Binawi na an pagbagat ki [[User:$1|$1]]",
        "unblocked-range": "$1 pinaghale na an bara",
        "unblocked-id": "Hinali na an bagat na $1",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] hinali an bagat.",
        "blocklist": "Pinagbarang na mga paragamit",
+       "autoblocklist-submit": "Hanápon",
+       "autoblocklist-empty": "Mayong laog an lista nin mga awtomatikong parabagat.",
+       "autoblocklist-otherblocks": "An ibang {{PLURAL:$1|kubkob|mga kubkob}}",
        "ipblocklist": "Baradong mga paragamit",
        "ipblocklist-legend": "Hanapon an sarong binagát na paragamit",
        "blocklist-userblocks": "Tagoon an mga bara sa panindog",
        "blocklist-tempblocks": "Tagoon an temporaryong mga pambara",
        "blocklist-addressblocks": "Tagoon an solong pambara kan IP",
+       "blocklist-type": "Tipo:",
+       "blocklist-type-opt-all": "Gabos",
+       "blocklist-type-opt-partial": "Parsyal",
        "blocklist-rangeblocks": "Tagoon an mahiwason na mga pambara",
        "blocklist-timestamp": "pandukot-oras",
        "blocklist-target": "Target",
        "createaccountblock": "binagat an paggibo nin kuenta",
        "emailblock": "binagát an e-surat",
        "blocklist-nousertalk": "dae makakaliwat kan sadireng pahina nin olayan",
+       "blocklist-editing": "pinagliliwat",
+       "blocklist-editing-page": "mga pahina",
+       "blocklist-editing-ns": "espasyong-ngaran:",
        "ipblocklist-empty": "Mayong laog an lista nin mga binagat.",
-       "ipblocklist-no-results": "Dai nabagat an hinagad na direccion nin IP o ngaran nin paragamit.",
+       "ipblocklist-no-results": "Mayong bagat na nahiling sa IP o ngaran nin paragamit.",
        "blocklink": "bagáton",
        "unblocklink": "haleon an bagat",
        "change-blocklink": "ribayan an bagat",
        "contribslink": "mga ambág",
        "emaillink": "ipadara an e-surat",
-       "autoblocker": "Enseguidang binagat an saimong direccion nin IP ta kaaaging ginamit ini ni \"[[User:$1|$1]]\". An rason nin pagbagat ni $1: \"$2\"",
+       "autoblocker": "Enseguidang binagat an saimong  IP ta kaaaging ginamit ini ni \"[[User:$1|$1]]\". An rason nin pagbagat ni $1: \"$2\"",
        "blocklogpage": "Katalaanan nin bagat",
        "blocklog-showlog": "Ining paragamit dati nang pinagbarahan.\nAn talaan nin pagbara nakahaya sa ibaba bilang reperensiya:",
        "blocklog-showsuppresslog": "Ining paragamit pinagkubkob asin dati nang ipinagtago.\nAn talaan nin pagpaunlok ipinagtao sa ibaba para hilingan.",
        "block-log-flags-hiddenname": "pangaran nin paragamit itinago",
        "range_block_disabled": "Pigpopondo an abilidad kan sysop na maggibo nin bagat na hilera.",
        "ipb_expiry_invalid": "Dai pwede ini bilang oras kan pagpasó.",
+       "ipb_expiry_old": "Nakalihis na an panahon nin pagpasó.",
        "ipb_expiry_temp": "Itinagong pangaran nin paragamit na nagkukubkob dapat na magin permanente.",
-       "ipb_hide_invalid": "Dae nakayanan na untukon ining panindog; ini gayod nagkaigwa nin kadakulon na mga pagliliwat.",
+       "ipb_hide_invalid": "Dae nakayanan na untukon ining panindog; ini gayod nagkaigwa nin kadakulon na mga {{PLURAL:$1|one edit|$1 pagliliwat}}.",
        "ipb_already_blocked": "An \"$1\" pinagkubkob na",
        "ipb-needreblock": "An $1 pinagkubkob na. Gusto mong liwaton an mga panuytoy?",
        "ipb-otherblocks-header": "An ibang {{PLURAL:$1|kubkob|mga kubkob}}",
        "movenotallowedfile": "Ika mayo nin permiso na magbabalyo nin mga sagunson.",
        "cant-move-user-page": "Ika mayo nin permiso na magbabalyo nin mga pahina nin paragamit (laen pa sa mga sub-pahina).",
        "cant-move-to-user-page": "Ika mayo nin permiso na magbabalyo nin pahina paduman sa sa sarong pahina nin paragamit (laen pa sa sub-pahina nin paragamit).",
-       "newtitle": "Sa bàgong titulong:",
+       "cant-move-category-page": "Ika mayo nin permiso na magbabalyo nin mga pahina nin katergoriya.",
+       "newtitle": "Sa bàgong titulo:",
        "move-watch": "Bantayán ining pahina",
        "movepagebtn": "Ibalyó an pahina",
        "pagemovedsub": "Naibalyó na",
        "movenosubpage": "Ining pahina mayo nin mga sub-pahina.",
        "movereason": "Rason:",
        "revertmove": "balikon",
-       "delete_and_move_text": "==Kaipuhan na parâon==\n\nIgwa nang páhina na \"[[:$1]]\". Gusto mong parâon ini tangarig maibalyó?",
+       "delete_and_move_text": "Igwa nang páhina na \"[[:$1]]\". Gusto mong parâon ini tangarig maibalyó?",
        "delete_and_move_confirm": "Iyo, parâon an pahina",
        "delete_and_move_reason": "Pinagpura sa paghimo nin dalan para maibalyo gikan sa \"[[$1]]\"",
        "selfmove": "Pareho an páhinang ginikanan asin destinasyon; dai pwedeng ibalyó an sarong páhina sa sadiri.",
        "move-leave-redirect": "Walaton an sarong panlikwat sa likod",
        "protectedpagemovewarning": "'''Patanid:''' Ining pahina protektado tangani na an mga paragamit sana na igwang administrador na mga pribilihiyo an makakapagbalyo kaini.\nAn pinakahuring entrada sa talaan pinagtao sa ibaba para sa reperensiya:",
        "semiprotectedpagemovewarning": "'''Giromdomon:''' Ining pahina protektado tanganing an mga rehistradong paragamit sana an makakabalyo kaini. \nAn pinakahuring entrada sa talaan pinagtao sa ibaba para sa reperensiya:",
-       "move-over-sharedrepo": "== Yaon nang Sagunson ==\n[[:$1]] yaon na sa pinagheras na repositoryo. An pagbabalyo nin sagunson paduman kaining titulo masalambaw sa pinagheras na sagunson.",
+       "move-over-sharedrepo": "[[:$1]] yaon na sa pinagheras na repositoryo. An pagbabalyo nin sagunson paduman kaining titulo masalambaw sa pinagheras na sagunson.",
        "file-exists-sharedrepo": "An pangaran nin saguson na pinili ginagamit na sa pinagheras na repositoryo.\nPakipili kan ibang pangaran.",
        "export": "Paluwason an mga pahina",
        "exporttext": "Pwede mong ipadara an teksto asin historya nin paghirá kan sarong partikular na páhina o grupo nin mga páhina na nakapatos sa ibang XML. Pwede ining ipadara sa ibang wiki gamit an MediaWiki sa paagi kan [[Special:Import|pagpadara nin páhina]].\n\nPara makapadara nin mga páhina, ilaag an mga titulo sa kahon para sa teksto sa babâ, sarong titulo kada linya, dangan pilîon kun boot mo presenteng bersyón asin dating bersyón, na may mga linya kan historya, o an presenteng bersyón sana na may impormasyon manonongod sa huring hirá.\n\nSa kaso kan huri, pwede ka man na maggamit nin takod, arog kan [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] para sa páhinang \"[[{{MediaWiki:Mainpage}}]]\".",
        "thumbnail_gd-library": "Bakong kumpleto an kasalansanan kan kalibrohang GD: Nawawara an trabaho kan $1",
        "thumbnail_image-missing": "An sagunson garo baga nawawara: $1",
        "import": "Ilaog an mga páhina",
-       "importinterwiki": "Ipadara an Transwiki",
+       "importinterwiki": "importaron an mga pahina gikan sa ibang wiki",
        "import-interwiki-text": "Pumili nin sarong wiki asin titulo kan pahina na importaron.\nMga petsa nin kaliwatan asin pangaran kan mga paraliwat pagpepreserbaron.\nGabos na aksyon nin importa sa transwiki nakatala sa [[Special:Log/import|talaan nin importa]].",
+       "import-interwiki-sourcewiki": "Ginikanan na wiki:",
        "import-interwiki-sourcepage": "Gikanang pahina:",
        "import-interwiki-history": "Kopyahon an gabos na mga bersyón para sa páhinang ini",
        "import-interwiki-templates": "Ibali an gabos na mga panguyog",
        "import-interwiki-submit": "Ipalaog",
        "import-upload-filename": "Sagunsong Pangaran:",
+       "import-upload-username-prefix": "Interwiki prefix:",
        "import-comment": "Komento:",
        "importtext": "Paki-eksporta an sagunson gikan sa ginikanang wiki na gamit an [[Special:Export|gamiton pan-eksporta]].\nItagama ini sa saimong kompyuter asin ikarga ini digde.",
        "importstart": "Piglalaog an mga páhina...",
        "importuploaderrortemp": "Pagkarga kan ini-importang sagunson nagpalya.\nAn temporaryong polder nawawara.",
        "import-parse-failure": "XML importang panabot puminalya",
        "import-noarticle": "Mayong pahina na maiimporta!",
-       "import-nonewrevisions": "An gabos na mga rebisyon dati nang importado.",
+       "import-nonewrevisions": "Mayong rebisyon na pig-import (dati nang yaun o dai binali huli sa mga sala)",
        "xml-error-string": "$1 sa linya $2, kol $3 (bayta $4): $5",
        "import-upload": "Ikarga an XML na datos",
-       "import-token-mismatch": "Nawara an datos kan sesyon.\nPaki-otro giraray.",
+       "import-token-mismatch": "Pagkawara nin datos kan sesyon.\n\nProbaran tabì giraray. Kun dai man giraray magibo, probaran [[Special:UserLogout|na magluwas]] dangan maglaog giraray asin siguraduhon na nagtutugot an browser sa mga cookies hali sa site na ini.",
        "import-invalid-interwiki": "Dae makakapag-importa gikan sa pinagsambit na wiki.",
        "import-error-edit": "An pahina \"$1\" bakong importado nin huli ta ika dae tinutugutan na magliliwat kaini.",
        "import-error-create": "An pahina \"$1\" bakong importado nin huli ta ika dae tinutugutan na magmumukna kaini.",
        "import-rootpage-nosubpage": "Espasyong-ngaran \"$1\" kan ugat na pahina dae minatugot nin pan-irarom na mga pahina.",
        "importlogpage": "Usip nin pagpalaog",
        "importlogpagetext": "Administratibong mga importadong pahina na igwang historiya nin pagliliwat gikan sa ibang wikis.",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|rebisyon|mga rebisyon}}",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|rebisyon|mga rebisyon}} na importado",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|rebisyon|mga rebisyon}} gikan sa $2",
        "javascripttest": "Testing sa JavaScript",
+       "javascripttest-pagetext-unknownaction": "Dai bistong aksyon  \"$1\".",
        "javascripttest-qunit-intro": "Hilngon [$1 dokumentasyon sa pagtesting] sa mediawiki.org.",
        "tooltip-pt-userpage": "{{GENDER:|An saimong paragamit }} na pahina",
        "tooltip-pt-anonuserpage": "An páhina nin páragamit para sa ip na pighihira mo bilang",
        "tooltip-search": "Hanápon an {{SITENAME}}",
        "tooltip-search-go": "Magduman sa pahina na igwa kaining eksaktong pangaran kun eksistido",
        "tooltip-search-fulltext": "Hanápon an mga pahina para kaining teksto",
-       "tooltip-p-logo": "Bisitahon an Pangenot na Pahina",
+       "tooltip-p-logo": "Bisitahon an Panginot na Pahina",
        "tooltip-n-mainpage": "Bisitahon an Pangenot na Pahina",
        "tooltip-n-mainpage-description": "Bisitahon an Pangenot na Pahina",
        "tooltip-n-portal": "Manunungod sa proyekto, ano an saimong maginibo, saen makanumpong nin mga bagay",
        "tooltip-ca-nstab-category": "Tanawon an pahina nin kategoriya",
        "tooltip-minoredit": "Markahan ini bilang sarong dikiton na pagliwat",
        "tooltip-save": "Itagáma an saímong mga kaliwatan",
+       "tooltip-publish": "I-publikar an mga pagbabago",
        "tooltip-preview": "Tànawon an saimong mga kaliwatan, tabi gamitón ini bago itatagama!",
        "tooltip-diff": "Ipahilíng kun arin an mga kaliwatan na saimong pinaghimo sa teksto",
        "tooltip-compareselectedversions": "Hilngón an mga kalaenan sa tahaw kan duwáng pinagpiling mga rebisyon kainíng pahina",
        "tooltip-summary": "Magkaag nin sarong halipot na sumaryo",
        "interlanguage-link-title": "$1 - $2",
        "common.css": "/** an CSS na pigbugtak digdi maiaaplikar sa gabos na mga skin */",
+       "common.json": "/* Arin man na JSON digdi maikakarga para sa gabos na mga parágamit sa kada karga kan páhina. */",
        "common.js": "/* Arin man na JavaScript digdi maikakarga para sa gabos na mga parágamit sa kada karga kan páhina. */",
        "anonymous": "Bako-bistadong {{PLURAL:$1|paragamit|mga paragamit}} kan {{SITENAME}}",
        "siteuser": "Paragamit kan {{SITENAME}} na si $1",
        "anonuser": "{{SITENAME}} bako-bistadong paragamit $1",
-       "lastmodifiedatby": "Ining páhina huring binago sa $2, $1 ni $3.",
+       "lastmodifiedatby": "Ining pahina huring binago sa $2, $1 ni $3.",
        "othercontribs": "Binase ini sa trabaho ni $1.",
        "others": "iba pa",
-       "siteusers": "{{SITENAME}} {{PLURAL:$2|paragamit|mga paragamit}} $1",
+       "siteusers": "{{SITENAME}}{{PLURAL:$2|paragamit|mga paragamit}}$1",
        "anonusers": "{{SITENAME}} bako-bistadong {{PLURAL:$2|paragamit|mga paragamit}} $1",
        "creditspage": "Mga krédito nin páhina",
        "nocredits": "Mayong talastas kan kredito para sa ining pahina.",
        "pageinfo-display-title": "Titulo nin patanaw",
        "pageinfo-default-sort": "Panugmad na susi nin salansan",
        "pageinfo-length": "Kalabaan kan pahina (yaon sa mga bayta)",
+       "pageinfo-namespace": "Espasyong-pangaran",
        "pageinfo-article-id": "ID kan pahina",
        "pageinfo-language": "Lengguwahe kan laog sa pahina",
+       "pageinfo-language-change": "pigbâgo",
        "pageinfo-content-model": "Modelo nin kalamnan nin pahina",
+       "pageinfo-content-model-change": "pigbâgo",
        "pageinfo-robot-policy": "Pinaghuhukdo sa paagi nin mga robot",
        "pageinfo-robot-index": "Pinagtutugotan",
        "pageinfo-robot-noindex": "Dae pinagtutugotan",
        "pageinfo-protect-cascading-yes": "Iyo",
        "pageinfo-protect-cascading-from": "An mga proteksyon pasurunod gikan sa",
        "pageinfo-category-info": "Impormasyon sa Kategorya",
+       "pageinfo-category-total": "Kabilogan na bilang kan mga miyembro",
        "pageinfo-category-pages": "Bilang nin mga pahina",
        "pageinfo-category-subcats": "Bilang nin mga sub-kategorya",
        "pageinfo-category-files": "Bilang nin mga sagunson",
+       "pageinfo-user-id": "ID nin Paragamit",
        "markaspatrolleddiff": "Markahan bilang pigpapatrolya",
        "markaspatrolledtext": "Markahan iníng pahina na pigpapatrolya",
        "markedaspatrolled": "Minarkahan na pigpapatrolya",
        "markedaspatrollederrornotify": "Pagmamarka bilang patrolyado na nagpalya.",
        "patrol-log-page": "Laóg kan Pigpapatrolya",
        "patrol-log-header": "Ini an sarong talaan kan patrolyadong mga rebisyon.",
+       "confirm-markpatrolled-button": "Sige",
        "deletedrevision": "Pigparâ an lumang pagribay na $1.",
        "filedeleteerror-short": "Salâ sa pagparà kan dokumento: $1",
        "filedeleteerror-long": "May mga nasabat na salâ mientras na pigpaparâ an ''file'':\n\n$1",
        "newimages-summary": "Ining espesyal na pahina minaphiling kan huring pinagkargang mga sagunson.",
        "newimages-legend": "An saraan",
        "newimages-label": "Ngaran nin sagunson (o sarong parte kaini):",
+       "newimages-user": "Estada kan IP o ngaran-parágamit:",
+       "newimages-newbies": "Ipahiling an mga kaarambagan kan mga baguhong panindog sana",
+       "newimages-showbots": "Ipahiling an mga karga kan bot",
+       "newimages-hidepatrolled": "Itago an mga patroladong mga karga",
+       "newimages-mediatype": "Uri kan media:",
        "noimages": "Mayong mahihilíng.",
        "ilsubmit": "Hanápon",
        "bydate": "sa petsa",
        "confirmemail_body_set": "Sarong tawo, mapuwedeng ika, gikan sa estada kan IP na $1,\nnagrehistro nin sarong panindog \"$2\" na igwa kaining estada nin e-surat sa {{SITENAME}}.\n\nTanganing kumpirmaron na ining panindog talagang pagsadire mo asin aktibaron an mga estima kan e-surat sa{{SITENAME}}, bukasi tabi ining kasugpunan sa saimong kilyaw:\n\n$3\n\nKun an panindog *bakong* saimo, sunuda ining sugpon\ntanganing kanselaron an kumpirmasyon nin estada kan e-surat:\n\n$5\n\nIning pankumpirmang kodigo mapapalso sa $4.",
        "confirmemail_invalidated": "An e-surat na adres na pankumpirma kanselado na",
        "invalidateemail": "Kanselaron an e-surat na pankumpirmasyon",
+       "notificationemail_subject_changed": "{{SITENAME}} an nakarehistrong e-surat binago na",
+       "notificationemail_subject_removed": "{{SITENAME}} an nakarehistrong e-surat hinali na",
        "scarytranscludedisabled": "[Pigpopogolan an transcluding na Interwiki]",
        "scarytranscludefailed": "[Templatong panakdo nagpalya para sa $1]",
        "scarytranscludefailed-httpstatus": "[An paghigkos kan panguyog nagpalya para sa $1: HTTP $2]",
        "scarytranscludetoolong": "[An kilyawan grabe kahalaba]",
        "deletedwhileediting": "'''Patanid tabi''': Ining pahina pinagpura matapos na ika nagpoon na magliliwat!",
-       "confirmrecreate": "Si [[User:$1|$1]] ([[User talk:$1|olay]]) pigparâ ining páhina pagkatapos mong magpoon kan paghira ta:\n: ''$2''\nIkonpirmar tabi na talagang gusto mong gibohon giraray ining pahina.",
-       "confirmrecreate-noreason": "Paragamit [[User:$1|$1]] ([[User talk:$1|Olay]]) an nagpura kaining pahina matapos na ika nagpoon na magliliwat. Pakikumpirma tabi na ika boot na muknaon otro ining pahina.",
+       "confirmrecreate": "Si [[User:$1|$1]] ([[User talk:$1|olay]]){{GENDER:$1|pigpara}} ining páhina pagkatapos mong magpoon kan paghira ta:\n: <em>$2</em>\nIkonpirmar tabi na talagang gusto mong gibohon giraray ining pahina.",
+       "confirmrecreate-noreason": "Paragamit [[User:$1|$1]] ([[User talk:$1|Olay]]){{GENDER:$1|an nagpura}} kaining pahina matapos na ika nagpoon na magliliwat. Pakikumpirma tabi na ika boot na muknaon otro ining pahina.",
        "recreate": "Gibohón giraray",
        "confirm_purge_button": "Sige",
        "confirm-purge-top": "Halîon an an aliho kaining páhina?",
        "confirm-watch-top": "Idadagdag ining pahina sa saimong bantay-listahan?",
        "confirm-unwatch-button": "OK tabi",
        "confirm-unwatch-top": "Haleon ining pahina gikan sa saimong bantay-listahan?",
+       "confirm-rollback-button": "Sige",
+       "confirm-mcrrestore-title": "Ibalik an mga rebisyon",
+       "confirm-mcrundo-title": "Dae idagos an mga kaliwatan",
+       "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← nakaaging pahina",
        "imgmultipagenext": "sunod na pahina →",
        "imgmultigo": "Dumanán!",
        "autosumm-replace": "Pigriribayan an páhina nin '$1'",
        "autoredircomment": "Piglilikay sa [[$1]]",
        "autosumm-new": "Pinagmukna an pahina kaining \"$1\"",
+       "autosumm-newblank": "Magmuknan nin  blankong pahina",
        "lag-warn-normal": "Mga pagliliwat na baguhon pa sana nin $1 {{PLURAL:$1|segundo|segundos}} puwedeng dae maipapahiling sa listahang ini.",
        "lag-warn-high": "Nin huli sa halangkawon na kaabalahan sa serbidor kan datos-sarayan, mga pagliliwat na baguhon pa sana nin $1 {{PLURAL:$1|segundo|segundos}} puwedeng dae maipapahiling sa listahang ini.",
        "watchlistedit-normal-title": "Hirahón an pigbabantayan",
        "watchlistedit-raw-done": "Binàgo na an saimong pigbabantayan.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 an titulong|$1 mga titulong}} idinugang:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 an titulong|$1 mga titulong}} hinalì:",
+       "watchlistedit-clear-title": "Linigon an bantay-listahan",
+       "watchlistedit-clear-legend": "Linigon an bantay-listahan",
+       "watchlistedit-clear-titles": "Titulo:",
+       "watchlistedit-clear-submit": "Linigon an bantay-listahan (Permanente ini!)",
+       "watchlistedit-clear-done": "An saimong bantay-listahan nalinigan na.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 an titulong|$1 mga titulong}} hinalì:",
        "watchlisttools-clear": "Linigon an Bantay-listahan",
        "watchlisttools-view": "Tanawon an maanduyog na mga kaliwatan",
        "watchlisttools-edit": "Tanawon asin liwaton an bantay-listahan",
        "watchlisttools-raw": "Liwaton an hilaw na bantay-listahan",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|olay]])",
+       "timezone-local": "Lokal",
        "duplicate-defaultsort": "'''Patanid tabi:''' An susing panugmad kan salansan na \"$2\" minasalimbaw sa dating susing panugmad kan salansan na \"$1\".",
        "version": "Bersyon",
        "version-extensions": "Instaladong mga ekstensyon",
        "version-specialpages": "Espesyal na mga pahina",
        "version-parserhooks": "Mga pangawil kan parser",
        "version-variables": "Mga kabalanggayahan",
+       "version-editors": "Mga Paraliwat",
        "version-antispam": "Pan-spam na pangataman",
        "version-other": "An iba pa",
        "version-mediahandlers": "Mga Midyang Tagakapot",
        "version-hook-name": "Ngaran kan pangawil",
        "version-hook-subscribedby": "Pinaghaguhot ni",
        "version-version": "($1)",
+       "version-no-ext-name": "[mayong ngaran]",
        "version-license": "Lisensiya kan MediaWiki",
        "version-ext-license": "Lisensiya",
        "version-ext-colheader-name": "Ekstensyon",
+       "version-skin-colheader-name": "''Skin''",
        "version-ext-colheader-version": "Bersyon",
        "version-ext-colheader-license": "Lisensiya",
        "version-ext-colheader-description": "Deskripsyon",
        "version-ext-colheader-credits": "Mga Kagsurat",
        "version-license-title": "Lisensiya para sa $1",
        "version-license-not-found": "Mayong detalyadong impormasyon sa lisensiya an nanumpungan para sa ekstensyon na ini.",
+       "version-credits-title": "Kredito para kay $1",
+       "version-credits-not-found": "Mayong detalyadong impormasyon sa lisensiya an nanumpungan para sa ekstensyon na ini.",
        "version-poweredby-credits": "An wiking ini pinagpagana kan '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "mga iba pa",
        "version-poweredby-translators": "translatewiki.net na mga paradakit-taramon",
        "version-entrypoints": "Puntong pan-entrada sa mga kilyawan",
        "version-entrypoints-header-entrypoint": "Puntong pan-entrada",
        "version-entrypoints-header-url": "Kilyawan",
+       "version-libraries-library": "Libraryo",
+       "version-libraries-version": "Bersyon",
+       "version-libraries-license": "Lisensiya",
+       "version-libraries-description": "Deskripsyon",
+       "version-libraries-authors": "Mga Kagsurat",
        "redirect": "Palikwaton sa paagi nin sagunson, paragamit, pahina o rebisyon o panlaog na ID",
        "redirect-summary": "Ining espesyal na pahina minalikwat pasiring sa sarong sagunson (ipinagtao an pangaran nin sagunson), sarong pahina (ipinagtao an sarong rebisyon nin ID o pahina nin ID), o sarong pahina nin paragamit (ipinagtao an numerikong ID nin paragamit). Pinagkagamitan: [[{{#Special:Redirect}}/sagunson/Example.jpg]],[[{{#Special:Redirect}}/pahina/64308]],  [[{{#Special:Redirect}}/rebisyon/328429]], [[{{#Special:Redirect}}/paragamit/101]] o [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Dumani",
        "redirect-page": "ID kan pahina",
        "redirect-revision": "Rebisyon kan Pahina",
        "redirect-file": "Ngaran nin Sagunson",
+       "redirect-logid": "Log ID",
        "redirect-not-exists": "Halaga dae nanagboan",
        "fileduplicatesearch": "Maghanap kan duplikadong mga sagunson",
        "fileduplicatesearch-summary": "Maghanap kan duplikadong mga sagunson na pinagbasihan an mga kahalagahan nin hash.",
        "tag-filter": "[[Special:Tags|Tag]] saraon:",
        "tag-filter-submit": "Saraan",
        "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tatak|Mga Tatak}}]]: $2",
+       "tag-mw-blank": "Pinagblanko",
+       "tag-mw-blank-description": "Pagliwat na nagblanko nin pahina",
+       "tag-mw-replace": "Pinagribayan",
+       "tag-mw-replace-description": "Pagliwat na naghali nin 90% kan laog kan pahina",
+       "tag-mw-rollback": "Pabalikwaton",
+       "tag-mw-undo": "Balikon sa dati",
        "tags-title": "Mga marka",
        "tags-intro": "Ining pahina minalista kan mga marka na an kasungatan mapuwedeng maimarka an pagliwat kaini, asin an saindang mga kahulugan.",
        "tags-tag": "Ngarang panmarka",
        "tags-display-header": "Kinaluwasan sa listahan nin kaliwatan",
        "tags-description-header": "Bilog na deskripsyon nin kahulugan",
+       "tags-source-header": "Ginikanan",
        "tags-active-header": "Aktibo?",
        "tags-hitcount-header": "Pinagmarkahan na mga kaliwatan",
+       "tags-actions-header": "Mga aksyon",
        "tags-active-yes": "Iyo",
        "tags-active-no": "Dae",
+       "tags-source-none": "Dai na ginagamit",
        "tags-edit": "liwatón",
+       "tags-delete": "puraon",
        "tags-hitcount": "$1 {{PLURAL:$1|kaliwatan|mga kaliwatan}}",
+       "tags-create-heading": "Magmukna nin baguhong tag",
+       "tags-create-tag-name": "Ngarang panmarka",
+       "tags-create-reason": "Rason:",
+       "tags-create-submit": "Muknaon",
+       "tags-create-already-exists": "An tag \"$1\" eksistido na.",
+       "tags-delete-title": "Puraon an tag",
+       "tags-delete-reason": "Rason:",
+       "tags-delete-not-found": "An tag $1 bakong eksistido.",
+       "tags-activate-reason": "Rason:",
+       "tags-deactivate-reason": "Rason:",
+       "tags-edit-title": "Liwaton an mga tag",
+       "tags-edit-manage-link": "Manteniron an mga tag",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Selected revision|Mga napiling rebisyon}} kan [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Selected log event|Mga piniling talaan kan mga pangyayari}}:",
+       "tags-edit-existing-tags-none": "<em>Mayo</em>",
+       "tags-edit-reason": "Rason:",
+       "tags-edit-nooldid-title": "Imbalidong target nin pagbabago",
        "comparepages": "Ikumpara an mga pahina",
        "compare-page1": "Pahina 1",
        "compare-page2": "Pahina 2",
        "compare-invalid-title": "An titulo na saimong pinagsambit sarong imbalido.",
        "compare-title-not-exists": "An titulo na saimong pinagsambit bakong eksistido.",
        "compare-revision-not-exists": "An rebisyon na saimong pinagsambit bakong eksistido.",
+       "diff-form": "Mga kaibahán",
+       "diff-form-oldid": "Lumang rebisyon kan ID (opsyonal)",
+       "diff-form-revid": "Rebisyon kan ID kan pagkakaibahan",
+       "diff-form-submit": "Ipahiling an pagkakaiba",
+       "permanentlink": "Permanenteng sugpon",
+       "permanentlink-revid": "Rebisyon ID",
+       "permanentlink-submit": "Magduman sa rebisyon",
        "dberr-problems": "Sori! Ining sityo igwang naeksperiyensiyahan na mga kakundian sa teknikal.",
        "dberr-again": "Prubaring maghalat tabi nin nagkapirang minutos asin otrohon ikarga.",
-       "dberr-info": "(Dae makakontak sa serbidor kan datos-sarayan: $1)",
+       "dberr-info": "(Dae makakontak sa serbidor kan datos-sarayan:$1)",
        "dberr-info-hidden": "(Dae makakontak sa serbidor kan datos-sarayan)",
        "htmlform-invalid-input": "Igwa nin mga problema an iba sa saimong pinaglaog",
        "htmlform-select-badoption": "An halaga na saimong pinagsambit bakong saro sa balidong pagpipilian.",
        "htmlform-no": "Habó",
        "htmlform-yes": "Iyo",
        "htmlform-chosen-placeholder": "Magpili nin sarong opsyon",
+       "htmlform-cloner-create": "Magdugang",
+       "htmlform-cloner-delete": "Halîon",
+       "htmlform-date-placeholder": "TTTT-BB-AA",
+       "htmlform-time-placeholder": "OO:MM:SS",
+       "htmlform-datetime-placeholder": "TTTT-BB-AA OO:MM:SS",
+       "htmlform-title-badnamespace": "[[:$1]] mayo sa \"{{ns:$2}}\" espasyong ngaran.",
        "htmlform-title-not-creatable": "\"$1\" bako sarong maimumuknang titulo kan pahina",
        "htmlform-title-not-exists": "$1 bakong eksistido.",
+       "htmlform-user-not-exists": "<strong>$1</strong> bakong eksistido.",
+       "htmlform-user-not-valid": "<strong>$1</strong> bakong balidong ngaran kan paragamit.",
        "logentry-delete-delete": "$1 {{GENDER:$2|pinagpura na}} pahina $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|pinagbalik}} na pahina $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|pinagbalik}} na pahina $3",
+       "restore-count-revisions": "{{PLURAL:$1|1 rebisyon|$1 mga rebisyon}}",
+       "restore-count-files": "{{PLURAL:$1|1 file|$1 files}}",
        "logentry-delete-event": "$1 {{GENDER:$2|pinagliwat}}an bisibilidad kan {{PLURAL:$5|sarong talaan nin pangyayari|$5 talaan nin mga pangyayari}} kan $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|pinagliwat}} an bisibilidad kan {{PLURAL:$5|sarong rebisyon|$5 na mga rebisyon}} na yaon sa pahina $3: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|pinagliwat}} an bisibilidad kan talaan nin mga pangyayari sa $3",
        "revdelete-uname-unhid": "pangaran nin paragamit ipinaghaya",
        "revdelete-restricted": "Pinag-aplikar an mga restriksyon sa mga administrador",
        "revdelete-unrestricted": "Pinaghale an mga restriksyon para sa mga administrador",
+       "logentry-block-block": "$1 {{GENDER:$2|binagat}} {{GENDER:$4|$3}} na igwa nin oras kan pagpalso of $5 $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|hinali an bagat}} {{GENDER:$4|$3}}",
+       "logentry-partialblock-block-page": "An {{PLURAL:$1|pahina|mga pahina}} $2",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|binagat}} {{GENDER:$4|$3}} sa pagliwat $7 na igwa nin oras kan pagpalso $5 $6",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|importado}} $3 hali sa ibang wiki",
+       "logentry-import-interwiki-details": "$1 {{GENDER:$2|importdoa}} $3 hali sa $5 ($4 {{PLURAL:$4|rebisyon|mga rebisyon}})",
+       "logentry-merge-merge": "$1 {{GENDER:$2|ipinaghalo}} $3 sa $4 (mga rebisyon hanggan $5)",
        "logentry-move-move": "$1 {{GENDER:$2|pinagbalyo}} an pahina $3 pasiring sa $4",
        "logentry-move-move-noredirect": "S1 {{GENDER:$2|pinagbalyo}} an pahina $3 pasiring sa $4 na dae iwinalat an sarong panlikwat",
        "logentry-move-move_redir": "$1 {{GENDER:$2|pinagbalyo}} an pahina $3 pasiring sa $4 sa paagi kan panlikwat",
        "logentry-newusers-create2": "An panindog kan paragamit $3 {{GENDER:$2|pinagmukna}} na ni $1",
        "logentry-newusers-byemail": "An panindog kan paragamit $3 {{GENDER:$2|pinagmukna}} ni $1 asin an sekretong panlaog ipinadara na sa paagi nin e-surat",
        "logentry-newusers-autocreate": "An panindong kan paragamit $1 awtomatikong {{GENDER:$2|pinagmukna}} na",
-       "logentry-rights-rights": "$1 {{GENDER:$2|pinagliwat}} kan pangrupong pagkamiyembro para sa $3 gikan sa $4 pasiring sa $5",
+       "logentry-protect-unprotect": "$1 {{GENDER:$2|hinali}} an proteksyon sa $3",
+       "logentry-protect-protect": "$1 {{GENDER:$2|protektado}} $3 $4",
+       "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protektado}} $3 $4 [paibaba]",
+       "logentry-rights-rights": "$1 {{GENDER:$2|pinagliwat}} kan pangrupong pagkamiyembro para sa {{GENDER:$6|$3}} gikan sa $4 pasiring sa $5",
        "logentry-rights-rights-legacy": "$1 {{GENDER:$2|nagliwat}} kan pangrupong pagkamiyembro para sa $3",
        "logentry-rights-autopromote": "$1 awtomatikong {{GENDER:$2|pinagpalangkaw}} gikan sa $4 pasiring sa $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|pig-upload}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|uploaded}} sarong bagong rebirsyon kan $3",
+       "logentry-upload-revert": "$1 {{GENDER:$2|ibinalik}} $3 sa lumang bersyon",
+       "logentry-managetags-create": "$1 {{GENDER:$2|nagmukna nin}} tag \"$4\"",
        "rightsnone": "(mayô)",
+       "rightslogentry-temporary-group": "$1 (temporaryo, hanggan $2)",
        "feedback-adding": "Idugang an balik-simbag sa pahina...",
+       "feedback-back": "Buwelta",
        "feedback-bugcheck": "Marhay! I-tsek sana baya na ini bakong saro sa mga [$1 bistadong kuto].",
        "feedback-bugnew": "Pig-tsek ko. Pakireport kan sarong baguhong kuto",
        "feedback-bugornote": "Kun ika andam na iladawan an sarong teknikal na problema na igwang detalye tabi [$1 ipaaram an kuto].\nKun bako man, ika makakagamit nin sayon na porma sa ibaba. An saimong komento idudugang sa pahina \"[$3 $2]\", kaiba an saimong paragamit na ngaran.",
        "feedback-subject": "Subheto",
        "feedback-submit": "Isumite",
        "feedback-thanks": "Salamat! An saimong balik-simbag pinagposte sa pahina \"[$2 $1]\".",
+       "feedback-thanks-title": "Mabalos!",
+       "feedback-useragent": "Ahente nin paragamit:",
        "searchsuggest-search": "{{SITENAME}}",
        "searchsuggest-containing": "may laog na...",
        "api-error-badtoken": "Panlaog na kasalaan: Raot na pangilip",
        "limitreport-expansiondepth": "Kinatugmadan kan pinakahalangkaw na kahiwasan",
        "limitreport-expensivefunctioncount": "Bilang kan hiro nin mamahalon na parabangay",
        "expandtemplates": "Bigwakon an mga panguyog",
-       "expand_templates_intro": "Ining espesyal na pahina minakua nin teksto asin minabigwak kan gabos na mga panguyog na yaon kaini na paoro-otro.\nIni man minabigwak sa punksyon kan suportadong parabangay na arog kan <code><nowiki>{{</nowiki>#language:…}}</code> asin mga kapilyangan arog kan <code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nSa katunayan, ini minapabigwak kan gabos na bagay na yaon sa mga dobleng panandayan.",
+       "expand_templates_intro": "Ining espesyal na pahina minakua nin teksto asin minabigwak kan gabos na mga panguyog na yaon kaini na paoro-otro.\nIni man minabigwak sa punksyon kan suportadong parabangay na arog kan \n<code><nowiki>{{</nowiki>#language:…}}</code> asin mga kapilyangan arog kan \n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nSa katunayan, ini minapabigwak kan gabos na bagay na yaon sa mga dobleng panandayan.",
        "expand_templates_title": "Kontekstong titulo, para sa {{FULLPAGENAME}}, ibpa.:",
        "expand_templates_input": "Ikaag an teksto.",
        "expand_templates_output": "Resulta",
        "expand_templates_xml_output": "Kinaluwasan na XML",
+       "expand_templates_ok": "Sige",
        "expand_templates_remove_comments": "Tanggalon an mga komento",
        "expand_templates_remove_nowiki": "Pugulan an mga taktak na <nowiki> sa resulta",
        "expand_templates_generate_xml": "Ipahiling an panlunhay na kahoy nin XML",
+       "expand_templates_generate_rawhtml": "Ipahiling na HTML",
        "expand_templates_preview": "Patânaw",
+       "pagelanguage": "Sanglian an tataramon",
+       "pagelang-name": "Pahina",
+       "pagelang-language": "Lengguwahe",
+       "pagelang-use-default": "Gamiton an panugmad na lengguwahe",
+       "pagelang-select-lang": "Magpili nin lengguwahe",
+       "pagelang-reason": "Rason",
+       "pagelang-submit": "Isumite",
+       "pagelang-nonexistent-page": "An pahina $1 bakong eksistido.",
+       "right-pagelang": "Sanglian an tataramon",
+       "action-pagelang": "Sanglian an tataramon",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (pinagana)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>dai pinagana</strong>)",
+       "mediastatistics": "Estadistiko kan media",
+       "mediastatistics-table-mimetype": "Tipo nin MIME",
+       "mediastatistics-table-extensions": "Mga posibleng panumpay",
+       "mediastatistics-table-count": "Bilang nin mga sagunson",
+       "mediastatistics-table-totalbytes": "Pinaghalong sukol",
+       "mediastatistics-header-unknown": "Bakong bistado",
+       "mediastatistics-header-bitmap": "Bitmap na imahe",
+       "mediastatistics-header-drawing": "Mga drawing (vector na imahe)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Mga Video",
+       "mediastatistics-header-multimedia": "Rich media",
+       "mediastatistics-header-office": "Office",
+       "mediastatistics-header-text": "Tekstwal",
+       "mediastatistics-header-executable": "Executables",
+       "mediastatistics-header-archive": "Pinasadit na porma",
+       "mediastatistics-header-total": "Gabos na mga file",
+       "json-error-syntax": "Kasalaan sa sintaks",
+       "headline-anchor-title": "Isugpon sa seksyon na ini",
+       "special-characters-group-latin": "Latin",
+       "special-characters-group-ipa": "IPA",
+       "special-characters-group-symbols": "Mga simbolo",
+       "special-characters-group-greek": "Griyego",
+       "special-characters-group-cyrillic": "Cyrillic",
+       "special-characters-group-arabic": "Arabik",
+       "special-characters-group-persian": "Persian",
+       "special-characters-group-hebrew": "Hebreo",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinhala",
+       "special-characters-group-gujarati": "Gujarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Thai",
+       "special-characters-group-lao": "Lao",
+       "special-characters-group-khmer": "Khmer",
+       "special-characters-group-canadianaboriginal": "Canadian Aboriginal",
        "mw-widgets-abandonedit": "Nakakaseguro ka na gusto mong bumalik sa kamugtakan nin pagtanaw na dae nagtatagamang enot?",
+       "mw-widgets-abandonedit-discard": "Iapon an mga pagliwat",
+       "mw-widgets-abandonedit-keep": "Ipadagos an pagliwat",
+       "mw-widgets-abandonedit-title": "Sigurado ka na?",
+       "mw-widgets-copytextlayout-copy": "Kopyahon",
+       "mw-widgets-dateinput-no-date": "Mayong pigpilî",
        "mw-widgets-dateinput-placeholder-day": "TTTT-BB-AA",
        "mw-widgets-dateinput-placeholder-month": "TTTT-BB",
-       "randomrootpage": "Purakan na ugat nin pahina"
+       "mw-widgets-mediasearch-input-placeholder": "Maghanap nin midya",
+       "mw-widgets-mediasearch-noresults": "Mayong mga resultang nanumpungan",
+       "mw-widgets-categoryselector-add-category-placeholder": "Magdugang nin kategoriya...",
+       "mw-widgets-usersmultiselect-placeholder": "Magdugang pa...",
+       "mw-widgets-titlesmultiselect-placeholder": "Magdugang pa...",
+       "date-range-from": "Poon na petsa:",
+       "date-range-to": "Sa petsang:",
+       "randomrootpage": "Purakan na ugat nin pahina",
+       "log-action-filter-block": "Uri kan pagbagat:",
+       "log-action-filter-delete": "Uri kan pagpura:",
+       "log-action-filter-move": "Uri kan hiro:",
+       "log-action-filter-newusers": "Tipo kan pagmukna nin panindog:",
+       "log-action-filter-patrol": "Tipo kan pagpatrol:",
+       "log-action-filter-protect": "Uri kan proteksyon:",
+       "log-action-filter-upload": "Tipo kan pagkarga:",
+       "log-action-filter-all": "Gabos",
+       "log-action-filter-block-block": "Bagaton",
+       "log-action-filter-block-unblock": "Halion an bagat",
+       "log-action-filter-contentmodel-change": "Baguhon an modelo nin kalamnan",
+       "log-action-filter-delete-delete": "Pagpura kan pahina",
+       "log-action-filter-delete-revision": "Pagpura kan mga pagbabago",
+       "log-action-filter-managetags-create": "Pagmukna kan tag",
+       "log-action-filter-managetags-delete": "Pagpura kan tag",
+       "log-action-filter-managetags-activate": "Pag-aktibo kan tag",
+       "log-action-filter-managetags-deactivate": "Pagpade-aktibo kan tag",
+       "log-action-filter-newusers-autocreate": "Awtomatikong pagmukna",
+       "log-action-filter-protect-protect": "Proteksyon",
+       "log-action-filter-upload-upload": "Bagong pagkarga",
+       "log-action-filter-upload-overwrite": "Ikarga giraray",
+       "log-action-filter-upload-revert": "Ibalik",
+       "authmanager-userdoesnotexist": "Paragamit na panindog \"$1\" bako tabing rehistrado.",
+       "authmanager-email-label": "E-surat",
+       "authmanager-email-help": "E-koreong address:",
+       "authmanager-realname-label": "Totoong pangaran",
+       "authmanager-provider-temporarypassword": "Temporaryong sekretong panlaog",
+       "authprovider-resetpass-skip-label": "Laktawan",
+       "authprovider-resetpass-skip-help": "Laktawan an pagliwat kan sekretong panlaog.",
+       "specialpage-securitylevel-not-allowed-title": "Dai tinutugutan",
+       "authpage-cannot-login": "Dai makapuon kan pagpalaog.",
+       "authpage-cannot-create": "Dai makapoon sa pagmukna nin panindog.",
+       "changecredentials": "Baguhon an kredito",
+       "changecredentials-submit": "Baguhon an kredito",
+       "credentialsform-account": "Ngaran kan panindog:",
+       "restrictionsfield-badip": "Dai pwede ining serye nin IP: $1",
+       "restrictionsfield-label": "Tinutugutan na serye kan IP:",
+       "edit-error-short": "Kasalaan: $1",
+       "edit-error-long": "Mga kasalaan:\n\n$1",
+       "specialmute-submit": "Kompermaron",
+       "revid": "rebisyon $1",
+       "pageid": "ID kan pahina $1",
+       "gotointerwiki": "Naghahali na sa {{SITENAME}}",
+       "gotointerwiki-invalid": "Imbalidong an titulong itinao.",
+       "pagedata-title": "Data kan pahina",
+       "pagedata-bad-title": "Salang titulo: $1.",
+       "passwordpolicies": "Mga polisiya kan sekretong panlaog",
+       "passwordpolicies-group": "Grupo",
+       "passwordpolicies-policies": "Mga polisiya",
+       "passwordpolicies-policy-minimalpasswordlength": "Mga sekretong panlaog dapat igwa nin {{PLURAL:$1|1 karakter|$1 mga karakter}}.",
+       "userlogout-continue": "Muya mo nang magluwas?"
 }
index fd5c2a0..cedef82 100644 (file)
        "category-header-numerals": "$1–$2",
        "about": "За {{SITENAME}}",
        "article": "Страница",
-       "newwindow": "(оÑ\82ваÑ\80Ñ\8f Ñ\81е Ð² Ð½Ð¾Ð² Ð¿Ñ\80озоÑ\80еÑ\86)",
+       "newwindow": "(нов прозорец)",
        "cancel": "Отказ",
        "moredotdotdot": "Още…",
        "morenotlisted": "Възможно е този списък да е непълен.",
        "noarticletext": "Понастоящем няма текст на тази страница.\nМожете да [[Special:Search/{{PAGENAME}}|потърсите за заглавието на страницата]] в други страници, да <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} потърсите в съответните дневници] или [{{fullurl:{{FULLPAGENAME}}|action=edit}} да я създадете]</span>.",
        "noarticletext-nopermission": "Понастоящем в тази страница няма текст.\nМожете да [[Special:Search/{{PAGENAME}}|потърсите заглавието на тази страница ]] в други страници или да <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} потърсите в съответните дневници]</span>, но нямате права да създадете тази страница.",
        "missing-revision": "Версия #$1 на страницата „{{FULLPAGENAME}}“ не съществува.\n\nТова обикновено се дължи на препратка от историята на страницата, която е била изтрита.\nПодробности могат да бъдат открити в [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} дневника на изтриванията].",
-       "userpage-userdoesnotexist": "Ð\9dÑ\8fма Ñ\80егиÑ\81Ñ\82Ñ\80иÑ\80ана Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82елÑ\81ка Ñ\81меÑ\82ка Ð·Ð° â\80\9e$1â\80\9c.\nÐ\9cолÑ\8f Ð¿Ð¾Ñ\82вÑ\8aÑ\80деÑ\82е, че желаете да създадете/редактирате тази страница.",
+       "userpage-userdoesnotexist": "Ð\9dÑ\8fма Ñ\80егиÑ\81Ñ\82Ñ\80иÑ\80ана Ð¿Ð¾Ñ\82Ñ\80ебиÑ\82елÑ\81ка Ñ\81меÑ\82ка Ð·Ð° â\80\9e$1â\80\9c.\nÐ\98зиÑ\81ква Ñ\81е Ð¿Ð¾Ñ\82вÑ\8aÑ\80ждение, че желаете да създадете/редактирате тази страница.",
        "userpage-userdoesnotexist-view": "Не е регистрирана потребителска сметка на име „$1“.",
        "blocked-notice-logextract": "В момента този потребител е блокиран.\nПо-долу за справка е показан последният запис от дневника на блокиранията:",
        "clearyourcache": "<strong>Забележка:</strong> За да се видят промените, необходимо е след съхраняване на страницата, кешът на браузъра да бъде изтрит.\n* <strong>Firefox / Safari:</strong> Задържа се клавиш <em>Shift</em> и се щраква върху <em>Презареждане</em> (<em>Reload</em>) или чрез клавишната комбинация <em>Ctrl-F5</em> or <em>Ctrl-R</em> (<em>⌘-R</em> за Mac);\n* <strong>Google Chrome:</strong> клавишна комбинация <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> за Mac)\n* <strong>Internet Explorer:</strong> Задържа се клавиш <em>Ctrl</em> и се щраква върху <em>Refresh</em> или чрез клавишната комбинация <em>Ctrl-F5</em>;\n* <strong>Opera:</strong> кешът се изчиства през менюто <em>Tools → Settings</em> (<em>Opera → Preferences</em> за Mac) след което <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
        "recentchanges-page-removed-from-category": "[[:$1]] е премахната от категория",
        "recentchanges-page-removed-from-category-bundled": "[[:$1]] е премахната от категория, [[Special:WhatLinksHere/$1|тази страница е включена в други страници]]",
        "autochange-username": "Автоматична промяна на МедияУики",
-       "upload": "Ð\9aаÑ\87и файл",
+       "upload": "Ð\9aаÑ\87ване Ð½Ð° файл",
        "uploadbtn": "Качване на файл",
        "reuploaddesc": "Връщане към формуляра за качване",
        "upload-tryagain": "Съхраняване на промененото описание на файла",
        "statistics-header-edits": "Статистики за редакциите",
        "statistics-header-users": "Потребителски статистики",
        "statistics-header-hooks": "Други статистики",
-       "statistics-articles": "СÑ\8aдÑ\8aÑ\80жаÑ\82елни Ñ\81Ñ\82Ñ\80аниÑ\86и",
+       "statistics-articles": "СÑ\82Ñ\80аниÑ\86и Ñ\81Ñ\8aÑ\81 Ñ\81Ñ\8aдÑ\8aÑ\80жание",
        "statistics-pages": "Страници",
        "statistics-pages-desc": "Всички страници в уикито, включително дискусионни, пренасочващи страници и т.н.",
        "statistics-files": "Качени файлове",
        "logentry-contentmodel-change-revert": "връщане",
        "protectlogpage": "Дневник на защитата",
        "protectlogtext": "Списък на промените в защитата за страницата.\nМожете да прегледате и [[Special:ProtectedPages|списъка на текущо защитените страници]].",
-       "protectedarticle": "заÑ\89иÑ\82и „[[$1]]“",
+       "protectedarticle": "заÑ\89иÑ\82ена „[[$1]]“",
        "modifiedarticleprotection": "смени нивото на защита на „[[$1]]“",
        "unprotectedarticle": "свали защитата на „[[$1]]“",
        "movedarticleprotection": "премести настройките на защита от „[[$2]]“ на „[[$1]]“",
        "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Етикет|Етикети}}]]: $2",
        "tag-mw-contentmodelchange": "промяна на модела на съдържание",
        "tag-mw-new-redirect": "Ново пренасочване",
-       "tag-mw-removed-redirect": "Премахнато пренасочване",
-       "tag-mw-changed-redirect-target": "Промяна целта на пренасочване",
-       "tag-mw-changed-redirect-target-description": "Редакции, променящи целта на пренасочване",
+       "tag-mw-new-redirect-description": "Редакции, които създават ново пренасочване или променят страница на пренасочваща",
+       "tag-mw-removed-redirect": "Премахване на пренасочване",
+       "tag-mw-changed-redirect-target": "Промяна на целта на пренасочване",
+       "tag-mw-changed-redirect-target-description": "Редакции, които променят целта на пренасочване",
        "tag-mw-blank": "Изтриване на съдържанието",
-       "tag-mw-replace": "Заменено",
+       "tag-mw-blank-description": "Редакции, които изтриват съдържанието на страница",
+       "tag-mw-replace": "Заместване",
        "tag-mw-replace-description": "Редакции, премахващи над 90% от съдържанието на страница",
        "tag-mw-rollback": "Отмяна",
-       "tag-mw-undo": "Ð\9eÑ\82мÑ\8fна",
+       "tag-mw-undo": "Ð\92Ñ\80Ñ\8aÑ\89ане",
        "tags-title": "Етикети",
        "tags-intro": "Тук са изброени всички етикети, които могат да се ползват за отбелязване на редакциите, както и тяхното значение.",
        "tags-tag": "Име на етикета",
index 54a8edf..f16d87c 100644 (file)
        "accmailtext": "[[User talk:$1|$1]] खातिर एगो यंत्र जनित गुप्तशब्द $2 के भेज दिहल गइल बा। खाता में प्रवेश कइला के बाद इ '''[[Special:ChangePassword|गुप्तशब्द बदल लीं]]'' वाला पन्ना पर बदलल जा सकत बा।",
        "newarticle": "(नया)",
        "newarticletext": "रउआँ एगो अइसन कड़ी पकड़ के आइल बानी जवना से जुड़ल पन्ना अबहिन मौजूद नइखे।\nपन्ना बनावे खातिर नीचे के बाकस में टाइप करे शुरु करीं (ढेर जानकारी खातिर देखीं [$1 मदद पन्ना])।\nअगर रउआँ गलती से इहाँ आ गइल बानी, आपन ब्राउजर के '''बैक''' बटन दबाईं!",
-       "anontalkpagetext": "----\n<em>à¤\88 à¤\85à¤\87सन à¤¬à¥\87नाम à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤\95à¥\87 à¤¬à¤¾à¤¤à¤\9aà¥\80त à¤ªà¤¨à¥\8dना à¤¬à¤¾ à¤\9cà¥\87 à¤¯à¤¾ à¤¤ à¤\85भà¥\80 à¤\96ाता à¤¨à¤\87à¤\96à¥\87 à¤¬à¤¨à¤µà¤²à¥\87 à¤¯à¤¾ à¤\96ाता à¤\95à¥\87 à¤\87सà¥\8dतà¥\87माल à¤¨à¤\87à¤\96à¥\87 à¤\95रत।</em>\nà¤\8fहà¥\80 à¤\95ारन à¤\93ह à¤¬à¥\8dयà¤\95à¥\8dति à¤\95à¥\87 à¤ªà¤¹à¤¿à¤\9aान à¤\96ातिर à¤\88 à¤\85à¤\82à¤\95 à¤µà¤¾à¤²à¤¾ à¤\86à¤\87पà¥\80 à¤ªà¤¤à¤¾ à¤\87सà¥\8dतà¥\87माल à¤\95रà¥\87 à¤\95à¥\87 à¤ªà¤°à¤¤ à¤¬à¤¾à¥¤\nà¤\85à¤\87सन à¤\86à¤\87पà¥\80 à¤ªà¤¤à¤¾ à¤\95à¤\88 à¤²à¥\8bà¤\97 à¤\95à¥\87 à¤¸à¤\9dिया à¤­à¥\80 à¤¹à¥\8b à¤¸à¤\95त à¤¬à¤¾à¥¤\nà¤\85à¤\97र à¤\86प à¤¬à¥\87नाम à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¬à¤¾à¤¨à¥\80 à¤\86 à¤\88 à¤¬à¥\81à¤\9dाता à¤\95ि à¤\95à¥\8cनà¥\8bà¤\82 à¤¬à¤¿à¤¨à¤¾ à¤¬à¤¾à¤¤ à¤\95à¥\87 à¤\95मà¥\87à¤\82à¤\9f à¤\86पà¤\95à¥\87 à¤\93र à¤¬à¤¾, [[Special:CreateAccount|à¤\96ाता à¤¬à¤¨à¤¾à¤\88à¤\82]] à¤¯à¤¾ [[Special:UserLogin|लà¥\89à¤\97 à¤\87न]] à¤\95रà¥\80à¤\82 à¤\9cà¥\87वना à¤¸à¥\87 à¤­à¤¬à¤¿à¤¸à¥\8dय à¤®à¥\87à¤\82 à¤\95à¥\87हà¥\82 रउवाँ पर केहू दूसर बेनाम प्रयोगकर्ता होखे के भरम न होखे।",
+       "anontalkpagetext": "----\n<em>à¤\88 à¤\85à¤\87सन à¤¬à¥\87नाम à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤\95à¥\87 à¤¬à¤¾à¤¤à¤\9aà¥\80त à¤ªà¤¨à¥\8dना à¤¬à¤¾ à¤\9cà¥\87 à¤¯à¤¾ à¤¤ à¤\85भà¥\80 à¤\96ाता à¤¨à¤\87à¤\96à¥\87 à¤¬à¤¨à¤µà¤²à¥\87 à¤¯à¤¾ à¤\96ाता à¤\95à¥\87 à¤\87सà¥\8dतà¥\87माल à¤¨à¤\87à¤\96à¥\87 à¤\95रत।</em>\nà¤\8fहà¥\80 à¤\95ारन à¤\85à¤\87सन à¤²à¥\8bà¤\97 à¤\95à¥\87 à¤ªà¤¹à¤¿à¤\9aान à¤\96ातिर à¤\88 à¤\85à¤\82à¤\95 à¤µà¤¾à¤²à¤¾ à¤\86à¤\87पà¥\80 à¤ªà¤¤à¤¾ à¤\87सà¥\8dतà¥\87माल à¤\95रà¥\87 à¤\95à¥\87 à¤ªà¤°à¤¤ à¤¬à¤¾à¥¤\nà¤\85à¤\87सन à¤\86à¤\87पà¥\80 à¤ªà¤¤à¤¾ à¤\95à¤\88 à¤²à¥\8bà¤\97 à¤\95à¥\87 à¤¸à¤\9dिया à¤­à¥\80 à¤¹à¥\8b à¤¸à¤\95त à¤¬à¤¾à¥¤\nà¤\85à¤\97र à¤\86प à¤¬à¥\87नाम à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¬à¤¾à¤¨à¥\80 à¤\86 à¤\88 à¤¬à¥\81à¤\9dाता à¤\95ि à¤\95à¥\8cनà¥\8bà¤\82 à¤¬à¤¿à¤¨à¤¾ à¤¬à¤¾à¤¤à¥\87 à¤\95à¥\87 à¤\88 à¤\95मà¥\87à¤\82à¤\9f à¤\86प à¤\96ातिर à¤¬à¤¾, [[Special:CreateAccount|à¤\96ाता à¤¬à¤¨à¤¾à¤\88à¤\82]] à¤¯à¤¾ [[Special:UserLogin|लà¥\89à¤\97 à¤\87न]] à¤\95रà¥\80à¤\82 à¤\9cà¥\87वना à¤¸à¥\87 à¤­à¤¬à¤¿à¤¸à¥\8dय à¤®à¥\87à¤\82 à¤\95à¥\87हà¥\82 à¤\95à¥\87 रउवाँ पर केहू दूसर बेनाम प्रयोगकर्ता होखे के भरम न होखे।",
        "noarticletext": "अबहिन एह पन्ना में कौनों सामग्री नइखे।\nरउआँ दुसरा पन्ना में [[Special:Search/{{PAGENAME}}|ए टाइटिल के खोज]] कर सकत बानीं,\nया <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} संबंधित लॉग खोज सकत बानी]</span>, बाकी रउआँ के ई पन्ना बनावे के परमीशन नइखे।",
        "noarticletext-nopermission": "ए पन्ना मे अभी कौनों सामग्री नइखे।\nरउआँ दुसरा पन्ना में [[Special:Search/{{PAGENAME}}|ए टाइटिल के खोज]] कर सकत बानीं,\nया <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} या संबंधित लॉग खोज सकत बानी]</span>, बाकी रउआ के ई पन्ना बनावे के परमीशन नइखे।",
        "missing-revision": "\"{{FULLPAGENAME}}\" पन्ना के संशोधन #$1 उपलब्ध नइखे।\n\nसाधारण रुप से इ एगो हटावल गइल पन्ना के पुरान लिंक पर क्लिक कइला से होखेला।\nअधिक जानकारी खातिर आप [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} हटावे के लॉग] देख सकत बानी।",
        "page_first": "पहिलका",
        "page_last": "आखिरी",
        "histlegend": "अंतर बीछीं: तुलना देखे खातिर बदलावन के रेडियो बटन चिन्हित करीं आ एंटर या फिर नीचे दिहल बटन दबाईं।<br />\nसंकेत: <strong>({{int:cur}})</strong> = सभसे नया बदलाव के साथ अंतर, <strong>({{int:last}})</strong> = पछिला बदलाव के साथ अंतर, <strong>{{int:minoreditletter}}</strong> = छोट संपादन।",
-       "history-fieldset-title": "रिवà¥\80à¤\9cन à¤\96à¥\8bà¤\9cीं",
+       "history-fieldset-title": "रिवà¥\80à¤\9cन à¤«à¤¿à¤²à¥\8dà¤\9fर à¤\95रीं",
        "history-show-deleted": "हटावल रिवीजन भर",
        "histfirst": "सबसे पुरान",
        "histlast": "सबसे नया",
        "filehist-comment": "टिप्पणी",
        "imagelinks": "फाइल के उपयोग",
        "linkstoimage": "फाइल के इस्तेमाल {{PLURAL:$1|पन्ना करत बा|$1 पन्ना करत बाड़ें}}:",
-       "linkstoimage-more": "$1 à¤¸à¥\87 à¤\9cà¥\8dयादा {{PLURAL:$1|पनà¥\8dना à¤\95ड़à¥\80}} à¤\8fह à¤«à¤¾à¤\87ल à¤¸à¥\87 à¤\9cà¥\81ड़ल à¤¬à¤¾à¥¤\nà¤\86à¤\97à¥\87 à¤¦à¤¿à¤¹à¤² à¤\95ड़à¥\80 {{PLURAL:$1|पहिला à¤ªà¤¨à¥\8dना à¤\95ड़à¥\80 à¤¦à¥\87à¤\96ावत à¤¬à¤¾ }} à¤\96ालà¥\80 à¤\8fह à¤«à¤¾à¤\87ल à¤¸à¥\87 à¤\9cà¥\81ड़ल।\n[[Special:WhatLinksHere/$2|पूरा लिस्ट]] मौजूद बा।",
+       "linkstoimage-more": "$1 à¤¸à¥\87 à¤¬à¥\87सà¥\80 {{PLURAL:$1|पनà¥\8dना}} à¤\8fह à¤«à¤¾à¤\87ल à¤\95à¥\87 à¤\87सà¥\8dतà¥\87माल à¤\95रत à¤¬à¤¾à¤¡à¤¼à¥\87à¤\82।\nà¤\86à¤\97à¥\87 à¤¦à¤¿à¤¹à¤² à¤²à¤¿à¤¸à¥\8dà¤\9f à¤®à¥\87à¤\82 {{PLURAL:$1|पहिला à¤ªà¤¨à¥\8dना|पहिला $1 à¤ªà¤¨à¥\8dना à¤¸à¤­}} à¤\95à¥\87 à¤¦à¥\87à¤\96ावल à¤¬à¤¾ à¤\9cà¥\87 à¤\96ालà¥\80 à¤\8fहà¥\80 à¤«à¤¾à¤\87ल à¤\95à¥\87 à¤\87सà¥\8dतà¥\87माल à¤\95रत à¤¬à¤¾à¤¡à¤¼à¥\87à¤\82।\n[[Special:WhatLinksHere/$2|पूरा लिस्ट]] मौजूद बा।",
        "nolinkstoimage": "कौनों पन्ना नइखे जवन ए फाइल के इस्तेमाल करत होखे।",
        "morelinkstoimage": "इ फाइल संगे जुड़ल [[Special:WhatLinksHere/$1|सब लिंक]] देखीं।",
        "linkstoimage-redirect": "$1 (फाइल अनुप्रेषण) $2",
index dbc65ab..a315d3f 100644 (file)
@@ -77,7 +77,7 @@
        "tog-watchlisthideliu": "অ্যাকাউন্টে প্রবেশকৃত ব্যবহারকারীদের সম্পাদনাগুলি নজরতালিকায় লুকিয়ে রাখা হোক",
        "tog-watchlistreloadautomatically": "প্রতিবার একটি ছাঁকনি পরিবর্তন হওয়া মাত্রই স্বয়ংক্রিয়ভাবে নজরতালিকাটি পুনঃলোড করা হোক (জাভাস্ক্রিপ্ট প্রয়োজন)",
        "tog-watchlistunwatchlinks": "পরিবর্তনসহ দেখা পাতাগুলিতে সরাসরি দেখা/না দেখার ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) চিহ্ন যুক্ত করুন (এই কার্যকারিতা জন্য জাভাস্ক্রিপ্ট প্রয়োজন)",
-       "tog-watchlisthideanons": "বà§\87নামà§\80 à¦¬à§\8dযবহারà¦\95ারà§\80দà§\87র à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦¨à¦\9cরতালিà¦\95ায় আড়ালে রাখা হোক",
+       "tog-watchlisthideanons": "নà¦\9cরতালিà¦\95ায় à¦¬à§\87নামà§\80 à¦¬à§\8dযবহারà¦\95ারà§\80দà§\87র à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি আড়ালে রাখা হোক",
        "tog-watchlisthidepatrolled": "পরীক্ষিত সম্পাদনাগুলি নজরতালিকায় লুকিয়ে রাখা হোক",
        "tog-watchlisthidecategorization": "পাতার শ্রেণীবদ্ধকরণ লুকিয়ে রাখা হোক",
        "tog-ccmeonemails": "অন্য ব্যবহারকারীর কাছে আমার পাঠানো ইমেইলের একটি প্রতিলিপি আমাকে পাঠানো হোক",
        "history_short": "ইতিহাস",
        "history_small": "ইতিহাস",
        "updatedmarker": "আপনার শেষ পরিদর্শনের পর থেকে হালনাগাদকৃত",
-       "printableversion": "à¦\9bাপার যোগ্য সংস্করণ",
+       "printableversion": "মà§\81দà§\8dরণযোগ্য সংস্করণ",
        "permalink": "স্থায়ী সংযোগ",
        "print": "মুদ্রণ",
        "view": "দেখুন",
        "otherlanguages": "অন্যান্য ভাষাসমূহ",
        "redirectedfrom": "($1 থেকে পুনর্নির্দেশিত)",
        "redirectpagesub": "পুনর্নির্দেশ পাতা",
-       "redirectto": "পুননির্দেশিত হয়েছে:",
+       "redirectto": "পà§\81নরà§\8dনিরà§\8dদà§\87শিত à¦¹à¦¯à¦¼à§\87à¦\9bà§\87:",
        "lastmodifiedat": "এই পাতা শেষ সম্পাদিত হয়েছে $2টার সময়, $1 তারিখে।",
        "viewcount": "এই পাতাটি {{PLURAL:$1|একবার|$1 বার}} দেখা হয়েছে।",
        "protectedpage": "সুরক্ষিত পাতা",
        "virus-scanfailed": "স্ক্যান করা যাচ্ছে না (কোড $1)",
        "virus-unknownscanner": "অজানা এন্টিভাইরাস:",
        "logouttext": "'''আপনি এখন আপনার অ্যাকাউন্ট থেকে প্রস্থান করেছেন।'''\n\nনোট করুন যে কিছু পাতায় আপনাকে এখনও প্রবেশ অবস্থায় দেখাবে, যতক্ষণ না আপনি ব্রাউজার ক্যাশ পরিষ্কার করছেন।",
+       "logging-out-notify": "আপনাকে প্রস্থান করানো হচ্ছে, দয়া করে অপেক্ষা করুন।",
+       "logout-failed": "এখন প্রস্থান করা যাবে না: $1",
        "cannotlogoutnow-title": "এখন প্রস্থান করা যাবে না",
        "cannotlogoutnow-text": "$1 ব্যবহার করার সময় প্রস্থান করা সম্ভব নয়।",
        "welcomeuser": "স্বাগতম, $1!",
        "autoblockedtext": "আপনার আইপি ঠিকানাটিকে স্বয়ংক্রিয়ভাবে সম্পাদনায় বাধাদান করা হয়েছে কারণ এমন আরেকজন ব্যবহারকারী এটি ব্যবহার করেছেন, যাকে $1 বাধা দিয়েছেন।\nযে কারণে বাধা দেওয়া হয়েছে সেটি হল:\n\n:<em>$2</em>\n\n* বাধা শুরুর সময়: $8\n* বাধা শেষের সময়: $6\n* যাকে বাধাদান করা হয়েছে: $7\n\nআপনি $1-এর সাথে কিংবা অন্য যেকোন [[{{MediaWiki:Grouppage-sysop}}|প্রশাসকের]] সাথে যোগাযোগ করে এই বাধা সংক্রান্ত বিষয়ে আলোচনা করতে পারেন।\n\nলক্ষ্য করুন, আপনি \"{{int:emailuser}}\" বৈশিষ্ট্যটি ব্যবহার করতে পারবেন না যদি না আপনার [[Special:Preferences|অ্যাকাউন্টের পছন্দসমূহে]] একটি বৈধ ইমেইল ঠিকানা নিবন্ধিত না থাকে এবং আপনাকে এটি ব্যবহার করা থেকে অবরুদ্ধ না করা হয়ে থাকে।\n\nআপনার বর্তমান আইপি ঠিকানা হচ্ছে $3, এবং বাধা নং হল #$5।\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
        "systemblockedtext": "আপনার ব্যবহারকারী নাম অথবা আইপি ঠিকানাটিকে স্বয়ংক্রিয়ভাবে মিডিয়াউইকি দ্বারা বাধাদান করা হয়েছে। যে কারণটি দেওয়া হয়েছে, সেটি হল:\n\n:<em>$2</em>\n\n* বাধা শুরুর সময়: $8\n* বাধা উঠিয়ে নেয়ার সময়: $6\n* যাকে বাধাদান করা হয়েছে: $7\n\nআপনার বর্তমান আইপি ঠিকানাটি হল $3।\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
        "blockednoreason": "কোন কারণ দেওয়া হয়নি",
+       "blockedtext-composite": "<strong>আপনার ব্যবহারকারী নাম অথবা আইপি ঠিকানাটিকে বাধা দেয়া হয়েছে।</strong>\n\nযে কারণটি দেওয়া হয়েছে, সেটি হল:\n\n:<em>$2</em>\n\n* বাধা শুরুর সময়: $8\n* বাধা উঠিয়ে নেয়ার সময়: $6\n\n* $5\n\nআপনার বর্তমান আইপি ঠিকানাটি হল $3।\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
+       "blockedtext-composite-ids": "প্রাসঙ্গিক বাধাদান আইডি: $1 (আপনার আইপি ঠিকানাটি কালোতালিকাভুক্তও হতে পারে)",
+       "blockedtext-composite-no-ids": "আপনার আইপি ঠিকানাটি একাধিক নিষিদ্ধ তালিকায় অন্তর্ভুক্ত",
+       "blockedtext-composite-reason": "আপনার অ্যাকাউন্ট ও/বা আইপি ঠিকানার বিরুদ্ধে একাধিক বাধা রয়েছে",
        "whitelistedittext": "পাতায় সম্পাদনা করতে অনুগ্রহ করে $1 করুন।",
        "confirmedittext": "কোন সম্পাদনা করার আগে আপনার ই-মেইল ঠিকানাটি অবশ্যই নিশ্চিত করতে হবে। দয়া করে আপনার ই-মেইল ঠিকানাটি [[Special:Preferences|ব্যবহারকারীর পছন্দতালিকায়]] ঠিকমত দিন।",
        "nosuchsectiontitle": "অনুচ্ছেদ পাওয়া যায়নি",
        "accmailtext": "[[User talk:$1|$1]] এর জন্য দৈব ভাবে উৎপন্ন শব্দ চাবি $2 এ পাঠানো হয়েছে।\nলগ-ইন করার পর ''[[Special:ChangePassword|পাসওয়ার্ড পরিবর্তন]]'' পাতা থেকে এটি পরিবর্তন করা যাব।",
        "newarticle": "(নতুন)",
        "newarticletext": "আপনি এমন একটি পাতার সংযোগ অনুসরণ করছেন, যার অস্তিত্ব নেই।\nপাতাটি তৈরি করতে, নিচের বাক্সে তা টাইপ করা শুরু করুন (আরও তথ্য জানতে [$1 সহায়িকা পাতা] দেখুন)।\nআপনি যদি ভুল করে এখানে এসে থাকেন, তাহলে আপনার ব্রাউজারের <strong>পিছন</strong> বোতামে ক্লিক করুন।",
-       "anontalkpagetext": "----\n<em>à¦\8fà¦\9fি à¦\8fà¦\95à¦\9fি à¦¬à§\87নামà§\80 à¦¬à§\8dযবহারà¦\95ারà§\80র à¦\86লাপà§\87র à¦ªà¦¾à¦¤à¦¾, à¦¯à¦¿à¦¨à¦¿ à¦\8fà¦\96নà¦\93 à¦\95à§\8bন à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¤à§\88রি à¦\95রà§\87ননি, à¦\95িà¦\82বা à¦¤à¦¿à¦¨à¦¿ à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\9fি à¦¬à§\8dযবহার à¦\95রà¦\9bà§\87ন à¦¨à¦¾à¥¤</em>\nà¦\86মরা à¦¤à¦¾à¦\87 à¦¸à¦¾à¦\82à¦\96à§\8dযিà¦\95 à¦\86à¦\87পি à¦ à¦¿à¦\95ানা à¦¬à§\8dযবহার à¦\95রà§\87 à¦¤à¦¾à¦\81দà§\87র à¦¶à¦¨à¦¾à¦\95à§\8dত à¦\95রà¦\9bি।\nà¦\8fà¦\95াধিà¦\95 à¦¬à§\8dযবহারà¦\95ারà§\80 à¦\8fরà¦\95ম à¦\8fà¦\95à¦\9fি à¦\86à¦\87পি à¦ à¦¿à¦\95ানা à¦¬à§\8dযবহার à¦\95রতà§\87 à¦ªà¦¾à¦°à§\87ন।\nà¦\86পনি à¦¯à¦¦à¦¿ à¦\8fà¦\95à¦\9cন à¦¬à§\87নামà§\80 à¦¬à§\8dযবহারà¦\95ারà§\80 à¦¹à¦¯à¦¼à§\87 à¦¥à¦¾à¦\95à§\87ন à¦\8fবà¦\82 à¦¯à¦¦à¦¿ à¦\85নà§\81ভব à¦\95রà§\87ন à¦¯à§\87 à¦\86পনার à¦ªà§\8dরতি à¦\85পà§\8dরাসà¦\99à§\8dà¦\97িà¦\95 à¦®à¦¨à§\8dতবà§\8dয à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87, à¦¤à¦¾à¦¹à¦²à§\87 à¦\85নà§\8dযানà§\8dয à¦¬à§\87নামà§\80 ব্যবহারকারীর সাথে ভবিষ্যতে বিভ্রান্তি এড়াতে অনুগ্রহ করে [[Special:CreateAccount|একটি অ্যাকাউন্ট তৈরি করুন]] অথবা  [[Special:UserLogin|অ্যাকাউন্টে প্রবেশ করুন]]।",
+       "anontalkpagetext": "----\n<em>à¦\8fà¦\9fি à¦\8fà¦\95à¦\9cন à¦¬à§\87নামà§\80 à¦¬à§\8dযবহারà¦\95ারà§\80র à¦\86লাপà§\87র à¦ªà¦¾à¦¤à¦¾, à¦¯à¦¿à¦¨à¦¿ à¦\8fà¦\96নà¦\93 à¦\95à§\8bন à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¤à§\88রি à¦\95রà§\87ননি, à¦\95িà¦\82বা à¦¤à¦¿à¦¨à¦¿ à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\9fি à¦¬à§\8dযবহার à¦\95রà¦\9bà§\87ন à¦¨à¦¾à¥¤</em>\nà¦\86মরা à¦¤à¦¾à¦\87 à¦¸à¦¾à¦\82à¦\96à§\8dযিà¦\95 à¦\86à¦\87পি à¦ à¦¿à¦\95ানা à¦¬à§\8dযবহার à¦\95রà§\87 à¦¤à¦¾à¦\81দà§\87র à¦¶à¦¨à¦¾à¦\95à§\8dত à¦\95রà¦\9bি।\nà¦\8fà¦\95াধিà¦\95 à¦¬à§\8dযবহারà¦\95ারà§\80 à¦\8fরà¦\95ম à¦\8fà¦\95à¦\9fি à¦\86à¦\87পি à¦ à¦¿à¦\95ানা à¦¬à§\8dযবহার à¦\95রতà§\87 à¦ªà¦¾à¦°à§\87ন।\nà¦\86পনি à¦¯à¦¦à¦¿ à¦\8fà¦\95à¦\9cন à¦¨à¦¾à¦®à¦¹à§\80ন à¦¬à§\8dযবহারà¦\95ারà§\80 à¦¹à¦¯à¦¼à§\87 à¦¥à¦¾à¦\95à§\87ন à¦\8fবà¦\82 à¦¯à¦¦à¦¿ à¦\85নà§\81ভব à¦\95রà§\87ন à¦¯à§\87 à¦\86পনার à¦ªà§\8dরতি à¦\85পà§\8dরাসà¦\99à§\8dà¦\97িà¦\95 à¦®à¦¨à§\8dতবà§\8dয à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87, à¦¤à¦¾à¦¹à¦²à§\87 à¦\85নà§\8dযানà§\8dয à¦¨à¦¾à¦®à¦¹à§\80ন ব্যবহারকারীর সাথে ভবিষ্যতে বিভ্রান্তি এড়াতে অনুগ্রহ করে [[Special:CreateAccount|একটি অ্যাকাউন্ট তৈরি করুন]] অথবা  [[Special:UserLogin|অ্যাকাউন্টে প্রবেশ করুন]]।",
        "noarticletext": "বর্তমানে এই পাতায় কোন লেখা নেই।\nআপনি চাইলে অন্যান্য পাতায় [[Special:Search/{{PAGENAME}}| এই শিরোনামটি অনুসন্ধান করতে পারেন]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} এ সম্পর্কিত লগ অনুসন্ধান করতে পারেন], \nকিংবা [{{fullurl:{{FULLPAGENAME}}|action=edit}} এই পাতাটি তৈরি করতে পারেন]</span>।",
        "noarticletext-nopermission": "বর্তমানে এই পাতায় কোন লেখা নেই।\nআপনি চাইলে অন্য পাতায় [[Special:Search/{{PAGENAME}}| শিরোনামটি অনুসন্ধান করতে পারেন]], অথবা <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} সম্পর্কিত লগ অনুসন্ধান করতে পারেন]</span>, কিন্তু আপনার এই পাতাটি তৈরী করার অনুমতি নেই।",
        "missing-revision": "\"{{FULLPAGENAME}}\" এর #$1তম সংস্করণটি প্রদর্শন সম্ভব নয়।\n\nসাধারণত মুছে ফেলা হয়েছে এমন পাতার মেয়াদ উত্তীর্ণ ইতিহাসের সংযোগ অনুসরণ করার কারণে এটি হতে পারে। \n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] বিস্তারিত তথ্য জানা যাবে।",
        "previewconflict": "এই প্রাকদর্শনটি সম্পাদনা ক্ষেত্রের উপরের অংশটির টেক্সট সংরক্ষণ করলে যেরকম দেখাবে, তা দেখাচ্ছে।",
        "session_fail_preview": "দুঃখিত! সেশন ডাটা হারিয়ে যাওয়ার কারণে আপনার সম্পাদনাটি সংরক্ষণ করা সম্ভব হয়নি।\n\nআপনি সম্ভবত সংযোগ হারিয়েছন। <strong>দয়া করে যাচাই করুন যে আপনি এখনও প্রবেশরত রয়েছেন এবং আবার চেষ্টা করুন</strong>। যদি এটি এখনও কাজ না করে, তাহলে দয়া করে [[Special:UserLogout|অ্যাকাউন্ট থেকে প্রস্থান করুন]] এবং আবার অ্যাকাউন্টে প্রবেশ করে চেষ্টা করুন এবং এবং পরীক্ষা করুন যে আপনার ব্রাউজার এই সাইটে কুকি ব্যবহারের অনুমতি দেয়।",
        "session_fail_preview_html": "দুঃখিত! সেশনের উপাত্ত হারিয়ে যাওয়ার কারণে আমরা আপনার সম্পাদনাটি প্রক্রিয়াভুক্ত করতে পারিনি।\n\n<em>{{SITENAME}}-এ raw HTML সক্রিয় আছে বলে জাভাস্ক্রিপ্ট ভিত্তিক আক্রমণ থেকে প্রতিরক্ষার জন্য প্রাকদর্শনটি দেখানো হচ্ছে না।</em>\n\n<strong>যদি এটি সম্পাদনার একটি বৈধ প্রচেষ্টা হয়, তবে অনুগ্রহ করে আবার চেষ্টা করুন।</strong>\nযদি তারপরেও কাজ না হয়, তবে অ্যাকাউন্ট থেকে [[Special:UserLogout|বেরিয়ে গিয়ে]] আবার প্রবেশ করুন, এবং পরীক্ষা করে দেখুন যে আপনার ব্রাউজারে এই সাইট থেকে কুকি রাখার অনুমতি আছে কি না।",
-       "token_suffix_mismatch": "'''আপনার সম্পাদনাটি প্রত্যাখ্যান করা হয়েছে, কারণ আপনার ক্লায়েন্ট প্রোগ্রামটি সম্পাদনা টেক্সটের বিরামচিহ্নগুলি গুলিয়ে ফেলেছে। পাতাটির টেক্সটে যাতে ক্ষতি না হয় সেজন্য সম্পাদনাটি প্রত্যাখ্যান করা হয়েছে। আপনি কোন ত্রুটিপূর্ণ ওয়েব-ভিত্তিক বেনামী প্রক্সি সেবা ব্যবহার করলে এরকম হতে পারে।'''",
+       "token_suffix_mismatch": "<strong>আপনার সম্পাদনাটি প্রত্যাখ্যান করা হয়েছে, কারণ আপনার ক্লায়েন্ট প্রোগ্রামটি সম্পাদনা পাঠ্যের বিরামচিহ্নগুলি গুলিয়ে ফেলেছে।</strong>\nপাতাটির পাঠ্যে যাতে ক্ষতি না হয় সেজন্য সম্পাদনাটি প্রত্যাখ্যান করা হয়েছে।\nআপনি কোন ত্রুটিপূর্ণ ওয়েব-ভিত্তিক বেনামী প্রক্সি সেবা ব্যবহার করলে এরকম হতে পারে।",
        "edit_form_incomplete": "'''আপনার সম্পাদনার কিছু অংশ সার্ভারে পৌছায় নি; আপনার সম্পাদনা সম্পূর্ণরুপে আছে কিনা নিশ্চিত হয়ে আবার চেষ্টা করুন'''",
        "editing": "সম্পাদনা করছেন: $1",
        "creating": "$1 পাতাটি তৈরি করছেন",
        "search-interwiki-more": "(আরও)",
        "search-interwiki-more-results": "আরও ফলাফল",
        "search-relatedarticle": "সম্পর্কিত",
+       "search-invalid-sort-order": "$1-এর বাছাইয়ের ক্রম অজানা, পূর্বনির্ধারিত বাছাই প্রয়োগ হবে। বৈধ বাছাইয়ের ক্রমগুলি হল: $2",
        "searchrelated": "সম্পর্কিত",
        "searchall": "সমস্ত",
        "showingresults": "নিচে '''$2''' নং থেকে শুরু করে {{PLURAL:$1|'''1''' ফলাফল|'''$1''' ফলাফলসমূহ}} দেখানো হল।",
        "rcfilters-clear-all-filters": "সব ছাঁকনি পরিষ্কার করুন",
        "rcfilters-show-new-changes": "$1 থেকে নতুনতর পরিবর্তনসমূহ দেখুন",
        "rcfilters-search-placeholder": "সাম্প্রতিক পরিবর্তনসমূহ ছাঁকুন (ব্রাউজ বা টাইপ করা শুরু করুন)",
+       "rcfilters-search-placeholder-mobile": "ছাঁকনি",
        "rcfilters-invalid-filter": "অকার্যকর ছাঁকনি",
        "rcfilters-empty-filter": "কোনো সক্রিয় ফিল্টার নেই। সমস্ত অবদান দেখানো হয়েছে।",
        "rcfilters-filterlist-title": "ছাঁকনি",
        "ipblocklist-otherblocks": "অন্যান্য {{PLURAL:$1|বাধাঁ|বাধাঁসমূহ}}",
        "infiniteblock": "অসীম",
        "expiringblock": "$1 তারিখের $2 এ মেয়াদোত্তীর্ণ হবে",
-       "anononlyblock": "শুধু বেনামীদের",
+       "anononlyblock": "শুধুমাত্র বেনামীগণ",
        "noautoblockblock": "স্বয়ংক্রিয় বাধাদান নিষ্ক্রিয় করা হয়েছে",
        "createaccountblock": "অ্যাকাউন্ট সৃষ্টিতে বাধা দেওয়া হয়েছে",
        "emailblock": "ই-মেইল বাধা দেয়া হয়েছে",
        "blocklink": "বাধা দাও",
        "unblocklink": "বাধা তুলুন",
        "change-blocklink": "বাধা পরিবর্তন করুন",
+       "empty-username": "(কোনও ব্যবহারকারীর নাম উপলব্ধ নেই)",
        "contribslink": "অবদান",
        "emaillink": "ই-মেইল পাঠাও",
        "autoblocker": "আপনাকে স্বয়ংক্রিয়ভাবে বাধা দেওয়া হয়েছে, কারণ আপনার আইপি ঠিকানাটি সম্প্রতি \"[[User:$1|$1]]\" ব্যবহার করেছেন। $1-কে বাধাদানের কারণ \"$2\"",
        "reblock-logentry": "[[$1]]-এর বাধাদান সেটিং পরিবর্তন করেছেন যেটি শেষ হবার মেয়াদ $2 $3",
        "blocklogtext": "এটি ব্যবহারকারীদেরকে বাধা দানের বা বাধা তুলে নেওয়ার লগ।\nস্বয়ংক্রিয়ভাবে বাধাদানকৃত আইপি ঠিকানাগুলি এখানে তালিকাবদ্ধ করা হয়নি।\nবর্তমানে সক্রিয় নিষিদ্ধকরণ ও বাধাদানের তালিকার জন্য [[Special:BlockList| বাধাদান তালিকা]] দেখুন।",
        "unblocklogentry": "$1-এর উপর বাধা তুলে নেয়া হয়েছে",
-       "block-log-flags-anononly": "à¦\95à§\87বল à¦¬à§\87নামà§\80 à¦¬à§\8dযবহারà¦\95ারà§\80রা",
+       "block-log-flags-anononly": "শà§\81ধà§\81মাতà§\8dর à¦¬à§\87নামà§\80 à¦¬à§\8dযবহারà¦\95ারà§\80à¦\97ণ",
        "block-log-flags-nocreate": "অ্যাকাউন্ট সৃষ্টি নিষ্ক্রিয় করা হয়েছে",
        "block-log-flags-noautoblock": "স্বয়ংক্রিয় বাধাদান নিষ্ক্রিয়",
        "block-log-flags-noemail": "ই-মেইলে বাধা আছে",
        "block-log-flags-nousertalk": "নিজের আলাপের পাতা সম্পাদনা করতে পারবে না",
-       "block-log-flags-angry-autoblock": "à¦\89নà§\8dনত à¦\85à¦\9fà§\8bবà§\8dলà¦\95 সক্রিয়",
+       "block-log-flags-angry-autoblock": "à¦\89নà§\8dনত à¦¸à§\8dবয়à¦\82à¦\95à§\8dরিয় à¦¬à¦¾à¦§à¦¾à¦¦à¦¾à¦¨ সক্রিয়",
        "block-log-flags-hiddenname": "ব্যবহারকারী নাম লুক্কায়িত",
        "range_block_disabled": "প্রশাসকের পক্ষে আইপি ঠিকানার শ্রেণী বাধাদানের ক্ষমতা নিষ্ক্রিয় আছে।",
        "ipb_expiry_invalid": "মেয়াদোত্তীর্ণকাল অবৈধ।",
        "proxyblockreason": "আপনার আইপি ঠিকানাকে বাধা দেয়া হয়েছে কারণ এটি একটি উন্মুক্ত প্রক্সি। অনুগ্রহ করে আপনার ইন্টারনেট সেবা প্রদানকারী কোম্পানির সাথে কারিগরি সহায়তার ব্যাপারে যোগাযোগ করুন এবং এই গুরুত্বপূর্ণ নিরাপত্তা সমস্যার ব্যাপারে তাদেরকে অবহিত করুন।",
        "sorbsreason": "আপনার আইপি ঠিকানাটি {{SITENAME}}-এর ব্যবহার করা DNSBL-এ উন্মুক্ত প্রক্সি হিসেবে তালিকাভুক্ত আছে।",
        "sorbs_create_account_reason": "আপনার আইপি ঠিকানাটি {{SITENAME}}-এর ব্যবহার করা DNSBL-এ উন্মুক্ত প্রক্সি হিসেবে তালিকাভুক্ত আছে। আপনি কোন অ্যাকাউন্ট সৃষ্টি করতে পারবেন না।",
-       "softblockrangesreason": "বà§\87নামà§\80 à¦\85বদান à¦\86পনার à¦\86à¦\87পি à¦ à¦¿à¦\95ানা à¦¥à§\87à¦\95à§\87 অনুমোদিত নয় ($1)। দয়া করে প্রবেশ করুন।",
+       "softblockrangesreason": "à¦\86পনার à¦\86à¦\87পি à¦ à¦¿à¦\95ানা à¦¥à§\87à¦\95à§\87 à¦¬à§\87নামà§\87 à¦\85বদান à¦°à¦¾à¦\96া অনুমোদিত নয় ($1)। দয়া করে প্রবেশ করুন।",
        "xffblockreason": "X-Forwarded-For হেডারে থাকা আইপি ঠিকানাটি ব্লক করা হয়েছে, হয় এটি আপনার নিজের অথবা আপনার ব্যবহৃত প্রক্সি সার্ভারের আইপি ঠিকানা। ব্লক করার কারণ হল: $1",
        "cant-see-hidden-user": "আপনি যে ব্যবহারকারীকে ব্লক বা লুকিয়ে রাখতে চাচ্ছেন তাকে আগে থেকেই ব্লক বা লুকিয়ে রাখা হয়েছে। এছাড়া আপনার Hideuser অধিকার নেই, তাই আপনি ব্যবহারকারীর অবস্থা পরিবর্তন করতে পারবেন না।",
        "ipbblocked": "আপনি অন্য কোন ব্যবহারকরীকে বাধাদান বা বাধা বাতিল করতে পারবেন না, কারণ আপনি নিজেই অবরুদ্ধ রয়েছেন।",
        "group-bot.js": "/* এখানে সন্নিবেশিত জাভাস্ক্রিপ্ট শুধু বটের জন্য লোড হবে */",
        "group-sysop.js": "/* এখানে সন্নিবেশিত জাভাস্ক্রিপ্ট শুধু প্রশাসকদের জন্য লোড হবে */",
        "group-bureaucrat.js": "/* এখানে সন্নিবেশিত জাভাস্ক্রিপ্ট শুধু ব্যুরোক্র্যাটদের জন্য লোড হবে */",
-       "anonymous": "{{SITENAME}} এর বেনামী {{PLURAL:$1|ব্যবহারকারী|ব্যবহারকারীবৃন্দ}}",
+       "anonymous": "{{SITENAME}}-এর বেনামী {{PLURAL:$1|ব্যবহারকারী|ব্যবহারকারীগণ}}",
        "siteuser": "{{SITENAME}} ব্যবহারকারী $1",
        "anonuser": "{{SITENAME}} বেনামী ব্যবহারকারী $1",
        "lastmodifiedatby": "$3 কর্তৃক $2, $1 তারিখে এই পাতাটি শেষ সম্পাদিত হয়েছিল।",
        "permanentlink": "স্থায়ী সংযোগ",
        "permanentlink-revid": "সংশোধন আইডি",
        "permanentlink-submit": "এই সংশোধনে যান",
+       "newsection": "নতুন অনুচ্ছেদ",
+       "newsection-page": "লক্ষ্য পাতা",
        "dberr-problems": " দুঃখিত! এই সাইটটি বর্তমানে কারীগরী অসুবিধার মুখোমুখি হয়েছে।",
        "dberr-again": "কয়েক মিনিট পর পুনরায় পরিদর্শনের চেষ্টা করুন।",
        "dberr-info": "(ডেটাবেজ প্রবেশ করা সম্ভব হয়নি: $1)",
        "mw-widgets-abandonedit-discard": "সম্পাদনা বাতিল করুন",
        "mw-widgets-abandonedit-keep": "সম্পাদনা অব্যাহত রাখুন",
        "mw-widgets-abandonedit-title": "আপনি কি নিশ্চিত?",
+       "mw-widgets-copytextlayout-copy": "অনুলিপি",
+       "mw-widgets-copytextlayout-copy-fail": "ক্লিপবোর্ডে অনুলিপি করা ব্যর্থ হয়েছে।",
+       "mw-widgets-copytextlayout-copy-success": "ক্লিপবোর্ডে অনুলিপি করা হয়েছে।",
        "mw-widgets-dateinput-no-date": "কোন তারিখ নির্বাচন করা হয়নি",
        "mw-widgets-dateinput-placeholder-day": "বববব-মম-দদ",
        "mw-widgets-dateinput-placeholder-month": "বববব-মম",
        "restrictionsfield-help": "লাইন প্রতি একটি আইপি ঠিকানা বা CIDR পরিসীমা। সবকিছু সক্রিয় করতে ব্যবহার করুন: :<pre>0.0.0.0/0\n::/0</pre>",
        "edit-error-short": "ত্রুটি: $1",
        "edit-error-long": "ত্রুটিসমূহ:\n\n$1",
+       "specialmute": "নিঃশব্দ",
        "specialmute-submit": "নিশ্চিত করুন",
        "revid": "সংশোধন $1",
        "pageid": "পাতার আইডি $1",
index 5243ff8..42b937e 100644 (file)
        "rcfilters-activefilters-show": "Diskouez",
        "rcfilters-advancedfilters": "Siloù araokaet",
        "rcfilters-limit-title": "Kemmoù da vezañ diskouezet",
-       "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|kemm|kemmoù}}, $2",
+       "rcfilters-limit-and-date-label": "$1 kemm, $2",
+       "rcfilters-date-popup-title": "Prantad amzer da glask",
        "rcfilters-days-title": "Deizioù paseet",
        "rcfilters-hours-title": "Eurioù paseet",
        "rcfilters-days-show-days": "($1 {{PLURAL:$1|deiz}})",
        "rcfilters-clear-all-filters": "Riñsañ an holl siloù",
        "rcfilters-show-new-changes": "Gwelet ar c'hemmoù diwezhañ",
        "rcfilters-search-placeholder": "Silañ ar c'hemmoù diwezhañ (merdeiñ pe kregiñ da skrivañ)",
+       "rcfilters-search-placeholder-mobile": "Siloù",
        "rcfilters-invalid-filter": "Sil direizh",
        "rcfilters-empty-filter": "Sil oberiant ebet. War wel emañ an holl gemmoù.",
        "rcfilters-filterlist-title": "Siloù",
        "logentry-import-interwiki": "{{GENDER:$2|Enporzhiet}} eo bet $3 gant $1 adalek ur wiki all",
        "logentry-import-interwiki-details": "{{GENDER:$2|Enporzhiet}} eo bet $3 adalek $5 gant $1 ($4 {{PLURAL:$4|adweladenn}})",
        "logentry-merge-merge": "$1 {{GENDER:$2|en deus lakaet|he deus lakaet}} $3 da gendeuziñ e $4 (adweladennoù betek $5)",
-       "logentry-move-move": "$1 en deus kaset ar bajenn $3 da $4",
-       "logentry-move-move-noredirect": "kaset ar bajenn $3 da $4 gant $1 hep adkas",
-       "logentry-move-move_redir": "kaset ar bajenn $3 da $4 gant $1 dreist un adkas",
-       "logentry-move-move_redir-noredirect": "kaset ar bajenn $3 da $4 gant $1 dreist un adkas hep lezel un adkas",
+       "logentry-move-move": "$1 {{GENDER:$2|en|he|en}} deus kaset ar bajenn $3 da $4",
+       "logentry-move-move-noredirect": "Kaset eo bet ar bajenn $3 da $4 gant $1 hep lezel un adkas",
+       "logentry-move-move_redir": "Kaset eo bet ar bajenn $3 da $4 gant $1 dreist un adkas",
+       "logentry-move-move_redir-noredirect": "Kaset eo bet ar bajenn $3 da $4 gant $1 dreist un adkas hep lezel un adkas",
        "logentry-patrol-patrol": "{{GENDER:$2|Merket}} eo bet an adweladenn $4 eus ar bajenn $3 evel gwiriet gant $1",
        "logentry-patrol-patrol-auto": "{{GENDER:$2|Merket}} eo bet ent emgefre an adweladenn $4 eus ar bajenn $3 evel gwiriet gant $1",
        "logentry-newusers-newusers": "{{GENDER:$2|Krouet}} eo bet ar gont implijer $1",
        "undelete-cantcreate": "N'hallit ket diziverkañ ar bajenn-mañ rak n'eus pajenn ebet gant an anv-mañ ha n'oc'h ket aotreet da grouiñ ar bajenn-mañ.",
        "pagedata-title": "Roadennoù ar bajenn",
        "pagedata-bad-title": "Titl direizh : $1.",
+       "passwordpolicies": "Reolennoù e keñver ar ger-tremen",
        "passwordpolicies-group": "Strollad",
        "passwordpolicies-policies": "Politikerezh",
        "passwordpolicies-policy-passwordcannotmatchusername": "Ar ger-kuzh ne c'hell ket bezañ an anv implijer"
index 6d19937..e1f45cc 100644 (file)
        "subject-preview": "Pregled teme:",
        "previewerrortext": "Došlo je do greške pri pokušaju pregleda izmjena.",
        "blockedtitle": "Korisnik je blokiran",
-       "blockedtext": "'''Vaše korisničko ime ili IP-adresa je blokirana.'''\n\nBlokada izvršena od strane $1.\nDati razlog je sljedeći: ''$2''.\n\n*Početak blokade: $8\n*Kraj perioda blokade: $6\n*Ime blokiranog korisnika: $7\n\nMožete kontaktirati sa $1 ili nekim drugim [[{{MediaWiki:Grouppage-sysop}}|administratorom]] da biste razgovarali o blokadi.\n\nNe možete koristiti opciju ''Pošalji e-mail korisniku'' osim ako niste unijeli e-mail adresu u [[Special:Preferences|Vaše postavke]].\nVaša trenutna IP-adresa je $3, a oznaka blokade je #$5.\nMolimo Vas da navedete gornje podatke pri zahtjevu za deblokadu.",
+       "blockedtext": "<strong>Vaše korisničko ime ili IP-adresa je blokirana.</strong>\n\nBlokada izvršena od strane $1.\nDati razlog je sljedeći: <em>$2</em>.\n\n*Početak blokade: $8\n*Kraj perioda blokade: $6\n*Ime blokiranog korisnika: $7\n\nMožete kontaktirati sa $1 ili nekim drugim [[{{MediaWiki:Grouppage-sysop}}|administratorom]] da biste razgovarali o blokadi.\n\nNe možete koristiti opciju \"{{int:emailuser}}\" osim ako niste unijeli e-mail adresu u [[Special:Preferences|Vaše postavke]].\nVaša trenutna IP-adresa je $3, a oznaka blokade je #$5.\nMolimo Vas da navedete gornje podatke pri zahtjevu za deblokadu.",
        "autoblockedtext": "Vaša IP-adresa automatski je blokirana jer ju je koristio drugi korisnik, a blokirao ju je $1.\nNaveden je sljedeći razlog:\n\n:''$2''\n\n* Početak blokade: $8\n* Kraj blokade: $6\n* Blokirani korisnik: $7\n\nMožete kontaktirati sa $1 ili nekim drugim iz grupe [[{{MediaWiki:Grouppage-sysop}}|administratora]] i zahtijevati da Vas deblokira.\n\nZapamtite da ne možete koristiti opciju \"pošalji e-mail ovom korisniku\" sve dok ne unesete validnu e-mail adresu pri registraciji u Vašim [[Special:Preferences|korisničkim postavkama]] i dok niste spriječeni (blokadom) da je koristite.\n\nVaša trenutna IP-adresa je $3, a ID blokade je $5.\nMolimo da navedete sve gore navedene detalje u zahtjevu za deblokadu.",
        "systemblockedtext": "MediaWiki je automatski blokirao Vaše korisničko ime ili IP-adresu.\nDat je sljedeći razlog:\n\n:<em>$2</em>\n\n* Početak blokade: $8\n* Istek blokade: $6\n* Blokada je namijenjena za: $7\n\nVaša trenutna IP-adresa je $3.\nAko imate pitanja u vezi s blokadom, priložite sve gorenavedene pojedinosti.",
        "blockednoreason": "razlog nije naveden",
        "page_first": "prva",
        "page_last": "posljednja",
        "histlegend": "Odabir razlika: označite radio dugme verzija koje uspoređujete i pritistnite enter ili dugme na dnu. <br />\nObjašnjenje: <strong>({{int:cur}})</strong> = razlika sa trenutnom verzijom, <strong>({{int:last}})</strong> = razlika sa prethodnom verzijom, <strong>{{int:minoreditletter}}</strong> = mala izmjena.",
-       "history-fieldset-title": "Pretraga izmjena",
+       "history-fieldset-title": "Filtriraj izmjene",
        "history-show-deleted": "Samo obrisane",
        "histfirst": "najstarije",
        "histlast": "najnovije",
        "ipbreason": "Razlog:",
        "ipbreason-dropdown": "*Najčešći razlozi blokiranja\n**Netačne informacije\n**Uklanjanje sadržaja stranica\n**Postavljanje spam vanjskih linkova\n**Ubacivanje gluposti/grafita\n**Osobni napadi (ili napadačko ponašanje)\n**Čarapare (zloupotreba više korisničkih računa)\n**Neprihvatljivo korisničko ime",
        "ipb-hardblock": "Spriječi prijavljene korisnike da uređuju s ove IP-adrese",
-       "ipbcreateaccount": "Spriječi pravljenje računa",
-       "ipbemailban": "Spriječi korisnika da šalje e-poštu",
-       "ipbenableautoblock": "Automatski blokiraj posljednju IP-adresu koju je koristio ovaj korisnik i sve druge IP-adrese s kojih je pokušao uređivati",
+       "ipbcreateaccount": "Stvaranje računa",
+       "ipbemailban": "Slanje e-pošte",
+       "ipbenableautoblock": "Automatski blokiraj posljednju IP-adresu ovog korisnika i sve naredne adrese s kojih pokuša uređivati",
        "ipbsubmit": "Blokiraj ovog korisnika",
        "ipbother": "Drugo vrijeme:",
        "ipboptions": "2 sata:2 hours,1 dan:1 day,3 dana:3 days,1 sedmica:1 week,2 sedmice:2 weeks,1 mjesec:1 month,3 mjeseca:3 months,6 mjeseci:6 months,1 godine:1 year,beskonačno:infinite",
        "ipbhidename": "Sakrij korisničko ime iz uređivanja i spiskova",
        "ipbwatchuser": "Prati korisničku stranicu i stranicu za razgovor ovog korisnika",
-       "ipb-disableusertalk": "Spriječi ovog korisnika da uređuje svoju stranicu za razgovor dok je blokiran",
+       "ipb-disableusertalk": "Uređivanje vlastite stranice za razgovor",
        "ipb-change-block": "Ponovno blokiraj korisnika sa novim postavkama",
        "ipb-confirm": "Potvrdite blokiranje",
        "badipaddress": "Pogrešna IP adresa",
        "ipb-blocklist": "Vidi postojeće blokade",
        "ipb-blocklist-contribs": "Doprinosi za {{GENDER:$1|$1}}",
        "ipb-blocklist-duration-left": "još $1",
+       "block-actions": "Blokirati radnje:",
        "block-expiry": "Ističe:",
+       "block-options": "Dodatne opcije:",
+       "block-prevent-edit": "Uređivanje",
+       "block-reason": "Razlog:",
+       "block-target": "Korisničko ime ili IP-adresa:",
        "unblockip": "Odblokiraj korisnika",
        "unblockiptext": "Upotrebite donji upitnik da bi ste vratili\npravo pisanja ranije blokiranoj IP adresi\nili korisničkom imenu.",
        "ipusubmit": "Ukloni ovu blokadu",
index f6f7023..714df0f 100644 (file)
        "edit-no-change": "S'ha ignorat la vostra modificació perquè no feia cap canvi al text.",
        "edit-slots-cannot-add": "{{PLURAL:$1|L'espai no està|Els espais no estan}} implementats aquí: $2.",
        "edit-slots-cannot-remove": "{{PLURAL:$1|L'espai següent és necessari i no es pot suprimir|Els espais següents són necessaris i no es poden suprimir}}: $2.",
+       "edit-slots-missing": "Hi {{PLURAL:$1|manca l'espai següent|manquen els espais següents}}: $2.",
        "postedit-confirmation-created": "S'ha creat la pàgina.",
        "postedit-confirmation-restored": "S'ha restaurat la pàgina.",
        "postedit-confirmation-saved": "S'ha desat la modificació.",
        "grant-editmycssjs": "Modifiqueu el vostre CSS/JSON/JavaScript d'usuari",
        "grant-editmyoptions": "Editeu les vostres preferències d'usuari i la configuració JSON",
        "grant-editmywatchlist": "Modifica la llista de seguiment",
+       "grant-editsiteconfig": "Modificar els CSS/JS del lloc web i d'usuari",
        "grant-editpage": "Modifica les pàgines existents",
        "grant-editprotected": "Modifica pàgines protegides",
        "grant-highvolume": "Edició d'alt volum",
        "action-changetags": "afegeix i elimina etiquetes a les revisions i les entrades de registre individuals",
        "action-deletechangetags": "eliminar etiquetes des de la base de dades",
        "action-purge": "purga la pàgina",
+       "action-apihighlimits": "utilitza límits majors en les consultes API",
+       "action-bigdelete": "eliminar les pàgines amb grans historials",
        "action-blockemail": "blocar un usuari per tal que no enviï correu",
        "action-bot": "ser tractat com un procés automatitzat",
        "action-editprotected": "modificar pàgines protegides com «{{int:protect-level-sysop}}»",
        "action-viewsuppressed": "mostrar revisions amagades de qualsevol usuari",
        "action-hideuser": "blocar un nom d'usuari, amagant-lo del públic",
        "action-unblockself": "desblocar-se un mateix",
+       "action-reupload-own": "sobreescriure fitxers existents que hàgiu carregat",
+       "action-suppressredirect": "no crear redireccions de les pàgines d'origen en reanomenar-les",
        "nchanges": "$1 {{PLURAL:$1|canvi|canvis}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|des de la darrera visita}}",
        "enhancedrc-history": "historial",
        "rcfilters-clear-all-filters": "Esborra tots els filtres",
        "rcfilters-show-new-changes": "Mostra els canvis nous des del $1",
        "rcfilters-search-placeholder": "Filtra els canvis recents (utilitzeu el menú o cerqueu el nom del filtre)",
+       "rcfilters-search-placeholder-mobile": "Filtres",
        "rcfilters-invalid-filter": "Filtre no vàlid",
        "rcfilters-empty-filter": "No hi ha cap filtre actiu. Es mostren totes les contribucions.",
        "rcfilters-filterlist-title": "Filtres",
        "ipb-confirm": "Confirma el blocatge",
        "ipb-sitewide": "A tot el lloc web",
        "ipb-partial": "Parcial",
+       "ipb-sitewide-help": "Cada pàgina en el wiki i totes les altres accions de contribució.",
        "ipb-partial-help": "Pàgines específiques o espais de noms.",
        "ipb-pages-label": "Pàgines",
        "ipb-namespaces-label": "Espais de noms",
        "move-watch": "Vigila aquesta pàgina",
        "movepagebtn": "Reanomena la pàgina",
        "pagemovedsub": "Reanomenament amb èxit",
+       "cannotmove": "No s'ha pogut reanomenar la pàgina {{PLURAL:$1|pel motiu següent|pels motius següents}}:",
        "movepage-moved": "'''«$1» s'ha mogut a «$2»'''",
        "movepage-moved-redirect": "S'ha creat una redirecció.",
        "movepage-moved-noredirect": "La creació d'una redirecció s'ha suprimit.",
        "confirm-mcrrestore-title": "Restaura una revisió",
        "confirm-mcrundo-title": "Desfés un canvi",
        "mcrundofailed": "Ha fallat el desfer",
+       "mcrundo-missingparam": "Manquen paràmetres obligatoris en la sol·licitud.",
        "mcrundo-changed": "La pàgina ha canviat d'ençà que heu vist la diferència. Reviseu el nou canvi.",
        "mcrundo-parse-failed": "No s'ha pogut analitzar la revisió nova: $1",
        "colon-separator": ":&#32;",
        "specialpages-group-developer": "Eines de desenvolupador",
        "blankpage": "Pàgina en blanc",
        "intentionallyblankpage": "Pàgina intencionadament en blanc",
+       "disabledspecialpage-disabled": "Un administrador del sistema ha desactivat aquesta pàgina.",
        "external_image_whitelist": " #Deixeu aquesta línia exactament igual com està.<pre>\n#Poseu fragments d'expressions regulars (regex) (només la part entre els //) a sota.\n#Aquests fragments es correspondran amb els URL d'imatges externes.\n#Es mostraran com a imatges si coincideixen, i si no es mostraran com a enllaços.\n#Les línies que comencen amb un # es tracten com a comentaris.\n#S'hi distingeixen majúscules i minúscules.\n\n#Poseu tots els fragments regex al damunt d'aquesta línia. Deixeu aquesta línia exactament com està.</pre>",
        "tags": "Etiquetes de canvi vàlides",
        "tag-filter": "Filtre d'[[Special:Tags|etiquetes]]:",
        "htmlform-date-invalid": "El valor que heu especificat no és una data reconeguda. Proveu d'utilitzar el format AAAA-MM-DD.",
        "htmlform-time-invalid": "El valor que heu especificat no és una hora reconeguda. Proveu d'utilitzar el format HH:MM:SS.",
        "htmlform-datetime-invalid": "El valor que heu especificat no és una data i hora reconeguda. Proveu d'utilitzar el format AAAA-MM-DD HH:MM:SS.",
+       "htmlform-time-toohigh": "El valor que heu especificat és posterior a la darrera hora permesa de $1.",
        "htmlform-datetime-toolow": "El valor que heu especificat és anterior a la data i hora més antiga permeses, $1.",
        "htmlform-datetime-toohigh": "El valor que heu especificat és posterior a la data i hora permeses, $1.",
        "htmlform-title-badnamespace": "[[:$1]] no es troba en l'espai de noms \"{{ns:$2}}\".",
        "logentry-suppress-block": "$1 {{GENDER:$2|ha blocat}} {{GENDER:$4|$3}} per un temps de $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|ha canviat}} la configuració de blocatge de {{GENDER:$4|$3}} per un temps de $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|va importar}} $3 a través de càrrega de fitxer",
+       "logentry-import-upload-details": "$1 {{GENDER:$2|ha importat}} $3 per càrrega de fitxer ($4 {{PLURAL:$4|revisió|revisions}})",
        "logentry-import-interwiki": "$1 {{GENDER:$2|va importar}} $3 d'un altre wiki",
+       "logentry-import-interwiki-details": "$1 {{GENDER:$2|ha importat}} $3 de $5 ($4 {{PLURAL:$4|revisió|revisions}})",
        "logentry-merge-merge": "$1 {{GENDER:$2|ha fusionat}} $3 en $4 (revisions fins a $5)",
        "logentry-move-move": "$1 ha mogut $3 a $4",
        "logentry-move-move-noredirect": "$1 ha mogut $3 a $4 sense deixar una redirecció",
        "logentry-managetags-activate": "$1 {{GENDER:$2|ha activat}} l'etiqueta \"$4\" per a ser utilitzada en usuaris i bots",
        "logentry-managetags-deactivate": "$1 {{GENDER:$2|ha desactivat}} l'etiqueta \"$4\" per a ser utilitzada en usuaris i bots",
        "log-name-tag": "Registre d'etiquetes",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|ha afegit}} {{PLURAL:$7|l'etiqueta|les etiquetes}} $6 a la revisió $4 de la pàgina $3",
        "rightsnone": "(cap)",
        "rightslogentry-temporary-group": "$1 (temporal, fins a $2)",
        "feedback-adding": "S'està afegint el comentari a la pàgina...",
index 7081e67..ac78987 100644 (file)
        "tooltip-t-specialpages": "Белхан агӀонанийн могӀам",
        "tooltip-t-print": "ХӀокху агӀона зорбанан верси",
        "tooltip-t-permalink": "ХӀокху агӀона версин тӀе цахийцалун хьажорг",
-       "tooltip-ca-nstab-main": "Коьрта яззаман чулацам",
+       "tooltip-ca-nstab-main": "Коьрта агӀонга хьажар",
        "tooltip-ca-nstab-user": "ХӀора декъашхочун долахь йолу агӀо ю",
        "tooltip-ca-nstab-media": "Медиа-файл",
        "tooltip-ca-nstab-special": "ХӀара белхан агӀо ю, хӀара таялуш яц",
index 3bb077b..0fcfa49 100644 (file)
        "rcfilters-clear-all-filters": "Zrušit všechny filtry",
        "rcfilters-show-new-changes": "Zobrazit změny od $1",
        "rcfilters-search-placeholder": "Filtrovat poslední změny (použijte menu nebo vyhledejte název filtru)",
+       "rcfilters-search-placeholder-mobile": "Filtry",
        "rcfilters-invalid-filter": "Neplatný filtr",
        "rcfilters-empty-filter": "Žádné aktivní filtry. Zobrazeny jsou všechny příspěvky.",
        "rcfilters-filterlist-title": "Filtry",
        "changecontentmodel": "Změnit model obsahu stránky",
        "changecontentmodel-legend": "Změnit model obsahu",
        "changecontentmodel-title-label": "Název stránky",
+       "changecontentmodel-current-label": "Současný model obsahu:",
        "changecontentmodel-model-label": "Nový model obsahu",
        "changecontentmodel-reason-label": "Důvod:",
        "changecontentmodel-submit": "Změnit",
        "move-page-legend": "Přesunout stránku",
        "movepagetext": "Použitím tohoto formuláře změníte název stránky a přesunete i celou její historii na nový název.\nPůvodní název se stane přesměrováním na nový název.\nPřesměrování na původní název můžete nechat aktualizovat automaticky.\nPokud nenecháte, nezapomeňte poté zkontrolovat [[Special:DoubleRedirects|dvojitá]] nebo [[Special:BrokenRedirects|přerušená]] přesměrování.\nJe vaší zodpovědností zajistit, aby odkazy stále vedly tam, kam mají.\n\nStránku <strong>není možné</strong> přejmenovat, pokud pod cílovým názvem již nějaká stránka existuje, s výjimkou situace, kdy je cílová stránka přesměrováním na tuto stránku a nemá žádnou historii editací.\nTo znamená, že stránku můžete přesunout zpět na původní název, pokud uděláte chybu, a že nemůžete přepsat existující stránku.\n\n<strong>Poznámka:</strong>\nPřejmenování oblíbené stránky může být drastická a nečekaná změna;\npředtím, než změnu provedete, se ujistěte, že chápete důsledky svého kroku.",
        "movepagetext-noredirectfixer": "Použitím tohoto formuláře změníte název stránky a přesunete i celou její historii na nový název.\nPůvodní název se stane přesměrováním na nový název.\nNezapomeňte poté zkontrolovat [[Special:DoubleRedirects|dvojitá]] nebo [[Special:BrokenRedirects|přerušená]] přesměrování.\nJe vaší zodpovědností zajistit, aby odkazy stále vedly tam, kam mají.\n\nStránku <strong>není možno</strong> přejmenovat, pokud pod cílovým názvem již nějaká stránka existuje, s výjimkou situace, kdy je cílová stránka prázdná nebo je přesměrováním na tuto stránku a nemá žádnou historii editací.\nTo znamená, že stránku můžete přesunout zpět na původní název, pokud uděláte chybu, a že nemůžete přepsat existující stránku.\n\n<strong>Poznámka:</strong>\nPřejmenování oblíbené stránky může být drastická a nečekaná změna; předtím, než změnu provedete, se prosím ujistěte, že chápete důsledky svého kroku.",
+       "movepagetext-noredirectsupport": "Použitím tohoto formuláře změníte název stránky a přesunete i celou její historii na nový název.\nJe vaší zodpovědností zajistit, aby odkazy stále vedly tam, kam mají.\n\nStránku <strong>není možné</strong> přejmenovat, pokud pod cílovým názvem již nějaká stránka existuje.\nTo znamená, že stránku můžete přesunout zpět na původní název, pokud uděláte chybu, a že nemůžete přepsat existující stránku.\n\n<strong>Poznámka:</strong>\nPřejmenování oblíbené stránky může být drastická a nečekaná změna;\npředtím, než změnu provedete, se ujistěte, že chápete důsledky svého kroku.",
        "movepagetalktext": "Pokud zaškrtnete toto pole, přidružená diskusní stránka bude automaticky přesunuta na nový název, leda by tam již neprázdná diskusní stránka existovala.\n\nV takovém případě musíte stránky přesunout nebo sloučit ručně, přejete-li si to.",
        "moveuserpage-warning": "'''Upozornění:''' Chystáte se přesunout uživatelskou stránku. Uvědomte si prosím, že bude přesunuta pouze tato stránka, ale uživatel ''nebude'' přejmenován.",
        "movecategorypage-warning": "<strong>Upozornění:</strong> Chystáte se přesunout stránku kategorie. Uvědomte si, že bude přesunuta pouze tato stránka a že žádné stránky v původní kategorii <em>nebudou</em> do nové překategorizovány.",
index 55157d9..0f8fa08 100644 (file)
        "permanentlink": "Permanenter Link",
        "permanentlink-revid": "Versionskennung",
        "permanentlink-submit": "Gehe zu Version",
+       "newsection": "Neuer Abschnitt",
+       "newsection-page": "Zielseite",
+       "newsection-submit": "Gehe zur Seite",
        "dberr-problems": "Entschuldigung. Diese Seite hat momentan technische Schwierigkeiten.",
        "dberr-again": "Warte bitte einige Minuten und versuche dann, die Seite erneut zu laden.",
        "dberr-info": "(Auf die Datenbank konnte nicht zugegriffen werden: $1)",
        "specialmute-success": "Deine Stummschaltungseinstellungen wurden aktualisiert. Schau dir alle stummgeschalteten Benutzer in [[Special:Preferences|deinen Einstellungen]] an.",
        "specialmute-submit": "Bestätigen",
        "specialmute-label-mute-email": "E-Mails von diesem Benutzer stummschalten",
-       "specialmute-header": "Bitte wähle deine Stummschaltungseinstellungen für <b>{{BIDI:[[User:$1]]}}</b>.",
+       "specialmute-header": "Bitte wähle deine Stummschaltungseinstellungen für Benutzer <b>{{BIDI:[[User:$1|$1]]}}</b>.",
        "specialmute-error-invalid-user": "Der gesuchte Benutzername konnte nicht gefunden werden.",
-       "specialmute-email-footer": "Um deine E-Mail Einstellungen für {{BIDI:$2}} zu verwalten besuche bitte $1.",
+       "specialmute-email-footer": "Um deine E-Mail Einstellungen für Benutzer {{BIDI:$2}} zu verwalten besuche bitte <$1>.",
        "specialmute-login-required": "Bitte melde dich an um deine Stummschaltungseinstellungen zu ändern.",
        "revid": "Version $1",
        "pageid": "Seitenkennung $1",
index 126680d..26ba8a1 100644 (file)
@@ -85,9 +85,9 @@
        "editfont-monospace": "Terzê nusteyê sabıt mesafi",
        "editfont-sansserif": "Fontê Sans-serifi",
        "editfont-serif": "Font (çêşıdê nuştey) Serif",
-       "sunday": "Kırê",
-       "monday": "Dışeme",
-       "tuesday": "Sêşeme",
+       "sunday": "Bazar",
+       "monday": "Bahdêbazari",
+       "tuesday": "Telete",
        "wednesday": "Çarşeme",
        "thursday": "Pancşeme",
        "friday": "Êne",
        "january": "Çele",
        "february": "Gucige",
        "march": "Adar",
-       "april": "Nisane",
-       "may_long": "Gulane",
+       "april": "Nisan",
+       "may_long": "Gulan",
        "june": "Heziran",
        "july": "Temuz",
        "august": "Tebaxe",
        "september": "Keşkelun",
-       "october": "Tışrino Verên",
-       "november": "Tışrino Peyên",
-       "december": "Kanun",
+       "october": "Cıtmeng",
+       "november": "Kelverdan",
+       "december": "Gağan",
        "january-gen": "Çele",
        "february-gen": "Şıbat",
        "march-gen": "Mert",
        "july-gen": "Temuz",
        "august-gen": "Tebaxe",
        "september-gen": "Keşkelun",
-       "october-gen": "Tışrino Verên",
-       "november-gen": "Tışrino Peyên",
-       "december-gen": "Kanun",
+       "october-gen": "Cıtmeng",
+       "november-gen": "Kelverdan",
+       "december-gen": "Gağan",
        "jan": "Çel",
        "feb": "Şbt",
        "mar": "Adr",
        "january-date": "$1 Çele",
        "february-date": "$1 Şıbat",
        "march-date": "$1 Adar",
-       "april-date": "$1 Nisane",
-       "may-date": "$1 Gulane",
+       "april-date": "$1 Nisan",
+       "may-date": "$1 Gulan",
        "june-date": "$1 Heziran",
        "july-date": "$1 Temuze",
        "august-date": "$1 Tebaxe",
        "september-date": "$1 Keşkelun",
-       "october-date": "$1 Tışrino Verên",
-       "november-date": "$1 Tışrino Peyên",
-       "december-date": "$1 Kanun",
+       "october-date": "$1 Cıtmeng",
+       "november-date": "$1 Kelverdan",
+       "december-date": "$1 Gağan",
        "period-am": "VD",
        "period-pm": "BD",
-       "pagecategories": "{{PLURAL:$1|Kategoriye|Kategoriyi}}",
+       "pagecategories": "{{PLURAL:$1|Kategori|Kategoriy}}",
        "category_header": "Perrê kategoriya \"$1\"'i",
        "subcategories": "Kategoriyê bınêni",
        "category-media-header": "Dosye yê ke kategoriya \"$1\" dı",
        "category-file-count": "{{PLURAL:$2|Na kategori tenya dosya ya cêri muhtewa kena.|Na kategori de $2 ra pêro piya {{PLURAL:$1|1 dosya est a|$1 dosyey est ê}}.}}",
        "category-file-count-limited": "{{PLURAL:$1|Dosye|$1 Dosyey}} na kategori de yê.",
        "listingcontinuesabbrev": "dewam...",
-       "index-category": "Pelê rêzıni",
+       "index-category": "Perrê rêzıni",
        "noindex-category": "Perrê bêrêzıni",
        "broken-file-category": "Perri be linkanê dosya çewte",
        "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "Heqa",
        "article": "Pela zerreki",
        "newwindow": "(pençerey newey de beno a)",
-       "cancel": "Bıtexelne",
+       "cancel": "İbtal",
        "moredotdotdot": "Vêşi...",
        "morenotlisted": "Na lista qay kemi ya.",
-       "mypage": "Pele",
-       "mytalk": "Werênayış",
-       "anontalk": "Werênayış",
+       "mypage": "Perr",
+       "mytalk": "Vaten",
+       "anontalk": "Vaten",
        "navigation": "Pusula",
        "and": "&#32;u",
        "faq": "PVP",
        "help-mediawiki": "Heqa MediaWiki de peşti",
        "search": "Cı geyre",
        "searchbutton": "Cı geyre",
-       "go": "Şori",
+       "go": "Şo",
        "searcharticle": "Şo",
-       "history": "Tarixê perrer",
+       "history": "Verorê perrer",
        "history_short": "Veror",
-       "history_small": "tarix",
-       "updatedmarker": "ziyaretê peyêni dıma biyo rocane",
-       "printableversion": "Versiyonê çapkerdışi",
+       "history_small": "veror",
+       "updatedmarker": "ziyaretê şımayê peyêni dıma biyo rocane",
+       "printableversion": "Versiyono nustenaye",
        "permalink": "Gıreyo daimi",
-       "print": "Bınuşne",
-       "view": "Bıvêne",
+       "print": "Bınustenê",
+       "view": "Bıvin",
        "view-foreign": "$1 de bıvin",
-       "edit": "Bıvurne",
+       "edit": "Bıvurn",
        "edit-local": "Şınasnayışê lokali bıvurne",
-       "create": "Vıraze",
+       "create": "Vıraz",
        "create-local": "Şınasnayışê lokali cı ke",
-       "delete": "Bestere",
-       "undelete_short": "{{PLURAL:$1|Yew vırnayışi|$1 Vırnayışan}} mestere",
+       "delete": "Bestern",
+       "undelete_short": "{{PLURAL:$1|nê vırnayışi|$1 vırnayışa}} peyser bıyarê",
        "viewdeleted_short": "{{PLURAL:$1|Jew vurnayış esternayi|$1 Vurnayışanê esternayan}} bımotne",
        "protect": "Bışevekne",
        "protect_change": "bıvırne",
        "unprotect": "Starnayışi bıvurne",
        "newpage": "Perra newi",
-       "talkpagelinktext": "werênayış",
+       "talkpagelinktext": "vaten",
        "specialpage": "Pela xısusiye",
        "personaltools": "Hacetê şexsiy",
-       "talk": "Werênayış",
+       "talk": "Vaten",
        "views": "Asayışi",
        "toolbox": "Haceti",
        "tool-link-userrights": "Grubanê {{GENDER:$1|karberi}} bıvırnë",
        "edithelp": "Peştdariya vurnayışi",
        "helppage-top-gethelp": "Peşti",
        "mainpage": "Perra Seri",
-       "mainpage-description": "Pela seri",
+       "mainpage-description": "Pera seri",
        "policy-url": "Project:Terzê hereketi",
        "portal": "Portalê cemati",
        "portal-url": "Project:Portalê cemati",
        "collapsible-collapse": "Teng ke",
        "collapsible-expand": "Hera kerê",
        "confirmable-confirm": "{{GENDER:$1|Şıma}} bêgumanê?",
-       "confirmable-yes": "Eya",
+       "confirmable-yes": "E",
        "confirmable-no": "Nê",
        "thisisdeleted": "Bıvêne ya zi $1 peyser biya?",
        "viewdeleted": "$1 bıvin?",
        "restorelink": "{{PLURAL:$1|jew vurnayış besteriya|$1 vurnayışi besteriyaye}}",
-       "feedlinks": "Weyiyekerdış:",
+       "feedlinks": "Resnayış:",
        "feed-invalid": "Qeydey cıresnayışê  beğşi nêvêreno.",
        "feed-unavailable": "Cıresnayışê şebekey çıniyê",
        "site-rss-feed": "$1 Cıresnayışê RSSi",
        "red-link-title": "$1 (pele çıniya)",
        "sort-descending": "Rêzkerdışo kêmbiyaye",
        "sort-ascending": "Rêzkerdışo zêdiyaye",
-       "nstab-main": "Pele",
+       "nstab-main": "Perr",
        "nstab-user": "Pera karberi",
        "nstab-media": "Pela medya",
-       "nstab-special": "Pela xısusiye",
-       "nstab-project": "Perra proji",
+       "nstab-special": "Perra bağse",
+       "nstab-project": "Perra procey",
        "nstab-image": "Dosya",
        "nstab-mediawiki": "Mesac",
        "nstab-template": "Şablon",
        "nstab-help": "Perra pasti",
-       "nstab-category": "Kategoriye",
+       "nstab-category": "Kategori",
        "mainpage-nstab": "Pera seri",
        "nosuchaction": "Fealiyeto wınasi çıniyo",
        "nosuchactiontext": "URL ra kar qebul nêbı.\nŞıma belka URL şaş nuşt, ya zi gıreyi şaş ra ameyi.\nKeyepelê {{SITENAME}} eşkeno xeta aşkera bıkero.",
        "actionthrottled": "Kerden peysnaya",
        "actionthrottledtext": "Riyê tedbirê anti-spami ra,  wextê do kılmek de şıma nê fealiyeti nêşkenê zaf zêde bıkerê, şıma ki no hedi viyarna ra.\nÇend deqey ra tepeya reyna bıcerrebnên.",
        "protectedpagetext": "Ena perre vırnayış u kerdışanê binan rê şevekniyaya.",
-       "viewsourcetext": "Şıma şenê çımey ena perre bıvênê u kopya kerê {{MediaWiki Wesiqe malumat}}",
+       "viewsourcetext": "Şıma şenê çımey ena perer bıvinê u kopya kerê",
        "viewyourtext": "Na pela '''Vurnayışê ke kerdê''' re şıma şenê kopya kerê:",
        "protectedinterface": "Na pela qandê nusnerin destegê verri dana u kes xırabin nêqero deye kerda kılit.",
        "editinginterface": "'''İqaz:''' Şıma yew perra ke softwarei rê nuştey miyan-bestoği dana cı, aye vırnenê.\nVırnayışê ena perre do eno wiki sero asayışê miyan-bestoğê karberanê binan de bıaso.\n\nTadayışi (çarnayışi) rê , yardımê [https://translatewiki.net/wiki/Main_Page?setlang=diq translatewiki.net]i ra haydarê procêdoşkerdışi de vınderê.",
        "yourdomainname": "Yewdestê şıma:",
        "password-change-forbidden": "Şıma na wiki de nêşenê parola bıvurnê.",
        "externaldberror": "Ya database de xeta esta ya zi heqê şıma çino şıma no hesab bıvurni.",
-       "login": "Cı kewe",
+       "login": "Ronıştış",
        "login-security": "Kamiya xo araşt kerê",
        "nav-login-createaccount": "Dekew de / hesab vıraze",
        "logout": "Bıveciye",
        "botpasswords-label-appid": "Nameyê boti:",
        "botpasswords-label-create": "Vıraze",
        "botpasswords-label-update": "Rocane ke",
-       "botpasswords-label-cancel": "Bıtexelne",
-       "botpasswords-label-delete": "Bestere",
+       "botpasswords-label-cancel": "İbtal",
+       "botpasswords-label-delete": "Bestern",
        "botpasswords-label-resetpassword": "Parola raçarne",
        "botpasswords-label-grants": "İmtıyazê ravêrdeyi:",
        "botpasswords-label-grants-column": "Dayen",
        "resetpass_forbidden-reason": "Parola nêvuriyena: $1",
        "resetpass-no-info": "şıma gani hesab akere u hona bıeşke bırese cı",
        "resetpass-submit-loggedin": "Parola bıvurne",
-       "resetpass-submit-cancel": "Bıtexelne",
+       "resetpass-submit-cancel": "İbtal",
        "resetpass-wrong-oldpass": "parolayo parola maqbul niyo.\nşıma ya parolaye xo vurnayo ya zi parolayo muwaqqat waşto.",
        "resetpass-recycled": "Parolaya şımaya newiye, wa paroloya şımaya verêne ra ciya bo.",
        "resetpass-temp-emailed": "E postaya rışyayê yubkoda şıma ronıştış akerdo.  Ronıştışi xo temammkerdışi rê yu parolaya newi lazım a",
-       "resetpass-temp-password": "parolayo muweqet:",
+       "resetpass-temp-password": "Parolaya idareteni",
        "resetpass-abort-generic": "Vurnayışê parola terefê yew niçıki ra texeliya.",
        "resetpass-expired": "Dema parolay da şıma qedya ya. Qandê cıkewtışi u patolaya newi vıraz",
        "resetpass-expired-soft": "Şifrey şıma nêvêreno u ganê ke reyna bıvıraziyo. Reca ma aya ke şıma xo rê şifreyê do newe weçinê, ya zi şıma \"{{int:authprovider-resetpass-skip-label}}\" bıtıknê ke dıma yew şifreyo newe vırazê.",
        "rcfilters-clear-all-filters": "Parzûnan pêro pak kerê",
        "rcfilters-show-new-changes": "$1 ra nata vurnayışanê neweyan bımocne",
        "rcfilters-search-placeholder": "Vurnayışanê peyênan parzûn kerê (menuyi bıgurenê ya zi nameyê parzûni cıgeyrê)",
+       "rcfilters-search-placeholder-mobile": "Parzûni",
        "rcfilters-invalid-filter": "Parzûno nêravêrde",
        "rcfilters-empty-filter": "Parzûnê aktifi çıniyê. İştırakê cı pêro mocniyenê.",
        "rcfilters-filterlist-title": "Parzûni",
        "changecontentmodel": "Modelê zerrekê pele bıvurne",
        "changecontentmodel-legend": "Modelê zerreki bıvurne",
        "changecontentmodel-title-label": "Sernameyê pele",
+       "changecontentmodel-current-label": "Mewcud zerrekê modeli:",
        "changecontentmodel-model-label": "Modelê zerrekiyo newe",
        "changecontentmodel-reason-label": "Sebeb:",
        "changecontentmodel-submit": "Bıvırne",
        "changecontentmodel-success-title": "Modelê zerreki vurriya",
+       "changecontentmodel-success-text": "Tewrê zerreki [[:$1]] vurneya.",
        "changecontentmodel-emptymodels-title": "Modelê zerreki mewcud niyo",
        "log-name-contentmodel": "Qeydê vurnayışanê modelê zerreki",
        "logentry-contentmodel-change-revertlink": "peyser biya",
        "sp-contributions-deleted": "iştırakê {{GENDER:$1|karberi}} esterdi",
        "sp-contributions-uploads": "Barkerdışi",
        "sp-contributions-logs": "qeydi",
-       "sp-contributions-talk": "werênayış",
+       "sp-contributions-talk": "vaten",
        "sp-contributions-userrights": "idareyê heqanê {{GENDER:$1|karberan}}",
        "sp-contributions-blocked-notice": "Eno karber/ena karbere emanet blokekerdeyo/blokekerdiya.\nCıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:",
        "sp-contributions-blocked-notice-anon": "Eno adresê IPi bloke biyo.\nCıkewtışo tewr peyêno ke bloke biyo, cêr seba referansi belikerdeyo:",
        "sp-contributions-newonly": "Tenya vurnayışanê pelevıraştışi bımocne",
        "sp-contributions-hideminor": "Vurriyayışanê werdiyan bınımne",
        "sp-contributions-submit": "Cı geyre",
-       "whatlinkshere": "Linkê tedeestey",
+       "whatlinkshere": "Gırey na perer",
        "whatlinkshere-title": "Wesiqe da \"$1\" rê gıre dayen perri",
        "whatlinkshere-page": "Pele:",
        "linkshere": "Pera <strong>$2</strong> rê gıre dayen perri",
        "autoblocklist-submit": "Cı geyre",
        "autoblocklist-legend": "Lista blokanê otomatikan",
        "autoblocklist-localblocks": "{{PLURAL:$1|otoblokoyo lokal|otoblokeyê lokali}}",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|otobloqeyo bin|otobloqeyê bini}}",
        "ipblocklist": "Karberê kılitbiyayey",
        "ipblocklist-legend": "Karberê kılit biyayey bıvin",
        "blocklist-userblocks": "Kılitkerdışê hesaban bınımne",
        "blocklink": "kılit ke",
        "unblocklink": "ake",
        "change-blocklink": "kılitkerdışi bıvurne",
+       "empty-username": "(bê namey karberi nêbeno)",
        "contribslink": "iştıraki",
        "emaillink": "e-poste bırışe",
        "autoblocker": "Şıma otomatikmen kılit biy, çıke adresa şımaya ''IP''y terefê \"[[User:$1|$1]]\" gureniyena.\nSebebê kılitbiyayışê $1'i \"$2\"o",
        "javascripttest-qunit-intro": "Mediawiki.org dı [dokumanê $1] bıvinê.",
        "tooltip-pt-userpage": "Pela {{GENDER:|şımaya karberi}}",
        "tooltip-pt-anonuserpage": "pelê karberê IPyi",
-       "tooltip-pt-mytalk": "Pela {{GENDER:|toya}} werênayışi",
-       "tooltip-pt-anontalk": "vurnayiş ê ke no Ipadresi ra biyo muneqeşa bıker",
+       "tooltip-pt-mytalk": "Pera {{GENDER:|şıma}}ya vaten",
+       "tooltip-pt-anontalk": "'''Ena adresa IP ra vurnayışa sero qal bıqerê'''",
        "tooltip-pt-preferences": "Tercihê {{GENDER:|şıma}}",
        "tooltip-pt-watchlist": "Listey peranê ke to gırotê seyr kerdış",
        "tooltip-pt-mycontris": "Yew lista iştırakanê {{GENDER:|şıma}}",
        "htmlform-date-placeholder": "SSSS-AA-RR",
        "htmlform-time-placeholder": "SS:DD:SS",
        "htmlform-datetime-placeholder": "SSSS-AA-RR SS:DD:SS",
+       "htmlform-title-not-exists": "$1 çıni ya.",
+       "htmlform-user-not-exists": "<strong>$1</strong> çıni ya.",
+       "htmlform-user-not-valid": "<strong>$1</strong> hewl namey karberi niyo.",
        "logentry-delete-delete": "$1 perra $3 {{GENDER:$2|esterıte}}",
+       "logentry-delete-delete_redir": "$1, hetenayışê $3 sero qandê nusnayışi {{GENDER:$2|bıesternê }}",
        "logentry-delete-restore": "$1 pela $3 ($4) {{GENDER:$2|peyser arde}}",
        "logentry-delete-restore-nocount": "$1, pela $3 {{GENDER:$2|timar kerd }}",
        "restore-count-revisions": "{{PLURAL:$1|1 çımraviyarnayış|$1 çımraviyarnayışi}}",
        "revdelete-unrestricted": "vergırewtışê ke xızmekaran rê dariyê we",
        "logentry-block-block": "$1, karber {{GENDER:$4|$3}} $5 demi rê {{GENDER:$2|kerd men}} $6",
        "logentry-block-unblock": "$1, {{GENDER:$4|$3}} {{GENDER:$2|men kerdış wedarna}}",
+       "logentry-block-reblock": "$1, bloqey karberê {{GENDER:$4|$3}} qandê $5 roca {{GENDER:$2|vurna}} $6",
        "logentry-partialblock-block-page": "{{PLURAL:$1|pele|peli}} $2",
        "logentry-partialblock-block-ns": "{{PLURAL:$1|cayê nameyi|cayê nameyan}} $2",
        "logentry-import-upload": "$1 {{GENDER:$2|zere kerdışa }} $3'i Dosya kerd bar.",
+       "logentry-merge-merge": "$1, pera $3 pera $4 ya {{GENDER:$2|kerd jew}}( hetana versiyonanê tarixê $5  )",
        "logentry-move-move": "$1, pela $3 ra {{GENDER:$2|kırışt}} pela $4",
        "logentry-move-move-noredirect": "$1, pera $3'i bêhetenayış {{GENDER:$2|kırışt}} pera $4`i",
        "logentry-move-move_redir": "$1 {{GENDER:$2|kırışna}} riperr $3 be $4 weçarnayış sera.",
        "logentry-newusers-create2": "Hesabê karberi $1 terefê $3 ra {{GENDER:$2|vıraziya}}",
        "logentry-newusers-byemail": "Karber $1 hesabe $3 {{GENDER:$2|virast}} u parola rist epostadaci",
        "logentry-newusers-autocreate": "Hesabê karberi $1 otomatikmen {{GENDER:$2|vıraşt}}",
+       "logentry-protect-move_prot": "$1, eyarê şeveknayışi pera $4 ra {{GENDER:$2|kırışt}} pera $3",
+       "logentry-protect-unprotect": "$1, şeveknayışê pera $3 {{GENDER:$2|wedarna}}",
        "logentry-protect-protect": "$1, pela $3 {{GENDER:$2|şeveknê}} $4",
        "logentry-protect-protect-cascade": "$1, pela $3 {{GENDER:$2|şeveknê}} $4 [qademeyın]",
+       "logentry-protect-modify": "$1, qandê pera $3 sewiyey şeveknayışi {{GENDER:$2|vırna}} $4",
+       "logentry-protect-modify-cascade": "$1, qandê pera $3 sewiyey şeveknayışi {{GENDER:$2|vırna}} $4 [qademeyın]",
        "logentry-rights-rights": "$1 qandê {{GENDER:$6|$3}} rê ezayiya grube $4 ra $5 {{GENDER:$2|vuriye}}",
        "logentry-rights-rights-legacy": "$1 qandê $3 rê ezayiya grube {{GENDER:$2|vuriye}}",
        "logentry-rights-autopromote": "$1 otomatikmen $4 ra $5 {{GENDER:$2|terfi bi}}",
        "pageid": "IDyê pela $1",
        "gotointerwiki": "{{SITENAME}} ra abırriyeno",
        "pagedata-title": "Dayiyê pele",
+       "pagedata-bad-title": "Sereko xırab:$1",
        "passwordpolicies": "Politikaya parola",
        "passwordpolicies-group": "Grube",
        "passwordpolicies-policies": "Politikeyi",
-       "passwordpolicies-policy-minimalpasswordlength": "Parola gani tewr senık be {{PLURAL:$1|1 karakter|$1 karakteran}} derg bo"
+       "passwordpolicies-policy-minimalpasswordlength": "Parola gani tewr senık be {{PLURAL:$1|1 karakter|$1 karakteran}} derg bo",
+       "passwordpolicies-policyflag-forcechange": "Lazımo ke cıkewtışi bıvırnê",
+       "passwordpolicies-policyflag-suggestchangeonlogin": "Vırnayışê cıkewtış bıwaz",
+       "userlogout-continue": "Şıma qayılê bıvıciyê?"
 }
index e0ae02b..7125f9c 100644 (file)
        "tag-mw-changed-redirect-target-description": "Επεξεργασίες που αλλάζουν το στόχο μιας ανακατεύθυνσης",
        "tag-mw-blank": "Άδειασμα περιεχομένου σελίδας",
        "tag-mw-blank-description": "Επεξεργασίες που σβήνουν όλο το περιεχόμενο σελίδας",
-       "tag-mw-replace": "Î\91νÏ\84ικαÏ\84αÏ\83Ï\84άθηκε",
+       "tag-mw-replace": "Î\91νÏ\84ικαÏ\84άÏ\83Ï\84αÏ\83η",
        "tag-mw-replace-description": "Επεξεργασίες που αφαιρούν πάνω από 90% του περιεχομένου της σελίδας",
        "tag-mw-rollback": "Επαναφορά",
        "tag-mw-rollback-description": "Επεξεργασίες που επαναφέρουν προηγούμενες επεξεργασίες χρησιμοποιώντας τον σύνδεσμο επαναφοράς",
-       "tag-mw-undo": "Î\91ναιÏ\81έθηκε",
+       "tag-mw-undo": "Î\91ναίÏ\81εÏ\83η",
        "tag-mw-undo-description": "Επεξεργασίες που αναιρούν προηγούμενες επεξεργασίες χρησιμοποιώντας τον σύνδεσμο αναίρεσης",
        "tags-title": "Ετικέτες",
        "tags-intro": "Η σελίδα καταγράφει τις ετικέτες, καθώς και το τι σημαίνει η κάθε μία, με τις οποίες το λογισμικό μπορεί να μαρκάρει μία επεξεργασία.",
index a509502..bf7a499 100644 (file)
        "permanentlink-revid": "Revision ID",
        "permanentlink-submit": "Go to revision",
        "permanentlink-summary": "",
+       "newsection": "New section",
+       "newsection-page": "Target page",
+       "newsection-submit": "Go to page",
+       "newsection-summary": "",
        "dberr-problems": "Sorry! This site is experiencing technical difficulties.",
        "dberr-again": "Try waiting a few minutes and reloading.",
        "dberr-info": "(Cannot access the database: $1)",
index baf32fd..1861d2e 100644 (file)
        "changecontentmodel": "Ŝanĝi la enhavomodelon de paĝo",
        "changecontentmodel-legend": "Ŝanĝi la enhavomodelon",
        "changecontentmodel-title-label": "Titolo de paĝo",
+       "changecontentmodel-current-label": "Aktuala enhavmodelo:",
        "changecontentmodel-model-label": "Nova enhavomodelo",
        "changecontentmodel-reason-label": "Kialo:",
        "changecontentmodel-submit": "Ŝanĝi",
        "block-log-flags-angry-autoblock": "progresa aŭtoforbaro ebliĝis",
        "block-log-flags-hiddenname": "salutnomo kaŝita",
        "range_block_disabled": "La ebleco de administranto krei forbaritajn intervalojn da IP-adresoj estas malebligita.",
+       "ipb-prevent-user-talk-edit": "Redaktado de onia propra diskutpaĝo devas esti permesata pri parta forbaro, krom se ĝi inkluzivas malpermeson pri la uzanto-diskutpaĝa nomspaco.",
        "ipb_expiry_invalid": "Nevalida blokdaŭro.",
        "ipb_expiry_old": "Limdato antaŭas la nuntempon.",
        "ipb_expiry_temp": "Kaŝitaj salutnomaj blokoj estu daŭraj.",
        "move-page-legend": "Alinomi paĝon",
        "movepagetext": "Per la jena formulo vi povas ŝanĝi la nomon de iu paĝo, kunportante ĝian historion de redaktoj al la nova nomo.\nLa antaŭa titolo fariĝos alidirektilo al la nova titolo.\nVi povas ĝisdatigi alidirektilojn kiu indikas la originalan titolon aŭtomate.\nSe vi elektas ĝisdatigi permane, bonvolu kontroli [[Special:DoubleRedirects|duoblajn]] aŭ [[Special:BrokenRedirects|rompitajn alidirektilojn]].\nVi estas responsa por certigi ke ligilojn direktas fidinde.\n\nNotu, ke la paĝo '''ne''' estos movita se jam ekzistas paĝo ĉe la nova titolo, krom se tiu loko estas malplena aŭ alidirektilo al ĉi tiu paĝo, kaj sen antaŭa redaktohistorio.\nPro tio, vi ja povos removi la paĝon je la antaŭa titolo se vi mistajpus, kaj ne povas forviŝi ekzistantan paĝon per movo.\n\n'''Note:'''\nTio povas esti drasta kaj neatendita ŝanĝo por populara paĝo;\nbonvolu certigi vin, ke vi komprenas ties konsekvencojn antaŭ ol vi antaŭeniru.",
        "movepagetext-noredirectfixer": "Per jena formularo vi povas alinomigi paĝon, kaj movi tutan ĝian redaktohistorion al la nova nomo. \nLa antaŭa titolo alidirektigos onin al la nova titolo.\nKontrolu pri [[Special:DoubleRedirects|duoblajn]] aŭ [[Special:BrokenRedirects|nefunkciantajn alidirektilojn]].\nVi respondecas pri tio ke ligoj restas montrantaj ĝustadirekten.\n\nKonsciu ke la paĝo <strong>ne</strong> estas movota se jam ekzistas paĝo havanta la novan titolon, krom se ĝi estas alidirektilo sen antaŭa redaktohistorio.\nTio ĉi signifas ke vi povas alinomigi paĝon reen al antaŭa nomo se vi eraras, kaj vi ke vi ne povas anstataŭigi ekzistantan paĝon.\n\n<strong>Rimarko:</strong>\nEblas ke tio ĉi estas drasta kaj neatendita ŝanĝo de populara paĝo;\nAntaŭ daŭrigi, bonvolu certiĝi, ke vi komprenas la konsekvencojn de tiuj ĉi ŝanĝo.",
+       "movepagetext-noredirectsupport": "La jena formularo renomas paĝon, movante ĉiom da ĝia historio al la nova nomo.\nVi respondecas pri certigo ke ligiloj daŭre indikas la ĝustajn celojn.\n\nNotu ke la paĝo <strong>ne</strong> estos movita se jam ekzistas paĝo ĉe la nova titolo.\nTial, vi povas renomi paĝon reen al la originala titolo se vi misrenomis, kaj vi ne povas anstataŭigi ekzistantan paĝon.\n\n<strong>Noto:</strong>\nĈi tio estas eble drasta kaj neatendata ŝanĝo pri populara paĝo;\nbonvolu certigu ke vi komprenas la konsekvencon de tio, antaŭ ol fari tion.",
        "movepagetalktext": "Se vi validas tiun elektobutono, la asociata diskutpaĝo estos aŭtomate alinomita al nova titolo, krom se malplena diskutpaĝo jam ekzistas.\n\nTiujokaze, vi alinomigendos aŭ kunfandendos malaŭtomate la paĝon se vi tion deziras.",
        "moveuserpage-warning": "<strong>Averto:</strong> Vi preskaŭ alinomas paĝon de uzanto. Bonvolu noti ke nur la paĝo estos alinomita kaj la uzanto mem <em>ne</em> estos alinomita.",
        "movecategorypage-warning": "<strong>Averto:</strong> Vi baldaŭ movos kategorian paĝon. Bonvolu noti ke, nur la paĝo estos movita, kaj la paĝoj en la malnova kategorio <em>ne</em> transiros en la novan kategorion.",
        "permanentlink": "Konstanta ligilo",
        "permanentlink-revid": "Identigilo de revizio",
        "permanentlink-submit": "Iri al revizio",
+       "newsection": "Nova paragrafo",
+       "newsection-page": "Cela paĝo",
+       "newsection-submit": "Iri al paĝo",
        "dberr-problems": "Bedaŭrinde, ĉi tiu retejo suferas pro teknikaj problemoj.",
        "dberr-again": "Bonvolu atendi kelkajn minutojn kaj reŝargi.",
        "dberr-info": "(Ne eblas konekti la datumbazon: $1)",
index 6adbf38..814e6d7 100644 (file)
        "systemblockedtext": "Tu nombre de usuario o dirección IP ha sido bloqueado automáticamente por el software MediaWiki.\nLa razón dada es:\n\n:<em>$2</em>\n\n* Inicio del bloqueo: $8\n* Caducidad de bloqueo: $6\n* Destinatario del bloqueo: $7\n\nTu dirección IP actual es $3.\nPor favor, incluye todos los datos aquí mostrados en cualquier consulta que hagas.",
        "blockednoreason": "no se ha especificado el motivo",
        "blockedtext-composite": "<strong>Tu nombre de usuario o dirección IP han sido bloqueados.</strong>\n\nLa razón es:\n\n:<em>$2</em>.\n\n* Inicio del bloqueo: $8\n* Vencimiento del bloqueo más largo: $6\n\n* $5\n\nTu dirección IP actual es $3.\nPor favor, incluye todos los detalles anteriores en cualquier consulta que realices.",
+       "blockedtext-composite-ids": "Identificadores de bloqueo relevantes: $1 (tu dirección IP puede encontrarse también en alguna lista negra)",
        "blockedtext-composite-no-ids": "Tu dirección IP figura en varias listas negras",
-       "blockedtext-composite-reason": "Hay múltiples bloques contra tu cuenta y/o dirección IP.",
+       "blockedtext-composite-reason": "Existen varios bloqueos contra tu cuenta o dirección IP",
        "whitelistedittext": "Tienes que $1 para editar páginas.",
        "confirmedittext": "Debes confirmar tu dirección de correo electrónico antes de poder editar páginas. Por favor, configura y confirma tu dirección de correo a través de tus [[Special:Preferences|preferencias de usuario]].",
        "nosuchsectiontitle": "Sección no encontrada",
        "search-interwiki-more": "(más)",
        "search-interwiki-more-results": "más resultados",
        "search-relatedarticle": "Relacionado",
+       "search-unknown-profile": "No se reconoce el perfil de búsqueda $1; se aplicará el perfil predeterminado.",
        "searchrelated": "relacionado",
        "searchall": "todos",
        "showingresults": "Abajo se {{PLURAL:$1|muestra <strong>1</strong> resultado|muestran hasta <strong>$1</strong> resultados}} comenzando por el n.º <strong>$2</strong>.",
        "right-editmyusercss": "Editar tus archivos CSS",
        "right-editmyuserjson": "Editar tus propias páginas en formato JSON",
        "right-editmyuserjs": "Editar tus archivos JavaScript",
+       "right-editmyuserjsredirect": "Editar tus propias páginas de usuario en formato JavaScript cuando sean redirecciones",
        "right-viewmywatchlist": "Ver su propia lista de seguimiento",
        "right-editmywatchlist": "Editar su propia lista de seguimiento (algunas acciones seguirán añadiendo páginas aun sin este permiso).",
        "right-viewmyprivateinfo": "Ver su propia información privada (ej.: correo electrónico, nombre real)",
        "action-editmyusercss": "editar tus propios archivos CSS",
        "action-editmyuserjson": "editar tus propios archivos JSON",
        "action-editmyuserjs": "editar tus propios archivos JavaScript",
+       "action-editmyuserjsredirect": "editar tus propias páginas de usuario en formato JavaScript cuando sean redirecciones",
        "action-viewsuppressed": "ver revisiones ocultas de cualquier usuario",
        "action-hideuser": "bloquear un nombre de usuario, haciéndolo invisible",
-       "action-ipblock-exempt": "evitar bloques de IP, autobloqueos y bloqueos a distancia",
+       "action-ipblock-exempt": "evitar bloqueos a IP, automáticos y por intervalos",
        "action-unblockself": "desbloquearse a sí mismo",
        "action-noratelimit": "no resultar afectado por los límites de frecuencia de edición",
        "action-reupload-own": "sobrescribir archivos existentes subidos por uno mismo",
        "rcfilters-clear-all-filters": "Borrar todos los filtros",
        "rcfilters-show-new-changes": "Ver cambios nuevos desde $1",
        "rcfilters-search-placeholder": "Filtrar cambios (utiliza el menú o busca el nombre de un filtro)",
+       "rcfilters-search-placeholder-mobile": "Filtros",
        "rcfilters-invalid-filter": "Filtro no válido",
        "rcfilters-empty-filter": "No hay filtros activos. Se muestran todas las contribuciones.",
        "rcfilters-filterlist-title": "Filtros",
        "changecontentmodel": "Cambiar el modelo de contenido de una página",
        "changecontentmodel-legend": "Cambiar el modelo de contenido",
        "changecontentmodel-title-label": "Título de página",
+       "changecontentmodel-current-label": "Modelo de contenido actual:",
        "changecontentmodel-model-label": "Modelo de contenido nuevo",
        "changecontentmodel-reason-label": "Motivo:",
        "changecontentmodel-submit": "Cambiar",
        "block-log-flags-angry-autoblock": "autobloqueo avanzado habilitado",
        "block-log-flags-hiddenname": "nombre de usuario ocultado",
        "range_block_disabled": "La facultad administrativa de crear bloqueos por intervalos está desactivada.",
+       "ipb-prevent-user-talk-edit": "Se debe permitir editar la propia página de discusión en un bloqueo parcial, salvo que incluya una restricción en el espacio de nombres \"Usuario discusión\".",
        "ipb_expiry_invalid": "El tiempo de caducidad no es válido.",
        "ipb_expiry_old": "El tiempo de expiración está en el pasado.",
        "ipb_expiry_temp": "Los bloqueos a nombres de usuario ocultos deben ser permanentes.",
        "move-page-legend": "Trasladar la página",
        "movepagetext": "Al usar el siguiente formulario, se renombrará una página y se trasladará todo su historial al nuevo nombre.\nEl título anterior se convertirá en una redirección al título nuevo.\nPuedes actualizar automáticamente las redirecciones que apuntan al título original.\nSi eliges no hacerlo, asegúrate de revisar posibles redirecciones [[Special:DoubleRedirects|dobles]] o [[Special:BrokenRedirects|incorrectas]].\nTú eres responsable de asegurarte de que los enlaces sigan apuntando adonde se supone que deberían hacerlo.\n\nRecuerda que la página <strong>no</strong> se trasladará si ya existe una página con el título nuevo, salvo que sea una redirección y no tenga historial de edición.\nEsto significa que podrás renombrar una página a su título original si has cometido un error, pero que no podrás sobrescribir una página existente.\n\n<strong>Nota:</strong>\nEste puede ser un cambio drástico e inesperado para una página popular; asegúrate de entender las consecuencias del procedimiento antes de seguir adelante.",
        "movepagetext-noredirectfixer": "Al usar el siguiente formulario, se renombrará una página y se trasladará todo su historial al nuevo nombre.\nEl título anterior se convertirá en una redirección al título nuevo.\nAsegúrate de no dejar [[Special:DoubleRedirects|redirecciones dobles]] o [[Special:BrokenRedirects|incorrectas]].\nTú eres responsable de asegurarte de que los enlaces sigan apuntando adonde se supone que deberían hacerlo.\n\nRecuerda que la página <strong>no</strong> se trasladará si ya existe una página con el título nuevo, salvo que sea una redirección y no tenga historial de edición.\nEsto significa que podrás renombrar una página a su título original si has cometido un error, pero que no podrás sobrescribir una página existente.\n\n<strong>Nota:</strong>\nEste puede ser un cambio drástico e inesperado para una página popular; asegúrate de entender las consecuencias del procedimiento antes de seguir adelante.",
+       "movepagetext-noredirectsupport": "Al usar el siguiente formulario, se renombrará una página y se trasladará todo su historial al nuevo nombre.\nEres responsable de asegurarte de que todos los enlaces tras el traslado siguen apuntando hacia donde deberían.\n\nRecuerda que la página <strong>no</strong> se trasladará si ya existe una página con el título nuevo.\nEsto significa que podrás renombrar una página a su título original si has cometido un error, pero que no podrás sobrescribir una página existente.\n\n<strong>Nota:</strong>\nEste puede ser un cambio drástico e inesperado para una página popular;\nasegúrate de entender las consecuencias antes de seguir adelante.",
        "movepagetalktext": "Si marcas esta casilla, la página de discusión asociada se trasladará automáticamente al título nuevo a menos que ya exista una página de discusión no vacía allí.\n\nEn este caso, deberás trasladar o fusionar manualmente la página si así lo quieres.",
        "moveuserpage-warning": "<strong>Advertencia:</strong> estás a punto de trasladar una página de usuario. Ten en cuenta que solo se trasladará la página; el usuario <em>no</em> se renombrará.",
        "movecategorypage-warning": "<strong>Advertencia:</strong> estás a punto de trasladar una página de categoría. Ten en cuenta que se trasladará sólo la página, y las páginas en la antigua categoría <em>no</em> se recategorizarán en la nueva.",
        "permanentlink": "Enlace permanente",
        "permanentlink-revid": "Id. de revisión",
        "permanentlink-submit": "Ir a la revisión",
+       "newsection": "Sección nueva",
+       "newsection-page": "Página de destino",
+       "newsection-submit": "Ir a la página",
        "dberr-problems": "Lo sentimos. Este sitio está experimentando dificultades técnicas.",
        "dberr-again": "Prueba a recargar dentro de unos minutos.",
        "dberr-info": "(No se puede acceder a la base de datos: $1)",
        "edit-error-short": "Error: $1",
        "edit-error-long": "Errores:\n\n$1",
        "specialmute": "Silenciar",
-       "specialmute-success": "Tus preferencias de silencio han sido actualizadas. Mira todos los usuarios silenciados en [[Especial:Preferencias|tus preferencias]].",
+       "specialmute-success": "Tus preferencias de silencio han sido actualizadas. Mira todos los usuarios silenciados en [[Special:Preferences|tus preferencias]].",
        "specialmute-submit": "Confirmar",
        "specialmute-label-mute-email": "Silenciar los correos electrónicos de este usuario",
+       "specialmute-header": "Selecciona tus preferencias de silencio para <b>{{BIDI:[[User:$1|$1]]}}</b>.",
        "specialmute-error-invalid-user": "No se encontró el nombre de usuario solicitado.",
+       "specialmute-email-footer": "Para gestionar las preferencias de correo electrónico para el usuario {{BIDI:$2}} visita <$1>.",
        "revid": "revisión $1",
        "pageid": "ID de página $1",
        "interfaceadmin-info": "$1\n\nLos permisos para editar los archivos con formato CSS, JS y JSON en todo el sitio han sido recientemente separados del permiso <code>editinterface</code>. Si no comprendes por qué recibes este error, por favor lee [[mw:MediaWiki_1.32/interface-admin]].",
        "passwordpolicies-policy-passwordnotinlargeblacklist": "La contraseña no puede estar en la lista de las 100.000 contraseñas más usadas.",
        "passwordpolicies-policyflag-forcechange": "debe cambiar al acceder a la cuenta",
        "passwordpolicies-policyflag-suggestchangeonlogin": "sugerir cambio al acceder a la cuenta",
+       "mycustomjsredirectprotected": "No tienes permiso para editar esta página JavaScript porque es una redirección y no apunta hacia tu propio espacio de usuario.",
        "easydeflate-invaliddeflate": "El contenido proporcionado no esta comprimido correctamente",
        "unprotected-js": "Por razones de seguridad, JavaScript no se puede cargar desde páginas desprotegidas. Crea javascript solo en MediaWiki: espacio de nombres o como subpágina de usuario",
        "userlogout-continue": "¿Quieres finalizar la sesión?"
index b7ad22b..715434e 100644 (file)
@@ -8,7 +8,8 @@
                        "SPQRobin",
                        "Siebrand",
                        "Sjoerddebruin",
-                       "Slomox"
+                       "Slomox",
+                       "Romaine"
                ]
        },
        "exif-imagewidth": "Breedte",
        "exif-photometricinterpretation-3": "Palet",
        "exif-photometricinterpretation-4": "Transparantiemasker",
        "exif-photometricinterpretation-5": "Gescheiden (waarschijnlijk CMYK)",
+       "exif-photometricinterpretation-8": "CIE L*a*b*",
        "exif-unknowndate": "Datum onbekend",
        "exif-orientation-1": "Normaal",
        "exif-orientation-2": "Horizontaal gespiegeld",
index 0eeec65..0a03da6 100644 (file)
        "undo-main-slot-only": "ویرایش را نمی‌توان انجام داد زیرا شامل محتویات خارج از شیار اصلی است.",
        "undo-norev": "این ویرایش را نمی‌توان خنثی کرد چون وجود ندارد یا حذف شده‌است.",
        "undo-nochange": "به نظر می‌رسد ویرایش از پیش خنثی‌سازی شده است.",
-       "undo-summary": "Ø®Ù\86Ø«Û\8câ\80\8cسازÛ\8c Ù\88Û\8cراÛ\8cØ´ $1 ØªÙ\88سط [[Special:Contributions/$2|$2]] ([[User talk:$2|بحث]])",
+       "undo-summary": "Ø®Ù\86Ø«Û\8câ\80\8cسازÛ\8c Ù\88Û\8cراÛ\8cØ´ $1 Ø§Ø² [[Special:Contributions/$2|$2]] ([[User talk:$2|بحث]])",
        "undo-summary-username-hidden": "خنثی‌سازی نسخهٔ $1 به دست یک کاربر پنهان‌شده",
        "cantcreateaccount-text": "امكان ساختن حساب کاربری از این این نشانی آی‌پی ('''$1''') توسط [[User:$3|$3]] سلب شده است.\n\nدلیل ارائه شده توسط $3 چنین است: $2",
        "cantcreateaccount-range-text": "ایجاد حساب از آدرس آی‌پی در مجموعه‌ی <strong>$1</strong>، که شامل آدرس آی‌پی شما (<strong>$4</strong>) است، توسط [[User:$3|$3]] متوقف شده‌است.\nدلیل ارائه شده توسط $3، $2 است.",
index 9b60e21..60741c0 100644 (file)
        "rcfilters-clear-all-filters": "Effacer tous les filtres",
        "rcfilters-show-new-changes": "Afficher les nouvelles modifications depuis $1",
        "rcfilters-search-placeholder": "Filtrer les modifications (utiliser le menu ou rechercher le nom d'un filtre)",
+       "rcfilters-search-placeholder-mobile": "Filtres",
        "rcfilters-invalid-filter": "Filtre non valide",
        "rcfilters-empty-filter": "Aucun filtre actif. Toutes les contributions sont affichées.",
        "rcfilters-filterlist-title": "Filtres",
        "changecontentmodel": "Modifier le modèle de contenu d’une page",
        "changecontentmodel-legend": "Modifier le modèle de contenu",
        "changecontentmodel-title-label": "Titre de la page",
+       "changecontentmodel-current-label": "Modèle de contenu actuel :",
        "changecontentmodel-model-label": "Nouveau modèle de contenu",
        "changecontentmodel-reason-label": "Motif :",
        "changecontentmodel-submit": "Modifier",
        "block-log-flags-angry-autoblock": "autoblocage amélioré activé",
        "block-log-flags-hiddenname": "nom d’utilisateur masqué",
        "range_block_disabled": "Le droit administrateur de créer des blocages de plages IP est désactivé.",
+       "ipb-prevent-user-talk-edit": "Modifier sa propre page de discussion peut être autorisé pour un blocage partiel, sauf s’il inclut une restriction sur l’espace de noms Discussion utilisateur.",
        "ipb_expiry_invalid": "Durée d'expiration incorrecte.",
        "ipb_expiry_old": "L’heure d’expiration est passée.",
        "ipb_expiry_temp": "Les blocages de noms d'utilisateurs cachés doivent être permanents.",
        "move-page-legend": "Renommer une page",
        "movepagetext": "Utilisez le formulaire ci-dessous pour renommer une page, en déplaçant tout son historique vers le nouveau nom. L’ancien titre deviendra une page de redirection vers le nouveau titre. \nVous pouvez mettre à jour automatiquement les redirections qui pointent vers le titre original. \nSi vous choisissez de ne pas le faire, assurez-vous de vérifier toute [[Special:DoubleRedirects|double redirection]] ou [[Special:BrokenRedirects|redirection cassée]]. Vous avez la responsabilité de vous assurer que les liens continuent de pointer vers leur destination supposée.\n\nNotez que la page ne sera <strong>pas</strong> renommée s’il existe déjà une page portant le nouveau titre, sauf si cette dernière est une simple redirection avec un historique de modifications vierge. \nCela signifie que vous pouvez de nouveau renommer une page vers sa position d’origine si vous avez fait une erreur et que vous ne pouvez pas écraser une page existante.\n\n<strong>Attention !</strong>\nCeci peut provoquer un changement radical et imprévu pour une page souvent consultée ; assurez-vous d’avoir compris les conséquences de votre démarche avant de continuer.",
        "movepagetext-noredirectfixer": "Utilisez le formulaire ci-dessous pour renommer une page, en déplaçant tout son historique vers le nouveau nom.\nL’ancien titre deviendra une page de redirection vers le nouveau titre.\nVérifiez bien les [[Special:DoubleRedirects|doubles redirections]] ou les [[Special:BrokenRedirects|redirections cassées]].\nVous avez la responsabilité de vous assurer que les liens continuent de pointer vers leur destination supposée.\n\nNotez que la page ne sera <strong>pas</strong> déplacée s’il existe déjà une page avec le nouveau titre, sauf si cette dernière a un historique de modifications vierge et est soit vide, soit une simple redirection. Ceci permet de renommer une page vers sa position d’origine si le déplacement s’avère erroné, et il est impossible d’écraser une page existante.\n\n<strong>Attention !</strong>\nCeci peut provoquer un changement radical et imprévu pour une page souvent consultée ; assurez-vous d’en avoir compris les conséquences avant de continuer.",
+       "movepagetext-noredirectsupport": "Utilisez le formulaire ci-desous pour renommer une page, et déplaçer toute son historique sous le nouveau nom.\nIl vous appartient de vérifier que tous les liens continuent à pointer vers leurs endroits respectifs.\n\nNotez bien que la page <strong>ne sera pas</strong> renommée s'il existe déjà une page portant le même titre que le nouveau tire choisi.\nCela signifie que vous pouvez revenir en arrière en renommant la page sous son ancien nom si vous avez faites une erreur, et que vous ne pouvez pas écraser une page existante.\n\n<strong>Note:</strong>\nCeci peut être une modification drastique et inattendue si la page est populaire;\nveuillez vous assurer de comprendre les conséquences de cela avant de continuer.",
        "movepagetalktext": "Si vous cochez cette case, la page de discussion associée sera automatiquement renommée, à moins qu’une page de discussion non vide existe déjà sous ce nouveau nom.\n\nDans ce cas, vous devrez renommer ou fusionner cette page de discussion manuellement si vous le désirez.",
        "moveuserpage-warning": "<strong>Attention :</strong> Vous êtes sur le point de renommer une page d’utilisateur. Veuillez noter que seule la page sera renommée et que l’utilisateur <em>ne</em> sera <em>pas</em> renommé.",
        "movecategorypage-warning": "<strong>Avertissement :</strong> Vous êtes sur le point de renommer une page de catégorie. Veuillez noter que seule la catégorie sera renommée et <em>qu’aucune</em> des pages de l’ancienne catégorie ne sera transférée dans la nouvelle.",
        "permanentlink": "Lien permanent",
        "permanentlink-revid": "ID de la révision",
        "permanentlink-submit": "Aller à la révision",
+       "newsection": "Nouvelle section",
+       "newsection-page": "Page cible",
+       "newsection-submit": "Aller à la page",
        "dberr-problems": "Désolé ! Ce site rencontre des difficultés techniques.",
        "dberr-again": "Essayez d'attendre quelques minutes et rechargez.",
        "dberr-info": "(Accès à la base de données impossible : $1)",
        "linkaccounts": "Lier les comptes",
        "linkaccounts-success-text": "Le compte a été lié.",
        "linkaccounts-submit": "Lier les comptes",
-       "cannotunlink-no-provider-title": "Il n’y a pas de compte lier à délier",
+       "cannotunlink-no-provider-title": "Il n’y a pas de compte lié à délier",
        "cannotunlink-no-provider": "Il n’y a pas de compte lié qui puisse être délié.",
        "unlinkaccounts": "Dissocier les comptes",
        "unlinkaccounts-success": "Le compte a été dissocié.",
index db8f738..b836392 100644 (file)
        "extlink_sample": "http://www.example.com/ tit di yannaj",
        "extlink_tip": "Yannaj èstèrn (pa bliyé préfigs-a http://)",
        "headline_sample": "Tègs di tit",
-       "headline_tip": "Soutit nivo 2",
+       "headline_tip": "Titit nivèl 2",
        "nowiki_sample": "Rantré tègs-a ki pa fòrmaté isi",
        "nowiki_tip": "Ignoré sentags wiki-a",
        "image_tip": "Fiché enséré",
        "rollbacklinkcount": "révoké $1 {{PLURAL:$1|modifikasyon}}",
        "protectlogpage": "Journal dé protègsyon",
        "protectedarticle": "protéjé « [[$1]] »",
-       "modifiedarticleprotection": "modifyé nivo-a di protègsyon di « [[$1]] »",
+       "modifiedarticleprotection": "modifyé nivèl-a di protègsyon di « [[$1]] »",
        "protect-default": "Otorizé tout itilizatò-ya",
        "restriction-edit": "Modifyé",
        "restriction-move": "Rounonmen",
index 2fa9ca5..baf4d88 100644 (file)
        "page_first": "poilem",
        "page_last": "akhirchem",
        "histlegend": "Frk nivoddni: Jeo uzollneo tuka comparar korunk zai, tenche fudle ''radio'' butao petoi ani ''Enter'' nazalear khalcho butao dab.<br />\nVivron: <strong>({{int:cur}})</strong> = halinchi uzollnie borobor forok, <strong>({{int:last}})</strong> = adli uzollnie borobor forok, <strong>{{int:minoreditletter}}</strong> = dhaktem bodol.",
-       "history-fieldset-title": "Uzollnne khatir sod",
+       "history-fieldset-title": "Uzollnneo chall",
        "history-show-deleted": "Fokot uzollnni kadun udoilelem",
        "histfirst": "sogleavon adhlem",
        "histlast": "sogleavon novem",
        "rcfilters-savedqueries-remove": "Kadun udoi",
        "rcfilters-savedqueries-new-name-label": "Nanv",
        "rcfilters-savedqueries-cancel-label": "Rod'd kor",
-       "rcfilters-show-new-changes": "Soglleavon noveo bodol polloi",
+       "rcfilters-show-new-changes": "$1 savn noveo bodol polloi",
        "rcfilters-filter-editsbyself-label": "Tuven kel'leo bodol",
        "rcfilters-filter-editsbyself-description": "Tujeo svotacheo yogdanam.",
        "rcfilters-filter-editsbyother-label": "Dusreanim kel'le bodol",
index e9fe2a1..571b811 100644 (file)
                        "Gts-tg",
                        "RubatoStuf",
                        "Fitoschido",
-                       "Vlad5250"
+                       "Vlad5250",
+                       "Michael5iLVEr"
                ]
        },
        "tog-underline": "Ὑπογραμμίζειν συνδέσμους:",
        "tog-hideminor": "Κρύπτειν ἥττονας μεταγραφὰς ἐν προσφάτοις ἀλλαγαῖς",
        "tog-hidepatrolled": "Κρύπτειν τὰς περιπολουμένας μεταγραφὰς ἐν ταῖς προσφάτοις ἀλλαγαῖς",
        "tog-newpageshidepatrolled": "Κρύπτειν τὰς περιπολουμένας μεταγραφὰς ὑπὸ τῆς διαλογῆς νέων δέλτων",
+       "tog-hidecategorization": "Ἀπόκρυψις ποιήσεως κατηγοριῶν τῶν σελίδων",
        "tog-extendwatchlist": "Ἐφοροδιαλογὴν ἐκτείνειν ἵνα φανῶσιν ἅπασαι αἱ ἀλλαγαὶ, οὐχὶ μόνον αἱ ἁρμόδιαι",
        "tog-usenewrc": "Χρῆσθαι προσκεκοσμημέναις προσφάτοις ἀλλαγαῖς (ἀπαιτεῖται JavaScript)",
        "tog-numberheadings": "Ἐξαριθμεῖν ἐπικεφαλίδας αὐτομάτως",
@@ -45,7 +47,7 @@
        "tog-enotifminoredits": "Ἄγγειλόν μοι ἐπἴσης τὰς ἥττονας ἀλλαγὰς δέλτων και ὰρχείων",
        "tog-enotifrevealaddr": "Ἀποκαλύπτειν τὴν ταχυδρομικὴν μου διεύθυνσιν ἐν τῇ εἰδοποιητηρίᾳ ἀλληλογραφίᾳ",
        "tog-shownumberswatching": "Δεικνύναι τὸν ἀριθμὸν τῶν παρακολουθούντων χρωμένων",
-       "tog-oldsig": "ῪÏ\80άÏ\81Ï\87οÏ\85Ï\83α á½\91Ï\80ογÏ\81αÏ\86á¿\86:",
+       "tog-oldsig": "Ἡ Ï\83á½´ Î¿á½\96Ï\83α á½\91Ï\80ογÏ\81αÏ\86ή:",
        "tog-fancysig": "Ἀκατέργασται ὑπογραφαί ἐν εἴδει βικι-κειμένου (ἄνευ αὐτομάτου συνδέσμου)",
        "tog-uselivepreview": "Χρῆσθαι ἀμέσῳ προθεωρήσει",
        "tog-forceeditsummary": "Προμήνυσόν με εἰ εἰσάγω κενὴν σύνοψιν μεταγραφῆς",
        "oct": "Ὀκτ",
        "nov": "Νοέμ",
        "dec": "Δεκ",
+       "january-date": "Ἰανουάριος $1",
+       "february-date": "Φεβρουάριος $1",
+       "march-date": "Μάρτιος $1",
+       "april-date": "Ἀπρίλιος $1",
+       "may-date": "Μάϊος $1",
+       "june-date": "Ἰούνιος $1",
+       "july-date": "Ἰούλιος $1",
+       "august-date": "Αὔγουστος $1",
+       "september-date": "Σεπτέμβριος $1",
+       "october-date": "Ὀκτώβριος $1",
+       "november-date": "Νοέμβριος $1",
+       "december-date": "Δεκέμβριος $1",
+       "period-am": "π.μ.",
+       "period-pm": "μ.μ.",
        "pagecategories": "{{PLURAL:$1|Κατηγορία|Κατηγορίαι}}",
        "category_header": "Δέλτοι ἐν τῇ κατηγορίᾳ \"$1\"",
        "subcategories": "Ὑποκατηγορίαι",
        "listingcontinuesabbrev": "συνεχίζεται",
        "index-category": "Δέλτοι μετὰ δεικτῶν",
        "noindex-category": "Δέλτοι ἄνευ δεικτῶν",
+       "broken-file-category": "Σελίδες μετ’ ὀλωλότων συνδέσμων ἀρχείων",
        "about": "Περὶ",
        "article": "Ἡ ἐγγραφή",
        "newwindow": "(ἀνοίξεται ἐν νέᾳ θυρίδι)",
        "cancel": "Ἀκυροῦν",
        "moredotdotdot": "Πλέονα...",
+       "morenotlisted": "Οὗτος ὁ κατάλογος ἵσως ἀτελής.",
        "mypage": "Δέλτος",
        "mytalk": "Διαλέγεσθαι",
        "anontalk": "Διαλέγεσθαι",
        "protectedpagetext": "Ἥδε ἡ δέλτος ἀποκεκλῃμένη ἐστὶν εἰς ἀποτροπὴν τοῦ μεταγράφειν.",
        "viewsourcetext": "Ἔξεστί σοι ὁρᾶν τε καὶ ἀντιγράφειν τὴν τῆς δέλτου πηγήν.",
        "protectedinterface": "Ἥδε ἡ δέλτος παρέχει κείμενον διεπιφανείας διὰ τὸ λογισμικὸν καὶ κεκλῃσμένη ἐστὶ προς ἀποφυγὴν καταχρήσεων.",
+       "editinginterface": "<strong>Προάγγελμα:</strong> Σελίδα τινα ἐπεξαργάζῃ ᾗ χρῶνται ὅπως παράσχῃ κείμενον διεπιφανείας διὰ τὸ λογισμικόν.\nΜεταβολαὶ ταύτῃ τῇ σελίδι τὴν ὄψιν τῆς διεπιφανείας χρωμένου μεταβαλοῦσι τοῖς ἑτέοις χρωμένοις ἐπὶ τούτου τοῦ βίκι.",
        "cascadeprotected": "Ἥδε ἡ δέλτος πεφύλακται, διότι συμπεριλαμβάνεται ἐν {{PLURAL:$1|τῇ ἑξῆς δέλτῳ ἥπερ πεφυλαγμένη ἐστὶ|ταῖς ἑξῆς δέλτοις αἵπερ πεφυλαγμέναι εἰσὶ}} μέσῳ τῆς ἐνεργοποιηθεῖσας διαδοχικῆς προστασίας ἐν τῷ:\n$2",
        "namespaceprotected": "Οὐκ ἔξεστί σοι μεταγράφειν δέλτους ἐν τῷ ὀνοματείῳ '''$1'''.",
        "ns-specialprotected": "Αἱ εἰδικαὶ δέλτοι μὴ μεταγραπτέαι εἰσίν.",
        "wrongpassword": "Εἰσηγμένον σύνθημα ἐσφαλμένον. Πείρασον πάλιν.",
        "wrongpasswordempty": "Σύνθημα οὐκ ἔγραψας.\nΑὖθις πείρασον.",
        "passwordtooshort": "Δεῖ τὸ σύνθημά σου ἔχειν τοὐλάχιστον {{PLURAL:$1|1 χαρακτὴρ|$1 χαρακτῆρες}}.",
+       "passwordinlargeblacklist": "Τὸ εἰσαχθὲν σῆμα ἐν καταλόγῳ τινί ἐστι μάλα ὡσεπιτοπολὺ ἐν χρείᾳ σημάτων. Ἀντιβολοῦμεν, ἐπίλεξον σῆμά τι ἐξοχώτερον.",
        "password-name-match": "Δεῖ σε ἐπιλέξειν σύνθημα δίαφορον τοῦ σοῦ ὀνόματος χρωμένου.",
        "mailmypassword": "Τὸ νέον σύνθημα μέσῳ ἠλεκτρονικῆς ἐπιστολῆς πέμψειν",
        "passwordremindertitle": "Νέον ἐφήμερον σύνθημα διὰ {{SITENAME}}",
        "prefs-personal": "Στοιχεῖα χρωμένου",
        "prefs-rc": "Αἱ νέαι μεταβολαί",
        "prefs-watchlist": "Τὰ ἐφορώμενα",
+       "prefs-editwatchlist": "Μεταγράφειν κατάλογον ἐφορωμένων",
+       "prefs-editwatchlist-clear": "Καθαρμὸς τῶν ὐπὸ σοῦ ἐφορωμένων",
        "prefs-watchlist-days": "Ἡμέραι ἐμφανιστέαι ἐν τῇ ἐφοροδιαλογῇ:",
        "prefs-watchlist-days-max": "(τὸ μέγιστον $1 {{PLURAL:$1|ἡμέρα|ἡμέραι}})",
        "prefs-watchlist-edits": "Μέγιστος ἀριθμὸς ἐμφανιστέων μεταβολῶν ἐν τῇ ἐπεκτεταμένῃ διαλογῇ:",
        "right-userrights-interwiki": "Μεταγράφειν τὰ δικαιώματα χρωμένων ἐν ἄλλοις βίκι",
        "right-siteadmin": "Φράττειν καὶ ἀποφράττειν τὴν βάσιν δεδομένων",
        "right-override-export-depth": "Ἐξάγειν δέλτους περιλαμβανομένων συνδεδεμένων δέλτων ἕως βάθος τι 5 ἐπιπέδων",
+       "grant-editmywatchlist": "Μεταγράφειν τὰ ὑπὸ σοῦ ἐφορώμενα",
        "newuserlogpage": "Κατάλογος ποιήσεων λογισμῶν.",
        "newuserlogpagetext": "Ὅδε ἐστὶν κατάλογος τις τῶν ποιήσεων λογισμῶν.",
        "rightslog": "Κατάλογος δικαιωμάτων χρωμένων",
        "action-userrights": "μεταγράφειν ἅπαντα τα δικαιώματα χρωμένου",
        "action-userrights-interwiki": "μεταγράφειν τα δικαιώματα χρωμένου ἑτέρων βικι-χρωμένων",
        "action-siteadmin": "Κλῄειν ἢ ἐκκλῄειν τὴν βάσιν δεδομένων",
+       "action-editinterface": "μεταγράφειν τὴν τοῦ χρωμένου διεπιφάνειαν",
        "nchanges": "$1 {{PLURAL:$1|μεταβολή|μεταβολαί}}",
        "enhancedrc-history": "Αἱ πρότεραι",
        "recentchanges": "Νέαι μεταβολαί",
        "recentchanges-label-plusminus": "Τό μέγεθος τῆς δέλτου μεταβλήθηκε παρά ταύτον τόν ἀριθμό δυφιολέξεων",
        "recentchanges-legend-heading": "<strong>Ἐρμήνευμα:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ἐπισκοπεῖν καί [[Special:NewPages|κατάλογον δέλτων καινών]])",
+       "rcfilters-preference-label": "Χρῶ διεπιφάνειαν μη-JavaScript",
+       "rcfilters-watchlist-preference-label": "Χρῶ διεπιφάνειαν μη-JavaScript",
        "rcnotefrom": "Ἰδοῦ αἱ ἀλλαγαὶ ἐκ τοῦ '''$2''' (ἕως τὸ '''$1''').",
        "rclistfrom": "Δεικνύναι νέας ἀλλαγάς. Ἐκκίνησις ἐκ τοῦ $3 $2",
        "rcshowhideminor": "$1 μικραὶ μεταβολαὶ",
        "emailsent": "Ἠλ.-ἐπιστολὴ ἀπεστάλη",
        "emailsenttext": "Τὸ μήνυμα ἠλ-ταχυδρομείου σου ἐστάλη.",
        "emailuserfooter": "Ἥδε ἡ ἐπιστολὴ ἐστάλη ὑπὸ τοῦ/τῆς $1 εἰς τὸν/τὴν $2 κατὰ τὴν τέλεσιν \"Ἁποστολὴ ἠλ-μηνύματος\" ἐς τὸ {{SITENAME}}.",
-       "watchlist": "Τὰ ἐφορώμενά μου",
+       "watchlist": "Ἐφορώμενα",
        "mywatchlist": "Τὰ ἐφορώμενα",
        "watchlistfor2": "Πρὸς $1 $2",
        "nowatchlist": "Οὐδὲν τεμάχιον ἐν τῇ ἐφοροδιαλογῇ σου.",
        "tooltip-diff": "Δεῖξαι τὰς γεγραμμένας μεταβολάς.",
        "tooltip-compareselectedversions": "Ὁρᾶν τὰς διαφορὰς μεταξὺ τῶν δύω ἐπειλεγμένων ἐκδοχῶν ταύτης τῆς δέλτου.",
        "tooltip-watch": "Ἐφορᾶν τήνδε τὴν δέλτον",
+       "tooltip-watchlistedit-raw-submit": "Ἐνημέρωσις ἐφορωμένων",
        "tooltip-recreate": "Ἔστω καὶ ἂν διαγεγραμμένη ἡ δέλτος ᾖ, ἀναποίησον ταύτην",
        "tooltip-upload": "Ἐκκινεῖν ἐπιφόρτωσιν",
        "tooltip-rollback": "Ἡ \"Ἀναστροφὴ\" ἀναστρέφει τὰς μεταγραφὰς τῆσδε τῆς δέλτου ὑπὸ τοῦ ὑστάτου συμβάλλοντος μέσῳ ἑνὸς κλίκ",
index 9f477c3..73e6706 100644 (file)
        "changecontentmodel": "שינוי מודל התוכן של דף",
        "changecontentmodel-legend": "שינוי מודל התוכן",
        "changecontentmodel-title-label": "שם הדף",
+       "changecontentmodel-current-label": "מודל התוכן הנוכחי:",
        "changecontentmodel-model-label": "מודל התוכן החדש",
        "changecontentmodel-reason-label": "סיבה:",
        "changecontentmodel-submit": "שינוי",
        "block-log-flags-angry-autoblock": "חסימה אוטומטית מתקדמת מופעלת",
        "block-log-flags-hiddenname": "שם המשתמש הוסתר",
        "range_block_disabled": "האפשרות לחסום טווח כתובות אינה פעילה.",
+       "ipb-prevent-user-talk-edit": "עריכת דף המשתמש צריכה להיות מותרת בחסימה חלקית, אלא אם כן היא כוללת הגבלה במרחב שיחת משתמש.",
        "ipb_expiry_invalid": "זמן פקיעת החסימה אינו תקין.",
        "ipb_expiry_old": "זמן הפקיעה כבר עבר.",
        "ipb_expiry_temp": "חסימות הכוללות הסתרת שם משתמש חייבות להיות לזמן בלתי מוגבל.",
        "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-noredirectsupport": "שימוש בטופס להלן ישנה את השם של הדף ויעביר את כל היסטוריית הגרסאות שלו לשם החדש.\nבאחריותך להבטיח שכל הקישורים אליו ימשיכו להצביע למקום שהם אמורים להגיע אליו.\n\nיש לשים לב לכך שהדף <strong>לא</strong> יועבר אם כבר יש דף בכותרת החדשה.\nזה אומר שבאפשרותך לשנות שם של דף חזרה לשם שממנו הוא הועבר במקרה של טעות, ושאי־אפשר לדרוס דף קיים.\n\n<strong>לתשומת לבך:</strong>\nזה יכול להיות שינוי קיצוני ובלתי־צפוי עבור דף פופולרי;\nנא לוודא שהבנת את ההשלכות של זה לפני המשך הפעולה.",
        "movepagetalktext": "אם האפשרות הזאת מסומנת, דף השיחה של הדף הזה יועבר אוטומטית לשם החדש, אלא אם קיים דף שיחה שאינו ריק תחת השם החדש. במקרה כזה, יש להעביר או למזג את הדפים באופן ידני, במידת הצורך.",
        "moveuserpage-warning": "<strong>אזהרה:</strong> הדף שיועבר הוא דף משתמש. חשוב לציין שרק הדף יועבר וששם המשתמש <em>לא</em> ישתנה.",
        "movecategorypage-warning": "<strong>אזהרה:</strong> הדף שיועבר הוא דף קטגוריה. חשוב לציין שרק הדף יועבר ושכל הדפים בקטגוריה הישנה <em>לא</em> יסווגו לקטגוריה החדשה.",
        "permanentlink": "קישור קבוע",
        "permanentlink-revid": "מספר הגרסה",
        "permanentlink-submit": "מעבר לגרסה",
+       "newsection": "פסקה חדשה",
+       "newsection-page": "דף יעד",
+       "newsection-submit": "מעבר לעמוד",
        "dberr-problems": "מצטערים! קיימת בעיה טכנית באתר זה.",
        "dberr-again": "נסו להמתין מספר שניות ולהעלות מחדש את הדף.",
        "dberr-info": "(לא ניתן לגשת לבסיס הנתונים: $1)",
index 3c2da97..76361d3 100644 (file)
        "htmlform-int-toolow": "Vrijednost koju ste naveli je ispod minimuma od $1",
        "htmlform-int-toohigh": "Vrijednost koju ste naveli je iznad maksimuma od $1",
        "htmlform-required": "Ova je vrijednost potrebna",
-       "htmlform-submit": "Unesi",
+       "htmlform-submit": "Potvrdi",
        "htmlform-reset": "Poništi izmjene",
        "htmlform-selectorother-other": "Drugi",
        "htmlform-no": "Ne",
        "passwordpolicies-policy-minimumpasswordlengthtologin": "Da biste se prijavili, zaporka mora sadržavati najmanje {{PLURAL:$1|1 znak|$1 znaka|$1 znakova}}",
        "passwordpolicies-policy-passwordcannotmatchusername": "Zaporka ne može biti ista kao i suradničko ime",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Zaporka se ne može podudarati sa zaporkama na crnoj listi",
-       "passwordpolicies-policy-maximalpasswordlength": "Zaporka mora biti kraća od {{PLURAL:$1|1 znaka|$1 znaka|$1 znakova}}"
+       "passwordpolicies-policy-maximalpasswordlength": "Zaporka mora biti kraća od {{PLURAL:$1|1 znaka|$1 znaka|$1 znakova}}",
+       "userlogout-continue": "Želite se odjaviti?"
 }
index eaf2f0c..ef3f648 100644 (file)
        "systemblockedtext": "A felhasználónevedet vagy IP-címedet automatikusan blokkolta a MediaWiki.\nA blokkolás indoka:\n\n:<em>$2</em>\n\n* A blokk kezdete: $8\n* A blokk lejárata: $6\n* Blokkolt szerkesztő: $7\n\nA jelenlegi IP-címed: $3.\nKérjük, hogy érdeklődés esetén minden fenti részletet adj meg.",
        "blockednoreason": "nem adott meg okot",
        "blockedtext-composite": "<strong>A felhasználónevedet vagy IP-címedet blokkolták.</strong>\nA blokkolás indoka:\n\n:<em>$2</em>\n\n* A blokk kezdete: $8\n* A leghoszabb blokk lejárata: $6\n\n* $5\n\nA jelenlegi IP-címed: $3.\nKérjük, hogy érdeklődés esetén minden fenti részletet adj meg.",
+       "blockedtext-composite-ids": "Releváns blokkolási azonosító: $1 (IP-címed feketelistázva is lehet)",
+       "blockedtext-composite-no-ids": "IP-címed több feketelistán is szerepel.",
        "blockedtext-composite-reason": "Fiókoddal és/vagy IP-címeddel szemben több blokk is érvényben van",
        "whitelistedittext": "Lapok szerkesztéséhez $1.",
        "confirmedittext": "Lapok szerkesztése előtt meg kell erősítened az e-mail címedet. Kérjük, hogy a [[Special:Preferences|szerkesztői beállításaidban]] add meg, majd erősítsd meg az e-mail címedet.",
        "right-editmyusercss": "Saját szerkesztői CSS-fájlok szerkesztése",
        "right-editmyuserjson": "Saját szerkesztői JSON-fájlok szerkesztése",
        "right-editmyuserjs": "saját szerkesztői JavaScript-fájlok szerkesztése",
+       "right-editmyuserjsredirect": "saját átirányító JavaScript-fájljaid szerkesztése",
        "right-viewmywatchlist": "saját figyelőlista megtekintése",
        "right-editmywatchlist": "saját figyelőlista szerkesztése; bizonyos műveletek képesek lapok figyelőlistához adására ezen jog nélkül is",
        "right-viewmyprivateinfo": "saját személyes adatok megtekintése (pl. e-mail-cím, valódi név)",
        "action-editmyusercss": "saját szerkesztői CSS-fájlok szerkesztése",
        "action-editmyuserjson": "saját szerkesztői JSON-fájlok szerkesztése",
        "action-editmyuserjs": "saját szerkesztői JavaScript-fájlok szerkesztése",
+       "action-editmyuserjsredirect": "saját átirányító JavaScript-fájljaid szerkesztése",
        "action-viewsuppressed": "minden felhasználó elől elrejtett változtatások megtekintése",
        "action-hideuser": "felhasználói név blokkolása és elrejtése a külvilág elől",
        "action-ipblock-exempt": "IP-, auto- és tartományblokkok megkerülése",
        "rcfilters-clear-all-filters": "Összes szűrő kikapcsolása",
        "rcfilters-show-new-changes": "$1 óta történt friss változtatások megtekintése",
        "rcfilters-search-placeholder": "Változtatások szűrése (használd a menüt vagy keress szűrőkre)",
+       "rcfilters-search-placeholder-mobile": "Szűrők",
        "rcfilters-invalid-filter": "Érvénytelen szűrő",
        "rcfilters-empty-filter": "Nincs aktív szűrő. Minden közreműködés látható.",
        "rcfilters-filterlist-title": "Szűrők",
        "changecontentmodel": "A lap tartalommodelljének megváltoztatása",
        "changecontentmodel-legend": "Tartalommodell megváltoztatása",
        "changecontentmodel-title-label": "Lapcím",
+       "changecontentmodel-current-label": "Jelenlegi tartalommodell:",
        "changecontentmodel-model-label": "Új tartalommodell",
        "changecontentmodel-reason-label": "Indoklás:",
        "changecontentmodel-submit": "Változtatás",
        "permanentlink": "Állandó hivatkozás",
        "permanentlink-revid": "Változat azonosító",
        "permanentlink-submit": "Ugrás a változatra",
+       "newsection": "Új szakasz",
+       "newsection-page": "Céllap",
+       "newsection-submit": "Ugrás az oldalra",
        "dberr-problems": "Sajnáljuk, de az oldallal technikai problémák vannak.",
        "dberr-again": "Várj néhány percet, majd frissítsd az oldalt.",
        "dberr-info": "(Nem sikerült kapcsolódni az adatbázishoz: $1)",
        "logentry-delete-restore-nocount": "$1 {{GENDER:$2|helyreállította}} a következő lapot: $3",
        "restore-count-revisions": "$1 lapváltozat",
        "restore-count-files": "$1 fájl",
-       "logentry-delete-event": "$1 megváltoztatta {{PLURAL:$5|egy napló bejegyzés|$5 napló bejegyzés}} láthatóságát a(z) $3 című lapon: $4",
+       "logentry-delete-event": "$1 megváltoztatta {{PLURAL:$5|egy naplóbejegyzés|$5 naplóbejegyzés}} láthatóságát a(z) $3 című lapon: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|módosította}} a(z) $3 című lap {{PLURAL:$5|egy|$5}} lapváltozatának láthatóságát: $4",
        "logentry-delete-event-legacy": "$1 {{GENDER:$2|módosította}} a(z) $3 című lap naplóbejegyzéseinek láthatóságát",
        "logentry-delete-revision-legacy": "$1 {{GENDER:$2|módosította}} a(z) $3 című lap lapváltozatainak láthatóságát",
        "passwordpolicies-policy-passwordnotinlargeblacklist": "A jelszó nem szerepelhet a 100 000 leggyakrabban használt jelszó listáján .",
        "passwordpolicies-policyflag-forcechange": "lecserélés követelése bejelentkezéskor",
        "passwordpolicies-policyflag-suggestchangeonlogin": "lecserélés ajánlása bejelentkezéskor",
+       "mycustomjsredirectprotected": "Nincs jogod szerkeszteni ezt a JavaScript-lapot, mert a lap egy olyan átirányítás, ami nem szerkesztői oldaladra mutat.",
        "unprotected-js": "Biztonsági okokból JavaScript nem tölthető be védtelen lapokról. Kérlek egyedül a MediaWiki névtérben készíts JavaScriptet, vagy szerkesztői allapként.",
        "userlogout-continue": "Biztos ki szeretnél jelentkezni?"
 }
index 95da3f6..8c3f51d 100644 (file)
        "retypenew": "Նորէն մուտքագրէք գաղտնաբառը",
        "resetpass_submit": "Հաստատեցէ՛ք անցաբառը եւ մուտք գործեցէ՛ք համակարգ",
        "changepassword-success": "Ձեր անցաբառը փոխուեցաւ։",
+       "botpasswords": "Մեքենայիկների անցաբառեր",
        "botpasswords-label-appid": "Մեքենայիկի անուն՝",
        "botpasswords-label-create": "Ստեղծել",
        "botpasswords-label-update": "Թարմացնել",
        "rev-showdeleted": "Ցուցադրել",
        "revdelete-show-file-submit": "Այո",
        "revdelete-hide-image": "Թաքցնել նիշքին բովանդակութիւնը",
+       "revdelete-radio-set": "Թաքուն",
        "revdelete-radio-unset": "Տեսանելի",
        "revdelete-log": "Պատճառ.",
        "pagehist": "Էջի պատմութիւն",
        "preferences": "Նախընտրութիւններ",
        "mypreferences": "Նախընտրութիւններ",
        "skin-preview": "Կանխաստուգել",
+       "prefs-rc": "Վերջին փոփոխութիւնները",
        "prefs-watchlist": "Հսկողութեան ցանկ",
        "prefs-editwatchlist-clear": "Մաքրել հսկողութեան ցանկը",
        "saveprefs": "Յիշել",
        "prefs-signature": "Ստորագրութիւն",
        "prefs-editor": "Խմբագրող",
        "prefs-preview": "Կանխաստուգել",
+       "userrights": "Մասնակիցների իրաւունքների կառավարում",
        "group": "Խումբ.",
        "group-user": "Մասնակիցներ",
        "group-bot": "Մեքենայիկներ",
        "rcfilters-activefilters-hide": "Թաքցնել",
        "rcfilters-activefilters-show": "Ցուցնել",
        "rcfilters-limit-title": "Ցուցադրուող արդիւնքներ",
+       "rcfilters-savedqueries-cancel-label": "Չեղարկել",
+       "rcfilters-search-placeholder-mobile": "Քամոց",
        "rcfilters-filtergroup-authorship": "Ներդրումներու հեղինակ",
        "rcfilters-filter-editsbyself-label": "Կողմէդ կատարուած փոփոխութիւնները",
        "rcfilters-filter-editsbyself-description": "Անձնական ներդրումներդ։",
        "upload-dialog-button-done": "Եղած է",
        "upload-dialog-button-save": "Յիշել",
        "upload-dialog-button-upload": "Վերբեռնել",
+       "upload-form-label-infoform-categories": "Ստորոգութիւններ",
        "license": "Արտօնագրութիւն՝",
        "license-header": "Արտօնագրում",
        "listfiles-delete": "ջնջել",
        "sharedupload-desc-here": "Այս նիշքը առնուած է $1-էն եւ կրնայ օգտագործուիլ այլ նախագիծերու մէջ։ $1-ի մէջ անոր [$2 նիշքը նկարագրող էջի]ի նկարագրութիւնը ներկայացուած է ստորեւ։",
        "filepage-nofile": "Այս անունով նիշք մը գոյութիւն չունի։",
        "upload-disallowed-here": "Այս նիշքը կարելի չէ ջնջել ու փոխարինել։",
+       "listredirects": "Վերայղումների ցանկ",
        "unusedtemplates": "Չօգտագործուող կաղապարներ",
+       "unusedtemplateswlh": "այլ յղումներ",
        "randompage": "Պատահական էջ",
        "randomincategory-category": "Ստորոգութիւն:",
+       "randomincategory-legend": "Պատահական էջ ստորոգութեան մէջ",
+       "randomredirect": "Պատահական վերայղում",
        "statistics": "Վիճակագրութիւն",
        "statistics-header-pages": "Էջերու վիճակագրութիւն",
        "statistics-header-edits": "Խմբագրումներու վիճակագրութիւն",
        "brokenredirects-edit": "խմբագրել",
        "brokenredirects-delete": "ջնջել",
        "withoutinterwiki": "Լեզուային յղումներ չպարունակող էջեր",
+       "withoutinterwiki-summary": "Հետեւեալ էջեր չունեն լեզւական յղումներ.",
        "withoutinterwiki-submit": "Ցուցնել",
        "fewestrevisions": "Նուազ վերաքաղուած էջեր",
        "nbytes": "$1 {{PLURAL:$1|պայթ}}",
        "ncategories": "$1 {{PLURAL:$1|ստորոգութիւն|ստորոգութիւններ}}",
+       "nlinks": "$1 {{PLURAL:$1|յղում|յղումներ}}",
        "nmembers": "$1 {{PLURAL:$1|անդամ|անդամներ}}",
        "uncategorizedpages": "Առանց ստորոգութիւններու էջեր",
        "uncategorizedcategories": "Ենթաստորոգութիւն չունեցող ստորոգութիւններ",
        "unusedcategories": "Չօգտագործուող ստորոգութիւններ",
        "unusedimages": "Չօգտագործուող նիշքեր",
        "wantedcategories": "Անհրաժեշտ ստորոգութիւններ",
+       "mostlinked": "Էջեր, որոնց շատ են յղվում",
+       "mostlinkedcategories": "Ստորոգութիւններ, որոնց շատ են յղվում",
+       "mostlinkedtemplates": "Կաղապարներ, որոնց շատ են յղվում",
        "prefixindex": "Բոլոր նախածանցներով էջերը",
        "prefixindex-submit": "Ցուցնել",
        "deadendpages": "Յղումներ չունեցող էջեր",
        "categories": "Ստորոգութիւններ",
        "categories-submit": "Ցուցնել",
        "deletedcontributions": "Մասնակիցի ջնջուած ներդրում",
+       "linksearch": "Արտաքին յղումներ",
        "linksearch-ok": "Որոնել",
        "listusers-submit": "Ցուցնել",
        "activeusers": "Աշխոյժ մասնակիցներու ցանկ",
        "namespace_association": "Առնչուած անուանատարածք",
        "tooltip-namespace_association": "Նշեցէ՛ք տուփիկը՝ ներառնելու համար տուեալ անուանատարածքին հետ կապուած քննարկումները կամ նիւթերու անուանատարածքը նոյնպէս։",
        "blanknamespace": "(Գլխաւոր)",
-       "contributions": "{{GENDER:$1|Մասնակիցի}} ներդրումները",
+       "contributions": "{{GENDER:$1|Մասնակիցի}} ներդրումներ",
        "contributions-title": "$1 մասնակիցի ներդրումը",
        "mycontris": "Ներդրումներ",
        "anoncontribs": "Ներդրումներ",
        "sp-contributions-uploads": "վերբեռնումներ",
        "sp-contributions-logs": "Տեղեկատետրեր",
        "sp-contributions-talk": "քննարկում",
+       "sp-contributions-userrights": "{{GENDER:$1|մասնակից}} իրաւունքների կառավարում",
        "sp-contributions-search": "Որոնել ներդրումները",
        "sp-contributions-username": "IP-հասցէ կամ մասնակիցի անուն.",
        "sp-contributions-toponly": "Ցոյց տալ միայն վերջին տարբերակի խմբագրումները",
        "whatlinkshere-hideredirs": "$1 վերայղումները",
        "whatlinkshere-hidetrans": "$1 ներառումները",
        "whatlinkshere-hidelinks": "$1 յղումները",
-       "whatlinkshere-hideimages": "$1 նիշքի յղումները",
+       "whatlinkshere-hideimages": "$1 նիշքի յղումներ",
        "whatlinkshere-filters": "Զտիչներ",
        "unblock": "Մասնակիցի արգելակումը վերցնել",
        "ipboptions": "2 ժամ:2 hours,1 օր:1 day,3 օր:3 days,1 շաբաթ:1 week,2 շաբաթ:2 weeks,1 ամիս:1 month,3 ամիս:3 months,6 ամիս:6 months,1 տարի:1 year,անժամկէտ:infinite",
        "ipb-pages-label": "Էջեր",
        "ipb-namespaces-label": "Անուանատարածքներ",
+       "blocklist": "Արգելափակուած մասնակիցներ",
        "infiniteblock": "Միշտ",
        "blocklist-editing-page": "էջեր",
        "blocklist-editing-ns": "անուանատարածքներ",
        "reblock-logentry": "փոխեց [[$1]] մասնակիցի արգելակումը՝ աւարտման $2 $3 ժամով",
        "block-log-flags-nocreate": "մասնակցային հաշիւի ստեղծումը արգիլուած է",
        "proxyblocker": "Փոխանորդի արգելակում",
+       "movepage-moved-redirect": "Ստեղծվել է վերայղում։",
        "movelogpage": "Տեղափոխութիւններու տեղեկատետր",
        "export": "Արտածել էջերը",
        "allmessages-language": "Լեզու.",
        "pageinfo-hidden-categories": "Թաքուն {{PLURAL:$1|խմբաւորում|խմբաւորումներ}} ($1)",
        "pageinfo-templates": "Օգտագործուած {{PLURAL:$1|կաղապար|կաղապարներ}} ($1)",
        "pageinfo-toolboxlink": "‎Էջի մասին տեղեկութիւն",
+       "pageinfo-redirectsto": "Կը վերայղուի դէպի",
        "pageinfo-contentpage": "Իբրեւ բովանդակութեան էջ հաշուըւած",
        "pageinfo-contentpage-yes": "Այո",
        "pageinfo-protect-cascading-yes": "Այո",
        "redirect-revision": "Էջի տարբերակներ",
        "redirect-file": "Նիշքի անունը",
        "specialpages": "Յատուկ էջեր",
+       "specialpages-note-restricted": "* Հասարակ հատուկ էջեր։\n* <span class=\"mw-specialpagerestricted\">Սահմանափակուած հատուկ էջեր։</span>",
        "specialpages-group-maintenance": "Շարունակական տեղեկագրեր",
        "tag-filter": "[[Special:Tags|Պիտակներու]] զտիչ՝",
        "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Պիտակ}}]]: $2",
+       "tag-mw-new-redirect": "Նոր վերայղում",
        "tags-active-yes": "Այո",
        "tags-active-no": "Ոչ",
        "tags-hitcount": "{{PLURAL:$1|փոփոխութիւն}}",
+       "permanentlink": "Մշտական յղում",
        "htmlform-no": "Ոչ",
        "htmlform-yes": "Այո",
        "logentry-delete-delete": "$1 {{GENDER:$2|ջնջեց}} $3 էջը",
index 5db5e83..7b3e24a 100644 (file)
        "autoblockedtext": "Alamat IP Anda telah terblokir secara otomatis karena digunakan oleh pengguna lain, yang diblokir oleh $1. Pemblokiran dilakukan dengan alasan:\n\n:<em>$2</em>\n\n* Diblokir sejak: $8\n* Blokir kedaluwarsa pada: $6\n* Sasaran pemblokiran: $7\n\nAnda dapat menghubungi $1 atau [[{{MediaWiki:Grouppage-sysop}}|pengurus]] lainnya untuk membicarakan pemblokiran ini.\n\nAnda tidak dapat menggunakan fitur \"{{int:emailuser}}\" kecuali Anda telah memasukkan alamat surel yang sah di [[Special:Preferences|preferensi akun]] Anda dan Anda tidak diblokir untuk menggunakannya.\n\nAlamat IP Anda saat ini adalah $3, dan ID pemblokiran adalah #$5.\nTolong sertakan informasi-informasi ini dalam setiap pertanyaan Anda.",
        "systemblockedtext": "Nama pengguna atau alamat IP Anda telah diblokir secara otomatis oleh MediaWiki.\nAlasan yang diberikan adalah:\n\n:<em>$2</em>\n\n* Diblokir sejak: $8\n* Blokir kedaluwarsa pada: $6\n* Sasaran pemblokiran: $7\n\nAlamat IP Anda saat ini adalah $3\nMohon sertakan semua perincian di atas dalam setiap pertanyaan yang Anda ajukan.",
        "blockednoreason": "tidak ada alasan yang diberikan",
+       "blockedtext-composite": "<strong>Nama pengguna atau alamat IP Anda telah diblokir.</strong>\n\nAlasan yang diberikan yaitu:\n\n:<em>$2</em>.\n\n* Mulai pemblokiran: $8\n* Waktu akhir pemblokiran terlama: $6\n\n* $5\n\nAlamat IP Anda saat ini ialah $3.\nMohon sertakan semua detail di atas dalam pertanyaan yang Anda buat.",
+       "blockedtext-composite-ids": "Pemblokiran ID relevan: $1 (alamat IP Anda juga dapat dicekal)",
        "blockedtext-composite-no-ids": "Alamat IP Anda muncul dalam daftar hitam ganda",
        "blockedtext-composite-reason": "Ada pemblokiran berganda terhadap akun Anda dan/atau alamat IP Anda.",
        "whitelistedittext": "Anda harus $1 untuk dapat menyunting halaman.",
        "search-interwiki-more": "(selanjutnya)",
        "search-interwiki-more-results": "Hasil lainnya",
        "search-relatedarticle": "Berkaitan",
+       "search-invalid-sort-order": "Perintah menyortir $1 tidak dikenal, penyortiran standar akan diterapkan. Perintah-perintah menyortir yang sah ialah: $2",
+       "search-unknown-profile": "Profil pencarian $1 tidak dikenal, profil pencarian standar akan diterapkan.",
        "searchrelated": "berkaitan",
        "searchall": "semua",
        "showingresults": "Di bawah ini ditampilkan hingga {{PLURAL:$1|'''1''' hasil|'''$1''' hasil}}, dimulai dari #'''$2'''.",
        "right-editmyusercss": "Sunting berkas CSS pengguna Anda",
        "right-editmyuserjson": "Sunting berkas JSON pengguna Anda",
        "right-editmyuserjs": "Sunting berkas JavaScript pengguna Anda",
+       "right-editmyuserjsredirect": "Sunting berkas JavaScript pengguna Anda yang merupakan alihan.",
        "right-viewmywatchlist": "Melihat daftar pantauan Anda sendiri",
        "right-editmywatchlist": "Menyunting daftar pantau Anda sendiri. Beberapa tindakan tetap akan menambahkan halaman tanpa hak ini.",
        "right-viewmyprivateinfo": "Melihat data pribadi Anda sendiri (misal: alamat surel, nama asli)",
        "action-editmyusercss": "sunting berkas CSS pengguna Anda",
        "action-editmyuserjson": "sunting berkas JSON pengguna Anda",
        "action-editmyuserjs": "sunting berkas JavaScript pengguna Anda",
+       "action-editmyuserjsredirect": "sunting berkas JavaScript Anda yang merupakan alihan.",
        "action-viewsuppressed": "lihat revisi yang disembunyikan dari semua pengguna",
        "action-hideuser": "blokir nama pengguna dan sembunyikan dari publik",
        "action-ipblock-exempt": "abaikan pemblokiran IP, pemblokiran otomatis, dan rentang pemblokiran",
        "rcfilters-clear-all-filters": "Hapus semua penyaringan",
        "rcfilters-show-new-changes": "Tampilkan perubahan baru sejak $1",
        "rcfilters-search-placeholder": "Filter perubahan terbaru (gunakan menu atau pencarian untuk menyaring nama)",
+       "rcfilters-search-placeholder-mobile": "Filter-filter",
        "rcfilters-invalid-filter": "Penyqringan tidak sah",
        "rcfilters-empty-filter": "Tidak ada filter aktif. Semua kontribusi ditampilkan.",
        "rcfilters-filterlist-title": "Penyaringan",
        "changecontentmodel": "Ubah model isi sebuah halaman",
        "changecontentmodel-legend": "Ubah model isi",
        "changecontentmodel-title-label": "Judul halaman",
+       "changecontentmodel-current-label": "Model konten saat ini:",
        "changecontentmodel-model-label": "Model konten baru",
        "changecontentmodel-reason-label": "Alasan:",
        "changecontentmodel-submit": "Ubah",
        "passwordpolicies-policyflag-suggestchangeonlogin": "sarankan penggantian ketika masuk log",
        "easydeflate-invaliddeflate": "Isi yang disediakan tidak dikempiskan secara tepat",
        "unprotected-js": "Karena alasan keamanan Javascript tidak dapat dimuat dari halaman yang tidak dilindungi. Mohon hanya buat javascript di ruangnama MediaWiki: atau sebagai subhalaman  Pengguna",
-       "userlogout-continue": "Jika Anda yakin untuk keluar log, silakan [$1 melanjutkan]."
+       "userlogout-continue": "Apakah Anda ingin keluar log?"
 }
index ddfc75b..890c967 100644 (file)
@@ -5,7 +5,8 @@
                        "Ukabia",
                        "아라",
                        "Uzoma Ozurumba",
-                       "Oby Ezeilo"
+                       "Oby Ezeilo",
+                       "Amire80"
                ]
        },
        "tog-underline": "Ahịrịàlà òjikọ:",
        "copyright": "Ihe di ime nọr okpúrụ $1",
        "copyrightpage": "{{ns:project}}:Iwu maka ijë ihe",
        "currentevents": "Ihe ne me ubuwá",
-       "currentevents-url": "Project:I ne me ubüwá",
+       "currentevents-url": "Project:Ihe ne me ubwá",
        "disclaimers": "Ńwepụ̀aka",
        "disclaimerpage": "Project:Ihe I kweshiri ma",
        "edithelp": "Inyetuáká I rüwa",
index 66930fd..8b8a973 100644 (file)
        "category_header": "Artikli en la kategorio \"$1\"",
        "subcategories": "Subkategorii",
        "category-media-header": "\"Media\" en kategorio \"$1\"",
-       "category-empty": "''Nuntempe existas nula pagini en ita kategorio.''",
+       "category-empty": "''Nuntempe existas nula pagini en ca kategorio.''",
        "hidden-categories": "{{PLURAL:$1|Celita kategorio|Celita kategorii}}",
        "hidden-category-category": "Celita kategorii",
        "category-subcat-count": "Ica kategorio havas {{PLURAL:$2|nur la sequanta subkategorio.|la sequanta {{PLURAL:$1|subkategorio|$1 subkategorii}}, ek $2.}}",
        "parser-unstrip-loop-warning": "Renkontresis nefinita procedo ('loop') en la funciono \"Unstrip\"",
        "undo-success": "La redakto ne povas desfacesar.\nVerifikez adinfre per komparo inter la du versioni se to esas fakte quon vu deziras facar; pose 'salvez' la modifiki por kompletigar la redakto.",
        "undo-failure": "Ne povis nuligar la redakto pro konflikti kun intermeza redakti.",
+       "undo-norev": "Ne povis desfacar la redakto, pro ol sive efacesis, sive ne existas.",
        "undo-summary-username-hidden": "Desfacar revizo $1 facita da celita uzero",
        "cantcreateaccount-text": "La kreo di konto de ica adreso IP (<strong>$1</strong>) blokusesis da [[User:$3|$3]].\n\nLa motivo, segun $3, esas <em>$2</em>",
        "cantcreateaccount-range-text": "La kreo di konti de IP-adresi de <strong>$1</strong>, qua inkluzas vua IP-adreso (<strong>$4</strong>), blokusesis dal uzero [[User:$3|$3]].\n\nLa motivo quon $3 informis por la blokuso esis <em>$2</em>",
        "rcfilters-filter-categorization-description": "Registri pri pagini qui adjuntesis o removesis de kategorii.",
        "rcfilters-filter-logactions-label": "Agadi enrejistrata",
        "rcfilters-filter-logactions-description": "Agadi dal administreri, kreado di konti, efaco di pagini, sendo di arkivi...",
+       "rcfilters-typeofchange-conflicts-hideminor": "Ca tipo di filtrilo pri chanjo konfliktas kun la filtrilo \"Minor edits\". Kelka tipi di chanji ne povas judikesar kom \"minora\".",
        "rcfilters-filtergroup-lastrevision": "Maxim recenta modifikuri",
        "rcfilters-filter-lastrevision-label": "Nuna versiono",
        "rcfilters-filter-lastrevision-description": "Nur la maxim recenta modifikuro di ula pagino.",
        "pageswithprop": "Pagini kun atributo di pagino",
        "pageswithprop-legend": "Pagini kun atributo di pagino",
        "pageswithprop-text": "Ica pagino listas pagini qui havas partikulara propraji.",
+       "pageswithprop-reverse": "Ordenar inverse",
+       "pageswithprop-sortbyvalue": "Ordenar segun valoro di proprajo",
        "pageswithprop-submit": "Irez",
        "doubleredirects": "Duopla ridirektili",
        "doubleredirectstext": "Ca pagino montras pagini qui ridirektas ad altra ridirekto-pagini.\nSingla lineo kontenas ligili al unesma e a la duesma ridirekto, ed anke la emo di la duesma ridirekto, qua ordinare esas la \"vera\" emo-pagino a quo l'unesma ridirekto mustus apuntar.\n<del>Surstrekizata ligili</del> reparesis.",
        "ncategories": "$1 {{PLURAL:$1|kategorio|kategorii}}",
        "nlinks": "$1 {{PLURAL:$1|ligilo|ligili}}",
        "nmembers": "$1 {{PLURAL:$1|membro|membri}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|membro|membri}}",
        "specialpage-empty": "Existas nula rezulti por ica informo.",
        "lonelypages": "Pagini sen ligili",
        "uncategorizedpages": "Nekategorizita pagini",
        "move": "Movar",
        "movethispage": "Rinomizar ica pagino",
        "unusedimagestext": "La sequanta arkivi existas, ma ne esas enterigita en irga pagino.\nVoluntez remarkar ke altra ret-siti povus ligesar ad arkivo per direta URL, e do ol povus esar listizita hike malgre ke on aktive uzas lo.",
+       "unusedcategoriestext": "La sequanta pagini pri kategorii ja existas, tamen nula artiklo o kategorio uzas li.",
        "notargettitle": "Ne esas vakua pagino",
        "notargettext": "Vu ne definis en qua pagino agar ica funciono.",
        "nopagetitle": "La pagino ne existas",
        "speciallogtitlelabel": "Skopo (titulo od {{ns:user}}:uzernomo por uzero):",
        "log": "Registrari",
        "logeventslist-submit": "Montrez",
+       "logeventslist-tag-log": "Protokolo di etiketi",
        "all-logs-page": "Omna publika registrari",
        "alllogstext": "Kombinata montro di omna 'log'-i di {{SITENAME}} disponebla.\nVu povas stretigar la vidado per la selekto di la tipo di protoloko (log type), l'uzantonomo (case-sensitive), o la pagino afektita (also case-sensitive).",
        "logempty": "Nula kombinuri trovesis en la protokolo.",
        "uctop": "aktuala",
        "month": "De monato (e plu frue):",
        "year": "De yaro (e plu frue):",
+       "date": "De (ed ante) la dato:",
        "sp-contributions-newbies": "Montrez nur kontributadi di la nova uzeri",
        "sp-contributions-newbies-sub": "Dil nova uzeri",
        "sp-contributions-newbies-title": "Kontributaji dil nova uzeri",
        "blankpage": "Pagino sen-skribura",
        "tag-filter": "[[Special:Tags|etiketo]] filtrilo:",
        "tag-filter-submit": "Filtrez",
-       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etikedo|Etikedi}}]]: $2",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Etiketo|Etiketi}}]]: $2",
        "tag-mw-contentmodelchange": "Modifiko di la kontenajo di ula modelo",
        "tag-mw-contentmodelchange-description": "Redakturi qui [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel modifikas la modelo di kontenajo] di ula pagino",
        "tag-mw-new-redirect": "Nova ridirekto",
        "tag-mw-replace": "Remplasita",
        "tag-mw-replace-description": "Redakturi qui removas plua kam 90% de la kontenajo di ula pagino",
        "tag-mw-rollback": "Volvar addope",
+       "tag-mw-undo": "Desfacez",
        "tags-title": "Etiketi",
        "tags-intro": "Ica pagino montras l'etiketi qui povas uzesar dal informatik-programo por markizar ula redakturo, e lia signifiko.",
        "tags-tag": "Nomo dil etiketo",
index a8c88a5..5c29cf1 100644 (file)
@@ -74,6 +74,7 @@
        "tog-norollbackdiff": "Ekki sýna breytingu eftir að endurvakning síðu hefur verið gerð.",
        "tog-useeditwarning": "Vara mig við þegar ég fer frá breytingarsíðu með óvistaðar breytingar",
        "tog-prefershttps": "Alltaf nota örugga tengingu þegar þú skráir þig inn",
+       "tog-showrollbackconfirmation": "Sýna staðfestingarglugga þegar smellt er á taka aftur tengil",
        "underline-always": "Alltaf",
        "underline-never": "Aldrei",
        "underline-default": "Skinn eða sjálfgefið í vafra",
        "modifiedarticleprotection": "breytti verndunarstigi fyrir \"[[$1]]\"",
        "unprotectedarticle": "afverndaði „[[$1]]“",
        "movedarticleprotection": "verndunarstilling hefur verið færð frá „[[$2]]“ á „[[$1]]“",
+       "protectedarticle-comment": "{{GENDER:$2|Verndaði}} „[[$1]]“",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|Breytti verndunarstigi}} fyrir „[[$1]]“",
+       "unprotectedarticle-comment": "{{GENDER:$2|Fjarlægði verndun}} á „[[$1]]“",
        "protect-title": "Vernda „$1“",
        "protect-title-notallowed": "Skoða verndunarstig $1",
        "prot_1movedto2": "[[$1]] færð á [[$2]]",
        "autoblocklist": "Sjálfvirk bönn",
        "autoblocklist-submit": "Leita",
        "autoblocklist-legend": "Sýna sjálfvirk bönn",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Staðbundið sjálfvirkt bann|Staðbundin sjálfvirk bönn}}",
        "autoblocklist-total-autoblocks": "Samanlagður fjöldi sjálfvirkra banna: $1",
        "autoblocklist-empty": "Listinn yfir sjálfvirk bönn er tómur.",
        "autoblocklist-otherblocks": "{{PLURAL:$1|Annað sjálfvirkt bann|Önnur sjálfvirk bönn}}",
        "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Merki}}]]: $2",
        "tag-mw-new-redirect": "Ný endurbeining",
        "tag-mw-removed-redirect": "Fjarlægði endurbeiningu",
+       "tag-mw-blank": "Tæming",
+       "tag-mw-blank-description": "Breytingar sem tæma síðu.",
        "tag-mw-replace": "Skipt út",
+       "tag-mw-replace-description": "Breytingar sem fjarlægja meira en 90% af innihaldi síðna.",
        "tag-mw-rollback": "Afturköllun",
+       "tag-mw-rollback-description": "Breytingar sem taka til baka fyrri breytingar með taka til baka tenglinum.",
        "tag-mw-undo": "Afturkalla",
+       "tag-mw-undo-description": "Breytingar sem taka til baka fyrri breytingar með {{int:editundo}} tenglinum",
        "tags-title": "Merki",
        "tags-intro": "Þessi síða sýnir merkin sem hugbúnaðurinn gæti merkt breytingar með, og hvað þau þýða.",
        "tags-tag": "Heiti merkis",
        "htmlform-date-placeholder": "ÁÁÁÁ-MM-DD",
        "htmlform-time-placeholder": "KK:MM:SS",
        "htmlform-datetime-placeholder": "ÁÁÁÁ-MM-DD KK:MM:SS",
+       "htmlform-date-invalid": "Uppgefið gildi er ekki þekkt. Reyndu að nota ÁÁÁÁ-MM-DD formið.",
+       "htmlform-time-invalid": "Uppgefið gildi er ekki þekktur tími. Reyndu að nota KK:MM:SS formið.",
+       "htmlform-datetime-invalid": "Uppgefið gildi er ekki þekkt dagsetning og tími. Reyndu að nota ÁÁÁÁ-MM-DD KK:MM:SS formið.",
+       "htmlform-date-toolow": "Gildið sem þú gafst upp er fyrir elstu leyfðu dagsetninguna $1.",
+       "htmlform-date-toohigh": "Gildið sem þú gafst upp er eftir síðustu leyfðu dagsetninguna $1.",
+       "htmlform-time-toolow": "Gildið sem þú gafst upp er fyrir elstu leyfðu tímasetninguna $1.",
+       "htmlform-time-toohigh": "Gildið sem þú gafst upp er eftir síðustu leyfðu tímasetninguna $1.",
+       "htmlform-datetime-toolow": "Gildið sem þú gafst upp er fyrir elstu leyfðu dagsetninguna og tímasetninguna $1.",
+       "htmlform-datetime-toohigh": "Gildið sem þú gafst upp er eftir síðustu leyfðu dagsetninguna og tímasetninguna $1.",
        "htmlform-title-badnamespace": "[[:$1]] er ekki í \"{{ns:$2}}\" nafnrýminu.",
        "htmlform-title-not-creatable": "\"$1\" er ekki hægt að nota við að búa til titil á síðu",
        "htmlform-title-not-exists": "$1 er ekki til",
        "logentry-block-block": "$1 {{GENDER:$2|bannaði}} {{GENDER:$4|$3}}, rennur út eftir $5 $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|afbannaði}} {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|breytti}} bann stillingum fyrir {{GENDER:$4|$3}}, rennur út $5 $6",
+       "logentry-partialblock-block": "$1 {{GENDER:$2|bannaði}} {{GENDER:$4|$3}} frá því að breyta $7, rennur út eftir $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|breytti}} bönnunar stillingum fyrir {{GENDER:$4|$3}} og hindraði breytingar á $7, rennur út $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|bannaði}} {{GENDER:$4|$3}} frá sérstökum aðgerðum öðrum en breytingum, rennur út $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|breytti}} bönnunarstillingum fyrir {{GENDER:$4|$3}} fyrir sérstakar aðgerðir aðrar en breytingar, rennur út eftir $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|bannaði}} {{GENDER:$4|$3}}, rennur út eftir $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|breytti}} bannstillingum fyrir {{GENDER:$4|$3}}, rennur út $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|flutti inn}} $3 úr innsendri skrá",
index e912aef..406238b 100644 (file)
        "createacct-loginerror": "L'utenza è stata creata correttamente, ma non è stato possibile farti accedere in modo automatico. Procedi con l'[[Special:UserLogin|accesso manuale]].",
        "noname": "Il nome utente indicato non è valido.",
        "loginsuccesstitle": "Accesso effettuato",
-       "loginsuccess": "'''Sei stato connesso al server di {{SITENAME}} con il nome utente di \"$1\".'''",
+       "loginsuccess": "'''Sei {{GENDER:$1|stato connesso|stata connessa}} al server di {{SITENAME}} con il nome utente di «$1».'''",
        "nosuchuser": "Non è registrato alcun utente di nome \"$1\".\nI nomi utente sono sensibili alle maiuscole.\nVerificare il nome inserito o [[Special:CreateAccount|creare una nuova utenza]].",
        "nosuchusershort": "Non è registrato alcun utente di nome \"$1\". Verificare il nome inserito.",
        "nouserspecified": "È necessario specificare un nome utente.",
        "delete-warning-toobig": "La cronologia di questa pagina è molto lunga (oltre $1 {{PLURAL:$1|versione|versioni}}). La sua cancellazione può creare dei problemi di funzionamento al database di {{SITENAME}}; procedere con cautela.",
        "deleteprotected": "Non puoi cancellare questa pagina perché è stata protetta.",
        "deleting-backlinks-warning": "<strong>Attenzione:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|altre pagine]] contengono collegamenti o inclusioni alla pagina che stai per cancellare.",
-       "deleting-subpages-warning": "<strong>Attenzione:</strong> la pagina che stai per cancellare ha [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|una sotto-pagina|$1 sotto-pagine|51=più di 50 sotto-pagine}}]].",
+       "deleting-subpages-warning": "<strong>Attenzione:</strong> la pagina che stai per cancellare ha [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|una sottopagina|$1 sottopagine|51=più di 50 sottopagine}}]].",
        "rollback": "Annulla le modifiche",
        "rollback-confirmation-confirm": "Per favore conferma:",
        "rollback-confirmation-yes": "Rollback",
        "passwordpolicies-policy-passwordnotinlargeblacklist": "La password non può essere nell'elenco delle 100 000 password utilizzate più comunemente.",
        "easydeflate-invaliddeflate": "Il contenuto fornito non è compresso correttamente",
        "unprotected-js": "Per motivi di sicurezza, non è possibile caricare JavaScript da pagine non protette. Crea javascript solo nel namespace MediaWiki o come sottopagina Utente",
-       "userlogout-continue": "Vuoi uscire?"
+       "userlogout-continue": "Vuoi davvero uscire?"
 }
index 5fac6ac..2807103 100644 (file)
@@ -97,7 +97,8 @@
                        "Wat",
                        "Puntti ja",
                        "マツムシ",
-                       "神樂坂秀吉"
+                       "神樂坂秀吉",
+                       "Yuukin0248"
                ]
        },
        "tog-underline": "リンクの下線:",
        "rcfilters-clear-all-filters": "すべてのフィルターをクリア",
        "rcfilters-show-new-changes": "$1 から最新の変更を表示",
        "rcfilters-search-placeholder": "絞り込みを行う(メニューから選択、またはフィルター名で検索)",
+       "rcfilters-search-placeholder-mobile": "フィルター",
        "rcfilters-invalid-filter": "無効なフィルター",
        "rcfilters-empty-filter": "絞り込みは行われていません。全ての項目が表示されます。",
        "rcfilters-filterlist-title": "フィルター",
        "changecontentmodel": "ページのコンテンツ・モデルの変更",
        "changecontentmodel-legend": "コンテンツモデルを変更",
        "changecontentmodel-title-label": "ページ名",
+       "changecontentmodel-current-label": "現在のコンテンツモデル",
        "changecontentmodel-model-label": "新しい コンテンツ モデル",
        "changecontentmodel-reason-label": "理由:",
        "changecontentmodel-submit": "変更",
        "edit-error-short": "エラー: $1",
        "edit-error-long": "エラー:\n\n\n\n$1",
        "specialmute": "ミュート",
-       "specialmute-success": "ミュートの個人設定が更新されました。[[Special:Preferences|ご自分の個人設定ページ]]でミューとした利用者の一覧を確認できます。",
+       "specialmute-success": "ミュートの個人設定が更新されました。[[Special:Preferences|個人設定]]からミュートした利用者の一覧を確認できます。",
        "specialmute-submit": "確定",
        "specialmute-label-mute-email": "この利用者からのウィキメールをミュートする",
        "specialmute-header": "<b>{{BIDI:[[User:$1|$1]]}}</b>さんに対するミュートを個人設定で選択してください。",
index 264e0c9..b0bded1 100644 (file)
@@ -78,6 +78,7 @@
        "tog-norollbackdiff": "ცვლილების გაუქმებისას არ მანახო ცვლილებათა განსხვავება",
        "tog-useeditwarning": "გამაფრთხილე, როდესაც დავტოვებ რედაქტირებად გვერდს, დაუმახსოვრებელი ცვლილებებით",
        "tog-prefershttps": "მუდამ უსაფრთხო კავშირის გამოყენება ავტორიზაციის შემდეგ",
+       "tog-showrollbackconfirmation": "დადასტურების მოთხოვნა გაუქმების ლინკზე დაჭერისას",
        "underline-always": "მუდამ",
        "underline-never": "არასდროს",
        "underline-default": "დამოკიდებული მომხმარებელზე ან ბრაუზერის არჩევანზე",
        "prefs-advancedwatchlist": "გაფართოებული კონფიგურაციები",
        "prefs-displayrc": "გამოსახვის კონფიგურაციები",
        "prefs-displaywatchlist": "გამოსახვის კონფიგურაციები",
+       "prefs-changesrc": "ცვლილების ჩვენება",
+       "prefs-pageswatchlist": "კონტროლირებადი გვერდები",
        "prefs-tokenwatchlist": "ჟეტონი",
        "prefs-diffs": "სხვაობა ვერსიებს შორის",
        "prefs-help-prefershttps": "ამ კონფიგურაციის არჩევა შედეგს გამოიღებს შემდგომი ავტორიზაციის შედმეგ.",
index 1d1fab9..5bea99a 100644 (file)
        "navigation-heading": "បញ្ជីណែនាំ",
        "errorpagetitle": "មានបញ្ហា",
        "returnto": "ត្រឡប់ទៅ $1 វិញ ។",
-       "tagline": "á\9e\8aá\9f\84á\9e\99{{SITENAME}}",
+       "tagline": "á\9e\96á\9e¸{{SITENAME}}",
        "help": "ជំនួយ",
        "search": "ស្វែងរក",
        "searchbutton": "ស្វែងរក",
        "redirectedfrom": "(ត្រូវបានបញ្ជូនបន្តពី $1)",
        "redirectpagesub": "ទំព័របញ្ជូនបន្ត",
        "redirectto": "បញ្ជូនបន្តទៅ៖",
-       "lastmodifiedat": "ទំព័រនេះត្រូវបានកែចុងក្រោយនៅ$2 $1។",
+       "lastmodifiedat": "ទំព័រនេះត្រូវបានកែចុងក្រោយនៅម៉ោង$2 $1។",
        "viewcount": "ទំព័រនេះ​ត្រូវបានចូលមើល​ចំនួន'''{{PLURAL:$1|ម្ដង|$1ដង}}'''",
        "protectedpage": "ទំព័រដែលត្រូវបានការពារ",
        "jumpto": "លោតទៅ៖",
        "recentchanges-notargetpage": "វាយបញ្ចូលចំណងជើងទំព័រមួយខាងលើដើម្បីមើលបន្លាស់ប្ដូរដែលទាក់ទិននឹងទំព័រនោះ។",
        "recentchanges-feed-description": "តាមដាន​បន្លាស់ប្ដូរថ្មីៗ​បំផុត​នៃ​វិគី​នេះក្នុង​មតិព័ត៌មាន​នេះ​។",
        "recentchanges-label-newpage": "ការកែប្រែនេះបានបង្កើតទំព័រថ្មីមួយ",
-       "recentchanges-label-minor": "á\9e\93á\9f\81á\9f\87á\9e\87á\9e¶á\9e\80á\9e¶á\9e\9aá\9e\80á\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\8fá\9e·á\9e\85á\9e\8fá\9e½á\9e\85á\9e\98á\9e½á\9e\99ប៉ុណ្ណោះ",
+       "recentchanges-label-minor": "á\9e\93á\9f\81á\9f\87á\9e\87á\9e¶á\9e\80á\9f\86á\9e\8eá\9f\82á\9e\94á\9f\92á\9e\9aá\9f\82á\9e\8fá\9e·á\9e\85á\9e\8fá\9e½á\9e\85ប៉ុណ្ណោះ",
        "recentchanges-label-bot": "ការកែប្រែនេះត្រូវបានធ្វើឡើងដោយរូបយន្ត",
        "recentchanges-label-unpatrolled": "ការកែប្រែនេះមិនទាន់ត្រូវបានល្បាតទេ",
        "recentchanges-label-plusminus": "ទំហំទំព័រត្រូវបានផ្លាស់ប្ដូរគិតជាចំនួនបៃ",
        "hide": "លាក់",
        "show": "បង្ហាញ",
        "minoreditletter": "ត",
-       "newpageletter": "ថ្មី",
+       "newpageletter": "ថ",
        "boteditletter": "យ",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|បៃ|បៃ}} បន្ទាប់ពីបន្លាស់ប្ដូរ",
        "undelete-show-file-confirm": "តើអ្នកប្រាកដហើយថាអ្នកពិតជាចង់មើលកំណែដែលត្រូវបានលុបចោលរបស់ឯកសារ \"<nowiki>$1</nowiki>\" ពីថ្ងៃ $2 ម៉ោង $3?",
        "undelete-show-file-submit": "បាទ/ចាស៎",
        "namespace": "លំហឈ្មោះ:",
-       "invert": "á\9e\80á\9f\92á\9e\9aá\9f\85á\9e\96á\9e¸á\9e\93á\9f\84á\9f\87",
+       "invert": "á\9e\94á\9e\89á\9f\92á\9e\85á\9f\92á\9e\9aá\9e¶á\9e\9fâ\80\8bá\9e\87á\9e\98á\9f\92á\9e\9aá\9e¾á\9e\9f",
        "tooltip-invert": "គូសធីកប្រអប់នេះដើម្បីលាក់បន្លាស់ប្ដូរទំព័រដែលស្ថិតនៅក្នុងលំហឈ្មោះដែលបានជ្រើសយក (និងលំហឈ្មោះដែលទាក់ទិន ប្រសិនបើគូសធីក)",
        "namespace_association": "លំហឈ្មោះដែលទាក់ទិន",
        "tooltip-namespace_association": "គូសធីកប្រអប់នេះដើម្បីដាក់លំហឈ្មោះការពិភាក្សានិងប្រធានបទភ្ជាប់ទាក់ទិនទៅលំហឈ្មោះដែលបានជ្រើសយក",
        "tooltip-p-logo": "ទំព័រដើម",
        "tooltip-n-mainpage": "ចូលមើលទំព័រដើម",
        "tooltip-n-mainpage-description": "ចូលមើលទំព័រដើម",
-       "tooltip-n-portal": "á\9e¢á\9f\86á\9e\96á\9e¸á\9e\82á\9e\98á\9f\92á\9e\9aá\9f\84á\9e\84 á\9e\9cá\9e·á\9e\92á\9e¸á\9e\94á\9f\92á\9e\9aá\9e¾á\9e\94á\9f\92á\9e\9aá\9e¶á\9e\9fá\9f\8b á\9e\93á\9e·á\9e\84á\9e\80á\9e¶á\9e\9aស្វែងរកព័ត៌មាន",
+       "tooltip-n-portal": "á\9e¢á\9f\86á\9e\96á\9e¸á\9e\82á\9e\98á\9f\92á\9e\9aá\9f\84á\9e\84 á\9e¢á\9f\92á\9e\9cá\9e¸á\9e\8aá\9f\82á\9e\9bá\9e¢á\9f\92á\9e\93á\9e\80á\9e¢á\9e¶á\9e\85á\9e\92á\9f\92á\9e\9cá\9e¾á\9e\94á\9e¶á\9e\93 á\9e\93á\9e·á\9e\84á\9e\80á\9e\93á\9f\92á\9e\9bá\9f\82á\9e\84ស្វែងរកព័ត៌មាន",
        "tooltip-n-currentevents": "រកមើលព័ត៌មានទាក់ទិននឹងព្រឹត្តិការណ៍បច្ចុប្បន្ន",
        "tooltip-n-recentchanges": "បញ្ជី​​បន្លាស់ប្ដូរថ្មីៗ​នៅក្នុងវិគីនេះ",
        "tooltip-n-randompage": "ផ្ទុក​ទំព័រចៃដន្យ​មួយទំព័រ",
        "tooltip-n-help": "ជំនួយ​បន្ថែម",
-       "tooltip-t-whatlinkshere": "á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸â\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9cá\9e·á\9e\82á\9e¸â\80\8bá\9e\91á\9e¶á\9f\86á\9e\84á\9e¢á\9e\9fá\9f\8bâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\8fá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bâ\80\8bá\9e\93á\9e¹á\9e\84ទីនេះ",
+       "tooltip-t-whatlinkshere": "á\9e\94á\9e\89á\9f\92á\9e\87á\9e¸â\80\8bá\9e\91á\9f\86á\9e\96á\9f\90á\9e\9cá\9e·á\9e\82á\9e¸â\80\8bá\9e\91á\9e¶á\9f\86á\9e\84á\9e¢á\9e\9fá\9f\8bâ\80\8bá\9e\8aá\9f\82á\9e\9bá\9e\97á\9f\92á\9e\87á\9e¶á\9e\94á\9f\8bâ\80\8bá\9e\98á\9e\80ទីនេះ",
        "tooltip-t-recentchangeslinked": "បន្លាស់ប្ដូរថ្មីៗក្នុងទំព័រដែលត្រូវបានភ្ជាប់មកទំព័រនេះ",
        "tooltip-feed-rss": "បម្រែបម្រួល RSS ចំពោះទំព័រនេះ",
        "tooltip-feed-atom": "បម្រែបម្រួល Atom ចំពោះទំព័រនេះ",
index f85a0f5..0f789a0 100644 (file)
        "rcfilters-clear-all-filters": "필터 모두 지우기",
        "rcfilters-show-new-changes": "$1 이후 새 변경사항 보기",
        "rcfilters-search-placeholder": "필터 변경(메뉴를 사용하거나 필터 이름을 검색하세요)",
+       "rcfilters-search-placeholder-mobile": "필터",
        "rcfilters-invalid-filter": "유효하지 않은 필터",
        "rcfilters-empty-filter": "활성화된 필터가 없습니다. 모든 기여가 표시됩니다.",
        "rcfilters-filterlist-title": "필터",
        "changecontentmodel": "문서의 콘텐츠 모델을 변경",
        "changecontentmodel-legend": "콘텐츠 모델 변경",
        "changecontentmodel-title-label": "문서 제목",
+       "changecontentmodel-current-label": "현재의 콘텐츠 모델:",
        "changecontentmodel-model-label": "새 콘텐츠 모델",
        "changecontentmodel-reason-label": "이유:",
        "changecontentmodel-submit": "바꾸기",
        "permanentlink": "고유 링크",
        "permanentlink-revid": "판 ID",
        "permanentlink-submit": "판으로 이동",
+       "newsection": "새 문단",
+       "newsection-submit": "문서로 이동",
        "dberr-problems": "죄송합니다! 이 사이트에 기술적인 문제가 발생하고 있습니다.",
        "dberr-again": "잠시 기다리고 나서 다시 불러오세요.",
        "dberr-info": "(데이터베이스 서버에 연결할 수 없습니다: $1)",
index af92424..7d2c4bf 100644 (file)
        "thu": "Pşm",
        "fri": "În",
        "sat": "Şem",
-       "january": "rêbendan",
-       "february": "reşemî",
+       "january": "kanûna paşîn",
+       "february": "sibat",
        "march": "adar",
-       "april": "avrêl",
+       "april": "nîsan",
        "may_long": "gulan",
-       "june": "pûşper",
+       "june": "hezîran",
        "july": "tîrmeh",
-       "august": "gelawêj",
-       "september": "rezber",
-       "october": "kewçêr",
-       "november": "sermawez",
-       "december": "berfanbar",
-       "january-gen": "Rêbendan",
-       "february-gen": "Reşemî",
-       "march-gen": "Adar",
-       "april-gen": "Avrêl",
+       "august": "tebax",
+       "september": "îlon",
+       "october": "çiriya pêşîn",
+       "november": "çiriya paşîn",
+       "december": "kanûna pêşîn",
+       "january-gen": "kanûna paşîn",
+       "february-gen": "sibat",
+       "march-gen": "adar",
+       "april-gen": "nîsan",
        "may-gen": "gulan",
-       "june-gen": "pûşper",
-       "july-gen": "Tîrmeh",
-       "august-gen": "Gelawêj",
-       "september-gen": "rezber",
-       "october-gen": "Kewçêr",
-       "november-gen": "Sermawez",
-       "december-gen": "berfanbar",
-       "jan": "rêb",
-       "feb": "reş",
+       "june-gen": "hezîran",
+       "july-gen": "tîrmeh",
+       "august-gen": "tebax",
+       "september-gen": "îlon",
+       "october-gen": "çiriya pêşîn",
+       "november-gen": "çiriya paşîn",
+       "december-gen": "kanûna pêşîn",
+       "jan": "kpa",
+       "feb": "sib",
        "mar": "adr",
-       "apr": "avr",
+       "apr": "nîs",
        "may": "gln",
-       "jun": "pûş",
+       "jun": "hez",
        "jul": "tîr",
-       "aug": "Glw",
-       "sep": "rez",
-       "oct": "kew",
-       "nov": "ser",
-       "dec": "ber",
-       "january-date": "Rêbendan $1",
-       "february-date": "Reşemî $1",
+       "aug": "teb",
+       "sep": "îln",
+       "oct": "çpê",
+       "nov": "çpa",
+       "dec": "kpê",
+       "january-date": "Kanûna paşîn $1",
+       "february-date": "Sibat $1",
        "march-date": "Adar $1",
-       "april-date": "Avrêl $1",
+       "april-date": "Nîsan $1",
        "may-date": "Gulan $1",
        "june-date": "Pûşper $1",
        "july-date": "Tîrmeh $1",
-       "august-date": "Gelawêj $1",
-       "september-date": "Rezber $1",
-       "october-date": "Kewçêr $1",
-       "november-date": "Sermawez $1",
-       "december-date": "Berfanbar $1",
+       "august-date": "$1 tebax",
+       "september-date": "Îlon $1",
+       "october-date": "Çiriya pêşîn $1",
+       "november-date": "Çiriya paşîn $1",
+       "december-date": "Kanûna pêşîn $1",
        "period-am": "Berî Nîvro",
        "period-pm": "PN",
        "pagecategories": "{{PLURAL:$1|Kategorî|Kategorî}}",
        "perfcachedts": "Ev dane hatiye veşartin û cara paşîn $1 hatiye rojanekirin. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
        "querypage-no-updates": "Fonksiyona rojanekirinê ya vê rûpelê hatiye sekinandin. Daneyên vir nayên rojanekirin.",
        "viewsource": "Çavkaniyê bibîne",
-       "viewsource-title": "Çavkanîya $1 bibîne",
+       "viewsource-title": "Çavkaniya $1 bibîne",
        "actionthrottled": "Hejmara guherandinên hatine hesibandin",
        "actionthrottledtext": "Te ev tişt di demeke gelekî kin de kir. Ji kerema xwe çend xulekan bisekine û carekî din biceribîne.",
        "protectedpagetext": "Ev rûpel ji bo guhertin û karên din ne kirin hatiye parastin.",
        "revdelete-edit-reasonlist": "Sedemên jêbirinê biguherîne",
        "revdelete-offender": "Nivîskarê/a guhertoyê:",
        "mergehistory-box": "Guhertoyên her du rûpelan bike yek:",
-       "mergehistory-from": "Çavkanîya rûpelê:",
+       "mergehistory-from": "Çavkaniya rûpelê:",
        "mergehistory-submit": "Guhertoyan bike yek",
        "mergehistory-reason": "Sedem:",
        "mergelog": "Yekkirina gotaran",
        "deletepage": "Rûpelê jê bibe",
        "confirm": "Pesend bike",
        "excontent": "Naveroka berê: \"$1\"",
-       "excontentauthor": "Naveroka vê rûpelê ev bû: '$1' (û tenya bikarhêner '$2' bû)",
+       "excontentauthor": "Naveroka rûpelê ev bû: \"$1\", û tenê ya bikarhêner \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|gotûbêj]] bû.)",
        "exbeforeblank": "Naverok berî betalkirinê ev bû: \"$1\"",
        "delete-confirm": "Jêbirina \"$1\"",
        "delete-legend": "Jê bibe",
        "tooltip-pt-preferences": "Tercîhên {{GENDER:|te}}",
        "tooltip-pt-watchlist": "The list of pages you",
        "tooltip-pt-mycontris": "Lîsteyekê beşdariyên {{GENDER:|te}}",
-       "tooltip-pt-login": "Têketina we tê teşwîqkirin; lêbelê, en ne elzem e",
+       "tooltip-pt-login": "Têketina we dê baş be; lê belê, lê pêwîstî tune ye.",
        "tooltip-pt-logout": "Derkeve",
        "tooltip-pt-createaccount": "Em pêşniyar dikin ku tu ji xwe re hesabek çêbikî û bi wê hesabê têkevî, lêbelê ev ne mecbûrî ye.",
        "tooltip-ca-talk": "Gotûbêj li ser rûpela naverokê",
index d61a2e6..d990768 100644 (file)
        "rcfilters-clear-all-filters": "All Filteren eidelmaachen",
        "rcfilters-show-new-changes": "Nei Ännerungen zanter $1 weisen",
        "rcfilters-search-placeholder": "Ännerunge filteren (benotzt de Menü oder sicht nom Numm vum Filter)",
+       "rcfilters-search-placeholder-mobile": "Filteren",
        "rcfilters-invalid-filter": "Net valabele Filter",
        "rcfilters-empty-filter": "Keen aktive Filter. All Kontributioune gi gewisen.",
        "rcfilters-filterlist-title": "Filteren",
        "rcfilters-filterlist-whatsthis": "Wéi geet dat?",
-       "rcfilters-filterlist-feedbacklink": "Sot eis wat Dir vun dësen Filterméiglechkeeten haalt",
+       "rcfilters-filterlist-feedbacklink": "Sot eis wat Dir vun dëse Filterméiglechkeeten haalt",
        "rcfilters-highlightbutton-title": "Resultater ervirhiewen",
        "rcfilters-highlightmenu-title": "Eng Faarf eraussichen",
        "rcfilters-highlightmenu-help": "Sicht eng Faarf eraus fir dës Eegenschaft ervirzehiewen.",
        "permanentlink": "Permanente Link",
        "permanentlink-revid": "Nummer (ID) vun der Versioun",
        "permanentlink-submit": "Op d'Versioun goen",
+       "newsection": "Neien Abschnitt",
+       "newsection-page": "Zilsäit",
+       "newsection-submit": "Op d'Säit goen",
        "dberr-problems": "Pardon! Dëse Site huet technesch Schwieregkeeten.",
        "dberr-again": "Versicht e puer Minutten ze waarden an dann nei ze lueden.",
        "dberr-info": "(D'Datebank kann net erreecht ginn: $1)",
index 4afee0e..4607790 100644 (file)
@@ -14,7 +14,8 @@
                        "Fitoschido",
                        "Matěj Suchánek",
                        "Physicsch",
-                       "FarsiNevis"
+                       "FarsiNevis",
+                       "Iriman"
                ]
        },
        "tog-underline": "خط کیشائن ژێر پیوندەل:",
        "undo-failure": "به علت تعارض با ویرایش‌های میانی، این ویرایش را نمی‌توان خنثی کرد.",
        "undo-norev": "این ویرایش را نمی‌توان خنثی کرد چون وجود ندارد یا حذف شده‌است.",
        "undo-nochange": "به نظر می‌رسد ویرایش از پیش واگردانی شده است.",
-       "undo-summary": "Ø®Ù\86Ø«Û\8câ\80\8cسازÛ\8c Ù\88Û\8cراÛ\8cØ´ $1 ØªÙ\88سط [[Special:Contributions/$2|$2]] ([[User talk:$2|بحث]])",
+       "undo-summary": "Ø®Ù\86Ø«Û\8câ\80\8cسازÛ\8c Ù\88Û\8cراÛ\8cØ´ $1 Ø§Ø²  [[Special:Contributions/$2|$2]] ([[User talk:$2|بحث]])",
        "undo-summary-username-hidden": "خنثی‌سازی نسخهٔ $1 به دست یک کاربر پنهان‌شده",
        "cantcreateaccount-text": "امكان ساختن حساب کاربری از این این نشانی آی‌پی ('''$1''') توسط [[User:$3|$3]] سلب شده است.\n\nدلیل ارائه شده توسط $3 چنین است: $2",
        "cantcreateaccount-range-text": "ایجاد حساب از آدرس آی‌پی در مجموعه‌ی <strong>$1</strong>، که شامل آدرس آی‌پی شما (<strong>$4</strong>) است، توسط [[User:$3|$3]] متوقف شده‌است.\nدلیل ارائه شده توسط $3، $2 است.",
index b0a9171..f24aa1d 100644 (file)
        "right-rollback": "چوئارشٱ کردن سریع ڤیرایشؽا آخری کاریارؽ کاْ یاٛ بٱلگٱ ڤیژٱ ناْ ڤیرایش کردٱ",
        "right-markbotedits": "نشوݩ دار کردن ڤیرایشؽا چوئاشٱ بیٱ چی ڤیرایشؽا یاٛ روبات",
        "right-noratelimit": "کارگرا ناٛیئن د مٱئدۊدیٱت سۏرعٱت",
-       "right-import": "بÙ\84Ú¯Ù\87 Û\8cا Ù\86Ù\87 Ø¯ Ù\88Û\8cÚ©Û\8c Ù\87Ù\86Û\8c Ù\88ارد Ø¨Ú©Û\8cد",
-       "right-importupload": "دئÙ\86 Ø¨Ù\84Ú¯Ù\87 Û\8cا Ø¯ Û\8cÙ\87 Ú¯Ù\84 Ø¬Ø§Ù\86Û\8cا Ø³Ù\88ار Ø¨Û\8cÙ\87",
-       "right-patrol": "سردیاری کردن د ویرایشتیا کسونا تر",
-       "right-autopatrol": "سردیاری کردن خودانجوم د ویرایشتیا خوش",
-       "right-patrolmarks": "دیئن سردیس سردیاری کردن د آلشتیا ایسنی",
-       "right-unwatchedpages": "دیئن نوم گه بلگه یا دیئه نبیه",
-       "right-mergehistory": "وه یک شیوسن ویرگار ای بلگه",
-       "right-userrights": "حقوق همه کاریاریانه ویرایشت بکید",
-       "right-userrights-interwiki": "حقوق همه کاریاریانه د ویکی یا هنی ویرایشت بکید",
-       "right-siteadmin": "پاگا Ø¯Ù\88Ù\86سÙ\85Ù\86Û\8c Ù\86Ù\87 Ù\82Ù\84Ù\81 Ø¨Ú©Û\8cد Û\8cا Ù\86Ú©Û\8cد",
-       "right-override-export-depth": "وه در دئن بلگه یایی که بلگه یا هوم پیوند بیه تا پی یا 5 ها دشو",
-       "right-sendemail": "سی کاریاریا هنی انجومانامه کل بکید",
+       "right-import": "بٱÙ\84Ú¯Ù±Û\8cا Ù\86اÙ\92 Ø¯ Ú¤Û\8cÚ©Û\8c Ù\87Ù\86Û\8c Ú¤Ø§Ø±Ø¯ Ø¨Ù±Ú©Ø½Øª",
+       "right-importupload": "داÙ\9bئÙ\86 Ø¨Ù±Ù\84Ú¯Ù±Û\8cا Ø¯ Û\8cاÙ\9b Ø¬Ø§Ù\86Û\8cا Ø³Ú¤Ø§Ø± Ø¨Û\8cÙ±",
+       "right-patrol": "سٱردؽاری کردن د ڤیرایشؽا کٱسونؽاْ تر",
+       "right-autopatrol": "سٱردؽاری کردن خودٱنجوم د ڤیرایشؽا خوش",
+       "right-patrolmarks": "دیئن سٱردیس سٱردؽاری کردن د آلشتؽا ایسنی",
+       "right-unwatchedpages": "دیئن نومگٱ بٱلگٱیا دییٱ ناٛیٱ",
+       "right-mergehistory": "ڤ یٱک شؽڤسن ڤیرگار اؽ بٱلگٱ",
+       "right-userrights": "هقوق هٱمٱ کاریارؽا ناْ ڤیرایش بٱکؽت",
+       "right-userrights-interwiki": "هقوق هٱمٱ کاریارؽا ناْ د ڤیکی یا هنی ڤیرایش بٱکؽت",
+       "right-siteadmin": "Ù\82Ù\84Ù\81 Ú©Ø±Ø¯Ù\86 Û\89 Ú¤Ø§Ø² Ú©Ø±Ø¯Ù\86 Ù¾Ø§Û\8cگا Ø¯Ù\88Ù\86سÙ\85Ù±Ù\86Û\8c",
+       "right-override-export-depth": "ڤ دٱر داٛئن بٱگٱیایؽ کاْ بٱلگٱیا هوم پاٛڤٱن بیٱ تا قیلٛی 5 ها دشو",
+       "right-sendemail": "سی کاریارؽا هنی ٱنجومانامٱ کلٛ بٱکؽت",
        "right-managechangetags": "راس کئردئن [[Special:سأردیسیا|سأردیسیا]] پاکسا کئردئن د رئسینە جا",
        "right-applychangetags": "ڤئ کار گئرئتئنئ [[Special:سأردیسیا|سأردیسیا]] ڤاگئرد آلئشتیا ھأرکومئشوٙ.",
        "right-changetags": "Add and remove arbitrary [[Special:Tags|tags]] on individual revisions and log entries",
        "newuserlogpage": "دۏرس بیٱ ڤا کاریار",
-       "newuserlogpagetext": "Û\8cÙ\87 Ù¾Ù\87رستÙ\86Ù\88Ù\85Ù\87 Ø±Ø§Ø³ Ø¨Û\8cئÙ\86 Ú©Ø§Ø±Û\8cارÙ\87",
-       "rightslog": "Ù¾Ù\87رستÙ\86Ù\88Ù\85Ù± Ù\87Ù\88Ù\82Û\8aÙ\82 Ú©Ø§Ø±Û\8cار",
-       "rightslogtext": "Û\8cÙ\87 Ù¾Ù\87رستÙ\86Ù\88Ù\85Ù\87 Ø¢Ù\84شتÛ\8cا Ø­Ù\82Ù\88Ù\82 Ú©Ø§Ø±Û\8cارÙ\87.",
-       "action-read": "ای بلگه نه بحو",
-       "action-edit": "اؽ بٱلگٱ ناْ ڤيرايش بٱكیت",
+       "newuserlogpagetext": "Û\8cÙ± Ù¾Ù\87رستÙ\86Ù\88Ù\85Ù± Ø¯Û\8fرس Ø¨Û\8cئÙ\86 Ú©Ø§Ø±Û\8cار Ø¦Ù±.",
+       "rightslog": "پهرستنومٱ هقۊق کاریار",
+       "rightslogtext": "Û\8cÙ± Ù¾Ù\87رستÙ\86Ù\88Ù\85Ù± Ø¢Ù\84شتؽا Ù\87Ù\82Ù\88Ù\82 Ú©Ø§Ø±Û\8cار Ø¦Ù±.",
+       "action-read": "ڤٱنن اؽ بٱلگٱ",
+       "action-edit": "اؽ بٱلگٱ ناْ ڤيرايش بٱكؽت",
        "action-createpage": "راس کردن بلگیا",
        "action-createtalk": "بلگه یا چک چنه نه راس بکید",
        "action-createaccount": "هساو اؽ کاریار ناْ دۏرس بٱکؽت",
-       "action-history": "ویرگار ای بلگه نه بوینیت",
-       "action-minoredit": "ای ویرایشت نه چی یه حیرده ویرایشت نشو بیئت",
+       "action-history": "ڤیرگار اؽ بٱلگٱ ناْ باٛینؽت",
+       "action-minoredit": "اؽ ڤیرایش ناْ چی یاٛ هیردٱ ڤیرایش نشوݩ باٛیؽت",
        "action-move": "اؽ بٱلگٱ ناْ جا ڤ جا کو",
-       "action-move-subpages": "اÛ\8c Ø¨Ù\84Ú¯Ù\87 Ù\88 Ø²Û\8cر Ø¨Ù\84Ú¯Ù\87 Û\8cاشÙ\87 Ø¬Ø§ Ù\88Ù\87 Ø¬Ø§ Ø¨Ú©Û\8cد",
-       "action-move-rootuserpages": "بÙ\84Ú¯Ù\87 Û\8cا Ø±Û\8cØ´Ù\87 Ø§Û\8c Ú©Ø§Ø±Û\8cار Ù\86Ù\87 Ø¬Ø§ Ù\88Ù\87 Ø¬Ø§ Ø¨Ú©Û\8cد",
-       "action-move-categorypages": "جا وه جا کردن دسه بلگه یا",
-       "action-movefile": "ای جانیا نه جا وه جا بکید",
-       "action-upload": "ای جانیا نه سوار بکید",
-       "action-reupload": "نیسئین ری جانیا ایسنی",
-       "action-reupload-shared": "باطÙ\84 Ú©Ø±Ø¯Ù\86 Ø§Û\8c Ø¬Ø§Ù\86Û\8cا Ø±Û\8c Û\8cÙ\87 Ú¯Ù\84 Ú¯Ù\86جÛ\8cÙ\86Ù\87 Ù\87Ù\88Ù\85بئر",
-       "action-upload_by_url": "ای جانیا نه د یو آر ال سوار بکید",
-       "action-writeapi": "د Ù\86Û\8cسÙ\86Ù\86 Ø§Û\8c Ù¾Û\8c Ø¢Û\8c Ø§Ø³ØªÙ\81ادÙ\87 Ø¨Ú©Û\8cد",
-       "action-delete": "ای بلگه نه پاکسا کو",
+       "action-move-subpages": "ؽ Ø¨Ù±Ù\84Ú¯Ù± Û\89 Ø²Ø½Ø± Ø¨Ù±Ù\84Ú¯Ù±Û\8cا Ø´Ø§Ù\92 Ø¬Ø§ Ú¤ Ø¬Ø§ Ø¨Ù±Ú©Ø½Øª",
+       "action-move-rootuserpages": "بٱÙ\84Ú¯Ù±Û\8cا Ø±Û\8cشاÙ\9bÛ\8c Ú©Ø§Ø±Û\8cار Ù\86اÙ\92 Ø¬Ø§ Ú¤ Ø¬Ø§ Ø¨Ù±Ú©Ø½Øª",
+       "action-move-categorypages": "جا ڤ جا کردن دٱسٱ بٱلگٱیا",
+       "action-movefile": "اؽ جانؽا ناْ جا ڤ جا بٱکؽت",
+       "action-upload": "اؽ جانؽا ناْ سڤار بٱکؽت",
+       "action-reupload": "نیسٱنن ری جانؽا ایسنی",
+       "action-reupload-shared": "باتÙ\84 Ú©Ø±Ø¯Ù\86 Ø§Ø½ Ø¬Ø§Ù\86ؽا Ø±Û\8c Û\8cاÙ\9b Ú¯Ù±Ù\86جÛ\8cÙ\86Ù± Ù\87Ù\88Ù\85بٱر",
+       "action-upload_by_url": "اؽ جانؽا ناْ د یۊ آر اْل سڤار بٱکؽت",
+       "action-writeapi": "د Ù\86Û\8cسٱÙ\86Ù\86 Ø§Û\8c Ù¾Û\8c Ø¢Û\8c Ø§Ù\92ستÙ\81ادٱ Ø¨Ù±Ú©Ø½Øª",
+       "action-delete": "اؽ بٱلگٱ ناْ پاکسا کو",
        "action-deleterevision": "ای وانئری نه پاک کو",
        "action-deletedhistory": "ویرگار پاکسا بیه ای بلگه نه بوینیت",
-       "action-browsearchive": "بÙ\84Ú¯Ù\87 Û\8cا Ù¾Ø§Ú© Ø¨Û\8cÙ\87 Ù\86Ù\87 Ù¾Û\8c Ø¬Ù\88رÛ\8c Ø¨Ú©Û\8cد",
+       "action-browsearchive": "بٱÙ\84Ú¯Ù±Û\8cا Ù¾Ø§Ú© Ø¨Û\8cÙ± Ù\86اÙ\92 Ù¾Ø§Ù\9bجÛ\8aرÛ\8c Ø¨Ù±Ú©Ø½Øª",
        "action-undelete": "ای بلگه نه پاک نکو",
        "action-suppressrevision": "وانئری و زنه کردن وانئریا پاک بیه",
-       "action-suppressionlog": "ای پهرستنومه خصوصی نه بوینیت",
-       "action-block": "ای کاریار نه د ویرایشت کردن نهاگری کو",
-       "action-protect": "ریترازیا پر و پیم کاری د ای بلگه نه آلشت بکید",
-       "action-rollback": "Ú\86Ù\88اشÙ\87 Ú©Ø±Ø¯Ù\86 Ø³Ø±Û\8cع Ù\88Û\8cراÛ\8cشتÛ\8cا Ø¢Ø®Ø±Û\8c Ú©Ø§Ø±Û\8cارÛ\8c Ú©Ù\87 Û\8cÙ\87 Ø¨Ù\84Ú¯Ù\87 Ù\88Û\8cجÙ\87 Ù\86Ù\87 Ù\88Û\8cراÛ\8cشت Ø¯Ø¦Ù\87",
-       "action-import": "بÙ\84Ú¯Ù\87 Û\8cا Ù\86Ù\87 Ø¯ Ù\88Û\8cÚ©Û\8c Ù\87Ù\86Û\8c Ù\88ارد Ø¨Ú©Û\8cد",
-       "action-importupload": "بÙ\84Ú¯Ù\87 Û\8cا Ù\86Ù\87 Ø¯ Ø¬Ø§Ù\86Û\8cا Ø³Ù\88ار Ø¨Û\8cÙ\87 Ù\88ارد Ø¨Ú©Û\8cد",
-       "action-patrol": "سردیاری کردن د ویرایشتیا کسونا تر",
-       "action-autopatrol": "سردیاری کردن د ویرایشتیا خوتو",
-       "action-unwatchedpages": "دیئن نوم گه بلگه یا دیئه نبیه",
-       "action-mergehistory": "وه یک شیوسن ویرگار ای بلگه",
-       "action-userrights": "حقوق همه کاریاریا نه ویرایشت بکید",
-       "action-userrights-interwiki": "حقوق همه کاریاریانه د ویکی یا هنی ویرایشت بکید",
-       "action-siteadmin": "رسینه جا نه قلف بکید یا نکید",
-       "action-sendemail": "انجومانامه یا نه کل کو",
-       "action-editmywatchlist": "سیل برگ خوتونه ویرایشت بکید",
-       "action-viewmywatchlist": "سیل برگ خوتونه بوینیت",
-       "action-viewmyprivateinfo": "دÙ\88Ù\86سÙ\85Ù\86Û\8cا Ø®Ù\88تÙ\88Ù\86Ù\87 Ø¨Ù\88Û\8cÙ\86Û\8cت",
-       "action-editmyprivateinfo": "دÙ\88Ù\86سÙ\85Ù\86Û\8cا Ø´ØµÙ\82Û\8c Ø®Ù\88تÙ\88Ù\86Ù\87 Ù\88Û\8cراÛ\8cشت Ø¨Ú©Û\8cد",
-       "action-editcontentmodel": "ویرایشت مدل مینونه یه گل بلگه",
+       "action-suppressionlog": "اؽ پهرستنومٱ خسوسی ناْ باٛینؽت",
+       "action-block": "اؽ کاریار ناْ د ڤیرایش کردن نهاگیری کو",
+       "action-protect": "ریترازؽا پر ۉ پیم کاری د اؽ بٱلگٱ ناْ آلشت بٱکؽت",
+       "action-rollback": "Ú\86Ù\88ئارشٱ Ú©Ø±Ø¯Ù\86 Ø³Ø±Û\8cع Ú¤Û\8cراÛ\8cشؽا Ø¢Ø®Ø±Û\8c Ú©Ø§Ø±Û\8cارؽ Ú©Ø§Ù\92 Û\8cاÙ\9b Ø¨Ù±Ù\84Ú¯Ù± Ú¤Û\8cÚ\98Ù± Ù\86اÙ\92 Ú¤Û\8cراÛ\8cØ´ Ø¯Ø§Ù\9bئٱ",
+       "action-import": "بٱÙ\84Ú¯Ù±Û\8cا Ù\86اÙ\92 Ø¯ Ú¤Û\8cÚ©Û\8c Ù\87Ù\86Û\8c Ú¤Ø§Ø±Ø¯ Ø¨Ù±Ú©Ø½Øª",
+       "action-importupload": "بٱÙ\84Ú¯Ù±Û\8cا Ù\86اÙ\92 Ø¯ Ø¬Ø§Ù\86ؽا Ø³Ú¤Ø§Ø± Ø¨Û\8cÙ± Ú¤Ø§Ø±Ø¯ Ø¨Ù±Ú©Ø½Øª",
+       "action-patrol": "سٱردؽاری کردن د ڤیرایشؽا کٱسونؽا تر",
+       "action-autopatrol": "سٱردؽاری کردن د ڤیرایشؽا خوتو",
+       "action-unwatchedpages": "دیئن نومگٱ بٱلگٱیا دیئٱ ناٛیٱ",
+       "action-mergehistory": "ڤ یٱک شؽڤسن ڤیرگار اؽ بٱلگٱ",
+       "action-userrights": "هقوق هٱمٱ کاریارؽا ناْ ڤیرایش بٱکؽت",
+       "action-userrights-interwiki": "هقوق هٱمٱ کاریارؽا ناْ د ڤیکی یا هنی ڤیرایش بٱکؽت",
+       "action-siteadmin": "قلف کردن ۉ ڤاز کردن پایگا دونسمٱنی",
+       "action-sendemail": "ٱنجومانامٱیا ناْ کلٛ- کو",
+       "action-editmywatchlist": "ساٛل بٱرگ خوتو ناْ ڤیرایش بٱکؽت",
+       "action-viewmywatchlist": "ساٛل بٱرگ خوتو ناْ باٛینؽت",
+       "action-viewmyprivateinfo": "دÙ\88Ù\86سÙ\85Ù±Ù\86Û\8cا Ø®Ù\88تÙ\88 Ù\86اÙ\92 Ø¨Ø§Ù\9bÛ\8cÙ\86ؽت",
+       "action-editmyprivateinfo": "دÙ\88Ù\86سÙ\85Ù±Ù\86Û\8cا Ø´Ù±Ø®Ø³Û\8c Ø®Ù\88تÙ\88 Ù\86اÙ\92Ú¤Û\8cراÛ\8cØ´ Ø¨Ù±Ú©Ø½Øª",
+       "action-editcontentmodel": "ڤیرایش مودل میپؽنونٱ یاٛ بٱلگٱ",
        "action-managechangetags": "راس کردن و پاکسا کردن سردیسیا د رسینه جا",
-       "action-applychangetags": "سردیسیا نه واگرد آلشتیایی که خوتو دئیته وه کار بیئریت",
-       "action-changetags": "اضاف کردن یا جا وه جاکاری سردیسیا دل وه حایی د وانئریا و پهرستنومه یا شخصی",
-       "nchanges": "$1 {{PLURAL:$1|آلشت|آلشتیا}}",
+       "action-applychangetags": "سٱردیسیا ناْ ڤاگرد آلشتؽایؽ کاْ خوتو داٛئؽتٱ ڤ کار باٛیرؽت",
+       "action-changetags": "اْزاف کردن یا جا ڤ جاکاری سٱردیسؽا دل بهایی د ڤانریا ۉ پهرستنومٱیا شٱخسی",
+       "nchanges": "$1 {{PLURAL:$1|آلشت|آلشتؽا}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|د آخری دیئن}}",
        "enhancedrc-history": "ڤیرگار",
        "recentchanges": "آلشتؽا ایسنی",
        "recentchanges-noresult": "هیچ آلشتؽ د درازا دۉرٱ دؽار بیٱ ڤا اؽ ماٛعیارؽا یٱکی ناٛی.",
        "recentchanges-feed-description": "دۏ بؽشتر آلشتؽا تازباو ناْ د ڤیکی کا ها د هڤال هون پاٛگیری کو.",
        "recentchanges-label-newpage": "اؽ ڤیرایش یاٛ بٱلگٱ تازٱ دۏرس کردٱ.",
-       "recentchanges-label-minor": "یٱ یاٛ ڤیرایش کوچکٱ",
+       "recentchanges-label-minor": "یٱ یاٛ ڤیرایش کوچک ئٱ",
        "recentchanges-label-bot": "اؽ ڤيرايش ناْ ياٛ بوت ٱنجوم داٛیٱ",
-       "recentchanges-label-unpatrolled": "اؽ ڤيرايش هنی تيٱ ڤاداشت ناٛیئٱ",
-       "recentchanges-label-plusminus": "ٱندازٱ بٱلگٱ ڤ شماراٛ اؽ بایتؽا آلشت کردٱ.",
+       "recentchanges-label-unpatrolled": "اؽ ڤيرايش هنی تيٱ ڤاداشت ناٛییٱ",
+       "recentchanges-label-plusminus": "ٱندازٱ بٱلگٱ ڤ شمارٱ اؽ بایتؽا آلشت کردٱ.",
        "recentchanges-legend-heading": "<strong>میرات:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (همچنو باٛینؽت [[ڤیژٱ:بٱلگٱیا تازٱ|نوم گٱ بٱلگٱیا تازٱ]])",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "rcshowhidebots": "$1 روباتؽا یا بوتؽا",
        "rcshowhidebots-show": "نشوݩ داٛئن",
        "rcshowhidebots-hide": "قایم کردن",
-       "rcshowhideliu": "$1 کاریاریا سٱبت نوم کردٱ",
+       "rcshowhideliu": "$1 کاریارؽا سٱبت نوم کردٱ",
        "rcshowhideliu-show": "نشوݩ داٛئن",
        "rcshowhideliu-hide": "قایم کردن",
        "rcshowhideanons": "کاریار نادؽار $1",
        "rcshowhideanons-show": "نشوݩ داٛئن",
        "rcshowhideanons-hide": "قایم کردن",
        "rcshowhidepatr": "$1 ڤیرایشیا تیٱ پرس بیٱ",
-       "rcshowhidepatr-show": "Ù\86ئشÙ\88Ù\99 Ø¯Ø£ئن",
-       "rcshowhidepatr-hide": "قام کئردئن",
+       "rcshowhidepatr-show": "Ù\86Ø´Ù\88Ý© Ø¯Ø§Ù\9bئن",
+       "rcshowhidepatr-hide": "قایم کردن",
        "rcshowhidemine": "ڤیرایشؽا ماْ $1",
        "rcshowhidemine-show": "نشوݩ داٛئن",
        "rcshowhidemine-hide": "قایم کردن",
-       "rcshowhidecategorization": "جأرغە کاری بألگە $1",
+       "rcshowhidecategorization": "جٱرغٱ کاری بٱلگٱ $1",
        "rcshowhidecategorization-show": "نئشوٙ دأئن",
-       "rcshowhidecategorization-hide": "قام کئردئن",
-       "rclinks": "آخرین آلشتؽا $1 د آخرین رۊزؽا دؽاری بٱک $2",
+       "rcshowhidecategorization-hide": "قایم کردن",
+       "rclinks": "آخرین آلشتؽا $1 د آخری رۊزؽا دؽاری بٱک $2",
        "diff": "فٱرق",
        "hist": "ڤیرگار",
        "hide": "قایم کردن",
        "unpatrolledletter": "!",
        "rc-change-size": "$1",
        "rc-change-size-new": "$1 {{PLURAL:$1|بایت|بایتؽا}} دما آلشتکاری",
-       "newsectionsummary": "/* $1 */ Ø¨Ù\87رجا ØªØ§Ø²Ù\87",
-       "rc-enhanced-expand": "جزيات نشون بيئه",
-       "rc-enhanced-hide": "جزياته قام كو",
+       "newsectionsummary": "/* $1 */ Ø¨Ù±Ø¦Ø±Ø¬Ø§ ØªØ§Ø²Ù±",
+       "rc-enhanced-expand": "نشوݩ داٛئن جۏزئیات",
+       "rc-enhanced-hide": "قایم کردن جۏزئیات",
        "rc-old-title": "کاملٱن چی \"$1\"دۏرس بیٱ",
        "recentchangeslinked": "آلشتؽا تاٛ یٱکؽ",
        "recentchangeslinked-feed": "آلشتؽا تاٛ یٱک",
        "recentchangeslinked-toolbox": "آلشتؽا تاٛ یٱک",
        "recentchangeslinked-title": "آلشتؽا تاٛ یٱکؽ د $1",
-       "recentchangeslinked-summary": "اؽ نوم بٱلگٱ تازٱ د بٱلگٱیایی کاْ ڤا بٱلگٱیا ڤیژٱ هوم پاٛڤٱن بینٱ آلشت بیٱ(یا سی ٱندومؽا دٱسٱ بٱنی بیٱ)\nبٱلگٱیایی کاْ هان د [[Special:Watchlist|your watchlist]]ۉ گٱپ بینٱ",
+       "recentchangeslinked-summary": "اؽ نوم بٱلگٱ تازٱ د بٱلگٱیایؽ کاْ ڤا بٱلگٱیا ڤیژٱ هوم پاٛڤٱن بینٱ آلشت بیٱ(یا سی ٱندومؽا دٱسٱ بٱنی بیٱ)\nبٱلگٱیایی کاْ هان د [[Special:Watchlist|your watchlist]]ۉ گٱپ بینٱ",
        "recentchangeslinked-page": "نوم بٱلگٱ:",
        "recentchangeslinked-to": "آلشتؽایؽ کاْ د بٱلگٱیا هوم پاٛڤٱن بینٱ ڤ جا بٱلگٱ داٛیٱ بیٱ نشوݩ باٛیٱ",
-       "recentchanges-page-added-to-category": "[[:$1]]د دأسە ئضاف بی",
+       "recentchanges-page-added-to-category": "[[:$1]]ڤ دٱسٱ اْزاف بی",
        "recentchanges-page-added-to-category-bundled": "[[:$1]] و {{PLURAL:$2|بألگە تأکی|$2 بألگە یا}} د دأسە ئضاف بییئن",
        "recentchanges-page-removed-from-category": "[[:$1]] د دٱسٱ جگا بی",
        "recentchanges-page-removed-from-category-bundled": "[[:$1]] و {{PLURAL:$2|بألگە تأکی|$2 بألگە یا}} د دأسە ئضاف بییئن",
-       "autochange-username": "Ø¢Ù\84ئشتکارÛ\8c Ø®Ù\88دأÙ\86جÙ\88Ù\85 Ù\85ئدیاڤیکی",
+       "autochange-username": "Ø¢Ù\84شتکارÛ\8c Ø®Ù\88دٱÙ\86جÙ\88Ù\85 Ù\85دیاڤیکی",
        "upload": "سڤار کردن جانؽا",
-       "uploadbtn": "سوڤار کئردئن جانیا",
-       "reuploaddesc": "سوار کردن نه انجوم شیو بکیت و د ورئردیت جابلگ سوارکرد",
-       "upload-tryagain": "کل کردن توضیحیا آلشت دئیه بیه جانیا",
+       "uploadbtn": "سڤار کردن جانؽا",
+       "reuploaddesc": "سڤار کردن ناْ ٱنجوم شؽڤ بٱکؽت ۉ ڤرگٱردؽد  جا بٱلگٱ سڤارکرد",
+       "upload-tryagain": "کلٛ کردن تۉزیهؽا آلشت داٛئٱ بیٱ جانؽا",
        "uploadnologin": "هنی نۏمایتٱ ڤامیٛن",
        "uploadnologintext": "لطفن $1 سی سوارکرد جانیایا.",
        "upload_directory_missing": "نشونگه سوارکرد ($1) وجود ناره و نبوئه دروسش بکی.",
index 7614e38..61a778f 100644 (file)
        "rcfilters-clear-all-filters": "Valyti visus filtrus",
        "rcfilters-show-new-changes": "Rodyti naujausius keitimus",
        "rcfilters-search-placeholder": "Filtruoti pakeitimus (naudokitės meniu arba ieškokite filtro pavadinimo)",
+       "rcfilters-search-placeholder-mobile": "Filtrai",
        "rcfilters-invalid-filter": "Negalimas filtras",
        "rcfilters-empty-filter": "Nėra aktyvių filtrų. Rodomi visi indėliai.",
        "rcfilters-filterlist-title": "Filtrai",
        "changecontentmodel": "Keisti puslapio turinio modelį",
        "changecontentmodel-legend": "Keisti turinio modelį",
        "changecontentmodel-title-label": "Puslapio pavadinimas",
+       "changecontentmodel-current-label": "Dabartinis turinio modelis:",
        "changecontentmodel-model-label": "Naujas turinio modelis",
        "changecontentmodel-reason-label": "Priežastis:",
        "changecontentmodel-submit": "Keisti",
        "permanentlink": "Nuolatinė nuoroda",
        "permanentlink-revid": "Versijos ID",
        "permanentlink-submit": "Peržiūrėti versiją",
+       "newsection": "Naujas skyrius",
+       "newsection-submit": "Eiti į puslapį",
        "dberr-problems": "Atsiprašome! Svetainei iškilo techninių problemų.",
        "dberr-again": "Palaukite kelias minutes ir perkraukite puslapį.",
        "dberr-info": "(Nepavyksta pasiekti duomenų bazės: $1)",
        "linkaccounts": "Susieti paskyras",
        "linkaccounts-success-text": "Paskyra buvo susieta.",
        "linkaccounts-submit": "Susieti paskyras",
+       "cannotunlink-no-provider-title": "Nėra susietų paskyrų, kurios galėtų būti atsietos.",
+       "cannotunlink-no-provider": "Nėra susietų paskyrų, kurios galėtų būti atsietos.",
        "unlinkaccounts": "Atsieti paskyras",
        "unlinkaccounts-success": "Paskyra buvo atsieta.",
        "edit-error-short": "Klaida: $1",
index 4763645..70c07c3 100644 (file)
        "rcfilters-clear-all-filters": "Noņemt visus filtrus",
        "rcfilters-show-new-changes": "Skatīt jaunās izmaiņas kopš $1",
        "rcfilters-search-placeholder": "Filtrēt pēdējās izmaiņas (pārlūko vai sāc rakstīt)",
+       "rcfilters-search-placeholder-mobile": "Filtri",
        "rcfilters-invalid-filter": "Nederīgs filtrs",
        "rcfilters-empty-filter": "Nav aktīvu filtru. Tiek rādītas visas izmaiņas.",
        "rcfilters-filterlist-title": "Filtri",
index d183ca0..de98e58 100644 (file)
@@ -31,7 +31,7 @@
        "tog-hideminor": "Скривај ги ситните уредувања во скорешните промени",
        "tog-hidepatrolled": "Скриј испатролирани уредувања во скорешните промени",
        "tog-newpageshidepatrolled": "Скриј испатролирани страници од списокот на нови страници",
-       "tog-hidecategorization": "СокÑ\80иÑ\98 Ñ\98а ÐºÐ°Ñ\82егоÑ\80изаÑ\86иÑ\98аÑ\82а Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86иÑ\82е",
+       "tog-hidecategorization": "Скриј ја категоризацијата на страниците",
        "tog-extendwatchlist": "Прошири го список на набљудувања за приказ на сите промени, не само скорешните",
        "tog-usenewrc": "Промени во групи по страници во списокот на скорешни промени",
        "tog-numberheadings": "Наброј ги заглавијата",
@@ -63,7 +63,7 @@
        "tog-watchlistunwatchlinks": "Додај непосредни бележници за тргање/ставање во набљудуваните ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) кон набљудуваните страници со промени (префрлањето бара JavaScript)",
        "tog-watchlisthideanons": "Скриј ги уредувањата од анонимни корисници во набљудуваните",
        "tog-watchlisthidepatrolled": "Скриј испатролирани уредувања од мојот список на набљудувања",
-       "tog-watchlisthidecategorization": "СокÑ\80иÑ\98 Ñ\98а ÐºÐ°Ñ\82егоÑ\80изаÑ\86иÑ\98аÑ\82а Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86иÑ\82е",
+       "tog-watchlisthidecategorization": "Скриј ја категоризацијата на страниците",
        "tog-ccmeonemails": "Испраќај ми мои примероци од писмата што ги праќам на другите корисници",
        "tog-diffonly": "Не ја покажувај содржината на страницата под разликите",
        "tog-showhiddencats": "Прикажи скриени категории",
        "right-suppressionlog": "Гледање на лични дневници",
        "right-block": "Оневозможување на останати корисници да уредуваат",
        "right-blockemail": "Оневозможување корисници да праќаат е-пошта",
-       "right-hideuser": "Ð\91локиÑ\80аÑ\9aе ÐºÐ¾Ñ\80иÑ\81ниÑ\86и, Ñ\81окÑ\80иваÑ\9aе Ð¾Ð´ Ñ\98авноÑ\81Ñ\82а",
+       "right-hideuser": "Блокирање корисници, скривање од јавноста",
        "right-ipblock-exempt": "Заобиколување на IP-блокови, автоблокови и опсежни блокови",
        "right-unblockself": "Сопствено одблокирање",
        "right-protect": "Менување на степени на заштита и уредување на каскадно заштитени страници",
        "action-editmyuserjs": "уредување на сопствените кориснички податотеки со JavaScript",
        "action-editmyuserjsredirect": "уредување на сопствените кориснички JavaScript-податотеки кои се пренасочувања",
        "action-viewsuppressed": "преглед на преработки скриени од било кој корисник",
-       "action-hideuser": "блокиÑ\80аÑ\9aе ÐºÐ¾Ñ\80иÑ\81ниÑ\86и, Ñ\81окÑ\80иваÑ\9aе Ð¾Ð´ Ñ\98авноÑ\81Ñ\82а",
+       "action-hideuser": "блокирање корисници, скривање од јавноста",
        "action-ipblock-exempt": "заобиколување на IP-блокови, автоблокови и опсежни блокови",
        "action-unblockself": "блокирање на самите себеси",
        "action-noratelimit": "да не бидете засегнати од временски ограничувања на уредување",
        "rc-change-size-new": "$1 {{PLURAL:$1|бајт|бајти}} по промената",
        "newsectionsummary": "/* $1 */ ново заглавие",
        "rc-enhanced-expand": "Прикажување на подробности",
-       "rc-enhanced-hide": "СокÑ\80иваÑ\9aе Ð½Ð° Ð¿Ð¾Ð´Ñ\80обноÑ\81Ñ\82и",
+       "rc-enhanced-hide": "Скривање на подробности",
        "rc-old-title": "првично создадено како „$1“",
        "recentchangeslinked": "Поврзани промени",
        "recentchangeslinked-feed": "Поврзани промени",
        "changecontentmodel": "Промена на содржинскиот модел на страница",
        "changecontentmodel-legend": "Промена на содржински модел",
        "changecontentmodel-title-label": "Наслов на страницата",
+       "changecontentmodel-current-label": "Тековен содржински модел:",
        "changecontentmodel-model-label": "Нов содржински модел",
        "changecontentmodel-reason-label": "Причина:",
        "changecontentmodel-submit": "Смени",
        "autoblocker": "Автоматски сте блокирани бидејќи вашата IP-адреса била скоро користена од „[[User:$1|$1]]“.\nНаведената причина за блокирање на $1 гласи: „$2“",
        "blocklogpage": "Дневник на блокирања",
        "blocklog-showlog": "Овој корисник бил претходно блокиран.\nДневникот на блокирања, за ваша информација е прикажан подолу:",
-       "blocklog-showsuppresslog": "Ð\9eвоÑ\98 ÐºÐ¾Ñ\80иÑ\81ник Ð±Ð¸Ð» Ð¿Ñ\80еÑ\82Ñ\85одно Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан Ð¸ Ñ\81окÑ\80иен.\nÐ\94невникоÑ\82 Ð½Ð° Ð¾Ð³Ñ\80аниÑ\87Ñ\83ваÑ\9aа, Ð·Ð° Ð²Ð°Ñ\88а Ð¸Ð½Ñ\84оÑ\80маÑ\86иÑ\98а Ðµ Ð¿Ñ\80икажан Ð¿Ð¾Ð´Ð¾Ð»Ñ\83:",
+       "blocklog-showsuppresslog": "Овој корисник бил претходно блокиран и скриен.\nДневникот на ограничувања, за ваша информација е прикажан подолу:",
        "blocklogentry": "го блокираше [[$1]] со рок на истекување до $2, $3",
        "reblock-logentry": "ги промени нагодувањата за блокирање на [[$1]] со рок на истекување од $2 $3",
        "blocklogtext": "Ова е дневник на блокирање и одблокирање на кориснци.\nАвтоматски блокираните IP-адреси не се наведени.\nТековните забрани и блокирања ќе ги најдете на [[Special:BlockList|списокот на блокирања]].",
        "block-log-flags-noemail": "блокирана е-поштенска адреса",
        "block-log-flags-nousertalk": "без можност за уредување на својата разговорна страница",
        "block-log-flags-angry-autoblock": "овозможено проширено автоблокирање",
-       "block-log-flags-hiddenname": "Ñ\81окÑ\80иено ÐºÐ¾Ñ\80иÑ\81ниÑ\87ко Ð¸Ð¼Ðµ",
+       "block-log-flags-hiddenname": "скриено корисничко име",
        "range_block_disabled": "Администраторската можност да блокираат IP групи е исклучена.",
+       "ipb-prevent-user-talk-edit": "Уредувањето на сопствената разговорна страница мора да биде дозволено при делумен блок, освен ако не вклучува ограничување за разговорната страница.",
        "ipb_expiry_invalid": "Погрешен рок на истекување.",
        "ipb_expiry_old": "Времето на истекување е постаро од тековното време.",
        "ipb_expiry_temp": "Скриените блокирања на корисникот мора да бидат перманентни.",
        "sorbs_create_account_reason": "Вашата IP-адреса е наведена како отворен застапник (прокси) во DNSBL користена од {{SITENAME}}.\nНе можете да создадете корисничка сметка.",
        "softblockrangesreason": "Анонимните придонеси не се дозволени од вашата IP-адреса ($1). Најавете се.",
        "xffblockreason": "Блокирана е IP-адреса присутна во заглавието X-Forwarded-For, која е ваша или на застапничкиот опслужувач што го користите. Наведеното образложение гласи: $1",
-       "cant-see-hidden-user": "Ð\9aоÑ\80иÑ\81никоÑ\82 ÐºÐ¾Ñ\98 Ñ\81е Ð¾Ð±Ð¸Ð´Ñ\83ваÑ\82е Ð´Ð° Ð³Ð¾ Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\82е Ðµ Ð²ÐµÑ\9cе Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан Ð¸ Ñ\81окÑ\80иен. Ð\91идеÑ\98Ñ\9cи Ð²Ð¸Ðµ Ð½ÐµÐ¼Ð°Ñ\82е Ð¿Ñ\80ава Ð·Ð° Ñ\81окривање на корисник, не можете да ги видите или уредувате корисничките блокирања.",
+       "cant-see-hidden-user": "Ð\9aоÑ\80иÑ\81никоÑ\82 ÐºÐ¾Ñ\98 Ñ\81е Ð¾Ð±Ð¸Ð´Ñ\83ваÑ\82е Ð´Ð° Ð³Ð¾ Ð±Ð»Ð¾ÐºÐ¸Ñ\80аÑ\82е Ðµ Ð²ÐµÑ\9cе Ð±Ð»Ð¾ÐºÐ¸Ñ\80ан Ð¸ Ñ\81кÑ\80иен. Ð\91идеÑ\98Ñ\9cи Ð²Ð¸Ðµ Ð½ÐµÐ¼Ð°Ñ\82е Ð¿Ñ\80ава Ð·Ð° Ñ\81кривање на корисник, не можете да ги видите или уредувате корисничките блокирања.",
        "ipbblocked": "Не можете да блокирате или одблокирате други корисници бидејќи и самите сте блокирани",
        "ipbnounblockself": "Не е дозволено да се одблокирате самите себеси",
        "lockdb": "Заклучи база на податоци",
        "move-page-legend": "Премести страница",
        "movepagetext": "Со користењето на овој образец можете да преименувате страница, преместувајќи ја целата нејзина историја под ново име.\nСтариот наслов ќе стане пренасочувачка страница кон новиот наслов.\nАвтоматски можете да ги подновите пренасочувањата кои покажуваат кон првобитниот наслов.\nАко не изберете автоматско подновување, проверете на [[Special:DoubleRedirects|двојни]] или [[Special:BrokenRedirects|прекинати пренасочувања]].\nНа вас е одговорноста да се осигурате дека врските ќе продолжат да насочуваат таму за каде се предвидени.\n\nИмајте предвид дека страницата '''нема''' да биде преместена ако веќе постои страница со новиот наслов, освен ако е не е пренасочување и нема историја на минати уредувања. Тоа значи дека можете да ја преименувате страницата како што била претходно доколку сте направиле грешка без да ја прекриете постоечката страница.\n\n'''Напомена:'''\nОва може да биде драстична и неочекувана промена за популарна страница;\nосигурајте се дека сте ги разбрале последиците од ова пред да продолжите.",
        "movepagetext-noredirectfixer": "Со користењето на овој образец можете да преименувате страница, преместувајќи ја целата нејзина историја под ново име.\nСтариот наслов ќе стане пренасочувачка страница кон новиот наслов.\nАвтоматски можете да ги подновите пренасочувањата кои покажуваат кон првобитниот наслов.\nНе заборавајте да проверите [[Special:DoubleRedirects|двојни]] и [[Special:BrokenRedirects|прекинати пренасочувања]].\nНа вас е одговорноста да се осигурате дека врските ќе продолжат да насочуваат таму за каде се предвидени.\n\nИмајте предвид дека страницата '''НЕМА''' да биде преместена ако веќе постои страница со новиот наслов, освен ако е празна или ако е пренасочување и нема историја на минати уредувања. Тоа значи дека можете да ја преименувате страницата како што била претходно доколку сте направиле грешка без да ја прекриете постоечката страница.\n\n'''Напомена:'''\nОва може да биде драстична и неочекувана промена за популарна страница;\nосигурајте се дека сте ги разбрале последиците од ова пред да продолжите.",
+       "movepagetext-noredirectsupport": "Со користењето на овој образец можете да преименувате страница, преместувајќи ја целата нејзина историја под ново име.\nНа вас е одговорноста да се осигурате дека врските ќе продолжат да насочуваат таму за каде се предвидени.\n\nИмајте предвид дека страницата <strong>нема</strong> да биде преместена ако веќе постои страница со новиот наслов.\nТоа значи дека можете да ја преименувате страницата како што била претходно доколку сте направиле грешка без да ја прекриете постоечката страница.\n\n<strong>Напомена:</strong>\nОва може да биде драстична и неочекувана промена за популарна страница;\nосигурајте се дека сте ги разбрале последиците од ова пред да продолжите.",
        "movepagetalktext": "Ако го штиклирате кутивчево, соодветната разговорна страница ќе биде автоматски преместена на нов наслов, освен ако таму веќе постои разговорна страница  што не е празна.\n\nВо тој случај, ќе треба да ја преместите или споите страницата рачно, доколку сакате.",
        "moveuserpage-warning": "'''Предупредување:''' На пат сте да преместите корисничка страница. Имајте предвид дека само страницата ќе биде преместена, а самиот корисник ''нема'' да биде преименуван.",
        "movecategorypage-warning": "<strong>Предупредување:</strong> Преместувате категориска страница. Имајте предвид дека ќе се премести само страницата, а страниците во старата категорија <em>нема</em> да се прекатегоризираат во новата.",
        "newimages-user": "IP-адреса или корисничко име",
        "newimages-newbies": "Прикажи само придонеси на нови корисници",
        "newimages-showbots": "Прикажувај подигања од ботови",
-       "newimages-hidepatrolled": "СокÑ\80иÑ\98 Ð¸Ñ\81паÑ\82Ñ\80олÑ\80иани Ð¿Ð¾Ð´Ð¸Ð³Ð°Ñ\9aа",
+       "newimages-hidepatrolled": "Скриј испатролриани подигања",
        "newimages-mediatype": "Тип на медиум:",
        "noimages": "Нема ништо.",
        "gallery-slideshow-toggle": "Преод на минијатури",
        "permanentlink": "Постојана врска",
        "permanentlink-revid": "Назнака на преработката",
        "permanentlink-submit": "Оди на преработката",
+       "newsection": "Нов поднаслов",
+       "newsection-page": "Целна страница",
+       "newsection-submit": "Оди на страница",
        "dberr-problems": "Жалиме! Ова мрежно место се соочува со технички потешкотии.",
        "dberr-again": "Почекајте неколку минути и обидете се повторно.",
        "dberr-info": "(Не можам да пристапам кон базата: $1)",
index 2bbc077..59b7e93 100644 (file)
        "rcfilters-clear-all-filters": "എല്ലാ അരിപ്പകളും ഒഴിവാക്കുക",
        "rcfilters-show-new-changes": "$1 മുതലുള്ള പുതിയ മാറ്റങ്ങൾ കാണുക",
        "rcfilters-search-placeholder": "സമീപകാലമാറ്റങ്ങൾ അരിച്ചെടുക്കുക (മെനു ഉപയോഗിക്കുക അല്ലെങ്കിൽ അരിപ്പയുടെ പേരുപയോഗിച്ച് തിരയുക)",
+       "rcfilters-search-placeholder-mobile": "അരിപ്പകൾ",
        "rcfilters-invalid-filter": "അസാധുവായ അരിപ്പ",
        "rcfilters-empty-filter": "സജീവ അരിപ്പകൾ ഇല്ല. എല്ലാ സംഭാവനകളും പ്രദർശിപ്പിക്കുന്നു.",
        "rcfilters-filterlist-title": "അരിപ്പകൾ",
index dea9329..db10fbf 100644 (file)
@@ -25,7 +25,7 @@
        "tog-previewontop": "Show preview before edit box",
        "tog-previewonfirst": "Show preview on first edit",
        "tog-enotifwatchlistpages": "Email me when a page or a file on my watchlist is changed",
-       "tog-enotifusertalkpages": "Email me when my user talk page is changed",
+       "tog-enotifusertalkpages": "ꯏꯃꯦꯜ ꯊꯥꯔꯛꯎ ꯑꯩꯒꯤ ꯁꯤꯖꯤꯟꯅꯔꯤꯕ ꯋꯥ ꯍꯥꯏꯐꯝ ꯂꯃꯥꯏꯗꯨ ꯍꯣꯡꯗꯣꯛꯄꯥ ꯃꯇꯝꯗ",
        "tog-enotifminoredits": "Email me also for minor edits of pages and files",
        "tog-enotifrevealaddr": "Reveal my email address in notification emails",
        "tog-shownumberswatching": " watching users ꯀꯤ ꯃꯁꯤꯡꯗꯨ ꯎꯨꯠꯂꯨ",
        "category-file-count": "{{PLURAL:$2|This category contains only the following file.|The following {{PLURAL:$1|file is|$1 files are}} in this category, out of $2 total.}}",
        "category-file-count-limited": "The following {{PLURAL:$1|file is|$1 files are}} in the current category.",
        "listingcontinuesabbrev": "ꯆꯠꯊꯕꯥ",
-       "index-category": "Indexed ꯂꯥꯃꯥꯏꯁꯤꯡ",
-       "noindex-category": "Noindexed ꯂꯃꯥꯏꯁꯤꯡ",
-       "broken-file-category": " ꯀꯥꯏꯔꯕꯥ file links ꯒꯥ ꯂꯣꯏꯅꯕꯥ ꯂꯥꯃꯥꯏꯁꯤꯡ",
+       "index-category": "ꯏꯟꯗꯦꯛꯁ ꯂꯃꯥꯏꯁꯤꯡ",
+       "noindex-category": "ꯏꯟꯗꯦꯛꯁ ꯌꯥꯎꯗꯕ ꯂꯃꯥꯏꯁꯤꯡ",
+       "broken-file-category": " ꯀꯥꯏꯔꯕꯥ ꯐꯥꯏꯜꯒꯥ ꯂꯣꯏꯅꯕꯥ ꯂꯃꯥꯏꯁꯤꯡ",
        "about": "ꯄꯣꯠꯇꯨꯗꯤ ꯃꯔꯝꯗꯥ",
        "article": "ꯂꯃꯥꯏꯁꯤꯗꯥ ꯌꯥꯎꯕꯥ ꯄꯨꯝꯅꯃꯛ",
        "newwindow": "(ꯑꯅꯧꯕꯥ ꯊꯣꯡꯅꯥꯎꯗꯥ ꯍꯥꯡꯗꯣꯛ ꯎ)",
        "cancel": "ꯇꯣꯛꯄ",
-       "moredotdotdot": "ꯋꯥꯠꯂꯤ",
-       "morenotlisted": "ꯃꯁꯤꯒꯤ ꯄꯔꯦꯡꯁꯤ ꯃꯄꯨꯡ ꯐꯥꯗꯦ",
+       "moredotdotdot": "ꯋꯥꯠꯂꯤ....",
+       "morenotlisted": "ꯃꯁꯤꯒꯤ ꯄꯔꯦꯡꯁꯤ ꯃꯄꯨꯡ ꯐꯥꯗꯦ ꯫",
        "mypage": "ꯂꯃꯥꯏ",
        "mytalk": "ꯉꯥꯡꯐꯝ",
        "anontalk": "ꯉꯥꯡꯐꯝ",
        "navigation": "ꯆꯠꯄꯥ",
        "and": "&#32;ꯑꯃꯁꯨꯡ",
        "faq": "ꯇꯍꯋ",
-       "actions": "Actions",
+       "actions": "ꯊꯕꯛ ꯄꯥꯡꯊꯣꯛꯄ",
        "namespaces": "ꯃꯃꯤꯡꯒꯤ ꯃꯐꯝ",
        "variants": "ꯈꯦꯠꯅꯕꯥ",
        "navigation-heading": "ꯆꯠꯅꯕ ꯌꯦꯡꯐꯝ",
        "view": "ꯃꯤꯠꯌꯦꯡ",
        "view-foreign": "$1 ꯗꯥ ꯌꯦꯡꯉꯨ",
        "edit": "ꯁꯦꯝꯒꯠꯄꯥ",
-       "edit-local": "Edit local description",
+       "edit-local": "ꯁꯦꯝꯒꯠꯄꯒꯤ ꯑꯀꯨꯞꯄ ꯋꯥꯔꯣꯜ",
        "create": "ꯁꯥꯕꯥ",
        "create-local": "ꯁꯨꯋꯥꯏꯒꯤ ꯁꯟꯗꯣꯛꯅꯥ ꯇꯥꯛꯄꯗꯨ ꯍꯥꯞꯆꯤꯟꯂꯨ",
        "delete": "ꯀꯛꯊꯠꯄꯥ",
        "undelete_short": "ꯀꯛꯊꯠꯀꯅꯨ {{PLURAL:$1|ꯁꯦꯝꯒꯠꯄ ꯑꯃꯥ|ꯁꯦꯝꯒꯠꯄꯁꯤꯡ $1}}",
-       "viewdeleted_short": "ꯌꯦꯡꯕ {{PLURAL:$1|one deleted edit|$1 deleted edits}}",
+       "viewdeleted_short": "ꯌꯦꯡꯕ {{PLURAL:$1|ꯀꯛꯊꯠꯈꯔꯕ ꯁꯦꯝꯒꯠꯄ ꯱|$1 ꯀꯛꯊꯠꯈꯔꯕ ꯁꯦꯝꯒꯠꯄꯁꯤꯡ}}",
        "protect": "ꯉꯥꯛꯊꯣꯛꯂꯕꯥ",
        "protect_change": "ꯑꯍꯣꯡꯕꯥ",
        "unprotect": "ꯍꯥꯛꯊꯣꯛꯂꯕꯥ ꯗꯨ ꯍꯣꯡꯕꯥ",
        "otherlanguages": "ꯑꯇꯣꯞꯄꯥ ꯂꯣꯟꯁꯤꯡꯗꯥ",
        "redirectedfrom": "($1 ꯗꯒꯤ ꯔꯤꯗꯥꯏꯔꯦꯛ)",
        "redirectpagesub": "ꯑꯃꯨꯛ ꯍꯟꯂꯛꯄꯥ ꯂꯃꯥꯏ",
-       "redirectto": "Redirect to:",
+       "redirectto": "ꯃꯐꯝꯁꯤꯗ ꯍꯟꯕ:",
        "lastmodifiedat": "$1 ꯗꯥ ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤ ꯑꯔꯣꯏꯕꯥ ꯁꯦꯝꯒꯠꯈꯤꯕꯥ, $2 ꯗꯥ",
        "viewcount": "This page has been accessed {{PLURAL:$1|once|$1 times}}?",
        "protectedpage": "ꯉꯥꯛꯊꯣꯛꯂꯕꯥ ꯂꯃꯥꯏ",
        "disclaimers": "ꯌꯥꯅꯤꯡꯗꯕꯥ ꯐꯣꯡꯗꯣꯛꯄꯁꯤꯡ",
        "disclaimerpage": "Project:ꯃꯌꯥꯝꯒꯤ ꯑꯣꯏꯅꯥ ꯌꯥꯅꯤꯡꯗꯕꯥ ꯐꯣꯡꯗꯣꯔꯛꯄꯥ",
        "edithelp": "ꯁꯦꯝꯒꯠꯅꯕꯥ ꯃꯥꯇꯦꯡ",
-       "helppage-top-gethelp": "ê¯\83ꯥê¯\87ꯦꯡ",
+       "helppage-top-gethelp": "ꯃꯇꯦꯡ",
        "mainpage": "ꯃꯔꯨꯑꯣꯏꯕ ꯂꯃꯥꯏ",
        "mainpage-description": "ꯃꯔꯨꯑꯣꯏꯕ ꯂꯃꯥꯏ",
        "policy-url": "Project:ꯈꯣꯡꯊꯥꯡ",
        "versionrequiredtext": "ꯃꯦꯗꯤꯌꯥ ꯋꯤꯀꯤꯅ ꯋꯥꯠꯂꯤꯕꯥ $1ꯕꯔꯖꯟ ꯃꯁꯤꯒꯤ ꯂꯥꯃꯥꯏꯁꯤꯗꯥ ꯁꯤꯖꯤꯟꯅꯕꯥ [[Special:Version|version page]].",
        "ok": "ꯌꯥꯔꯦ",
        "retrievedfrom": "\"$1\" ꯃꯐꯝꯗꯨꯗꯒꯤ ꯑꯣꯏꯔꯛꯄꯥ",
-       "youhavenewmessages": "{{PLURAL:$3|ꯅꯪꯉꯣꯟꯗ ꯂꯩ}} $1 ($2).",
+       "youhavenewmessages": "{{PLURAL:$3|ꯅꯪꯉꯣꯟꯗ ꯂꯩ}} $1 ($2) ꯫",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|You have}} $1 from {{PLURAL:$3|another user|$3 users}} ($2).",
        "youhavenewmessagesmanyusers": "ꯅꯪ $1 ꯂꯩꯔꯦ $2 ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥ ꯃꯌꯥꯝꯗꯒꯤ ꯫",
        "newmessageslinkplural": "{{PLURAL:$1|ꯑꯅꯧꯕ ꯄꯥꯎꯖꯦꯜ ꯱|꯹꯹꯹=ꯑꯅꯧꯕ ꯄꯥꯎꯖꯦꯜꯁꯤꯡ}}",
        "hidetoc": "ꯂꯣꯇꯄ",
        "collapsible-collapse": "ꯁꯨꯞꯆꯤꯟꯕꯥ",
        "collapsible-expand": "ꯄꯥꯛꯊꯣꯛꯄ",
-       "confirmable-confirm": "Are {{GENDER:$1|you}} sure?",
+       "confirmable-confirm": "{{GENDER:$1|ꯅꯪꯒꯤꯖꯤ}} ꯁꯣꯏꯗ꯭ꯔꯕꯣ?",
        "confirmable-yes": "ꯍꯣꯏ",
        "confirmable-no": "ꯅꯠꯇꯦ",
-       "thisisdeleted": "View or restore $1?",
+       "thisisdeleted": "$1 ꯌꯦꯡꯕ ꯅꯠꯇ꯭ꯔꯒ ꯍꯤꯡꯍꯟꯕ?",
        "viewdeleted": "$1 ꯌꯦꯡꯍꯟꯂꯨ?",
-       "restorelink": "{{PLURAL:$1|one deleted edit|$1 deleted edits}}",
+       "restorelink": "{{PLURAL:$1|ꯁꯦꯝꯒꯠꯄꯥ ꯱ ꯀꯛꯊꯠꯂꯦ|$1 ꯀꯛꯊꯠꯈꯔꯕ ꯁꯦꯝꯒꯠꯄꯁꯤꯡ}}",
        "feedlinks": "ꯐꯤꯗ:",
        "feed-invalid": "ꯌꯥꯎꯗꯕꯥ subscription feed type.",
-       "feed-unavailable": "Syndication feeds are not available",
+       "feed-unavailable": "ꯐꯤꯗꯁ ꯐꯪꯗꯦ",
        "site-rss-feed": "$1 RSS feed",
        "site-atom-feed": "$1 ꯑꯦꯇꯣꯝ ꯇꯥꯛꯄꯥ",
        "page-rss-feed": "\"$1\" RSS feed",
        "readonlytext": "The database is currently locked to new entries and other modifications, probably for routine database maintenance, after which it will be back to normal.\n\nThe system administrator who locked it offered this explanation: $1",
        "missing-article": "The database did not find the text of a page that it should have found, named \"$1\" $2.\n\nThis is usually caused by following an outdated diff or history link to a page that has been deleted.\n\nIf this is not the case, you may have found a bug in the software.\nPlease report this to an [[Special:ListUsers/sysop|administrator]], making note of the URL.",
        "missingarticle-rev": "(revision#: $1)",
-       "missingarticle-diff": "(Diff: $1, $2)",
+       "missingarticle-diff": "(ꯈꯦꯠ: $1, $2)",
        "readonly_lag": "ꯗꯇꯥꯕꯦꯁ ꯁꯤ ꯃꯁꯥ ꯃꯇꯣꯝꯇꯥ ꯊꯤꯡꯖꯤꯟꯂꯦ while the slave database servers catch up to the master",
        "nonwrite-api-promise-error": "The 'Promise-Non-Write-API-Action' HTTP header was sent but the request was to an API write module.",
        "internalerror": "ꯃꯅꯨꯡꯒꯤ ꯑꯁꯣꯏꯕꯥ",
        "nocookieslogin": "{{SITENAME}} uses cookies to log in users.\nYou have cookies disabled.\nPlease enable them and try again.",
        "loginsuccesstitle": "ꯂꯣꯒ ꯏꯟ",
        "login-userblocked": "ꯃꯁꯤꯒꯤ ꯁꯤꯖꯤꯟꯅꯔꯤꯕꯥꯁꯤ ꯊꯤꯡꯖꯤꯟꯈꯔꯦ? ꯂꯣꯒ ꯏꯟ ꯌꯥꯔꯥꯔꯣꯏ",
-       "passwordtooshort": "ê¯\84ꯥê¯\81ê¯\8bê¯\94ê¯\87 ê¯\81ꯤ ê¯\8cꯥê¯\9dê¯\97ê¯\94ê¯\95ê¯\97ꯥ ê¯\83ê¯\81ꯤ ê¯\88ê¯\94ꯥê¯\81ꯤ ê¯\8cꯥê¯\8eê¯\92ê¯\97ê¯\95ê¯\85ꯤ {{PLURAL:$1|1 character|$1 characters}}.",
+       "passwordtooshort": "ê¯\84ꯥê¯\81ê¯\8b꯭ê¯\94ꯠ ê¯\81ꯤ ê¯\8cꯥê¯\9dê¯\97ê¯\94ê¯\95ê¯\97ꯥ {{PLURAL:$1| ê¯\83ê¯\8cꯦê¯\9b ê¯±|$1 ê¯\83ê¯\8cꯦê¯\9b ê¯\88ê¯\94ꯥ}} ê¯\8cꯥê¯\8eê¯\92ê¯\97ê¯\95ê¯\85ꯤ ê¯«",
        "mailmypassword": "ꯄꯥꯁꯋ꯭ꯔꯗ ꯁꯦꯝꯗꯣꯛꯄꯥ",
        "passwordremindertitle": " {{SITENAME}} ꯁꯤꯒꯤ ꯑꯅꯧꯕꯥ ꯉꯥꯏꯍꯥꯛꯀꯤ ꯑꯣꯏꯕꯥ ꯄꯥꯁꯋꯔꯇ",
        "passwordremindertext": "Someone (from IP address $1) requested a new\npassword for {{SITENAME}} ($4). A temporary password for user\n\"$2\" has been created and was set to \"$3\". If this was your\nintent, you will need to log in and choose a new password now.\nYour temporary password will expire in {{PLURAL:$5|one day|$5 days}}.\n\nIf someone else made this request, or if you have remembered your password,\nand you no longer wish to change it, you may ignore this message and\ncontinue using your old password.",
        "accountcreated": "ꯑꯦꯀꯥꯎꯟ ꯁꯥꯈꯔꯦ",
        "loginlanguagelabel": "ꯂꯣꯟ:$1",
        "pt-login": "ꯆꯪꯁꯤꯟꯕ ꯃꯅꯨꯪꯗ",
-       "pt-login-button": "Chang Sinba",
+       "pt-login-button": "ꯃꯅꯨꯡ ꯆꯪ-ꯁꯤꯟꯕ",
        "pt-login-continue-button": "ꯂꯣꯘ ꯏꯟ ꯃꯈꯥ ꯆꯠꯊꯧ",
        "pt-createaccount": "ꯑꯩꯒꯤ ꯑꯣꯏꯕꯥ ꯑꯃꯥ ꯁꯦꯝꯕꯥ",
        "pt-userlogout": "ꯊꯣꯛꯂꯛꯄꯥ",
        "botpasswords": "ꯕꯣꯠ ꯄꯥꯁꯋ꯭ꯔꯠꯁꯤꯡ",
        "botpasswords-summary": "<em>Bot passwords</em> allow access to a user account via the API without using the account's main login credentials. The user rights available when logged in with a bot password may be restricted.\n\nIf you don't know why you might want to do this, you should probably not do it. No one should ever ask you to generate one of these and give it to them.",
        "botpasswords-disabled": "ꯕꯣꯠ ꯄꯥꯁꯋ꯭ꯔꯠꯁꯤꯡ ꯌꯥꯍꯟꯗꯕꯥ",
+       "botpasswords-createnew": "ꯑꯅꯧꯕ ꯕꯣꯠꯀꯤ ꯄꯥꯁꯋ꯭ꯔꯠ ꯁꯦꯝꯃꯨ",
+       "botpasswords-editexisting": "ꯍꯥꯟꯅꯗꯒꯤ ꯂꯩꯔꯕ ꯕꯣꯠꯀꯤ ꯄꯥꯁꯋ꯭ꯔꯠ ꯑꯗꯨ ꯁꯦꯝꯒꯠꯂꯨ",
+       "botpasswords-label-needsreset": "(ꯄꯥꯁꯋ꯭ꯔꯠ ꯅꯧꯅꯥ ꯁꯦꯝꯇꯣꯛꯇꯕ ꯌꯥꯗꯔꯦ)",
        "botpasswords-label-appid": "ꯕꯣꯠ ꯃꯃꯤꯡ:",
        "botpasswords-label-create": "ꯁꯥꯕꯥ",
        "botpasswords-label-update": "ꯅꯧꯊꯣꯛꯍꯟꯕꯥ",
        "botpasswords-label-resetpassword": "ꯄꯥꯁꯋ꯭ꯔꯠ ꯑꯃꯨꯛ ꯍꯟꯅꯥ ꯁꯦꯝꯗꯣꯛꯄꯥ",
        "botpasswords-label-grants": "ꯆꯥꯟꯅꯕꯥ ꯌꯥꯕꯥ ꯑꯌꯥꯕꯁꯤꯡ:",
        "botpasswords-help-grants": "Grants allow access to rights already held by your user account. Enabling a grant here does not provide access to any rights that your user account would not otherwise have. See the [[Special:ListGrants|table of grants]] for more information.",
+       "botpasswords-label-grants-column": "ꯑꯌꯥꯕ ꯄꯤꯔꯦ",
+       "botpasswords-bad-appid": "\"$1\" ꯀꯧꯕꯥ ꯕꯣꯠ ꯂꯩꯇꯦ ꯫",
+       "botpasswords-insert-failed": "\"$1\" ꯕꯣꯠ ꯃꯃꯤꯡꯁꯤ ꯍꯥꯞꯆꯤꯟꯕ ꯀꯥꯎꯔꯦ ꯫ ꯍꯥꯟꯅꯥ ꯍꯥꯞꯆꯤꯟꯈꯔꯕ?",
        "botpasswords-created-title": "ꯕꯣꯠ ꯄꯥꯁꯋ꯭ꯔꯠ ꯁꯥꯈꯔꯦ",
        "botpasswords-deleted-title": "ꯕꯣꯠ ꯄꯥꯁꯋ꯭ꯔꯠ ꯀꯛꯊꯠꯈꯔꯦ",
        "resetpass_forbidden": "ꯄꯥꯁꯋ꯭ꯔꯠ ꯍꯣꯡꯗꯣꯛꯄꯥ ꯌꯥꯔꯣꯏ",
        "resetpass_forbidden-reason": "$1:ꯄꯥꯁꯋ꯭ꯔꯠꯁꯤꯡ ꯍꯣꯡꯗꯣꯛꯄꯥ ꯌꯥꯔꯣꯏ",
        "resetpass-no-info": "ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤ ꯍꯦꯛꯇꯥ ꯌꯧꯅꯕꯥ ꯅꯪ ꯁꯣꯏꯗꯅꯥ ꯂꯣꯒ ꯏꯟ ꯇꯧꯒꯗꯕꯅꯤ ꯫",
        "resetpass-submit-loggedin": "ꯄꯥꯁꯋ꯭ꯔꯠ ꯍꯣꯡꯗꯣꯛꯄꯥ",
-       "resetpass-submit-cancel": "ê¯\80ê¯\9bê¯\8aꯠê¯\84ꯥ",
+       "resetpass-submit-cancel": "ê¯\87ꯣê¯\9bê¯\84",
        "resetpass-wrong-oldpass": "ꯃꯇꯝ ꯈꯔꯥꯒꯤ ꯑꯣꯏꯅꯥ ꯀꯔꯤꯝꯇꯥ ꯌꯥꯎꯗꯦ  ꯅꯠꯇꯔꯒꯥ ꯍꯧꯖꯤꯛꯀꯤ ꯄꯥꯁꯋ꯭ꯔꯠ ꯫ ꯅꯪꯅꯥ ꯄꯥꯁꯋ꯭ꯔꯠ ꯍꯥꯟꯅꯗꯒꯤ ꯍꯣꯡꯂꯝꯂꯅꯤ ꯅꯠꯇꯔꯒꯥ ꯍꯪꯒꯠꯂꯨ ꯉꯥꯏꯍꯥꯛꯀꯤ ꯑꯣꯏꯕꯥ ꯄꯥꯁꯋ꯭ꯔꯠ ꯫",
        "resetpass-temp-password": "ꯉꯩꯍꯥꯛꯀꯤ ꯑꯣꯏꯕꯥ ꯄꯥꯁꯋ꯭ꯔꯠ:",
        "resetpass-expired": "ꯅꯪꯒꯤ ꯄꯥꯁꯋ꯭ꯔꯇ ꯁꯤ ꯌꯥꯗꯔꯦ ꯫ ꯆꯥꯟꯕꯤꯗꯨꯅ ꯑꯅꯧꯕ ꯱ ꯁꯦꯝꯃꯣ ꯂꯣꯒ ꯏꯟ ꯇꯧꯅꯕ ꯫",
        "italic_tip": "ꯋꯥꯔꯦꯡ ꯐꯩꯅꯥ ꯏꯕꯥ",
        "link_sample": "ꯑꯄꯤꯕ ꯃꯃꯤꯡ ꯁꯝꯅꯐꯝ",
        "link_tip": "ꯃꯅꯨꯡꯒꯥ ꯁꯝꯅꯐꯝ",
-       "extlink_sample": "http://www.example.com link title",
+       "extlink_sample": "http://www.example.com ꯁꯝꯅꯐꯝꯒꯤꯃꯃꯤꯡ",
        "extlink_tip": "ꯑꯇꯣꯞꯄꯥꯒꯥ ꯁꯝꯅꯐꯝ (ꯀꯥꯎꯒꯅꯨ http:// prefix)",
        "headline_sample": "ꯃꯀꯣꯛꯀꯤ ꯋꯥꯔꯦꯡ ꯄꯥꯔꯦꯡ",
        "headline_tip": "꯲ ꯁꯨꯕꯥ ꯃꯀꯣꯛꯀꯤ ꯄꯔꯦꯡ",
        "page_first": "ꯑꯍꯥꯟꯕ",
        "page_last": "ꯑꯔꯣꯏꯕ",
        "histlegend": "Diff selection: Mark the radio boxes of the revisions to compare and hit enter or the button at the bottom.<br />\nLegend: <strong>({{int:cur}})</strong> = difference with latest revision, <strong>({{int:last}})</strong> = difference with preceding revision, <strong>{{int:minoreditletter}}</strong> = ꯑꯄꯤꯛꯄ ꯁꯦꯝꯒꯠꯄ",
-       "history-fieldset-title": "ê¯\8aꯤê¯\8bꯨ ê¯\91ê¯\83ꯨê¯\9b ê¯\8dê¯\9dê¯\81ê¯\9fê¯\85ꯥ ê¯\8cꯦꯡê¯\85ê¯\95ꯥ",
+       "history-fieldset-title": "ê¯\94ꯤê¯\9aꯤê¯\96ê¯\9fê¯\81ꯤꯡ ê¯\87ꯦꯡê¯\8aꯣê¯\9bê¯\84ꯥ",
        "histfirst": "ꯈꯨꯋꯥꯏꯗꯒꯤ ꯑꯔꯤꯕꯥ",
        "histlast": "ꯑꯅꯧꯕꯥ",
        "historyempty": "(ꯑꯍꯥꯡꯕ)",
        "mergehistory-list": "ꯄꯎꯋꯥꯔꯤ ꯁꯦꯝꯒꯠꯄꯗꯨ ꯑꯃꯁꯨ ꯑꯃꯁꯨ ꯆꯪꯍꯟꯕ",
        "mergehistory-fail-invalid-source": "ꯂꯧꯔꯛꯐꯝ ꯂꯃꯥꯏꯁꯤ ꯂꯩꯇꯦ ꯫",
        "mergehistory-fail-invalid-dest": "ꯂꯝꯊꯨꯡꯐꯝ ꯂꯃꯥꯏꯁꯤ ꯂꯩꯇꯦ ꯫",
+       "mergehistory-autocomment": "[[:$1]] ꯁꯤ [[:$2]]ꯗꯥ ꯄꯨꯟꯁꯤꯟꯂꯨ",
        "mergehistory-reason": "ꯃꯔꯝ:",
        "mergelog": "ꯂꯣꯒ ꯄꯨꯟꯁꯤꯟꯕ",
-       "history-title": "Revision history of \"$1\"",
+       "history-title": "\"$1\" ꯒꯤ ꯔꯤꯚꯤꯖꯟ ꯄꯨꯋꯥꯔꯤ",
        "difference-title": "$1 ꯒꯤ ꯑꯃꯨꯛꯍꯟꯕꯥ ꯈꯦꯠꯅꯕꯥꯒꯤ ꯃꯔꯛ",
        "lineno": "ꯂꯩ ꯏ $1:",
        "compareselectedversions": "ꯈꯟꯒꯠꯂꯕ ꯁꯤꯡ ꯑꯃꯨꯛ ꯍꯟꯅ ꯌꯦꯡꯕꯗꯨ ꯆꯥꯡꯗꯝꯅꯧ",
        "search-result-size": "$1 ({{PLURAL:$2|1 word|$2 words}})",
        "search-result-category-size": "{{PLURAL:$1|1 ꯈꯣꯡꯕꯨ|$1 ꯈꯣꯡꯕꯨꯁꯤꯡ}} ({{PLURAL:$2|1 ꯃꯆꯥꯈꯥꯏꯕ ꯃꯆꯥ|$2 ꯃꯆꯥꯈꯥꯏꯕ ꯃꯆꯥꯁꯤꯡ}}, {{PLURAL:$3|1 ꯐꯥꯏꯜ|$3 ꯐꯥꯏꯜꯁꯤꯡ}})",
        "search-redirect": "($1 ꯗꯒꯤ ꯔꯤꯗꯥꯏꯔꯦꯛ)",
-       "search-section": "(section $1)",
+       "search-section": "(ꯁꯔꯨꯛ $1)",
        "search-category": "(ꯃꯆꯥꯈꯥꯏꯕ $1)",
        "search-file-match": "(ꯐꯥꯏꯜ ꯒꯤ ꯌꯥꯎꯕꯁꯤ ꯆꯥꯟꯅꯔꯦ)",
        "search-suggest": "$1 ꯁꯤꯔꯥ ꯅꯪꯅꯥ ꯍꯥꯏꯅꯤꯡꯂꯤꯕꯥꯁꯤ",
index 8b4341b..065918a 100644 (file)
        "rcfilters-clear-all-filters": "Kosongkan semua penapis",
        "rcfilters-show-new-changes": "Lihat perubahan baru sejak $1",
        "rcfilters-search-placeholder": "Penapis perubahan (guna menu atau carian untuk menapis nama)",
+       "rcfilters-search-placeholder-mobile": "Penapis",
        "rcfilters-invalid-filter": "Penapis tidak sah",
        "rcfilters-empty-filter": "Tiada penapis aktif. Semua sumbangan ditunjukkan.",
        "rcfilters-filterlist-title": "Penapis",
        "wlshowhideliu": "pengguna berdaftar",
        "wlshowhideanons": "pengguna awanama",
        "wlshowhidemine": "suntingan saya",
+       "wlshowhidecategorization": "pengkategorian laman",
        "watchlist-options": "Pilihan senarai pantau",
        "watching": "Memantau...",
        "unwatching": "Menyahpantau...",
        "deleteprotected": "Anda tidak boleh menghapuskan laman ini kerana ia telah dilindungi.",
        "deleting-backlinks-warning": "'''Amaran:''' [[Special:WhatLinksHere/{{FULLPAGENAME}}|Terdapat laman lain]] yang berpaut atau bertransklusi dengan laman yang hendak anda hapus ini.",
        "rollback": "Undurkan suntingan.",
+       "rollback-confirmation-no": "Batal",
        "rollbacklink": "undur",
        "rollbacklinkcount": "mengundurkan $1 {{PLURAL:$1|suntingan}}",
        "rollbacklinkcount-morethan": "mengundurkan lebih daripada $1 {{PLURAL:$1|suntingan}}",
        "ipb-disableusertalk": "Halang pengguna ini daripada menyunting laman perbincangan sendiri apabila disekat",
        "ipb-change-block": "Sekat semula pengguna tersebut dengan tetapan ini",
        "ipb-confirm": "Sahkan sekatan",
+       "ipb-namespaces-label": "Ruang nama",
        "badipaddress": "Alamat IP tidak sah",
        "blockipsuccesssub": "Sekatan berjaya",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] telah disekat.\n<br />Sila lihat [[Special:BlockList|senarai sekatan]] untuk menyemak sekatan.",
        "ipb-unblock": "Nyahsekat nama pengguna atau alamat IP",
        "ipb-blocklist": "Lihat sekatan sedia ada",
        "ipb-blocklist-contribs": "Sumbangan oleh {{GENDER:$1|$1}}",
+       "ipb-blocklist-duration-left": "$1 tinggal",
        "block-expiry": "Tamat:",
+       "block-target": "Nama pengguna atau alamat IP:",
        "unblockip": "Nyahsekat pengguna",
        "unblockiptext": "Gunakan borang di bawah untuk membuang sekatan bagialamat IP atau nama pengguna yang telah disekat.",
        "ipusubmit": "Tarik balik sekatan ini",
        "blocklist-userblocks": "Sorokkan sekatan akaun",
        "blocklist-tempblocks": "Sorokkan sekatan sementara",
        "blocklist-addressblocks": "Sorokkan sekatan IP tunggal",
+       "blocklist-type": "Jenis:",
+       "blocklist-type-opt-all": "Semua",
        "blocklist-rangeblocks": "Sorokkan sekatan julat",
        "blocklist-timestamp": "Cop masa",
        "blocklist-target": "Sasaran",
        "createaccountblock": "pembukaan akaun baru disekat",
        "emailblock": "e-mail disekat",
        "blocklist-nousertalk": "tidak boleh menyunting laman perbincangan sendiri",
+       "blocklist-editing": "menyunting",
+       "blocklist-editing-page": "laman",
+       "blocklist-editing-ns": "ruang nama",
        "ipblocklist-empty": "Senarai sekatan adalah kosong.",
        "ipblocklist-no-results": "Alamat IP atau nama pengguna tersebut tidak disekat.",
        "blocklink": "sekat",
        "cant-move-to-user-page": "Anda tidak mempunyai keizinan untuk memindahkan sesebuah laman ke mana-mana laman pengguna (kecuali sebagai sublamannya sahaja).",
        "cant-move-category-page": "Anda tidak mempunyai kebenaran untuk memindah laman-laman kategori.",
        "cant-move-to-category-page": "Anda tidak mempunyai kebenaran untuk memindah sebuah laman ke sebuah laman kategori.",
+       "namespace-nosubpages": "Ruang nama \"$1\" tidak membenarkan sublaman.",
        "newtitle": "Tajuk baru:",
        "move-watch": "Pantau laman ini",
        "movepagebtn": "Pindahkan laman",
        "pagemovedsub": "Pemindahan berjaya",
+       "cannotmove": "Laman tidak dapat dipindahkan, atas {{PLURAL:$1|sebab|sebab-sebab}} berikut:",
        "movepage-moved": "'''\"$1\" telah dipindahkan ke \"$2\"'''",
        "movepage-moved-redirect": "Satu lencongan telah diwujudkan.",
        "movepage-moved-noredirect": "Penciptaan lencongan telah dihalang.",
        "export-download": "Simpan sebagai fail",
        "export-templates": "Sertakan templat",
        "export-pagelinks": "Sertakan laman-laman yang dipaut sedalam:",
+       "export-manual": "Tambah laman secara manual:",
        "allmessages": "Pesanan sistem",
        "allmessagesname": "Nama",
        "allmessagesdefault": "Teks mesej asal",
        "import-mapping-namespace": "Import ke ruang nama:",
        "import-mapping-subpage": "Import sebagai sublaman bagi laman berikut:",
        "import-upload-filename": "Nama fail:",
+       "import-upload-username-prefix": "Awalan interwiki:",
        "import-comment": "Komen:",
        "importtext": "Sila eksport fail daripada sumber wiki dengan menggunakan [[Special:Export|utiliti eksport]].\nSimpan dalam komputer anda dan muat naiknya di sini.",
        "importstart": "Mengimport laman...",
        "pageinfo-display-title": "Tajuk paparan",
        "pageinfo-default-sort": "Kunci isih azali",
        "pageinfo-length": "Kepanjangan halaman (bait)",
+       "pageinfo-namespace": "Ruang nama",
        "pageinfo-article-id": "ID halaman",
        "pageinfo-language": "Bahasa isi kandungan halaman",
        "pageinfo-content-model": "Model kandungan halaman",
        "pageinfo-category-pages": "Bilangan halaman",
        "pageinfo-category-subcats": "Bilangan subkategori",
        "pageinfo-category-files": "Bilangan fail",
+       "pageinfo-user-id": "ID pengguna",
+       "pageinfo-file-hash": "Nilai cincangan",
        "markaspatrolleddiff": "Tanda ronda",
        "markaspatrolledtext": "Tanda ronda laman ini",
        "markedaspatrolled": "Tanda ronda",
        "newimages-summary": "Laman khas ini memaparkan senarai fail muat naik terakhir.",
        "newimages-legend": "Penapis",
        "newimages-label": "Nama fail (atau sebahagian daripadanya):",
+       "newimages-user": "Alamat IP atau nama pengguna",
        "newimages-showbots": "Paparkan muat naik oleh bot",
+       "newimages-mediatype": "Jenis media:",
        "noimages": "Tiada imej.",
        "ilsubmit": "Cari",
        "bydate": "mengikut tarikh",
        "version-specialpages": "Laman khas",
        "version-parserhooks": "Penyangkuk penghurai",
        "version-variables": "Pemboleh ubah",
+       "version-editors": "Penyunting",
        "version-antispam": "Pencegahan spam",
        "version-other": "Lain-lain",
        "version-mediahandlers": "Pengelola media",
        "htmlform-cloner-create": "Tambah lebih",
        "htmlform-cloner-delete": "Buang",
        "htmlform-cloner-required": "Sekurang-kurangnya satu nilai diperlukan.",
+       "htmlform-date-placeholder": "TTTT-BB-HH",
+       "htmlform-time-placeholder": "JJ:MM:SS",
+       "htmlform-datetime-placeholder": "TTTT-BB-HH JJ:MM:SS",
+       "htmlform-title-not-exists": "$1 tidak wujud.",
+       "htmlform-user-not-exists": "<strong>$1</strong> tidak wujud.",
+       "htmlform-user-not-valid": "<strong>$1</strong> bukan nama pengguna yang sah.",
        "logentry-delete-delete": "$1 telah {{GENDER:$2|menghapuskan}} laman $3",
        "logentry-delete-restore": "$1 telah {{GENDER:$2|memulihkan}} laman $3 ($4)",
        "logentry-delete-event": "$1 telah {{GENDER:$2|mengubah}} keterlihatan $5 peristiwa log di $3: $4",
        "pagelang-language": "Bahasa",
        "pagelang-use-default": "Gunakan bahasa asli",
        "pagelang-select-lang": "Pilih bahasa",
+       "pagelang-reason": "Sebab",
        "right-pagelang": "Mengubah bahasa laman",
        "action-pagelang": "mengubah bahasa laman",
        "log-name-pagelang": "Log perubahan bahasa",
        "mediastatistics-header-text": "Tekstual",
        "mediastatistics-header-executable": "Fail boleh laksana",
        "mediastatistics-header-archive": "Format mampat",
+       "mediastatistics-header-total": "Semua fail",
        "json-warn-trailing-comma": "$1 koma pengekor telah digugurkan dari JSON",
        "json-error-unknown": "Terdapat masalah dengan JSON. Ralat: $1",
        "json-error-depth": "Kedalaman tindakan maksimum telah dicecah",
        "mw-widgets-dateinput-no-date": "Tarik belum dipilih",
        "mw-widgets-titleinput-description-new-page": "laman belum wujud",
        "mw-widgets-titleinput-description-redirect": "melencong ke $1",
-       "randomrootpage": "Laman akar rawak"
+       "date-range-from": "Dari tarikh:",
+       "randomrootpage": "Laman akar rawak",
+       "log-action-filter-import": "Jenis import:",
+       "log-action-filter-all": "Semua",
+       "log-action-filter-protect-protect": "Perlindungan",
+       "log-action-filter-upload-upload": "Muat naik baru",
+       "authmanager-email-label": "E-mel",
+       "authmanager-email-help": "Alamat e-mel",
+       "authmanager-realname-label": "Nama sebenar",
+       "authmanager-realname-help": "Nama sebenar pengguna",
+       "credentialsform-account": "Nama akaun:",
+       "edit-error-short": "Ralat: $1",
+       "edit-error-long": "Ralat:\n\n$1",
+       "pagedata-title": "Data laman",
+       "pagedata-bad-title": "Tajuk tidak sah: $1.",
+       "passwordpolicies-group": "Kumpulan",
+       "passwordpolicies-policies": "Dasar-dasar"
 }
index 10f26ab..26a8bb0 100644 (file)
        "hr_tip": "Horizontale liende",
        "summary": "Samenvatting:",
        "subject": "Onderwarp:",
-       "minoredit": "kleine wieziging",
-       "watchthis": "volg disse zied",
+       "minoredit": "kleine wysiging",
+       "watchthis": "volg disse syde",
        "savearticle": "Zied opslaon",
-       "savechanges": "Wiezigingen opslaon",
+       "savechanges": "Wysigingen upslån",
        "publishpage": "Zied uutbrengen",
-       "publishchanges": "Wiezigingen uutbrengen",
+       "publishchanges": "Wysigingen üütbrengen",
        "preview": "Naokieken",
        "showpreview": "Bewarking nåkyken",
        "showdiff": "Verskil bekyken",
index 19c9734..3830cc2 100644 (file)
        "rcfilters-clear-all-filters": "Alle filters verwijderen",
        "rcfilters-show-new-changes": "Toon nieuwe wijzigingen sinds $1",
        "rcfilters-search-placeholder": "Filter wijzigingen (gebruik het menu of zoek op filternaam)",
+       "rcfilters-search-placeholder-mobile": "Filters",
        "rcfilters-invalid-filter": "Ongeldig filter",
        "rcfilters-empty-filter": "Geen actieve filters. Alle bijdragen worden weergegeven.",
        "rcfilters-filterlist-title": "Filters",
        "apisandbox-dynamic-parameters-add-label": "Parameter toevoegen:",
        "apisandbox-dynamic-parameters-add-placeholder": "Parameternaam",
        "apisandbox-dynamic-error-exists": "Er bestaat al een parameter met de naam \"$1\".",
+       "apisandbox-templated-parameter-reason": "Deze [[Special:ApiHelp/main#main/templatedparams|sjabloonparameter]] wordt aangeboden gebaseerd op de {{PLURAL:$1|waarde|waardes}} van $2.",
        "apisandbox-deprecated-parameters": "Verouderde parameters",
        "apisandbox-fetch-token": "Het token automatisch invullen",
        "apisandbox-add-multi": "Toevoegen",
        "changecontentmodel": "Inhoudsmodel van pagina bewerken",
        "changecontentmodel-legend": "Inhoudsmodel wijzigen",
        "changecontentmodel-title-label": "Paginanaam",
+       "changecontentmodel-current-label": "Huidige inhoudsmodel:",
        "changecontentmodel-model-label": "Nieuw inhoudsmodel",
        "changecontentmodel-reason-label": "Reden:",
        "changecontentmodel-submit": "Wijzigen",
        "block-log-flags-angry-autoblock": "uitgebreide automatische blokkade ingeschakeld",
        "block-log-flags-hiddenname": "gebruiker verborgen",
        "range_block_disabled": "De mogelijkheid voor beheerders om een groep IP-adressen te blokkeren is uitgeschakeld.",
+       "ipb-prevent-user-talk-edit": "Het bewerken van de eigen overlegpagina moet toegestaan zijn bij een gedeeltelijke blokkade, tenzij deze blokkade beperkingen oplegt aan het bewerken van de User Talk naamruimte.",
        "ipb_expiry_invalid": "Ongeldige duur.",
        "ipb_expiry_old": "Vervaldatum is in het verleden.",
        "ipb_expiry_temp": "Blokkades voor verborgen gebruikers moeten permanent zijn.",
        "lockedbyandtime": "(door $1 om $3 op $2)",
        "move-page": "\"$1\" hernoemen",
        "move-page-legend": "Pagina hernoemen",
-       "movepagetext": "Door middel van het onderstaande formulier kunt u een pagina hernoemen.\nDe geschiedenis gaat mee naar de nieuwe pagina.\n* De oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\n* Koppelingen naar de oude pagina worden niet aangepast.\n* De pagina's die doorverwijzen naar de oorspronkelijke paginanaam worden automatisch bijgewerkt.\nAls u dit niet wenst, controleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan <strong>alleen</strong> hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\n\n<strong>Opmerking:</strong>\nVoor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat u die gevolgen overziet voordat u deze handeling uitvoert.",
+       "movepagetext": "Door middel van het onderstaande formulier kunt u een pagina hernoemen.\nDe geschiedenis gaat mee naar de nieuwe pagina.\nDe oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\nU kunt er voor kiezen om doorverwijzingen die naar de oude naam verwijzen automatisch bij te laten werken.\nKiest u hier niet voor, controleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\nU bent er voor verantwoordelijk dat alle koppelingen naar de juiste pagina verwijzen.\n\nEen pagina kan <strong>alleen</strong> hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\nDit betekent dat u een pagina terug kun hernoemen naar de oude naam indien er iets mis gaat, maar dat u geen bestaande pagina's kunt overschrijven.\n\n<strong>Opmerking:</strong>\nVoor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat u die gevolgen overziet voordat u deze handeling uitvoert.",
        "movepagetext-noredirectfixer": "Door middel van het onderstaande formulier kunt u een pagina en alle bijbehorende oude versies hernoemen.\nDe oude naam wordt automatisch een doorverwijzing naar de nieuwe pagina.\nControleer dan of er geen [[Special:DoubleRedirects|dubbele]] of [[Special:BrokenRedirects|onjuiste doorverwijzingen]] zijn ontstaan.\n\nEen pagina kan <strong>alleen</strong> hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is.\nU kunt dus een pagina die per ongeluk is hernoemd terug hernoemen en u kunt een bestaande pagina niet overschrijven. \n\n<strong>Opmerking:</strong>\nVoor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat u die gevolgen overziet voordat u deze handeling uitvoert.",
+       "movepagetext-noredirectsupport": "Door middel van het onderstaande formulier kunt u een pagina hernoemen.\nU bent er voor verantwoordelijk dat alle koppelingen naar de juiste pagina verwijzen.\n\nEen pagina kan alleen hernoemd worden als de nieuwe paginanaam niet bestaat of een doorverwijspagina zonder verdere geschiedenis is. Dit betekent dat u een pagina terug kun hernoemen naar de oude naam indien er iets mis gaat, maar dat u geen bestaande pagina's kunt overschrijven.\n\n<strong>Opmerking:</strong>\nVoor veel bekeken pagina's kan het hernoemen drastische en onvoorziene gevolgen hebben.\nZorg ervoor dat u die gevolgen overziet voordat u deze handeling uitvoert.",
        "movepagetalktext": "Als u deze optie inschakelt krijgt de bijbehorende overlegpagina automatisch een andere naam, tenzij de overlegpagina onder de nieuwe naam al bestaat.\n\nIn dit geval moet u de pagina handmatig hernoemen of samenvoegen.",
        "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 wordt; pagina's in de oude categorie worden <em>niet</em> automatisch naar de nieuwe verplaatst.",
        "permanentlink": "Permanente koppeling",
        "permanentlink-revid": "Versienummer",
        "permanentlink-submit": "Naar versie gaan",
+       "newsection": "Nieuw kopje",
+       "newsection-page": "Doelpagina",
+       "newsection-submit": "Naar pagina gaan",
        "dberr-problems": "Onze excuses. Deze site ondervindt op het moment technische problemen.",
        "dberr-again": "Wacht een aantal minuten en probeer het daarna opnieuw.",
        "dberr-info": "(Kan geen toegang krijgen tot de database: $1)",
index df22576..2cadeda 100644 (file)
@@ -61,7 +61,7 @@
        "monday": "ߞߐ߬ߓߊ߬ߟߏ߲",
        "tuesday": "ߞߐ߬ߟߏ߲",
        "wednesday": "ߞߎ߬ߣߎ߲߬ߟߏ߲",
-       "thursday": "ß\9eß\8e߬ߣß\8e߲߬ߟߏ߲",
+       "thursday": "ß\93ß\8cߟߏ߲",
        "friday": "ߛߌ߬ߣߌ߲߬ߟߏ߲",
        "saturday": "ߞߍ߲ߘߍߟߏ߲",
        "sun": "ߞߊ߯ߙߌߟߏ߲",
        "and": "&#32;ߊ߬ ߣߌ߫",
        "faq": "ߢ.ߡ",
        "actions": "ߞߍߟߌ ߟߎ߬",
-       "namespaces": "ߕߐ߯ ߛߓߍ ߞߣߍ",
+       "namespaces": "ߕߐ߯ߛߓߍ ߞߣߍ",
        "variants": "ߦߟߍ߬ߡߊ߲߬ߦߟߍ߬ߡߊ߲߬ߠߊ ߟߎ߬",
        "navigation-heading": "ߛߏ߲߯ߓߊߟߌ߫ ߟߐ߬ߥߟߊ",
        "errorpagetitle": "ߝߎ߬ߕߎ߲߬ߕߌ",
        "help-mediawiki": "ߘߍ߬ߡߍ߲߬ߠߌ߲ ߞߊ߬ ߓߍ߲߬ ߥߞߌ-ߟߊߛߋߢߊߥߙߍ ߡߊ߬",
        "search": "ߢߌߣߌ߲ߠߌ߲",
        "searchbutton": "ߢߌߣߌ߲ߠߌ߲",
-       "go": "ß\8a߬ ß¢ß\8cߣß\8c߲߫",
+       "go": "ß\95ß\8a߯",
        "searcharticle": "ߥߊ߫/ߕߊ߯",
        "history": "ߞߐߜߍ ߟߊ߫ ߘߐ߬ߝߐ",
        "history_short": "ߘߐ߬ߝߐ",
-       "history_small": "ß\95ß\8a߬ߡß\8c߲߬ߣß\8dß²",
-       "updatedmarker": "ß\8a߬ ß\9fß\8fß²ß\98ß\90ߦß\8a ߞߊ߬ߦߌ߯ ߌ ߟߊ߫ ߞߐߟߊ߫ ߓߐߒߡߊߟߌ ߟߎ߬ ߡߊ߬",
-       "printableversion": "ß\93ß\90ß\9eß\8fߣß\8a߲߫ ߜߌ߬ߙߌ߲߬ߘߌ߬ߕߊ",
+       "history_small": "ß\98ß\90߬ß\9dß\90",
+       "updatedmarker": "ß\9fß\8fß²ß\98ß\90ߦß\8aß\9fß\8c ß¡ß\8dß² ß ß\8e߬ ß\9eß\8dß« ß£ß\8d߲߫ ߞߊ߬ߦߌ߯ ߌ ߟߊ߫ ߞߐߟߊ߫ ߓߐߒߡߊߟߌ ߟߎ߬ ߡߊ߬",
+       "printableversion": "ߦß\8cß\9fß¡ß\8a ߜߌ߬ߙߌ߲߬ߘߌ߬ߕߊ",
        "permalink": "ߛߘߌ߬ߜߋ߲߬ ߓߟߏߕߍ߰ߓߊߟߌ",
        "print": "ߜߌ߬ߙߌ߲߬ߘߌ߬ߟߌ",
        "view": "ߦߌ߬ߘߊ߬ߟߌ",
        "edit-local": "ߕߌ߲߬ߞߎߘߎ߲ ߞߊ߲߬ߛߓߍߟߌ ߡߊߦߟߍ߬ߡߊ߲߫",
        "create": "ߟߊ߬ߘߊ߲߬ߠߌ",
        "create-local": "ߕߌ߲߬ߞߎߘߎ߲ ߞߊ߲߬ߛߓߍ߬ߟߌ ߟߊߘߏ߲߬",
-       "delete": "ß\8a߬ ß\96ß\90߬ߛߌ߬",
-       "undelete_short": "ߟߊ߬ߛߊ߬ߦߌ߲߬ߠߌ  {{PLURAL:$1|ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߞߋߟߋ߲߫|$1 ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ ߠߎ߬}}",
+       "delete": "ß\8a߬ ß\96ß\8f߬ߛߌ߬",
+       "undelete_short": "ߟߊ߬ߛߊ߬ߦߌ߲߬ߠߌ  {{PLURAL:$1|ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߞߋߟߋ߲߫| ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ $1 ߠߎ߬}}",
        "viewdeleted_short": "{{PLURAL:$1|ߖߏ߬ߛߌ߬ߟߌ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߘߏ߫|$1 ߖߏ߬ߛߌ߬ߟߌ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߠߎ߬}} ߦߋ߫",
        "protect": "ߊ߬ ߟߊߞߊ߲ߘߊ߫",
        "protect_change": "ߊ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
-       "unprotect": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߡߊߝߊ߬ߟߋ߲߬ߠߌ",
+       "unprotect": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߡߊߝߊ߬ߟߋ߲߬",
        "newpage": "ߞߐߜߍ߫ ߞߎߘߊ",
        "talkpagelinktext": "ߢߊߝߐߞߣߍ",
        "specialpage": "ߞߐߜߍ߫ ߞߙߍߞߙߍߣߍ߲",
        "newmessagesdifflinkplural": "{{PLURAL:$1|ߡߝߊ߬ߟߋ߲߬ߠߌ߲|999=ߡߝߊ߬ߟߋ߲߬ߠߌ߲ ߠߎ߬}} ߞߐ߯ߟߕߊ.",
        "youhavenewmessagesmulti": "ߌ ߓߘߊ߫ ߗߋߛߓߍ߫ ߞߎߘߊ ߛߐ߬ߘߐ߲߬ $1 ߞߣߐ߫",
        "editsection": "ߊ߬ ߢߟߊߞߎߘߦߊ߫",
-       "editold": "ߡߊߦߟߍ߬ߡߊ߲߬",
+       "editold": "ß\8a߬ ß¡ß\8aߦß\9fß\8d߬ߡß\8a߲߬",
        "viewsourceold": "ߊ߬ ߛߎ߲ ߘߐߜߍ߫",
        "editlink": "ߊ߬ ߡߊߦߟߍ߬ߡߊ߲߬",
        "viewsourcelink": "ߊ߬ ߓߐߛߎ߲ ߡߊߝߟߍ߫",
        "login": "ߌ ߜߊ߲߬ߞߎ߲߬",
        "login-security": "ߌ ߡߊߟߐ߲ߕߐ߮ ߝߛߍ߬ߝߛߍ߬",
        "nav-login-createaccount": "ߌ ߜߊ߲߬ߞߎ߲߬/ߖߊ߬ߕߋ߬ߘߊ ߘߏ߫ ߟߊߞߊ߬",
-       "logout": "ߌ ߜߊ߲߬ߞߎ߲߬ ߓߐ߫",
+       "logout": "ߌ ߜߊ߲߬ߞߎ߲߬ߣߍ߲ ߓߐ߫",
        "userlogout": "ߌ ߜߊ߲߬ߞߎ߲߬ߣߍ߲ ߓߐ߫",
        "notloggedin": "ߌ ߜߊ߲߬ߞߎ߲߬ߣߍ߲߬ ߕߍ߫",
        "userlogin-noaccount": "ߖߊ߬ߕߋ߬ߘߊ߬ ߕߴߌ ߓߟߏ߫ ߓߊ߬؟",
        "userlogin-loggedin": "ߌ ߓߘߊ߫ ߓߊ߲߫ ߌ ߜߊ߲߬ߞߎ߲߬ ߠߊ߫ ߣߌ߲߬ ߠߊ߫ {{GENDER:$1|$1}}.\nߘߎ߰ߟߊ߬ߘߐ߫ ߖߙߎߡߎ߲ ߣߌ߲߬ ߠߊߓߊ߯ߙߊ߫߸ ߞߵߌ ߜߊ߲߬ߞߎ߲߬ ߕߐ߯ ߜߘߍ߫ ߟߊ߫.",
        "userlogin-reauth": "ߌ ߦߴߌ ߜߊ߲߬ߞߎ߲߬ ߞߎߘߊ߫ ߘߌ߫ ߞߵߊ߬ ߝߛߍ߬ߝߛߍ߬ ߣߴߌ ߟߋ ߟߋ߬ ߦߋ߫ {{GENDER:$1|$1}} ߘߌ߫.",
        "userlogin-createanother": "ߖߊ߬ߕߋ߬ߘߊ߬ ߞߎߘߊ߫ ߛߌ߲ߘߌ߫",
-       "createacct-emailrequired": "ߢߎߡߍߙߋ߲߫ ߞߏ߲ߘߏ ߛߊ߲߬ߓߊ߬ߕߐ߮",
-       "createacct-emailoptional": "ߢß\8eß¡ß\8dß\99ß\8b߲߫ ß\9eß\8fß²ß\98ß\8f",
+       "createacct-emailrequired": "ߢߎߡߍߙߋ߲߫ߞߏ߲ߘߏ ߛߊ߲߬ߓߊ߬ߕߐ߮",
+       "createacct-emailoptional": "ߢß\8eß¡ß\8dß\99ß\8bß²ß\9eß\8fß²ß\98ß\8f (ߢߣß\8aß\95ß\8aß\9fß\8c)",
        "createacct-email-ph": "ߌ ߟߊ߫ ߢߎߡߍߙߋ߲߫ ߞߏ߲ߘߏ ߟߊߘߏ߲߬",
-       "createacct-another-email-ph": "ߢߎߡߍ",
+       "createacct-another-email-ph": "ߢߎߡߍߙߋ߲ߞߏ߲ߘߏ ߛߊ߲߬ߓߊ߬ߕߐ߮ ߟߊߘߏ߲߬",
        "createaccountmail": "ߓߍ߲߬ߛߋ߲߬ߡߊ߬ ߕߊߡߌ߲ߞߊ߲ ߕߎ߬ߡߊ߬ߞߎ߲߬ߡߊ ߟߊߓߊ߯ߙߊ߫ ߞߊ߬ ߓߊ߲߫ ߞߵߊ߬ ߗߋ߫ ߢߎߡߍߙߋ߲߫ ߞߏ߲ߘߏ߫ ߓߟߏߡߊߞߊ߬ߣߍ߲ ߡߊ߬.",
        "createaccountmail-help": "ߊ߬ ߕߍ߫ ߛߐ߲߬ ߠߊߓߊ߯ߙߊ߫ ߟߊ߫߸ ߞߊ߬ ߡߐ߰ ߜߘߍ߫ ߟߊ߫ ߖߊ߬ߕߋ߬ߘߊ ߛߌ߲ߘߌ߫߸ ߣߴߌ ߡߊ߫ ߕߊ߬ߡߌ߲߬ߞߊ߲ ߞߊ߬ߙߊ߲߬.",
        "createacct-realname": "ߕߐ߮ ߓߘߍ (ߛߎߥߊ߲ߘߟߌ)",
        "right-reupload": "ߛߋ߲߬ߠߊ߬ ߞߐߕߐ߮ ߖߏ߬ߛߌ߬",
        "right-reupload-own": "ߌ ߖߍ߬ߘߍ ߟߊ߫ ߞߐߕߐ߯ ߟߊߦߟߍ߬ߣߍ߲ ߠߎ߬ ߖߏ߰ߛߌ߬",
        "right-upload_by_url": "ߞߐߕߐ߮ ߘߏ߫ ߟߊߦߟߍ߬ ߞߊ߬ ߓߐ߫ URL ߘߐ߫",
+       "right-apihighlimits": "API ߡߊߢߌߣߌ߲ߣߍ߲ ߛߊ߲ߘߐߕߊ ߟߊߓߊ߯ߙߊ߫",
        "right-writeapi": "ߛߓߍߟߌ API ߟߊߓߊ߯ߙߊ߫",
        "right-delete": "ߞߐߜߍ ߟߎ߬ ߖߏ߰ߛߌ߬",
        "right-bigdelete": "ߞߐߜߍ߫ ߘߝߐ߬ ߓߟߋ߬ߓߟߋ߬ߡߊ ߟߎ߬ ߖߏ߰ߛߌ߬",
+       "right-deleterevision": "ߞߐߜߍ ߟߎ߬ ߟߢߊ߬ߟߌ ߘߊ߲߬ߠߊߕߍ߰ߣߍ߲ ߠߎ߬ ߖߏ߬ߛߌ߬ߟߌ ߣߌ߫ ߖߏ߬ߛߌ߬ߣߍ߲ ߓߐߟߌ.",
        "right-browsearchive": "ߞߐߜߍ߫ ߖߏ߰ߛߌ߬ߣߍ߲ ߠߎ߬ ߢߌߣߌ߲߫",
        "right-undelete": "ߞߐߜߍ ߖߏ߰ߛߌ߬ߣߍ߲ ߓߐ߫",
        "right-suppressionlog": "ߘߎ߲߬ߘߎ߬ߡߊ߬ ߘߎ߲ߛߓߍ ߟߎ߬ ߦߋ߫",
        "right-siteadmin": "ߓߟߏߡߟߊ ߝߊ߲ ߣߍ߰ ߊ߬ ߣߌ߫ ߞߵߊ߬ ߟߊߞߊ߬",
        "right-sendemail": "ߢߎߡߍߙߋ߲ ߗߋ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߘߏ ߟߎ߬ ߡߊ߬",
        "grant-generic": "\"$1\" ߞߌߣߌ߲߫ ߝߍ߫ ߝߎߝߎ",
+       "grant-group-page-interaction": "ߞߐߜߍ ߟߎ߬ ߟߊ߫ ߞߏߢߐ߲߯ߦߊ",
        "grant-group-email": "ߢߎߡߍߙߋ߲ ߗߋ߫",
+       "grant-blockusers": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߟߎ߬ ߓߊ߬ߟߌ ߣߴߊ߬ߟߎ߬ ߓߊ߬ߟߌ߬ߣߍ߲ ߓߐߟߌ",
        "grant-createaccount": "ߖߊ߬ߕߋ߬ߘߊ ߘߏ߫ ߛߌ߲ߘߌ߫",
        "grant-createeditmovepage": "ߞߐߜߍ ߛߌ߲ߘߌ߫߸ ߡߊߦߟߍ߬ߡߊ߲߫߸ ߊ߬ ߣߌ߫ ߞߵߊ߬ ߛߋ߲߬ߓߐ߫",
        "grant-editinterface": "MediaWiki ߕߐ߯ߛߓߍ ߞߣߍ ߡߊߦߟߍ߬ߡߊ߲߫ ߊ߬ ߣߌ߫ ߞߍߦߙߐ ߞߣߍ/ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ JSON",
        "grant-editpage": "ߞߐߜߍ߫ ߓߍߓߊ߮ ߡߊߦߟߍ߬ߡߊ߲߫",
        "grant-editprotected": "ߞߐߜߍ߫ ߟߊߞߊ߲ߘߊߣߍ߲ ߡߊߦߟߍ߬ߡߊ߲߫",
        "grant-highvolume": "ߢߊ߲ߞߊ߲-ߛߊ߲ߘߐߕߊ ߡߊߦߟߍߡߊ߲ ߦߴߌ ߘߐ߫",
+       "grant-patrol": "ߞߐߜߍ ߟߎ߬ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߠߌ߲ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲",
        "grant-privateinfo": "ߘߎ߲߬ߘߎ߬ߡߊ߬ ߞߌߓߊߙߏߦߊ ߟߊߛߐ߬ߘߐ߲߬",
        "grant-protect": "ߞߐߜߍ ߟߎ߬ ߟߊߞߊ߲ߘߊ߫ ߊ߬ ߣߌ߫ ߞߵߊ߬ߟߎ߬ ߟߊߞߊ߲ߘߊߣߍ߲ ߓߐ߫",
+       "grant-rollback": "ߟߊ߬ߞߐ߬ߛߊ߬ߦߌ߲߬ߠߌ߲ ߡߝߊ߬ߟߋ߲߬ߠߌ߲ ߠߎ߬ ߞߐߜߍ ߘߐ߫",
        "grant-sendemail": "ߢߎߡߍߙߋ߲ ߗߋ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߘߏ ߟߎ߬ ߡߊ߬",
        "grant-uploadeditmovefile": "ߞߐߕߐ߮ ߟߊߦߟߍ߬߸ ߣߐ߬ߘߐߓߌ߬ߟߊ߬߸ ߊ߬ ߣߌ߫ ߞߵߊ߬ ߛߋ߲߬ߓߐ߫",
        "grant-uploadfile": "ߞߐߕߐ߮ ߞߎߘߊ߫ ߟߊߦߟߍ߬",
        "action-protect": "ߞߐߜߍ ߣߌ߲߬ ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ߬ ߞߛߊߞߊ ߡߊߝߊ߬ߟߋ߲߬",
        "action-import": "ߞߐߜߍ ߟߎ߬ ߟߊߛߣߍ߫ ߞߊ߬ ߓߐ߫ ߥߞߌ ߕߐ߭ ߟߎ߬ ߘߐ߫",
        "action-importupload": "ߞߐߜߍ ߟߎ߬ ߟߊߛߣߍ߫ ߞߊ߬ ߓߐ߫ ߞߐߕߐ߯ ߟߊߦߟߍ߬ߣߍ߲ ߠߎ߬ ߘߐ߫",
+       "action-patrol": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߘߏ ߟߎ߬ ߟߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߠߎ߬ ߣߐ߬ߣߐ߬ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲ ߘߌ߫",
+       "action-autopatrol": "ߌ ߟߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߣߍ߲ ߠߎ߬ ߣߐ߬ߣߐ߬ߣߍ߲߫ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲ ߘߌ߫؟",
        "action-unwatchedpages": "ߞߐߜߍ߫ ߜߋ߬ߟߎ߲߬ߓߊߟߌ ߟߎ߬ ߛߙߍߘߍ ߦߋ߫",
        "action-mergehistory": "ߞߐߜߍ ߣߌ߲߬ ߠߊ߫ ߘߐ߬ߝߐ ߟߎ߬ ߞߍߢߐ߲߮ߞߊ߲߬",
        "action-userrights": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ߬ ߤߊߞߍ ߓߍ߯ ߡߊߦߟߍ߬ߡߊ߲߫",
        "action-viewmyprivateinfo": "ߌ ߘߎ߲߬ߘߎ߬ߡߊ߬ ߞߌߓߊߙߏߦߊ ߟߎ߬ ߦߋ߫",
        "action-editmyprivateinfo": "ߌ ߘߎ߲߬ߘߎ߬ߡߊ߬ ߞߌߓߊߙߏߦߊ ߡߊߦߟߍ߬ߡߊ߲߫",
        "action-editcontentmodel": "ߞߐߜߍ ߣߌ߲߬ ߞߣߐߘߐ ߛߎ߮ߦߊ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "action-managechangetags": "ߘߎ߲ߛߓߍ ߟߎ߬ ߛߌ߲ߘߟߌ ߣߴߊ߬ߟߎ߬ ߓߐߒߠߊߟߌ",
+       "action-applychangetags": "ߘߎ߲ߛߓߍ ߟߎ߬ ߟߊߓߊ߯ߙߊ߫ ߌ ߟߊ߫ ߡߝߊ߬ߟߋ߲߬ߠߌ߲ ߠߎ߬ ߞߊ߲߬",
+       "action-deletechangetags": "ߘߎ߲ߛߓߍ ߟߎ߬ ߖߏ߬ߛߌ߬ ߞߊ߬ ߓߐ߫ ߓߟߏߡߟߊ ߝߊ߲ ߞߊ߲߬",
        "action-editusercss": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߘߏ ߟߎ߬ CSS ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ߬ ߞߐߕߐ߮ ߡߊߦߟߍ߬ߡߊ߲߫",
        "action-edituserjson": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߘߏ ߟߎ߬ ߟߊ߫ JSON ߞߐߕߐ߮ ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
        "action-edituserjs": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߘߏ ߟߎ߬ ߟߊ߫ JavaScript ߞߐߕߐ߮ ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
        "rcfilters-legend-heading": "<strong>ߟߊ߬ߘߛߏ߬ߟߌ ߛߙߍߘߍ</strong>",
        "rcfilters-other-review-tools": "ߡߊ߬ߛߊ߬ߦߌ߲߬ߠߌ߲߬ ߖߐ߯ߙߊ߲ ߘߏ ߟߎ߬",
        "rcfilters-group-results-by-page": "ߞߙߎ ߞߐߝߟߌ ߞߐߜߍ ߡߊ߬",
+       "rcfilters-activefilters": "ߛߍ߲ߛߍ߲ߟߊ߲߫ ߓߊߟߏߣߍ߲",
        "rcfilters-activefilters-hide": "ߊ߬ ߢߡߊߘߏ߲߰",
        "rcfilters-activefilters-show": "ߊ߬ ߦߌ߬ߘߊ߬",
+       "rcfilters-activefilters-hide-tooltip": "ߛߍ߲ߛߍ߲ߟߊ߲߫ ߓߊߟߏߣߍ߲ ߘߌ߲߬ߞߌߙߊ ߢߡߊߘߏ߲߰",
+       "rcfilters-activefilters-show-tooltip": "ߛߍ߲ߛߍ߲ߟߊ߲߫ ߓߊߟߏߣߍ߲ ߘߌ߲߬ߞߌߙߊ ߦߌ߬ߘߊ߬",
+       "rcfilters-advancedfilters": "ߛߍ߲ߛߍ߲ߟߊ߲߫ ߖߊ߲߬ߝߊ߬ߣߍ߲",
        "rcfilters-limit-title": "ߞߐߝߟߌ ߡߍ߲ ߠߎ߬ ߦߌ߬ߘߊ߬ߕߊ ߦߋ߫",
        "rcfilters-limit-and-date-label": "$1{{PLURAL:$1|ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲|ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߠߎ߬}}߸ $2",
        "rcfilters-date-popup-title": "ߕߎ߬ߡߊ ߣߌ߫ ߥߎ߬ߛߎ ߡߍ߲ ߠߎ߬ ߢߌߣߌ߲ߕߊ ߦߋ߫",
        "rcfilters-savedqueries-cancel-label": "ߊ߬ ߘߐߛߊ߬",
        "rcfilters-savedqueries-add-new-title": "ߕߋ߲߬ߕߋ߲߬ ߛߍ߲ߛߍ߲ߟߊ߲ ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߟߊߞߎ߲߬ߘߎ߬",
        "rcfilters-savedqueries-already-saved": "ߛߍ߲ߛߍ߲ߟߊ߲ ߣߌ߲߬ ߓߘߊ߫ ߓߊ߲߫ ߠߊߞߎ߲߬ߘߎ߬ ߟߊ߫.ߌ ߟߊ߫ ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߡߊߝߊ߬ߟߋ߲߬ ߞߊ߬ ߛߍ߲ߛߍ߲ߟߊ߲߫ ߟߊߞߎ߲߬ߘߎ߬ߣߍ߲ ߘߏ߫ ߛߌ߲ߘߌ߫.",
+       "rcfilters-restore-default-filters": "ߛߍ߲ߛߍ߲ߟߊ߲ ߠߊߛߊ߬ߦߌ߲߬ ߊ߬ ߘߊ߲ߢߊ ߡߊ߬",
        "rcfilters-clear-all-filters": "ߛߍ߲ߛߍ߲ߟߊ߲ ߓߍ߯ ߛߊߣߌ߲ߧߊ߫",
        "rcfilters-show-new-changes": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߞߎߘߊ ߟߎ߬ ߦߋ߫ ߞߊ߬ߦߌ߯ $1",
+       "rcfilters-search-placeholder": "ߛߍ߲ߛߍ߲ߟߊ߲ ߡߊߝߊ߬ߟߋ߲߬ (ߛߎߥߊ߲ߘߟߌ ߟߊߓߊ߯ߙߊ߫ ߥߟߊ߫ ߛߍ߲ߛߍ߲ߟߊ߲ ߕߐ߮ ߢߌߣߌ߲߫)",
+       "rcfilters-search-placeholder-mobile": "ߛߍ߲ߛߍ߲ߟߊ߲",
        "rcfilters-invalid-filter": "ߛߍ߲ߛߍ߲ߟߊ߲ ߓߍ߲߬ߓߊߟߌ",
+       "rcfilters-empty-filter": "ߛߍ߲ߛߍ߲ߟߊ߲߫ ߓߊߟߏߣߍ߲ ߕߍ߫ ߦߊ߲߬. ߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲ߠߊ ߟߎ߬ ߓߍ߯ ߦߌ߬ߘߊ߬ߣߍ߲߫ ߠߋ߬.",
        "rcfilters-filterlist-title": "ߛߍ߲ߛߍ߲ߟߊ߲",
        "rcfilters-filterlist-whatsthis": "ߣߌ߲߬ ߦߋ߫ ߓߊ߯ߙߊ߫ ߟߊ߫ ߘߌ߬؟",
        "rcfilters-filterlist-feedbacklink": "ߌ ߤߊߞߟߌߣߊ߲ ߝߐ߫ ߊ߲ ߧߋ߫ ߞߊ߬ ߓߍ߲߬ ߛߍ߲ߛߍ߲ߟߊ߲ ߖߐ߯ߙߊ߲ ߠߊ߫ ߞߏ ߡߊ߬.",
        "rcfilters-highlightbutton-title": "ߞߐߝߟߌ߫ ߡߊߦߋߙߋ߲ߣߍ߲ ߠߎ߬",
        "rcfilters-highlightmenu-title": "ߞߐ߬ߟߐ ߘߏ߫ ߓߊߓߌ߬ߟߊ߬",
        "rcfilters-filterlist-noresults": "ߛߍ߲ߛߍ߲ߟߊ߲߫ ߡߊ߫ ߛߐ߬ߘߐ߲߬",
+       "rcfilters-filtergroup-authorship": "ߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲ߠߌ߲ ߛߌ߲ߘߟߌ",
        "rcfilters-filter-editsbyself-label": "ߡߍ߲ ߠߎ߬ ߡߊߦߟߍ߬ߡߊ߲߬ߣߍ߲߬ ߌ ߓߟߏ߫",
        "rcfilters-filter-editsbyself-description": "ߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ ߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲.",
        "rcfilters-filter-editsbyother-label": "ߘߏ ߟߎ߬ ߟߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߠߎ߬",
        "rcfilters-filter-editsbyother-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߓߍ߯ ߝߴߌ ߕߊ ߟߎ߬.",
+       "rcfilters-filtergroup-user-experience-level": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߟߎ߬ ߕߐ߯ߛߓߍߟߌ ߣߌ߫ ߖߋ߬ߙߌ߲߬ߒ߬ߕߋ߬ߦߊ",
        "rcfilters-filter-user-experience-level-registered-label": "ߕߐ߯ߛߓߍߣߍ߲",
        "rcfilters-filter-user-experience-level-registered-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߊ߫ ߜߊ߲߬ߞߎ߲߬ߣߍ߲ ߠߎ߬",
        "rcfilters-filter-user-experience-level-unregistered-label": "ߕߐ߯ߛߓߍߓߊߟߌ",
        "rcfilters-filter-user-experience-level-unregistered-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߊ ߡߍ߲ ߜߊ߲߬ߞߎ߲߬ߣߍ߲߬ ߕߍ߫.",
+       "rcfilters-filter-user-experience-level-newcomer-label": "ߣߊ߬ߓߊ߰ߕߐ߬ ߞߎߘߊ ߟߎ߬",
+       "rcfilters-filter-user-experience-level-newcomer-description": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ߫ ߕߐ߯ߛߓߍߣߍ߲ ߡߍ߲ ߠߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߊ߬ ߕߊ߬ߡߌ߲߬ ߁߀ ߞߊ߲߬ ߥߟߴߊ߬ߟߎ߬ ߟߊ߫ ߓߊ߯ߙߊ ߡߊ߫ ߕߊ߬ߡߌ߲߫ ߕߟߋ߬ ߄ ߞߊ߲߬.",
        "rcfilters-filter-user-experience-level-learner-label": "ߞߊ߬ߙߊ߲߬ߠߊ ߟߎ߬",
+       "rcfilters-filter-user-experience-level-learner-description": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ߫ ߕߐ߯ߛߓߍߣߍ߲ ߡߍ߲ ߠߊ߫ ߖߋ߬ߙߌ߲߬ߒ߬ߕߋ߬ߦߊ ߦߋ߫ ߣߊ߬ߓߊ߰ߕߐ߬ ߞߎߘߊ ߣߌ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ߫ ߖߊ߬ߙߌ߲߬ߒߕߋ ߟߎ߬ ߕߍ߫.",
        "rcfilters-filter-user-experience-level-experienced-label": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ߫ ߖߊߙߌ߲ߒߕߋ",
        "rcfilters-filter-user-experience-level-experienced-description": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ߬ ߕߐ߯ߛߓߍߣߍ߲ ߡߍ߲ ߠߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߓߘߊ߫ ߕߊ߬ߡߌ߲߬ ߅߀߀ ߞߊ߲߬ ߕߟߋ߬ ߃߀ ߓߊ߯ߙߊ߫ ߣߐ.",
        "rcfilters-filtergroup-automated": "ߞߍߒߖߘߍߦߋ߫ ߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲",
        "rcfilters-filter-humans-label": "ߡߐ߱ (ߓߏߕ  ߕߍ߫)",
        "rcfilters-filter-humans-description": "ߡߐ߱ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߊ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ ߣߐ.",
        "rcfilters-filter-reviewstatus-unpatrolled-label": "ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߓߊߟߌ",
+       "rcfilters-filter-reviewstatus-auto-label": "ߞߍߒߖߘߍߦߋ߫ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲",
        "rcfilters-filter-minor-label": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߘߋ߬ߣߍ߲ ߠߎ߬",
        "rcfilters-filter-major-label": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߘߋ߬ߣߍ߲ ߕߍ߫",
        "rcfilters-filter-major-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߕߍ߫ ߘߎ߲ߛߓߍߡߊ߫ ߘߋߣߍ߲ ߝߋ߲߫ ߘߌ߫.",
        "rcfilters-filter-previousrevision-description": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߠߎ߬ ߓߍ߯ ߡߍ߲ ߠߎ߬ ߕߍ߫ \"ߟߢߊ߬ߟߌ߬ ߞߐ߯ߟߕߊ߫\" ߘߌ߫.",
        "rcfilters-filter-excluded": "ߊ߬ ߓߘߊ߫ ߟߊߘߏ߲߬ ߊ߬ ߘߐ߫",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:ߍ߲߬ߍ߲߫</strong> $1",
+       "rcfilters-exclude-button-off": "ߤߊߟߌ߬ ߓߊߕߐ߬ߡߐ߲߬ߣߍ߲",
+       "rcfilters-exclude-button-on": "ߓߊߕߐߡߐ߲ߣߍ߲ ߠߎ߬ ߟߊߘߏ߲߬",
+       "rcfilters-view-tags": "ߞߏ߲߭ ߡߊߦߟߍ߬ߡߊ߲߬ߠߌ߲",
        "rcfilters-view-namespaces-tooltip": "ߛߍ߲ߛߍ߲ߟߊ߲ ߞߐߝߟߌ ߕߐ߯ߛߓߍ ߞߣߍ ߡߊ߬",
        "rcfilters-view-tags-tooltip": "ߛߍ߲ߛߍ߲ߟߊ߲ ߞߐߝߟߌ ߘߎ߲ߛߓߍ ߡߊߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߊ߬",
        "rcfilters-view-return-to-default-tooltip": "ߌ ߞߐߛߊ߬ߦߌ߬ ߛߍ߲ߛߍ߲ߟߊ߲ ߓߏ߬ߟߏ߲߬ߘߊ ߢߣߊߕߊߟߌ ߡߊ߬",
        "upload-form-label-infoform-categories": "ߦߌߟߡߊ ߟߎ߬",
        "upload-form-label-infoform-date": "ߕߎ߬ߡߊ߬ߘߊ",
        "upload-form-label-own-work-message-generic-local": "ߒ ߧߴߊ߬ ߟߊߛߙߋߦߊ߫ ߟߊ߫ ߞߏ߫ ߒ ߧߋ߫ ߞߐߕߐ߮ ߣߌ߲߬ ߠߊߦߟߍ߬ ߞߊ߲߬ ߞߊ߬ ߓߍ߲߬ ߗߋߘߊ ߛߙߊߕߌ ߣߌ߫ ߕߌ߰ߦߊ ߤߊߞߍ ߡߊ߬ {{SITENAME}} ߞߊ߲߬",
+       "backend-fail-stream": "ߞߐߕߐ߮ ߕߴߛߋ߫ ߞߟߋߞߟߋߦߊ߫ ߟߊ߫ \"$1\".",
+       "backend-fail-backup": "ߞߐߕߐ߮  \"$1\" ߕߍ߫ ߛߐ߲߬ ߟߊߞߎ߲߬ߘߎ߬ ߟߊ߫",
+       "backend-fail-notexists": "ߞߐߕߐ߮ $1 ߕߴߦߋ߲߬.",
+       "backend-fail-notsame": "ߞߐߕߐ߯ ߛߎ߯ߟߐ߲ߓߊߟߌ ߘߏ߫ ߦߋ߫  \"$1\" ߞߘߐ߬ߡߊ߲߫.",
+       "backend-fail-invalidpath": " \"$1\" ߕߍ߫ ߟߊ߬ߡߙߊ߬ߟߌ߬ ߦߙߐ߫ ߓߍ߲߬ߣߍ߲߬ ߘߌ߫.",
        "backend-fail-delete": "ߞߐߕߐ߮ ߕߴߛߋ߫ ߖߏ߰ߛߌ߬ ߟߊ߫  \"$1\".",
        "backend-fail-describe": "ߡߋߕߊߘߕߊ ߞߐߕߐ߮ ߕߴߛߋ߫ ߡߊߦߟߍ߬ߡߊ߲߫ ߠߊ߫  \"$1\".",
        "backend-fail-alreadyexists": "ߞߐߕߐ߮  \"$1\" ߦߋ߫ ߦߋ߲߬ ߞߘߐ߬ߡߊ߲߬.",
        "lockmanager-notlocked": "ߊ߬ ߕߍ߫ ߣߊ߬ ߛߐ߲߬ ߠߊ߫ \"$1\" ߟߊߞߊ߬ ߟߊ߫߸ ߊ߬ ߛߐ߰ߣߍ߲߬ ߕߍ߫.",
        "lockmanager-fail-closelock": "ߊ߬ ߕߍ߫ ߣߊ߬ ߛߋ߫ ߟߊ߫ \"$1\" ߞߐߕߐ߮ ߛߐ߰ߣߍ߲ ߘߊߕߎ߲߯ ߠߊ߫.",
        "lockmanager-fail-deletelock": "ߊ߬ ߕߍ߫ ߣߊ߬ ߛߋ߫ ߟߊ߫ \"$1\" ߞߐߕߐ߯ ߛߐ߰ߣߍ߲ ߖߏ߰ߛߌ߬ ߟߊ߫.",
+       "uploadstash": "ߥߊ߬ߣߊߙߌ ߟߊߦߟߍ߬",
+       "uploadstash-clear": "ߞߐߕߐ߮ ߥߣߊ߬ߙߌ߬ߣߍ߲ ߠߎ߬ ߖߏ߬ߛߌ߬",
+       "uploadstash-nofiles": "ߞߐߕߐ߮ ߥߣߊ߬߬ߙߌ߬ߣߍ߲߬ ߕߴߌ ߓߟߏ߫.",
        "uploadstash-errclear": "ߞߐߕߐ߯ ߗߌߙߏ߲ߣߍ߲ ߖߏ߰ߛߌ߬ߟߌ ߦߴߌ ߘߐ߫.",
+       "uploadstash-refresh": "ߞߐߕߐ߮ ߟߎ߬ ߛߙߍߘߍ ߟߊߛߎߡߊ߫",
+       "uploadstash-thumbnail": "ߞߝߊ߬ߟߋ߲ߛߋ߲ ߦߋ߫",
+       "uploadstash-bad-path": "ߛߌߟߊ ߏ߬ ߕߴߦߋ߲߬ ߡߎߣߎ߲߬.",
+       "uploadstash-bad-path-invalid": "ߛߌߟߊ ߏ߬ ߓߍ߲߬ߣߍ߲߬ ߕߍ߫.",
        "uploadstash-bad-path-unknown-type": "ߛߎ߯ߦߊ߫  \"$1\" ߡߊߟߐ߲ߓߊߟߌ",
+       "uploadstash-bad-path-unrecognized-thumb-name": "ߞߝߊ߬ߟߋ߲ߛߋ߲ ߕߐ߯ ߡߊߟߐ߲ߓߊߟߌ.",
+       "uploadstash-bad-path-no-handler": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ߬ ߡߊ߫ ߛߐ߬ߘߐ߲߬ MIME $1 ߞߐߕߐ߮ $2 ߟߎ߬ ߦߋ߫.",
+       "uploadstash-bad-path-bad-format": "ߟߊߘߏ߲߬ߣߍ߲  \"$1\"  ߕߍ߫ ߖߙߎߡߎ߲߫ ߢߎߡߊ߫ ߘߌ߫.",
+       "uploadstash-file-not-found": "ߟߊߘߏ߲߬ߣߍ߲  \"$1\" ߕߍ߫ ߥߊ߬ߣߊߙߌ ߟߎ߬ ߘߐ߫.",
+       "uploadstash-file-not-found-no-thumb": "ߞߝߊ߬ߟߋ߲ߛߋ߲ ߕߍ߫ ߣߊ߬ ߟߊߛߐ߬ߘߐ߲߬ ߠߊ߫.",
        "uploadstash-no-extension": "ߘߐ߬ߥߙߊ߬ߟߌ ߦߋ߫ ߝߏߦߊ߲ ߠߋ߬ ߘߌ߫.",
        "uploadstash-zero-length": "ߞߐߕߐ߮ ߦߋ߫ ߥߊ߲߬ߥߊ߲߬ ߘߐߞߏߟߏ߲ ߠߋ߬ ߘߌ߫.",
        "img-auth-nofile": "ߞߐߕߐ߮  \"$1\" ߕߍ߫ ߦߋ߲߬.",
        "license": "ߟߊ߬ߘߌ߬ߢߍ߬ߟߌ ߦߴߌ ߘߐ߫:",
        "license-header": "ߟߊ߬ߘߌ߬ߢߍ߬ߟߌ ߦߴߌ ߘߐ߫",
        "nolicense": "ߊ߬ ߡߊ߫ ߓߊߕߐ߬ߡߐ߲߬",
+       "upload_source_file": "(ߌ ߟߊ߫ ߞߐߕߐ߯ ߛߎߥߊ߲ߘߌߣߍ߲ ߠߎ߬ ߞߊ߬ ߝߘߊ߫ ߌ ߟߊ߫ ߕߟߋ߬ߓߊ߮ ߟߊ߫)",
        "listfiles-delete": "ߊ߬ ߖߏ߬ߛߌ߬",
+       "listfiles-summary": "ߞߐߜߍ߫ ߓߟߏߡߊߞߊ߬ߣߍ߲ ߣߌ߲߬ ߦߴߌ ߟߊ߫ ߞߐߕߐ߯ ߟߊߦߟߍ߬ߣߍ߲ ߠߎ߬ ߓߍ߯ ߟߋ߬ ߦߌ߬ߘߊ߬ ߟߊ߫",
        "listfiles_search_for": "ߡߍ߲ߕߊߦߋߕߊ ߕߐ߮ ߢߌߣߌ߲ߠߌ߲:",
        "listfiles-userdoesnotexist": "ߟߊ߬ߓߊ߰ߙߊ߬ ߖߊߕߋߘߊ \"$1\" ߟߊߞߎ߲߬ߘߎ߬ߣߍ߲߫ ߕߍ߫.",
        "imgfile": "ߞߐߕߐ߮",
        "listfiles_size": "ߢߊ߲ߞߊ߲",
        "listfiles_description": "ߞߊ߲߬ߛߓߍߟߌ",
        "listfiles_count": "ߦߌߟߡߊ",
+       "listfiles-show-all": "ߞߐߕߐ߮ ߦߌߟߡߊ߫ ߞߘߐ߬ߡߊ߲ ߠߎ߬ ߟߊߘߏ߲߬",
+       "listfiles-latestversion": "ߕߋ߲߭ߕߋ߲߭ ߦߌߟߡߊ",
        "listfiles-latestversion-yes": "ߐ߲߬ߐ߲߬ߐ߲߫",
        "listfiles-latestversion-no": "ߊ߬ߦߌ߫",
        "file-anchor-link": "ߞߐߕߐ߮",
        "linkstoimage": "ߞߐߕߐ߮ ߣߌ߲߬ {{PLURAL:$1|ߞߐߜߍ ߟߎ߬|$1 ߞߐߜߍ ߟߎ߬}}:",
        "linkstoimage-more": "ߞߐߕߐ߮ ߣߌ߲߬ $1 {{PLURAL:$1|page uses|pages use}} ߠߊߓߊ߯ߙߊߓߊ߮ ߞߊߛߌߦߊ߫.\nߛߙߍߘߍ ߢߌ߲߬ ߠߎ߬ ߦߋ߫ {{PLURAL:$1|first page|first $1 pages}} ߞߐߕߐ߮ ߣߌ߲߬ ߞߋߟߋ߲߫ ߠߊߓߊ߯ߙߊߓߊ߮ ߟߎ߬ ߛߙߍߘߍ ߟߋ߬ ߦߌ߬ߘߊ߬ ߟߊ߫.\nߛߘߌ߬ߜߋ߲߬ [[Special:WhatLinksHere/$2|full list]] ߓߟߏߡߊߞߊ߬ߣߍ߲ ߦߋ߫ ߦߋ߲߬.",
        "nolinkstoimage": " ߞߐߜߍ߫ ߛߌ߫ ߡߊ߫ ߞߐߕߐ߮ ߣߌ߲߬ ߠߊߓߊ߯ߙߊ߫ ߡߎߣߎ߲߬",
+       "morelinkstoimage": "ߞߐߕߐ߮ ߡߍ߲ ߠߎ߬ ߦߋ߫ [[Special:WhatLinksHere/$1|more links]] ߟߎ߫ ߘߐߜߍ߫",
        "linkstoimage-redirect": "$1 (ߞߐߕߐ߯ ߟߊߞߎ߲߬ߛߌ߲߬ߣߍ߲߬) $2",
+       "duplicatesoffile": "{{PLURAL: ߞߐߕߐ߮ $1|ߞߐߕߐ߮ ߓߊߟߌߣߍ߲ ߠߋ߬|ߞߐߕߐ߮ $1 ߟߎ߬ ߓߊߟߌߣߍ߲ ߠߋ߬}}  ([[Special:FileDuplicateSearch/$2|more details]]):",
+       "sharedupload": "ߞߐߕߐ߮ ߣߌ߲߬ ߝߘߊߣߍ߲߫ ߦߋ߫ $1 ߊ߬ ߣߴߊ߬ ߘߌ߫ ߛߋ߫ ߟߊߓߊ߯ߙߊ߫ ߟߊ߫ ߖߊ߬ߕߋ߬ߘߐ߬ߛߌ߰ ߜߘߍ߫ ߟߎ߫ ߘߐ߫.",
+       "sharedupload-desc-there": "ߞߐߕߐ߮ ߣߌ߲߬ ߝߘߊߣߍ߲߫ ߦߋ߫ $1 ߟߋ߬ ߟߊ߫߸ ߊ߬ ߣߴߊ߬ ߟߊߓߊ߯ߙߊߣߍ߲߫ ߘߌ߫ ߞߍ߫ ߖߊ߬ߕߋ߬ߘߐ߬ߛߌ߰ ߜߘߍ߫ ߟߎ߫ ߘߐ߫. ߖߊ߰ߣߌ߲߬ ߌ ߦߋ߫ [$2 ߞߐߕߐ߮ ߞߊ߲߬ߛߓߍߟߌ ߞߐߜߍ ߘߐߜߍ߫|ߞߌ߬ߓߊ߬ߙߏ߬ߦߊ߬ ߡߞߊ߬ߝߏ߬ߟߌ߬ ߞߏ ߘߐ߫]",
        "sharedupload-desc-here": "ߘߐ߬ߛߙߋ ߣߌ߲߬ ߦߋ߫ ߦߊ߲߬ ߠߋ߫ $1 ߖߊ߬ߕߋ߬ߘߐ߬ߛߌ߮ ߕߐ߭ ߟߎ߬ ߞߏ߬ߣߌ߲ ߘߌ߫ ߛߴߊ߬ ߟߊߓߊ߯ߙߊ߫ ߟߊ߫. ߊ߬ ߕߐ߯ ߛߓߍߟߌ ߦߙߐ [$2 ߞߐߕߐ߮ ߞߊ߲߬ߛߓߍߟߌ ߞߐߜߍ] ߟߋ߬ ߦߋ߫ ߘߎ߰ߟߊ ߘߐ߫ ߣߌ߲߬.",
        "filepage-nofile": "ߕߐ߮ ߣߌ߲߬ ߞߐߕߐ߯ ߛߎ߯ ߕߍ߫ ߦߋ߲߬",
        "uploadnewversion-linktext": "ߞߐߕߐ߮ ߣߌ߲߬ ߛߎ߯ߦߊ߫ ߞߎߘߊ߫ ߟߊߦߟߍ߬",
        "randomincategory-submit": "ߕߊ߯",
        "randomredirect": "ߓߍ߲߬ߛߋ߲߬ߡߊ߬ ߟߊߞߎ߲ߛߌ߲ߠߌ߲",
        "statistics": "ߖߊ߬ߕߋ߬ߛߎ߬ߓߐ ߟߎ߬",
+       "statistics-header-pages": "ߞߐߜߍ ߖߊ߬ߕߋ߬ߛߎ߬ߓߐ",
+       "statistics-header-edits": "ߖߊ߬ߕߋ߬ߛߎ߬ߓߐ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "statistics-header-users": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߟߊ߫ ߖߊ߬ߕߋ߬ߛߎ߬ߓߐ",
+       "statistics-header-hooks": "ߖߊ߬ߕߋ߬ߛߎ߬ߓߐ ߕߐ߭ ߟߎ߬",
        "statistics-articles": "ߞߣߐߘߐ߫ ߞߐߜߍ",
        "statistics-pages": "ߞߐߜߍ ߟߎ߬",
        "statistics-pages-desc": "ߞߐߜߍ ߡߍ߲ ߓߍ߯ ߦߋ߫ ߥߞߌ ߞߊ߲߬߸ ߦߏ߫ ߞߎߡߊߢߐ߲߯ߦߊ߫ ߞߐߜߍ߸ ߟߊ߬ߞߎ߲߬ߛߌ߲߬ߠߌ߲߸ ߊ߬ ߣߌ߫.",
        "statistics-files": "ߞߐߕߐ߮ ߟߊߦߟߍ߬ߣߍ߲ ߠߎ߬",
+       "statistics-edits": "ߞߐߜߍ ߡߊߦߟߍ߬ߡߊ߲ ߡߍ߲ ߞߍߣߍ߲߫ ߞߊ߬ߦߌ߯  {{SITENAME}} ߓߘߊ߫ ߢߊߓߐ߫",
        "statistics-edits-average": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߎ߰ߡߍ ߡߍ߲ ߞߍߣߍ߲߫ ߞߐߜߍ ߡߊ߬",
        "statistics-users": "ߟߊߓߊ߯ߙߊߓߊ߯ ߛߙߍߘߍߦߊߣߍ߲ ߠߎ߬",
+       "statistics-users-active": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߞߎ߲߬ߞߍ߲ߘߍ",
        "statistics-users-active-desc": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߡߍ߲ ߠߎ߬ ߝߊߘߌ߲ߧߊ߫ ߘߊ߫ ߞߏ߫ ߘߏ߫ ߞߍ {{PLURAL:$1|ߕߟߋ߬|$1 ߕߋ߬ߟߋ}} ߟߎ߬ ߞߘߐ߫.",
+       "pageswithprop": "ߞߐߜߍ߫ ߕߌ߯ߦߊ ߦߋ߫ ߞߐߜߍ ߡߍ߲ ߠߎ߬ ߓߟߏ߫",
+       "pageswithprop-legend": "ߞߐߜߍ ߕߌ߰ߦߊ ߦߋ߫ ߞߐߜߍ ߡߍ߲ ߠߎ߬ ߓߟߏ߫",
+       "pageswithprop-prop": "ߕߌ߰ߦߊ ߕߐ߮:",
+       "pageswithprop-reverse": "ߊ߬ ߢߣߊߕߊ߬ ߟߊ߬ߞߐ߬ߛߊ߬ߦߌ߲߬ߠߌ߲ ߖߊ߬ߡߊߙߌ ߡߊ߬",
        "pageswithprop-submit": "ߕߊ߯",
        "double-redirect-fixer": "ߟߊ߬ߞߎ߲߬ߛߌ߲߬ߠߌ߲ ߘߐߓߍ߲߬ߟߊ߲",
        "brokenredirects-edit": "ߊ߬ ߡߊߦߟߍ߬ߡߊ߲߬",
        "deadendpagestext": "ߓߌ߬ߟߊ߬ߢߐ߲߰ߡߊ߬ ߕߍ߫ ߞߐߜߍ ߢߌ߲߬ ߠߎ߬ ߣߌ߫ ߞߐߜߍ ߕߐ߭ ߟߎ߬ ߕߍ߫ {{SITENAME}} ߘߐ߫.",
        "protectedpages": "ߞߐߜߍ߫ ߟߊߞߊ߲ߘߊߣߍ߲ ߠߎ߬",
        "protectedpages-filters": "ߛߍ߲ߛߍ߲ߟߊ߲ ߠߎ߬:",
+       "protectedpages-timestamp": "ߕߎ߬ߡߊ ߓߊ߬ߘߌ߬ߟߊ߲",
        "protectedpages-page": "ߞߐߜߍ",
        "protectedpages-expiry": "ߊ߬ ߛߕߊ ߓߘߊ߫ ߝߊ߫",
        "protectedpages-performer": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ߫ ߟߊߞߊ߲ߘߊߣߍ߲",
        "nopagetext": "ߌ ߣߊ߬ ߞߏ߲߰ ߞߐߜߍ ߡߍ߲ ߡߊߕߍ߰ ߟߊ߫ ߣߌ߲߬߸ ߊ߬ ߕߴߦߋ߲߬.",
        "pager-newer-n": "{{PLURAL:$1|ߞߎߘߡߊ1|ߞߎߘߡߊ$1}}",
        "pager-older-n": "{{PLURAL:$1|ߞߘߐ߬ߡߊ߲ ߁|ߞߘߐ߬ߡߊ߲ ߠߎ߬ $1}}",
+       "suppress": "ߖߏ߰ߛߌ߬ߟߌ",
        "apihelp": "API ߘߍ߬ߡߍ߲߬ߠߌ߲",
+       "apisandbox": "API ߕߌ߬ߢߍ߬ߞߏ߲ߘߏ",
+       "apisandbox-jsonly": "ߡߊ߬ߞߏ ߦߋ߫ JavaScript ߟߊ߫ ߞߊ߬ API ߕߌ߬ߢߍ߬ߞߏ߲ߘߏ ߟߊߓߊ߯ߙߊ߫",
+       "apisandbox-api-disabled": "API ߓߐߣߍ߲߫ ߦߋ߫ ߞߍߦߙߐ ߟߊ߫.",
        "apisandbox-submit": "ߡߊ߬ߢߌ߬ߣߌ߲߬ߞߊ߬ߟߌ ߘߏ߫ ߞߍ߫",
        "apisandbox-reset": "ߊ߬ ߖߏ߰ߛߌ߬",
        "apisandbox-retry": "ߊ߬ ߡߊߝߍߣߍ߲߫ ߕߎ߲߯",
+       "apisandbox-loading": "ߞߌ߬ߓߊ߬ߙߏ߬ߦߊ ߟߊߢߎ߲ߠߌ߲ ߦߴߌ ߘߐ߫ ߞߊ߬ API ߘߊ߲ߕߊ ߞߏ ߘߐ߫  \"$1\"...",
+       "apisandbox-load-error": "ߝߎ߬ߕߎ߲߬ߕߌ ߘߏ߫ ߓߘߊ߫ ߓߌ߬ߟߵߊ߬ ߘߐ߫ API ߘߊ߲ߕߊ  \"$1\":$2 ߟߊ߬ߢߎ߲߬ߠߌ߲ ߕߎ߬ߡߊ ߟߊ߫",
        "apisandbox-helpurls": "ߘߍ߬ߡߍ߲߬ߠߌ߲ ߛߘߌ߬ߜߋ߲ ߠߎ߬",
        "apisandbox-examples": "ߟߊߒߡߊ߫ ߘߐ߫",
        "apisandbox-dynamic-parameters": "ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߡߞߊ߬ߝߏ߬ߟߌ߬ ߜߘߍ߫",
        "apisandbox-dynamic-parameters-add-label": "ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߟߊߘߏ߲߬",
        "apisandbox-dynamic-parameters-add-placeholder": "ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߕߐ߮",
        "apisandbox-dynamic-error-exists": "ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߕߐ߮  \"$1\" ߦߋ߫ ߦߋ߲߬ ߞߘߐ߬ߡߊ߲߬.",
+       "apisandbox-templated-parameter-reason": "ߣߌ߲߬ [[Special:ApiHelp/main#main/templatedparams|templated parameter]] ߏ߬ ߟߎ߬ ߡߊߛߐ߬ߘߐ߲߬ߠߌ߲ ߓߌ߲ߓߌ߲ߣߍ߲߫ ߦߋ߫ ߦߊ߲߬ {{PLURAL:$1|ߘߙߊߖߊ|ߘߙߊߖߊ ߟߎ߬}} ߠߋ߬ ߡߊ߬ $2 ߘߐ߫.",
        "apisandbox-fetch-token": "ߖߐߟߐ߲ߞߐ ߞߍߒߖߘߍߦߋ߫ ߟߝߊߟߌ",
        "apisandbox-add-multi": "ߟߊ߬ߘߏ߲߬ߠߌ߲",
        "apisandbox-results": "ߞߐߖߋߓߌ ߟߎ߬",
        "all-logs-page": "ߝߘߏ߬ߓߊ߬ ߜߊ߲ߞߎ߲ߠߌ߲ ߠߎ߬ ߓߍ߯",
        "alllogstext": "ߓߟߏߞߘߐ߫ ߘߐߛߙߋ ߡߎ߰ߡߍ ߦߌ߬ߘߊ߬ߟߌ ߣߌ߲߬ ߞߣߐ߫ {{SITENAME}}.\nߌ ߘߌ߫ ߛߋ߫ ߛߙߍߘߍ ߘߊ߲߬ߠߊߕߍ߰ ߟߊ߫ ߓߘߍߞߍ߭ ߞߊ߬ ߢߊ߬߸ ߏ߬ ߛߋ߲߬ߝߍ߬ ߞߊ߬ ߘߐ߬ߛߙߋ ߛߎ߯ߦߊ ߡߊߡߌ߬ߘߊ߬߸ ߊ߬ ߣߌ߫ ߟߊߓߊ߯ߙߟߊ ߕߐ߮ (ߛߏ߬ߓߌ߬ߟߊ߲߬ߘߌ ߟߋ߬ ߛߓߍߘߋ߲ ߗߏ߯ߦߊ ߝߍ߬)߸ ߥߟߴߊ߬ ߥߟߏߣߍ߲߫ ߞߐߜߍ ߡߍ߲ ߞߊ߲߬ (ߛߏ߬ߓߌ߬ߟߊ߲߬ߘߌ ߟߋ߬ ߝߣߊ߫ ߛߓߍߘߋ߲ ߠߎ߬ ߗߏ߯ߦߊ ߝߍ߬).",
        "logempty": "ߞߍߞߏ ߛߌ߫ ߣߌ߫ ߘߐ߬ߛߙߋ ߡߊ ߓߍ߲߬ ߢߐ߲߮ ߡߊ߬.",
+       "log-title-wildcard": "ߞߎ߲߬ߕߐ߮ ߡߍ߲ ߠߎ߬ ߘߊߡߌ߬ߣߊ߬ߣߍ߲߫ ߛߓߍߟߌ ߣߌ߲߬ ߡߊ߬ ߏ߬ ߟߎ߬ ߢߌߣߌ߲߫",
+       "checkbox-select": "ߓߊߕߐߡߐ߲ߠߌ߲: $1",
        "checkbox-all": "ߊ߬ ߓߍ߯",
        "checkbox-none": "ߝߏߦߌ߬",
+       "checkbox-invert": "ߊ߬ ߞߕߐߡߊߛߊ߬ߦߌ߬",
        "allpages": "ߞߐߜߍ ߟߎ߬ ߓߍ߯",
        "nextpage": "ߞߐߜߍ ߟߊ߬ߕߎ߲߰ߠߊ ($1)",
        "prevpage": "ߞߐߜߍ ߟߊ߬ߕߎ߲߰ߠߊ ($1)",
+       "allpagesfrom": "ߞߐߜߍ ߟߎ߬ ߦߌ߬ߘߊ߬ߟߌ ߟߊߝߟߐ߫ ߣߌ߲߬ ߡߊ߬:",
+       "allpagesto": "ߞߐߜߍ ߟߎ߬ ߦߌ߬ߘߊ߬ߟߌ ߟߊߝߟߐ߫ ߡߍ߲ ߠߎ߬ ߦߋ߫ ߟߊߓߊ߲߫ ߠߊ߫ ߣߌ߲߬ ߡߊ߬:",
        "allarticles": "ߞߐߜߍ ߟߎ߬ ߓߍ߯",
+       "allinnamespace": "ߞߐߜߍ ߟߎ߬ ߓߍ߯ ($1 ߕߐ߯ߛߓߍ ߞߣߍ)",
        "allpagessubmit": "ߥߊ߫",
+       "allpagesprefix": "ߞߐߜߍ ߟߎ߬ ߦߌ߬ߘߊ߬ߟߌ ߟߊߝߟߐ߫ ߢߍߣߙߊߡߊ ߟߎ߬ ߡߊ߬:",
+       "allpagesbadtitle": "ߞߐߜߍ߫ ߞߎ߲߬ߕߐ߰ ߘߌ߫ ߣߍ߲ ߓߍ߲߬ߣߍ߲߬ ߕߍ߫߸ ߥߟߊ߫ ߞߊ߲ ߠߎ߬ ߣߌ߫ ߢߐ߲߯ߕߍ߫ ߤߊߡߊ߲߫ ߥߞߌ ߟߎ߬ ߕߍ߫ ߢߍߣߙߊ ߟߎ߬ ߘߌ߫ ߞߴߊ߬ ߟߊ߫.\nߛߓߍߘߋ߲߫ ߞߋߟߋ߲߫ ߥߟߊ߫ ߛߌߦߊߡߊ߲ ߠߎ߬ ߟߋ߬ ߦߋ߫ ߞߍ߫ ߟߴߊ߬ ߘߐ߫߸ ߡߍ߲ ߠߎ߬ ߕߴߛߋ߫ ߞߍ߫ ߟߊ߫ ߞߎ߲߬ߕߐ߯ ߘߌ߫.",
        "allpages-hide-redirects": "ߟߊ߬ߞߎ߲߬ߛߌ߲߬ߠߌ߲ ߢߡߊߘߏ߲߰",
        "categories": "ߦߌߟߡߊ ߟߎ߬",
        "categories-submit": "ߦߌ߬ߘߊ߬ߟߌ",
        "listusersfrom": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߟߎ߬ ߦߌ߬ߘߊ߬ߟߌ ߟߊߝߟߐ߫ ߣߌ߲߬ ߡߊ߬:",
        "listusers-submit": "ߦߌ߬ߘߊ߬ߟߌ",
        "listusers-noresult": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߕߴߦߋ߲߬",
+       "listusers-blocked": "(ߓߊ߬ߟߌ߬ߣߍ߲)",
+       "activeusers": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߞߎ߲߬ߞߍ߲ߘߍ ߟߎ߬ ߛߙߍߘߍ",
+       "activeusers-from": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߟߎ߬ ߦߌ߬ߘߊ߬ߟߌ ߟߊߝߟߐ߫ ߣߌ߲߬ ߡߊ߬:",
+       "activeusers-groups": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߡߍ߲ ߠߎ߬ ߕߊ߫ ߦߋ߫ ߞߙߎ ߘߌ߫߸ ߏ߬ ߟߎ߫ ߦߌ߬ߘߊ߬:",
+       "activeusers-excludegroups": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߡߍ߲ ߠߎ߬ ߦߋ߫ ߞߙߎ ߘߐ߫߸ ߏ߬ ߟߎ߫ ߟߊߓߐ߫ ߊ߬ ߘߐ߫:",
        "activeusers-noresult": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߕߴߦߋ߲߬",
+       "listgrouprights": "ߞߙߎ߫ ߟߊߓߊ߯ߙߕߊ ߤߊߞߍ",
        "listgrouprights-group": "ߞߙߎ:",
        "listgrouprights-rights": "ߞߌߣߌ߲",
        "listgrouprights-helppage": "Help: ߞߙߎ ߤߊߞߍ",
        "listgrouprights-removegroup-self-all": "ߞߙߎ ߓߍ߯ ߛߋ߲߬ߓߐ߫ ߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ ߖߊߕߋߘߊ ߘߐ߫",
        "listgrouprights-namespaceprotection-namespace": "ߕߐ߯ߛߓߍ ߞߣߍ:",
        "listgrouprights-namespaceprotection-restrictedto": "ߞߌߣߌ߲߸ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߟߊߘߌ߬ߢߍ ߦߴߌ ߘߐ߫ ߞߵߊ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "listgrants-grant": "ߟߊߡߌ߬ߣߊ߬",
        "listgrants-rights": "ߞߌߣߌ߲",
+       "trackingcategories": "ߦߌߟߡߊ ߜߙߋ߬ߓߐ߬ߟߌ",
        "trackingcategories-msg": "ߦߌߟߡߊ ߜߙߋ߬ߓߐ߬ߟߌ",
        "trackingcategories-name": "ߗߋߛߓߍ ߕߐ߮",
        "trackingcategories-nodesc": "ߞߊ߲߬ߛߓߍ߬ߟߌ߬ ߕߍ߫ ߦߋ߲߬",
        "enotif_subject_changed": "{{SITENAME}} ߞߐߜߍ $1 ߓߘߊ߫ {{GENDER:ߡߊߦߟߍ߬ߡߊ߲߫|$2}} $2 ߓߟߏ߫",
        "enotif_body_intro_deleted": " {{SITENAME}} ߞߐߜߍ $1 ߓߘߊ߫ {{GENDER:ߖߏ߰ߛߌ߫|$2}} ߓߟߏ߫ $ߞߐߜߍ ߡߊߦߟߍ߬ߡߊ߲߬ ߕߎߡߘߊ $2 ߓߟߏ߫߸ ߣߌ߲߬ $3 ߦߋ߫.",
        "enotif_body_intro_created": " {{SITENAME}} ߞߐߜߍ $1 ߓߘߊ߫ {{GENDER: ߛߌ߲ߘߌ߫|$2 ߓߟߏ߫}} $ߞߐߜߍ ߡߊߦߟߍ߬ߡߊ߲߬ ߕߎߡߘߊ ߟߊ߫ $2 ߓߟߏ߫߸ $3 ߘߐߜߍ߫ ߕߋ߲߭ߕߋ߲߭ ߟߢߊ߬ߟߌ߬ ߞߏ ߘߐ߫.",
-       "enotif_body_intro_moved": " {{SITENAME}} ߞߐߜߍ ߓߘߊ߫ {{GENDER: ߖߏ߬ߛߌ߫|$2}} ߓߟߏ߫ $ߞߐߜߍ ߡߊߦߟߍ߬ߡߊ߲߬ ߕߎߡߘߊ ߟߊ߫ $2 ߓߟߏ߫߸ $3 ߘߐߜߍ߫ ߕߋ߲߭ߕߋ߲߭ ߟߢߊ߬ߟߌ߬ ߞߏ ߘߐ߫.",
+       "enotif_body_intro_moved": " {{SITENAME}} ߞߐߜߍ $1 ߓߘߊ߫ {{GENDER: ߖߏ߬ߛߌ߫|$2}} ߓߟߏ߫ $ߞߐߜߍ ߡߊߦߟߍ߬ߡߊ߲߬ ߕߎߡߘߊ ߟߊ߫ $2 ߓߟߏ߫߸ $3 ߘߐߜߍ߫ ߕߋ߲߭ߕߋ߲߭ ߟߢߊ߬ߟߌ߬ ߞߏ ߘߐ߫.",
        "enotif_body_intro_restored": " {{SITENAME}} ߞߐߜߍ $1 ߓߘߊ߫ {{GENDER: ߟߊߞߎߣߎ߲߫|$2 ߓߟߏ߫}} $ߞߐߜߍ ߡߊߦߟߍ߬ߡߊ߲߬ ߕߎߡߘߊ ߟߊ߫ $2 ߓߟߏ߫߸ $3 ߘߐߜߍ߫ ߕߋ߲߭ߕߋ߲߭ ߟߢߊ߬ߟߌ߬ ߞߏ ߘߐ߫.",
        "enotif_body_intro_changed": " {{SITENAME}} ߞߐߜߍ $1 ߓߘߊ߫ {{GENDER: ߡߊߦߟߍ߬ߡߊ߲߫|$2 ߓߟߏ߫}} $ߞߐߜߍ ߡߊߦߟߍ߬ߡߊ߲߬ ߕߎߡߘߊ ߟߊ߫ $2 ߓߟߏ߫߸ $3 ߘߐߜߍ߫ ߕߋ߲߭ߕߋ߲߭ ߟߢߊ߬ߟߌ߬ ߞߏ ߘߐ߫.",
        "enotif_lastvisited": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߓߍ߯ ߞߵߊ߬ ߕߊ߬ ߌ ߟߊ߫ ߓߐߒߡߊߟߌ߫ ߟߊߓߊ߲ ߡߊ߬߸߫ ߊ߬ ߦߋ߫ $1",
        "exbeforeblank": "ߞߣߐߘߐ ߕߘߍ߬ ߦߋ߫ \"$1\" ߟߋ߬ ߘߌ߫ ߖߏ߬ߛߌ߬ߟߌ ߢߍ߫.",
        "delete-confirm": "ߖߏ߰ߛߌ߬ߟߌ $1",
        "delete-legend": "ߊ߬ ߖߏ߬ߛߌ߬",
+       "historyaction-submit": "ߟߢߊ߬ߟߌ ߦߌ߬ߘߊ߬.",
+       "actioncomplete": "ߞߍߟߌ ߓߘߊ߫ ߘߝߊ߫",
+       "actionfailed": "ߞߍߟߌ ߓߘߊ߫ ߗߌߙߏ߲߫",
+       "deletedtext": "\"$1\" ߓߘߊ߫ ߖߏ߬ߛߌ߬.\n$2 ߘߐߜߍ߫ ߞߊ߬ ߖߏ߬ߛߟߌ߬ ߞߐ߯ߟߕߊ ߟߊߞߎ߲߬ߘߎ߬ߣߍ߲ ߠߎ߬ ߦߋ߫.",
        "dellogpage": "ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߖߏ߬ߛߌ߬ߣߍ߲",
+       "dellogpagetext": "ߖߏ߬ߛߌ߬ߟߌ ߞߘߐ߬ߡߊ߲ ߠߎ߬ ߝߊ߲߬ߓߊ ߛߙߍߘߍ ߟߋ߬ ߦߋ߫ ߘߎ߰ߟߊ ߘߐ߫.",
+       "deletionlog": "ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߖߏ߬ߛߌ߬ߣߍ߲",
+       "log-name-create": "ߞߐߜߍ ߟߎ߬ ߛߌ߲ߘߟߌ ߖߋ߬ߕߌ߰ߘߊ",
+       "log-description-create": "ߞߐߜߍ ߟߎ߬ ߛߌ߲ߘߟߌ ߞߘߐ߬ߡߊ߲ ߠߎ߬ ߝߊ߲߬ߓߊ ߛߙߍߘߍ ߟߋ߬ ߦߋ߫ ߘߎ߰ߟߊ ߘߐ߫.",
+       "logentry-create-create": "$1 {{GENDER:$2|ߛߌ߲ߘߟߌߣߐ ߟߋ߬}} ߞߐߜߍ $3 ߘߌ߫",
+       "reverted": "ߓߘߊ߫ ߟߊߛߊ߬ߦߌ߬ ߟߢߊ߬ߟߌ ߞߎ߲߬ߝߟߐ ߡߊ߬.",
+       "deletecomment": "ߊ߬ ߛߊߓߎ:",
+       "deleteotherreason": "ߞߎ߲߬ ߡߊߞߊ߬ߝߏ߬ߕߊ߬/ߜߘߍ:",
+       "deletereasonotherlist": "ߞߎ߲߬ ߜߘߍ ߟߎ߬",
+       "delete-edit-reasonlist": "ߖߏ߰ߛߌ߬ߟߌ ߞߎ߲߭ ߠߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
        "rollback": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߠߊߞߐߛߊ߬ߦߌ߬",
        "rollback-confirmation-confirm": "ߊ߬ ߟߊߛߙߋߦߊ߫ ߖߊ߰ߣߌ߲߫:",
        "rollback-confirmation-yes": "ߟߊߞߐߛߊ߬ߦߌ߬",
        "changecontentmodel-reason-label": "ߊ߬ ߛߊߓߎ:",
        "changecontentmodel-submit": "ߊ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
        "changecontentmodel-success-title": "ߞߣߐߘߐ ߛߎ߯ߦߊ ߓߘߊ߫ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "logentry-contentmodel-change-revertlink": "ߟߊߞߐߛߊ߬ߦߌ߬",
+       "logentry-contentmodel-change-revert": "ߟߊߞߐߛߊ߬ߦߌ߬",
        "protectlogpage": "ߜߊ߲߬ߞߎ߲߬ߠߌ߲߬ ߠߊߞߊ߲ߘߊߣߍ߲",
+       "protectlogtext": "ߞߐߜߍ ߟߎ߫ ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߛߙߍߘߍ ߟߎ߬ ߟߋ߫ ߦߋ߫ ߘߎ߰ߟߊ ߘߐ߫.\nߣߌ߲߬ ߘߐߜߍ߫\n[[Special:ProtectedPages|protected pages list]] ߕߋ߲߭ߕߋ߲߭ ߘߐ߬ߓߛߏ߬ߟߌ߬ ߞߏ ߘߐ߫ ߞߊ߬ ߓߍ߲߬ ߞߐߜߍ ߟߎ߬ ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߡߊ߬.",
        "protectedarticle": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߣߍ߲ \"[[$1]]\"",
        "modifiedarticleprotection": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߞߊߓߋ ߡߊߦߟߍ߬ߡߊ߲߬ \"[[$1]]\"",
+       "unprotectedarticle": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߓߘߊ߫ ߓߐ߫ \"[[$1]]\" ߞߊ߲߬.",
+       "movedarticleprotection": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߓߘߊ߫ ߓߐ߫ \"[[$2]]\" ߞߊ߲߬ ߞߵߊ߬ ߟߥߊ߫ \"[[$1]]\" ߞߊ߲߬",
+       "protectedarticle-comment": "{{GENDER:$2|ߓߘߊ߫ ߣߌ߲߬ ߠߊߞߊ߲ߘߊ߫}} \"[[$1]]\"",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|ߓߘߊ߫ ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߞߊߓߋ ߡߊߝߊ߬ߟߋ߲߬}} \"[[$1]]\" ߞߊ߲߬.",
+       "unprotectedarticle-comment": "{{GENDER:$2|ߓߘߊ߫ ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߓߐ߫}} \"[[$1]]\" ߞߊ߲߫.",
+       "protect-title": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߞߊߓߋ ߡߊߦߟߍ߬ߡߊ߲߬ \"$1\" ߞߊ߲߬",
+       "protect-title-notallowed": "\"$1\" ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߞߊߓߋ ߦߋ߫",
+       "prot_1movedto2": "\"[[$1]]\" ߓߘߊ߫ ߟߥߊ߫ ߦߊ߲߬ [[$2]]",
+       "protect-legend": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߟߊߛߙߋߦߊ߫",
        "protectcomment": "ߊ߬ ߛߊߓߎ:",
        "protectexpiry": "ߊ߬ ߛߕߊ ߓߘߊ߫ ߝߊ߫:",
        "protect_expiry_invalid": "ߊ߬ ߛߕߊ ߝߊ߫ ߕߎߡߊ ߓߍ߲߬ߣߍ߲߬ ߕߍ߫.",
        "protect_expiry_old": "ߊ߬ ߛߕߊ ߝߊ߫ ߕߎߡߊ ߓߘߊ߫ ߕߊ߬ߡߌ߲߬.",
        "protect-unchain-permissions": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߢߣߊߕߊߟߌ ߣߊ߬ߕߐ ߘߊߦߟߍ߬",
        "protect-text": "ߌ ߘߌ߫ ߛߋ߫ ߞߐߜߍ ߟߎ߫ ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߞߊߓߋ ߦߋ߫ ߟߴߊ߬ ߣߌ߫ ߞߵߊ߬ ߡߊߦߟߍ߬ߡߊ߲߫ ߦߊ߲߬ <strong>$1</strong>.",
+       "protect-locked-blocked": "ߌ ߕߍߣߊ߬ ߛߋ߫ ߟߊ߫ ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߞߊߓߋ ߢߊߦߟߍ߬ߡߊ߲߬ ߠߊ߫ ߣߴߊ߬ ߕߊ߬ߟߊ߲߬ߣߍ߲ ߦߋ߫.\nߞߐߜߍ ߕߋ߲߬ߕߋ߲߬ ߟߊߓߍ߲ߢߐ߲߯ߡߊ ߟߋ߫ ߦߋ߫ ߣߌ߲߬ <strong>$1</strong>",
+       "protect-locked-dblock": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߞߊߓߋ ߕߍ߫ ߛߐ߲߬ ߡߊߦߟߍ߬ߡߊ߲߬ ߠߊ߫ ߞߊ߬ ߓߟߏߡߟߊ ߝߊ߲ ߛߐ߰ߟߌ ߕߏ߫ ߛߋ߲߬ ߠߊ߫. ߞߐߜߍ ߕߋ߲߬ߕߋ߲߬ ߟߊߓߍ߲ߢߐ߲߯ߡߊ ߟߋ߬ ߦߋ߫ ߣߌ߲߬ <strong>$1:",
+       "protect-locked-access": "ߌ ߟߊ߫ ߖߊ߬ߕߋ߬ߘߊ ߟߊߘߌ߬ߢߍ߬ߣߍ߲߬ ߕߍ߫ ߞߊ߬ ߞߐߜߍ ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߞߊߓߋ ߡߊߝߊ߬ߟߋ߲߬.\nߞߐߜߍ ߕߋ߲߬ߕߋ߲߬ ߟߊߓߍ߲ߢߐ߲߯ߡߊ ߟߋ߬ ߦߋ߫ ߣߌ߲߬ <strong>$1</strong>",
        "protect-default": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߟߎ߬ ߓߍ߯ ߟߊߘߌ߬ߢߍ߬",
+       "protect-fallback": " \"$1\" ߟߊ߬ߘߌ߬ߢߍ߬ߟߌ ߦߋ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߡߍ߲ ߠߎ߬ ߓߟߏ߫߸ ߏ߬ ߟߎ߬ ߘߐߙߐ߲߫ ߠߊߘߌ߬ߢߍ߬",
+       "protect-level-autoconfirmed": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߞߍߒߖߘߍߦߋ߫ ߟߊߛߙߋߦߊߣߍ߲ ߠߎ߬ ߘߐߙߐ߲߫ ߠߊߘߌ߬ߢߍ߬",
+       "protect-level-sysop": "ߞߎ߲߬ߠߊ߬ߛߌ߰ߟߊ ߟߎ߬ ߘߐߙߐ߲߫ ߠߊߘߌ߬ߢߍ߬",
+       "protect-summary-cascade": "ߛߎߙߎ߲ߘߎߟߌ",
+       "protect-expiring": "ߛߕߊ ߝߊߕߐ߫ $1 (ߖ.ߕ.ߘ)",
+       "protect-expiring-local": "ߛߕߊ ߝߊ߫ ߕߐ߫ $1",
+       "protect-expiry-indefinite": "ߘߊ߲߬ߓߊߟߌ",
+       "protect-cascade": "ߞߐߜߍ߫ ߟߊߞߊ߲ߘߊߣߍ߲ ߡߍ߲ ߠߎ߬ ߦߋ߫ ߞߐߜߍ ߣߌ߲߬ ߘߐ߫ (ߛߎߙߎ߲ߘߎߟߌ ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ)",
+       "protect-cantedit": "ߌ ߕߍ߫ ߣߊ߬ ߛߋ߫ ߟߊ߫ ߞߐߜߍ ߣߌ߲߬ ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߞߊߓߋ ߡߊߝߊ߬ߟߋ߲߬ ߠߊ߫߸ ߞߵߊ ߞߵߊ߬ ߡߊߛߐ߬ߘߐ߲߬ ߊ߬ ߡߊߦߟߍ߬ߡߊ߲ ߠߊߘߤߊ߬ߣߍ߲߬ ߕߴߌ ߦߋ߫.",
+       "protect-othertime": "ߕߎ߬ߡߊ߬ ߜߘߍ:",
+       "protect-othertime-op": "ߕߎ߬ߡߊ߬ ߜߘߍ߫",
+       "protect-existing-expiry-infinity": "ߕߋ߲߭ߕߋ߲߭ ߛߕߊߝߊ߫ ߕߎߡߊ: ߘߊ߲߬ߓߊߟߌ",
+       "protect-otherreason": "ߞߎ߲߬ ߡߊߞߊ߬ߝߏ߬ߕߊ߬/ߜߘߍ:",
+       "protect-otherreason-op": "ߞߎ߲߬ ߜߘߍ ߟߎ߬",
+       "protect-edit-reasonlist": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߞߎ߲߭ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "protect-expiry-options": "ߕߎ߬ߡߊ߬ߙߋ߲߬ ߁: 1 hour, ߕߟߋ߬ ߁: 1 day, ߞߎ߲߬ߢߐ߲߰ ߁:1 week, ߞߎ߲߬ߢߐ߮ ߂:2 weeks, ߞߊߙߏ߫ ߁:1 month, ߞߊߙߏ߫ ߃:3 months, ߞߊߙߏ߫ ߆:6 months, ߛߊ߲߬ ߁:1 year, ߘߊ߲߬ߓߊߟߌ: infinite",
+       "minimum-size": "ߘߎ߰ߟߊ߬ߘߐ߬ ߢߊ߲ߞߊ߲",
+       "maximum-size": "ߢߊ߲ߞߊ߲ ߞߐߘߊ߲:",
        "restriction-edit": "ߊ߬ ߡߊߦߟߍ߬ߡߊ߲߬",
        "restriction-move": "ߕߐ߯ߦߊ߫",
+       "restriction-create": "ߊ߬ ߟߊߘߊ߲߫",
+       "restriction-upload": "ߟߊ߬ߦߟߍ߬ߟߌ",
+       "restriction-level-sysop": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ߬ ߘߝߊߣߍ߲",
+       "restriction-level-autoconfirmed": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ-ߝߊ߲߬ߞߋ߬ߟߋ߲߬ߡߊ",
+       "restriction-level-all": "ߞߊߓߋ ߛߎ߯-ߎ߯-ߛߎ߫",
+       "undelete": "ߞߐߜߍ߫ ߖߏ߬ߛߌ߬ߣߍ߲ ߠߎ߬ ߦߋ߫",
+       "undeletepage": "ߞߐߜߍ߫ ߖߏ߬ߛߌ߬ߣߍ߲ ߠߎ߬ ߦߋ߫ ߊ߬ ߣߌ߫ ߞߵߊ߬ߟߎ߬ ߟߊߞߎߣߎ߲߫",
+       "viewdeletedpage": "ߞߐߜߍ߫ ߖߏ߬ߛߌ߬ߣߍ߲ ߠߎ߬ ߦߋ߫",
+       "undelete-fieldset-title": "ߟߢߊ߬ߟߌ ߟߊߞߎߣߎ߲߫",
+       "undeleterevisions": "{{PLURAL:ߟߢߊ߬ߟߌ|$1|ߟߢߊ߬ߟߌ ߟߎ߬}} $1 ߖߏ߬ߛߌ߬ߣߍ߲ ߠߎ߬",
+       "undeletebtn": "ߟߊߞߎߣߎ߲߫",
+       "undeletelink": "ߦߋߟߌ/ߟߊ߬ߞߎ߬ߣߎ߲߬ߠߌ߲",
+       "undeleteviewlink": "ߦߌ߬ߘߊ߬ߟߌ",
+       "undeleteinvert": "ߓߊߕߐ߬ߡߐ߲߬ߣߍ߲ ߞߕߐߡߊߛߊ߬ߦߌ߲߬",
+       "undeletecomment": "ߊ߬ ߛߊߓߎ:",
+       "cannotundelete": "ߖߏ߬ߛߌ߬ߓߊ߬ߟߌ߬ ߗߌߙߏ߲ߣߍ߲ ߘߏ߫ ߟߎ߫ ߥߟߴߊ߬ ߓߍ߯: $1",
+       "undeletedpage": "<strong>$1 ߓߘߊ߫ ߓߊ߲߫ ߟߊߞߎߣߎ߲߫ ߠߊ߫</strong>\n\nߥߊ߫ ߓߐ߫ [[Special:Log/delete|deletion log]] ߡߊ߬ ߖߏ߬ߛߌ߬ߣߍ߲߬ ߞߐߟߕߊ ߟߊߞߎ߲߬ߘߎ߬ߣߍ߲ ߣߴߊ߬ ߟߊߞߎߣߎ߲ߣߍ߲߫ ߞߏ ߘߐ߫.",
+       "undelete-header": " [[Special:Log/delete|the deletion log]] ߘߐߜߍ߫ ߞߐߜߍ߫ ߖߏ߬ߛߌ߬ߣߍ߲߬ ߞߐߟߕߊ ߟߎ߬ ߟߊ߫ ߞߏ ߘߐ߫.",
+       "undelete-search-title": "ߞߐߜߍ߫ ߖߏ߰ߛߌ߬ߣߍ߲ ߠߎ߬ ߢߌߣߌ߲߫",
+       "undelete-search-box": "ߞߐߜߍ߫ ߖߏ߰ߛߌ߬ߣߍ߲ ߠߎ߬ ߢߌߣߌ߲߫",
+       "undelete-search-prefix": "ߞߐߜߍ߫ ߟߎ߬ ߦߌ߬ߘߊ߬ߟߌ ߘߊߡߌ߬ߣߊ߬ ߡߍ߲ ߠߎ߬ ߟߊߝߟߐߣߍ߲ ߣߌ߲߬ ߡߊ߬:",
+       "undelete-search-full": "ߞߐߜߍ ߞߎ߲߬ߕߐ߮ ߟߎ߬ ߦߌ߬ߘߊ߬ ߣߌ߲߬ ߡߊ߬:",
+       "undelete-search-submit": "ߢߌߣߌ߲ߠߌ߲",
+       "undelete-no-results": "ߞߐߜߍ߫ ߛߌ߫ ߕߴߦߋ߲߬ ߖߏ߬ߛߌ߬ߣߍ߲߬ ߛߓߍߞߘߐߦߊߣߍ߲ ߠߎ߬ ߘߐ߫.",
+       "undelete-cleanup-error": "ߞߐߕߐ߯  \"$1\" ߟߊߓߊ߯ߙߊߓߊߟߌ ߛߓߍߞߘߐ ߟߎ߫ ߖߏ߬ߛߌ߬ߟߌ ߝߎ߬ߕߎ߲߬ߕߌ",
+       "undelete-missing-filearchive": "ߞߐߕߐ߯ ߛߓߍߞߘߐߦߊߣߍ߲ ߠߎ߬ ID $1 ߟߊߞߎߣߎ߲ߠߌ߲ ߕߍ߫ ߣߊ߬ ߓߍ߲߬ ߠߊ߫ ߓߊߏ߬ ߊ߬ ߕߍ߫ ߓߟߏߡߟߊ ߛߎ߲ ߘߐ߫. ߊ߬ ߖߏ߬ߛߌ߬ߓߊ߬ߟߌ߬ߦߊ߬ߣߍ߲߬ ߘߌ߫ ߞߍ߫ ߟߋ߬.",
+       "undelete-error": "ߞߐߜߍ ߖߏ߬ߛߌ߬ߓߊ߬ߟߌ߬ߦߊ߬ߟߌ ߝߎ߬ߕߎ߲߬ߕߌ",
+       "undelete-error-short": "ߞߐߕߐ߮ ߖߏ߬ߛߌ߬ߓߊ߬ߟߌ߬ߦߊ߬ߟߌ ߝߎ߬ߕߎ߲߬ߕߌ:$1",
+       "undelete-show-file-confirm": "ߌ ߟߊ߫ ߣߴߊ߬ ߟߊ߫ ߝߋߎ߫ ߞߴߌ ߦߴߊ߬ ߝߍ߬ ߞߊ߬ ߟߢߊ߬ߟߌ ߖߏ߬ߛߌ߬ߣߍ߲ ߠߎ߬ ߦߋ߫ ߞߐߕߐ߮ ߟߎ߬ ߘߐ߫ <nowiki>$1</nowiki> ߞߵߊ߬ ߕߊ߬ $3 ߡߊ߬ $2 ߟߊ߫؟",
+       "undelete-show-file-submit": "ߐ߲߬ߐ߲߬ߐ߲߫",
        "namespace": "ߕߐ߯ ߛߓߍ ߞߣߍ:",
        "invert": "ߓߊߕߐ߬ߡߐ߲߬ߣߍ߲ ߞߕߐߡߊߛߊ߬ߦߌ߲߬",
        "tooltip-invert": "ߞߏ߲߬ߘߏ ߣߌ߲߬ ߘߐߜߍ߫߸ ߞߊ߬ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߠߎ߬ ߢߡߊߘߏ߲߰ ߞߐߜߍ ߟߎ߬ ߕߐ߯ ߞߣߍ߫ ߓߊߓߌ߬ߟߊ߬ߣߍ߲ ߘߐ߫ (ߊ߬ ߣߌ߫ ߕߐ߯ ߞߣߍ߫ ߓߟߏߘߏ߲߬ߣߍ߲ ߘߐߜߍߣߍ߲ ߠߎ߬)",
+       "tooltip-whatlinkshere-invert": "ߞߏ߲߬ߘߏ ߣߌ߲߬ ߝߛߍ߬ߝߛߍ߬ ߞߊ߬ ߛߘߌ߬ߜߋ߲ ߠߎ߬ ߢߡߊߘߏ߲߰ ߕߐ߯ߛߓߍ ߞߣߍ ߓߊߕߐ߬ߡߐ߲߬ߣߍ߲ ߘߐ߫.",
        "namespace_association": "ߕߐ߯ ߓߟߏߘߏ߲߬ߣߍ߲߫ ߢߐ߲߰ߓߟߏ",
        "tooltip-namespace_association": "ߞߏ߲߬ߘߏ ߣߌ߲߬ ߡߊߝߍߣߍ߲߫ ߓߊ߫ ߞߊ߬ ߓߊ߬ߘߏ߬ߓߊ߬ߘߌߦߊ ߥߟߊ߫ ߝߐߡߊ ߕߐ߮ ߞߣߍ ߡߍ߲ ߓߟߏߘߏ߲߬ߣߍ߲߫ ߦߋ߫ ߞߐߜߍ߫ ߓߊߕߐ߬ߡߐ߲߬ߣߍ߲ ߣߌ߲߬ ߘߐ߫߸ ߞߵߏ߬ ߟߊߘߏ߲߬.",
        "blanknamespace": "(ߓߊߖߎߡߊ)",
        "mycontris": "ߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲",
        "anoncontribs": "ߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲ ߠߎ߬",
        "contribsub2": "{{GENDER:$3|$1}} ߕߊ ($2)",
+       "contributions-subtitle": "{{GENDER:$3|$1}} ߕߊ",
+       "contributions-userdoesnotexist": "ߖߊ߬ߕߋ߬ߘߊ߬ ߟߊߓߊ߯ߙߕߊ \"$1\" ߟߊߞߎ߲߬ߘߎ߬ߣߍ߲߫ ߕߍ߫.",
        "nocontribs": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߬ ߛߌ߫ ߓߍ߲߬ߢߐ߲߰ߦߊ߬ߣߍ߲߬ ߕߍ߫ ߕߐ߰ߡߊ߬ߛߙߋ ߢߌ߲߬ ߠߎ߫ ߡߊ߬ ߣߺߴߊ߬ ߦߋߣߍ߲߫.",
        "uctop": "ߞߍߛߊ߲ߞߏ",
        "month": "ߞߵߊ߬ ߕߊ߬ ߞߊߙߏ ߡߊ߬ (ߊ߬ ߣߌ߫ ߞߊߙߏ ߞߎ߲߬ߝߟߐ ߘߐ߫):",
        "year": "ߞߵߊ߬ ߕߊ߬ ߞߊߙߏ ߡߊ߬ (ߊ߬ ߣߌ߫ ߞߊߙߏ ߞߎ߲߬ߝߟߐ ߡߊ߬):",
+       "date": "ߞߵߊ߬ ߕߊ߬ ߕߎ߬ߡߊ߬ߘߊ ߡߊ߬ (ߊ߬ ߣߌ߫ ߖߏߣߊ߫)",
        "sp-contributions-newbies": "ߖߊ߬ߕߋ߬ߘߊ߬ ߞߎߘߊ ߟߎ߫ ߘߐߙߐ߲߫ ߠߊ߫ ߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲ ߦߌ߬ߘߊ߫ ߕߋ߲߬",
+       "sp-contributions-newbies-sub": "ߖߊ߬ߕߋ߬ߘߊ߬ ߞߎߘߊ ߟߎ߬ ߦߋ߫",
+       "sp-contributions-newbies-title": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߟߊ߫ ߓߟߏߡߊߜߍ߲ ߖߊ߬ߕߋ߬ߘߊ߬ ߞߎߘߊ ߟߎ߬ ߦߋ߫",
        "sp-contributions-blocklog": "ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߓߊ߬ߟߊ߲߬",
+       "sp-contributions-suppresslog": "{{GENDER:$1|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}} ߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲ ߓߘߊ߫ ߖߏ߬ߛߌ߬",
+       "sp-contributions-deleted": "{{GENDER:$1|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}} ߟߊ߫ ߓߟߏߓߌߟߊߢߐ߲߮ߞߊ߲ ߠߎ߬ ߓߘߊ߫ ߖߏ߬ߛߌ߬",
        "sp-contributions-uploads": "ߟߊ߬ߦߟߍ߬ߟߌ ߟߎ߬",
        "sp-contributions-logs": "ߘߏ߲߬ߠߌ߲ ߠߎ߬",
        "sp-contributions-talk": "ߞߎߡߊߢߐ߲߯ߦߊ",
+       "sp-contributions-userrights": "{{GENDER:$1|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}} ߤߊߞߍ ߘߊߘߐߓߍ߲ߠߌ߲",
        "sp-contributions-search": "ߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲ ߘߏ߫ ߢߌߣߌ߲߫",
        "sp-contributions-username": "IP ߛߊ߲߬ߓߊ߬ߕߐ߮ ߥߟߊ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߕߐ߮:",
        "sp-contributions-toponly": "ߡߛߊ߬ߦߌ߲߬ߠߌ߲߬ ߠߊ߬ߓߊ߲ ߠߎ߬ ߘߐߙߐ߲߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߦߌ߬ߘߊ߬",
        "sp-contributions-newonly": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߍ߲ ߣߊ߬ ߞߐߜߍ߫ ߟߊߘߊ߲ ߘߌ߫߸ ߏ߬ ߟߎ߫ ߘߐߙߐ߲߫ ߦߌ߬ߘߊ߬",
+       "sp-contributions-hideminor": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߘߋ߬ߣߍ߲ ߠߎ߬ ߢߡߊߘߏ߲߰",
        "sp-contributions-submit": "ߢߌߣߌ߲ߠߌ߲",
        "whatlinkshere": "ߛߘߌ߬ߜߋ߲ ߢߎ߬ߡߊ߲߬ ߦߋ߫ ߦߊ߲߬",
        "whatlinkshere-title": "ߞߐߜߍ ߡߍ߲ ߠߎ߫ ߛߘߌ߬ߣߍ߲߫ ߝߊ߲߭ ߣߌ߲߬ $1 ߡߊ߬",
        "whatlinkshere-hidelinks": "ߛߘߌ߬ߜߋ߲$1",
        "whatlinkshere-hideimages": "ߞߐߕߐ߮ ߛߘߌ߬ߜߋ߲$1",
        "whatlinkshere-filters": "ߢߡߊߘߏ߲߰ߣߍ߲",
+       "whatlinkshere-submit": "ߕߊ߯",
+       "autoblockid": "ߞߍߒߖߘߍߦߋ߫ ߓߊߟߌߟߌ #$1",
+       "block": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߓߊ߬ߟߌ߬",
+       "unblock": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߓߊ߬ߟߊ߲߬ߣߍ߲ ߓߐ߫",
+       "blockip": "{{GENDER:$1|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}} ߓߊ߬ߟߌ߬",
+       "ipaddressorusername": "IP ߛߊ߲߬ߓߊ߬ߕߐ߮ ߥߟߊ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߕߐ߮:",
+       "ipbreason": "ߊ߬ ߛߊߓߎ:",
+       "ipbcreateaccount": "ߖߊ߬ߕߋ߬ߘߊ ߛߌ߲ߘߟߌ",
+       "ipbemailban": "ߢߎߡߍߙߋ߲ ߗߋߟߌ",
+       "ipbsubmit": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߣߌ߲߬ ߓߊ߬ߟߌ߬",
+       "ipbother": "ߛߋ߲߬ߧߊ߬ ߜߘߍ߫:",
        "ipboptions": "ߕߎ߬ߡߊ߬ߙߋ߲ ߂:2 hours, ߕߟߋ߬ ߁:1 day, ߕߋ߬ߟߋ ߃:3 days,ߞߎ߲߬ߢߐ߰ ߁:1 week, ߞߎ߲߬ߢߐ߮ ߂:2 weeks, ߞߊߙߏ߫ ߁:1 month, ߞߊߙߏ߫ ߃:3 months, ߞߊߙߏ߫ ߆:6 months,ߛߊ߲߬ ߁:1 year,ߤߊ߲߯ ߤߌ߲߯:infinite",
+       "ipbhidename": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߢߡߊߘߏ߲߰ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߣߌ߫ ߛߙߍߘߍ ߡߊ߬",
+       "ipb-disableusertalk": "ߊ߬ߟߎ߬ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ ߞߎߡߊ߫ ߞߐߜߍ ߡߊߦߟߍ߬ߡߊ߲߬ߠߌ߲",
+       "ipb-change-block": "ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߣߌ߲߬ ߦߋ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߡߍ߲ ߠߎ߬ ߟߊ߫߸ ߏ߬ ߟߎ߫ ߓߊ߬ߟߌ߬-ߕߎ߲߯",
+       "ipb-confirm": "ߝߊ߲߬ߞߣߐ ߟߊߛߙߋߦߊ߫",
+       "ipb-sitewide": "ߞߍߦߙߐ ߞߣߍ",
+       "ipb-partial": "ߝߊ߲߬ߞߋ߬ߟߋ߲߬ߞߏ",
+       "ipb-sitewide-help": "ߞߐߜߍ ߡߍ߲ ߓߍ߯ ߦߋ߫ ߥߞߌ ߘߐ߫ ߊ߬ ߣߌ߫ ߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲ ߞߍߢߊ ߕߐ߭ ߟߎ߬.",
+       "ipb-partial-help": "ߞߐߜߍ ߘߊ߲߬ߠߊߕߍ߰ߣߍ߲ ߥߟߊ߫ ߕߐ߯ߛߓߍ ߞߣߍ",
+       "ipb-pages-label": "ߞߐߜߍ ߟߎ߬",
+       "ipb-namespaces-label": "ߕߐ߯ߛߓߍ ߞߣߍ",
+       "badipaddress": "IP ߛߊ߲߬ߓߊ߬ߕߐ߮ ߓߍ߲߬ߓߊߟߌ",
+       "blockipsuccesssub": "ߓߊ߬ߟߌ߬ߟߌ ߓߘߊ߫ ߛߎߘߊ߲߫",
+       "ipb-edit-dropdown": "ߓߊ߬ߟߌ߬ߟߌ ߞߎ߲߭ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "ipb-unblock-addr": "$1 ߓߊ߬ߟߌ߬ߣߍ߲ ߓߐ߫",
+       "ipb-unblock": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߘߏ߫ ߓߊ߬ߟߌ߬ߣߍ߲ ߓߐ߫ ߥߟߊ߫ IP ߛߊ߲߬ߓߊ߬ߕߐ߮",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}} ߟߊ߫ ߓߟߏߓߌߟߊߢߐ߲߮ߞߊ߲",
+       "ipb-blocklist-duration-left": "ߞߵߊ߬ ߕߊ߬ $1",
+       "block-actions": "ߝߏ߲߬ߝߏ߲ ߓߊ߬ߟߌ߬ߕߊ:",
+       "block-expiry": "ߛߕߊ ߝߊ߫ ߕߎߡߊ:",
+       "block-options": "ߢߣߊߕߊߟߌ߫ ߡߞߊ߬ߝߏ߬ߟߌ߬ ߜߘߍ߫",
+       "block-prevent-edit": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߦߴߌ ߘߐ߫",
+       "block-reason": "ߊ߬ ߛߊߓߎ:",
+       "block-target": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ߬ ߕߐ߮ ߥߟߊ߫ IP ߛߊ߲߬ߓߊ߬ߕߐ߮:",
+       "unblockip": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߓߊ߬ߟߊ߲߬ߣߍ߲ ߓߐ߫",
+       "ipusubmit": "ߓߊ߬ߟߌ߬ߟߌ ߣߌ߲߬ ߓߐ߫ ߦߋ߲߬",
+       "unblocked": "[[User:$1|$1]] ߓߊ߬ߟߌ߬ߣߍ߲ ߓߘߊ߫ ߓߐ߫.",
+       "unblocked-range": "$1 ߓߊ߬ߟߌ߬ߣߍ߲ ߓߘߊ߫ ߓߐ߫.",
+       "unblocked-id": "ߓߊ߬ߟߌ߬ߟߌ $1 ߓߘߊ߫ ߓߴߊ߬ ߞߊ߲߬.",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] ߓߊ߬ߟߌ߬ߣߍ߲ ߓߘߊ߫ ߓߐ߫.",
+       "blocklist": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߓߊ߬ߟߌ߬ߣߍ߲ ߠߎ߬",
+       "autoblocklist": "ߞߍߒߖߘߍߦߋ߫ ߓߊߟߌߟߌ",
+       "autoblocklist-submit": "ߊ߬ ߢߌߣߌ߲߫",
+       "autoblocklist-legend": "ߞߍߒߖߘߍߦߋ߫ ߓߊߟߌߟߌ ߟߎ߬ ߛߙߍߘߍ",
+       "ipblocklist": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߓߊ߬ߟߌ߬ߣߍ߲ ߠߎ߬",
+       "ipblocklist-legend": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߓߊ߬ߟߌ߬ߣߍ߲ ߠߎ߬ ߢߌߣߌ߲߫",
+       "blocklist-userblocks": "ߖߊ߬ߕߋ߬ߘߊ ߝߊ߲߬ߞߣߐ ߢߡߊߘߏ߲߰",
+       "blocklist-tempblocks": "ߝߊ߲߬ߞߣߐ ߕߎ߬ߡߊ߬ߞߎ߲߬ߡߊ ߢߡߊߘߏ߲߰",
+       "blocklist-addressblocks": "ߝߊ߲߬ߞߣߐ IP ߞߋ߬ߟߋ߲߬ߡߊ ߢߡߊߘߏ߲߰",
+       "blocklist-type": "ߛߎ߯ߦߊ:",
+       "blocklist-type-opt-all": "ߊ߬ ߓߍ߯",
+       "blocklist-type-opt-sitewide": "ߞߍߦߙߐ ߞߣߍ",
+       "blocklist-type-opt-partial": "ߝߊ߲߬ߞߋ߬ߟߋ߲߬ߞߏ",
+       "blocklist-timestamp": "ߕߎ߬ߡߊ ߓߊ߬ߘߌ߬ߟߊ߲",
+       "blocklist-target": "ߞߏ߲߭",
+       "blocklist-expiry": "ߊ߬ ߛߕߊ ߓߘߊ߫ ߝߊ߫",
+       "blocklist-reason": "ߊ߬ ߛߊߓߎ",
+       "ipblocklist-submit": "ߢߌߣߌ߲ߠߌ߲",
+       "ipblocklist-localblock": "ߕߌ߲߬ߞߎߘߎ߲ ߝߊ߲߬ߞߣߐ",
        "infiniteblock": "ߘߊ߲߬ߓߊߟߌ",
+       "expiringblock": "ߊ߬ ߛߕߊ ߝߊ߫ ߕߐ߫ $1 ߟߋ߬ ߟߊ߫ $2 ߟߊ߫",
+       "anononlyblock": "ߕߐ߯ߒߕߊ߲. ߘߐߙߐ߲߫",
+       "createaccountblock": "ߖߊ߬ߕߋ߬ߘߊ ߛߌ߲ߘߟߌ ߓߐ߫ ߣߴߊ߬ ߟߊ߫",
+       "emailblock": "ߢߎߡߍߙߋ߲ߞߏ߲ߘߏ ߕߴߊ߬ ߟߊ߫",
+       "blocklist-nousertalk": "ߌ ߕߍ߫ ߛߴߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ ߞߎߡߊߢߐ߲߯ߦߊ߫ ߞߐߜߍ ߡߊߦߟߍ߬ߡߊ߲߬ ߠߊ߫",
+       "blocklist-editing": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߦߴߌ ߘߐ߫",
+       "blocklist-editing-sitewide": "(ߞߍߦߙߐ ߞߣߍ) ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߦߴߌ ߘߐ߫",
+       "blocklist-editing-page": "ߞߐߜߍ ߟߎ߬",
+       "blocklist-editing-ns": "ߕߐ߯ߛߓߍ ߞߣߍ",
+       "ipblocklist-empty": "ߝߊ߲߬ߞߣߐ ߛߙߍߘߍ ߘߐߞߏߟߏ߲ ߠߋ߬.",
        "blocklink": "ߟߊ߬ߢߊ߬ߙߊ߲߬ߠߌ",
+       "unblocklink": "ߓߊ߬ߟߌ߬ߣߍ߲ ߓߐ߫",
+       "change-blocklink": "ߝߊ߲߬ߞߣߐ ߡߊߝߊ߲߬ߟߋ߲߬",
+       "empty-username": "(ߕߐ߯ ߟߊߓߊ߯ߙߕߊ߫ ߛߌ߫ ߕߍ߫ ߦߊ߲߬)",
        "contribslink": "ߓߟߏߡߊߜߍ߲",
+       "emaillink": "ߢߎߡߍߙߋ߲ ߗߋ߫",
+       "autoblocker": "ߓߘߊ߫ ߓߊ߬ߟߌ߬ ߊ߬ ߖߍ߬ߘߍߡߊ߬ ߓߊߏ߬ ߌ ߟߊ߫ IP ߛߊ߲߬ߓߊ߬ߕߐ߮ ߟߊߓߊ߯ߙߊ߫ ߛߊ߲߯ ߠߋ߬ ߦߋ߫ \"[[User:$1|$1]]\". ߓߟߏ߫.\nߞߎ߲߭ ߡߍ߲ ߦߌ߬ߘߊ߬ ߣߍ߲߬ ߦߋ߫ $1 ߓߊ߬ߟߌ߬ߟߌ ߟߊ߫߸ ߏ߬ ߟߋ ߦߋ߫  \"$2\"",
        "blocklogpage": "ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߓߊ߬ߟߊ߲߬ߠߌ",
+       "blocklog-showlog": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߣߌ߲߬ ߕߊ߬ߟߌ߬ߣߍ߲߬ ߦߋ߫ ߥߊ߯ߕߌ߫ ߞߎߘߎ߲ߣߍ߲߫ ߠߋ߬ ߞߘߐ߫.\nߓߊ߬ߟߌ߬ߟߌ ߘߊ߲ߖߐ ߡߊߛߐߣߍ߲߫ ߦߋ߫ ߘߎ߰ߟߊ ߘߐ߫ ߦߟߌߡߊߛߙߋ߫ ߞߏ ߘߐ߫:",
+       "blocklog-showsuppresslog": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߣߌ߲߬ ߓߊ߬ߟߌ߬ߣߍ߲ ߠߋ߬ ߦߋ߫ ߞߏ߬ߣߵߊ߬ ߢߡߊߘߏ߲߰ߣߍ߲߬ ߡߎߣߎ߲߬.\nߖߏ߰ߛߌ߬ߟߌ ߘߊ߲ߖߐ ߡߊߛߐߣߍ߲߫ ߦߋ߫ ߘߎ߰ߟߊ ߘߐ߫ ߦߟߌߡߊߛߙߋ߫ ߞߏ ߘߐ߫:",
        "blocklogentry": "ߊ߬ ߓߊ߬ߟߊ߲߬ߣߍ߲߬ ߦߋ߫ [[$1]] ߊ߬ ߕߎ߬ߡߊ ߕߊ߬ߡߌ߲ ߠߋ߬ ߞߏߛߐ߲߬ $2 $3",
        "reblock-logentry": "ߣߌ߲߬ ߓߊ߬ߟߊ߲߬ߠߌ߲ ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߡߊߦߟߍ߬ߡߊ߲߬  [[$1]] ߊ߬ ߕߎ߬ߡߊ ߛߕߊ ߝߊ ߕߎߡߊ ߟߊ߫ $2 $3",
+       "unblocklogentry": "$1 ߓߊ߬ߟߌ߬ߣߍ߲ ߓߘߊ߫ ߓߐ߫",
+       "block-log-flags-anononly": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߊ߫ ߕߐ߯ߒߕߊ߲ ߠߎ߬ ߘߐߙߐ߲߫",
        "block-log-flags-nocreate": "ߖߊ߬ߕߋ߬ߘߊ ߛߌ߲ߘߟߌ ߟߊߕߐ߲",
+       "block-log-flags-noautoblock": "ߞߍߒߖߘߍߡߊ߫ ߓߊߟߌߟߌ ߓߘߊ߫ ߓߐ߫ ߊ߬ ߟߊ߫.",
+       "block-log-flags-noemail": "ߢߎߡߍߙߋ߲ߞߏ߲ߘߏ ߕߴߊ߬ ߟߊ߫",
+       "block-log-flags-nousertalk": "ߌ ߕߍ߫ ߛߴߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ ߞߎߡߊߢߐ߲߯ߦߊ߫ ߞߐߜߍ ߡߊߦߟߍ߬ߡߊ߲߬ ߠߊ߫",
+       "block-log-flags-angry-autoblock": "ߞߍߒߖߘߍߡߊ߫ ߓߊߟߌߟߌ ߘߐߥߙߊ߬ߟߌ ߦߴߊ߬ ߟߊ߫.",
+       "block-log-flags-hiddenname": "ߕߐ߯ ߟߊߓߊ߯ߙߕߊ ߢߡߊߘߏ߲߰ߣߍ߲߫",
+       "ipb_expiry_invalid": "ߛߕߊ ߝߊ߫ ߕߎߡߊ ߓߍ߲߬ߓߊߟߌ",
+       "ipb_expiry_old": "ߊ߬ ߛߕߊ ߝߊ߫ ߕߎߡߊ ߓߘߊ߫ ߕߊ߬ߡߌ߲߬.",
+       "ipb_expiry_temp": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߕߐ߮ ߘߊ߲ߖߐ ߢߡߊߘߏ߲߯ߠߌ߲ ߦߋ߫ ߞߍ߫ ߞߎߘߊߦߌ ߘߌ߫.",
+       "ipb_hide_invalid": "ߖߊ߬ߕߋ߬ߘߊ ߣߌ߲߬ ߖߏ߬ߛߌ߬ߟߌ ߕߍ߫ ߣߊ߬ ߓߍ߲߬ ߠߊ߫: ߊ߬ ߓߘߊ߫ {{PLURAL:$1|ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߞߋߟߋ߲߫|ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ $1 ߠߎ߬}} ߠߎ߬ ߞߍ߫.",
+       "ipb_already_blocked": "ߵߵ$1ߵߵ ߓߊ߬߬ߟߌ߬ߣߍ߲߬ ߞߘߐ ߟߋ߬ ߦߋ߫.",
+       "ipb-needreblock": "$1 ߓߊ߬ߟߌ߬ߣߍ߲߬ ߞߘߐ ߟߋ߬. ߌ ߦߴߊ߬ ߝߍ߬ ߞߊ߬ ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߡߊߝߊ߬ߟߋ߲߫ ߓߊ߬؟",
+       "ipb-otherblocks-header": "{{PLURAL:$1|ߘߊ߲ߖߐ|ߘߊ߲ߖߐ ߟߎ߬}} ߕߐ߭ ߟߎ߬",
+       "unblock-hideuser": "ߌ ߕߍߣߊ߬ ߛߋ߫ ߟߊ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߣߌ߲߬ ߓߊ߬ߟߌ߬ߣߍ߲ ߓߐ߫ ߟߊ߫߸ ߓߊߏ߬ ߊ߬ߟߎ߬ ߕߐ߯ ߟߊߓߊ߯ߙߕߊ ߢߡߊߘߏ߲߰ߣߍ߲߫ ߠߋ߬.",
        "proxyblocker": "ߟߐ߲߬ߞߋ߬ߟߊ ߓߊ߬ߟߊ߲߬ߟߊ߲",
+       "lockdb": "ߓߟߏߡߟߊ ߝߊ߲ ߣߍ߰",
+       "unlockdb": "ߓߟߏߡߟߊ ߝߊ߲ ߟߊߞߊ߬",
+       "lockbtn": "ߓߟߏߡߟߊ ߝߊ߲ ߣߍ߰",
+       "unlockbtn": "ߓߟߏߡߟߊ ߝߊ߲ ߟߊߞߊ߬",
+       "locknoconfirm": "ߌ ߡߊ߫ ߟߊ߬ߛߙߋ߬ߦߊ߬ߟߌ߬ ߞߏ߲ߘߏ ߡߊߝߍߣߍ߲߫.",
+       "lockdbsuccesssub": "ߓߟߏߡߟߊ ߝߊ߲ ߛߐ߰ߟߌ ߓߘߊ߫ ߛߎߘߊ߲߫",
+       "unlockdbsuccesssub": "ߛߐ߰ߟߌ ߓߘߊ߫ ߓߐ߫ ߓߟߏߡߟߊ ߝߊ߲ ߞߊ߲߬",
+       "unlockdbsuccesstext": "ߓߟߏߡߟߊ ߝߊ߲ ߓߘߊ߫ ߓߊ߲߫ ߘߊߦߟߍ߬ ߟߊ߫.",
+       "databaselocked": "ߓߟߏߡߟߊ ߝߊ߲ ߛߐ߰ߣߍ߲߬ ߞߘߐ ߟߋ߬.",
+       "databasenotlocked": "ߓߟߏߡߟߊ ߝߊ߲ ߛߐ߰ߣߍ߲߬ ߕߍ߫.",
+       "move-page": "$1 ߛߋ߲߬ߓߐ߫",
+       "move-page-legend": "ߞߐߜߍ ߛߋ߲߬ߓߐ߫",
+       "newtitle": "ߞߎ߲߬ߕߐ߰ ߞߎߘߊ:",
+       "movepagebtn": "ߞߐߜߍ ߛߋ߲߬ߓߐ߬ߟߌ",
+       "pagemovedsub": "ߛߋ߲߬ߓߐ߬ߟߌ ߓߘߊ߫ ߛߎߘߊ߲߫",
        "movelogpage": "ߜߊ߲߬ߞߎ߲ ߓߐ߫ ߊ߬ ߡߊ߬",
+       "movelogpagetext": "ߞߐߜߍ߫ ߛߋ߲߬ߓߐ߬ߣߍ߲ ߠߎ߬ ߓߍ߯ ߛߙߍߘߍ ߟߋ߬ ߦߋ߫ ߘߎ߰ߟߊߘߐ.",
+       "movesubpage": "{{PLURAL:$1|ߞߐߜߍߙߋ߲|ߞߐߜߍߙߋ߲ ߠߎ߬}}",
+       "movesubpagetext": "{{PLURAL:$1|ߞߐߜߍߙߋ߲|ߞߐߜߍߙߋ߲ ߠߎ߬}} $1 ߟߋ߬ ߦߋ߫ ߞߐߜߍ ߣߌ߲߬ ߠߊ߫߸ ߏ߬ ߟߋ ߦߌ߬ߘߊ߬ߣߍ߲߫ ߘߎ߰ߟߊ ߘߐ߫.",
+       "movenosubpage": "ߞߐߜߍߙߋ߲߫ ߕߍ߫ ߞߐߜߍ ߣߌ߲߬ ߠߊ߫.",
+       "movereason": "ߊ߬ ߛߊߓߎ:",
+       "revertmove": "ߟߊߞߐߛߊ߬ߦߌ߬",
+       "delete_and_move_confirm": "ߐ߲߬ߐ߲߬ߐ߲߫߸ ߞߐߜߍ ߖߏ߬ߛߌ߬",
+       "delete_and_move_reason": "ߊ߬ ߖߏ߰ߛߌ߬ߣߍ߲߫ ߠߋ߬ ߛߊ߫ ߛߊ߫ ߛߌߟߊ߫ ߘߌ߫ ߛߐ߬ߘߐ߲߬ ߞߵߊ߬ ߛߋ߲߬ߓߐ߫  \"[[$1]]\" ߘߐ߫",
+       "selfmove": "ߞߎ߲߬ߕߐ߮ ߦߋ߫ ߛߎ߯ ߞߋߟߋ߲ ߠߋ߬ ߘߌ߫:\nߞߐߜߍ ߕߍ߫ ߛߐ߲߬ ߟߊߦߟߍ߬ ߟߴߊ߬ ߖߍ߬ߘߍ ߞߊ߲߬.",
+       "immobile-source-namespace": "ߞߐߜߍ ߕߍ߫ ߛߐ߲߬ ߛߋ߲߬ߓߐ߬ ߟߊ߫ ߕߐ߯ߛߓߍ ߞߣߍ \"$1\" ߘߐ߫.",
+       "immobile-target-namespace": "ߞߐߜߍ ߕߍ߫ ߛߐ߲߬ ߟߊߕߊ߯ ߟߊ߫ ߕߐ߯ߛߓߍ ߞߣߍ \"$1\" ߘߐ߫.",
+       "immobile-target-namespace-iw": "ߥߞߌߣߌߢߐ߲߯ߕߍ ߛߘߌ߬ߜߋ߲ ߕߍ߫ ߞߏ߲߰ ߓߍ߲߬ߣߍ߲߬ ߘߌ߫ ߞߊ߬ ߞߐߜߍ ߟߎ߬ ߛߋ߲߬ߓߐ߫.",
+       "immobile-source-page": "ߞߐߜߍ ߕߍ߫ ߛߋ߲߬ߓߐ߬ߕߊ߫ ߘߌ߫.",
        "export": "ߞߐߜߍ ߟߎ߬ ߟߊߝߏ߬ߦߌ߬",
+       "export-submit": "ߟߊ߬ߝߏ߬ߦߌ߬ߟߌ",
+       "export-addcattext": "ߞߐߜߍ ߟߊߘߏ߲߬ ߦߌߟߡߊ ߘߐ߫:",
+       "export-addcat": "ߟߊ߬ߘߏ߲߬ߠߌ߲",
+       "export-addnstext": "ߞߐߜߍ ߟߊߘߏ߲߬ ߕߐ߯ߛߓߍ ߞߣߍ ߘߐ߫",
+       "export-addns": "ߟߊ߬ߘߏ߲߬ߠߌ߲",
+       "export-download": "ߊ߬ ߟߊߞߎ߲߬ߘߎ߬ ߞߐߕߐ߮ ߘߌ߫",
+       "export-templates": "ߊ߬ ߟߊߘߏ߲߬ ߞߙߊ߬ߞߏ ߘߐ߫",
+       "export-manual": "ߞߐߜߍ ߟߎ߬ ߟߊߘߏ߲߬ ߓߟߏߦߊߟߌ߫ ߓߟߏߡߊ߬:",
+       "allmessages": "ߞߊ߲ߞߋ ߗߋߛߓߍ ߟߎ߬",
+       "allmessagesname": "ߕߐ߮",
+       "allmessagesdefault": "ߓߐߛߎ߲ ߗߋߛߓߍ ߛߓߍߟߌ",
+       "allmessages-filter-legend": "ߛߍ߲ߛߍ߲ߟߊ߲",
+       "allmessages-filter-unmodified": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߓߊߟߌ",
+       "allmessages-filter-all": "ߊ߬ ߓߍ߯",
+       "allmessages-filter-modified": "ߓߘߊ߫ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "allmessages-prefix": "ߊ߬ ߥߣߊ߬ߙߌ߫ ߢߍߣߙߊ ߟߎ߬ ߡߊ߬",
+       "allmessages-language": "ߞߊ߲:",
+       "allmessages-filter-submit": "ߥߣߊ߬ߙߌ",
+       "allmessages-filter-translate": "ߘߟߊߡߌߘߊߟߌ",
        "thumbnail-more": "ߊ߬ ߟߊߞߎ߲߬ߓߊ߬ߦߊ߫",
+       "filemissing": "ߞߐߕߐ߯ ߞߐߢߌ߬ߣߊ߬ߣߍ߲",
+       "thumbnail_error": "ߞߝߊ߬ߟߋ߲ߛߋ߲ ߛߌ߲ߘߟߌ ߝߎ߬ߕߎ߲߬ߕߌ: $1",
+       "thumbnail_error_remote": "ߗߋߛߓߍ߫ ߝߎ߬ߕߎ߲߬ߕߌ߬ߡߊ ߞߊ߬ ߝߘߊ߫ $1: $2",
+       "import": "ߞߐߜߍ ߟߎ߬ ߟߊߛߣߍ߫",
+       "importinterwiki": "ߞߐߜߍ ߟߎ߬ ߟߊߛߣߍ߫ ߞߊ߬ ߓߐ߫ ߥߞߌ ߕߐ߭ ߟߎ߬ ߘߐ߫",
+       "import-interwiki-sourcewiki": "ߥߞߌ߫ ߓߐߛߎ߲:",
+       "import-interwiki-sourcepage": "ߓߐߛߎ߲ ߞߐߜߍ:",
+       "import-interwiki-history": "ߞߐߜߍ ߣߌ߲߬ ߟߢߊ߬ߟߌ ߘߐ߬ߝߐ ߓߍ߯ ߓߊߓߌ߬ߟߊ߬",
+       "import-interwiki-templates": "ߞߙߊ߬ߞߏ ߟߎ߬ ߓߍ߯ ߟߊߘߏ߲߬",
+       "import-interwiki-submit": "ߟߊ߬ߛߣߍ߬ߟߌ",
+       "import-mapping-default": "ߊ߬ ߟߊߛߣߍ߫ ߘߊ߲ߛߎ߲ ߘߌ߲߬ߞߌߙߊ ߘߐ߫",
+       "import-mapping-namespace": "ߊ߬ ߟߊߛߣߍ߫ ߕߐ߯ߛߓߍ ߞߣߍ ߘߏ߫ ߘߐ߫",
+       "import-upload-filename": "ߞߐߕߐ߮ ߕߐ߮:",
+       "import-upload-username-prefix": "ߥߞߌ ߣߌ߫ ߢߐ߲߯ߕߍ ߢߍߣߙߊ:",
        "importlogpage": "ߟߊ߬ߛߣߍ߬ߟߌ ߞߣߍ",
        "tooltip-pt-userpage": "{{GENDER:|ߌ ߟߊ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ߬}} ߞߐߜߍ",
        "tooltip-pt-mytalk": "{{GENDER:|ߌ ߟߊ߫}} ߞߎߡߊ߫ ߞߐߜߍ߫",
        "tooltip-n-help": "ߘߍ߬ߡߍ߲߬ ߦߙߐ",
        "tooltip-t-whatlinkshere": "ߞߐߜߍ ߟߎ߫ ߛߘߌ߬ߜߋ߲ ߛߙߍߘߍ ߡߍ߲ ߠߎ߫ ߓߌ߬ߟߊ߬ߣߍ߲߫ ߦߊ߲߬ ߡߊ߬",
        "tooltip-t-recentchangeslinked": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߠߊ߬ߓߊ߲ ߡߍ߲ ߠߎ߬ ߦߋ߫ ߞߐߜߍ ߣߌ߲߬ ߛߘߌ߬ߜߋ߲ ߠߎ߬ ߘߐ߫",
+       "tooltip-feed-rss": "ߞߐߜߍ ߣߌ߲߬ RSS ߓߊߟߏ",
        "tooltip-feed-atom": "ߞߐߜߍ ߣߌ߲߬ ߝߕߌ߫ ߓߊߟߏ",
        "tooltip-t-contributions": "{{GENDER:$1|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}} ߟߊ߫ ߓߟߏߓߌߟߊߢߐ߲߮ߞߊ߲ ߛߙߍߘߍ",
        "tooltip-t-emailuser": "ߢߎߡߍߙߋ߲ߞߏ߲ߘߏ ߟߊߕߊ߯ ߟߊߓߊ߯ߙߟߊ ߣߌ߲߬ ߡߊ߬{{GENDER:$1|ߟߊߓߊ߯ߙߟߊ}}",
index 2aa18bc..0b791d6 100644 (file)
        "nonwrite-api-promise-error": "Nagłówek HTTP 'Promise-Non-Write-API-Action' został wysłany, ale zapytanie wykorzystywało moduł API, który modyfikuje dane.",
        "internalerror": "Błąd wewnętrzny",
        "internalerror_info": "Błąd wewnętrzny: $1",
-       "internalerror-fatal-exception": "Krytyczny wyjątek typu \"$1\"",
+       "internalerror-fatal-exception": "Krytyczny wyjątek typu „$1”",
        "filecopyerror": "Nie można skopiować pliku „$1” do „$2”.",
        "filerenameerror": "Nie można zmienić nazwy pliku „$1” na „$2”.",
        "filedeleteerror": "Nie można usunąć pliku „$1”.",
        "changecontentmodel": "Edycja modelu zawartości strony",
        "changecontentmodel-legend": "Zmienić model zawartości",
        "changecontentmodel-title-label": "Tytuł strony",
+       "changecontentmodel-current-label": "Obecny model zawartości:",
        "changecontentmodel-model-label": "Nowy model zawartości",
        "changecontentmodel-reason-label": "Powód:",
        "changecontentmodel-submit": "Zmień",
        "ipbreason": "Powód:",
        "ipbreason-dropdown": "*Najczęstsze przyczyny blokad\n** Ataki na innych użytkowników\n** Naruszenie praw autorskich\n** Niedozwolona nazwa użytkownika\n** Open proxy lub Tor\n** Spamowanie\n** Usuwanie treści stron\n** Wprowadzanie fałszywych informacji\n** Wulgaryzmy\n** Wypisywanie bzdur na stronach",
        "ipb-hardblock": "Zablokuj możliwość edytowania przez zalogowanych użytkowników z tego adresu IP.",
-       "ipbcreateaccount": "Utworzenie konta",
+       "ipbcreateaccount": "Tworzenie konta",
        "ipbemailban": "Wysyłanie e‐maili",
        "ipbenableautoblock": "Zablokuj ostatni adres IP tego użytkownika i automatycznie wszystkie kolejne, z których będzie próbował edytować",
        "ipbsubmit": "Zablokuj użytkownika",
        "block-log-flags-angry-autoblock": "rozszerzone automatyczne blokowanie włączone",
        "block-log-flags-hiddenname": "nazwa użytkownika jest ukryta",
        "range_block_disabled": "Możliwość blokowania zakresu adresów IP została wyłączona.",
+       "ipb-prevent-user-talk-edit": "Edytowanie swojej strony dyskusji musi być dozwolone przy częściowej blokadzie, chyba że zawiera ona ograniczenia przestrzeni „Dyskusja użytkownika”.",
        "ipb_expiry_invalid": "Błędny czas wygaśnięcia blokady.",
        "ipb_expiry_old": "Czas wygaśnięcia blokady już minął.",
        "ipb_expiry_temp": "Ukryte blokowanie nazwy użytkownika należy wykonać trwale.",
        "databaselocked": "Baza danych jest już zablokowana.",
        "databasenotlocked": "Baza danych nie jest zablokowana.",
        "lockedbyandtime": "(przez $1 dnia $2 o $3)",
-       "move-page": "Przenieś $1",
+       "move-page": "Przenieś „$1”",
        "move-page-legend": "Przeniesienie strony",
        "movepagetext": "Za pomocą poniższego formularza zmienisz nazwę strony, przenosząc jednocześnie jej historię.\nPod starym tytułem zostanie umieszczona strona przekierowująca.\nMożesz automatycznie zaktualizować przekierowania wskazujące na tytuł przed zmianą.\nJeśli nie wybierzesz tej opcji, upewnij się po przeniesieniu strony, czy nie powstały [[Special:DoubleRedirects|podwójne]] lub [[Special:BrokenRedirects|zerwane przekierowania]].\nJesteś odpowiedzialny za to, by linki w dalszym ciągu prowadziły tam, gdzie powinny.\n\nStrona <strong>nie</strong> zostanie przeniesiona, jeśli strona o nowej nazwie już istnieje, chyba że jest pusta lub jest przekierowaniem i ma pustą historię edycji.\nOznacza to, że błędną operację zmiany nazwy można bezpiecznie odwrócić, zmieniając nową nazwę strony na poprzednią, i że nie można nadpisać istniejącej strony.\n\n<strong>UWAGA!</strong>\nW przypadku popularnych stron może to być drastyczna lub nieprzewidywalna zmiana.\nUpewnij się co do konsekwencji tej operacji, zanim się na nią zdecydujesz.",
        "movepagetext-noredirectfixer": "Za pomocą poniższego formularza zmienisz nazwę strony, przenosząc jednocześnie jej historię.\nPod starym tytułem zostanie umieszczona strona przekierowująca.\nPo przeniesieniu strony upewnij się, czy nie powstały [[Special:DoubleRedirects|podwójne]] lub [[Special:BrokenRedirects|zerwane przekierowania]].\nJesteś odpowiedzialny za to, by linki w dalszym ciągu pokazywały tam, gdzie powinny.\n\nStrona <strong>nie</strong> zostanie przeniesiona, jeśli strona o nowej nazwie już istnieje, chyba że jest pusta lub jest przekierowaniem i ma pustą historię edycji.\nOznacza to, że błędną operację zmiany nazwy można bezpiecznie odwrócić, zmieniając nową nazwę strony na poprzednią, i że nie można nadpisać istniejącej strony.\n\n<strong>UWAGA!</strong>\nW przypadku popularnych stron może to być drastyczna lub nieprzewidywalna zmiana.\nUpewnij się co do konsekwencji tej operacji, zanim się na nią zdecydujesz.",
+       "movepagetext-noredirectsupport": "Za pomocą poniższego formularza zmienisz nazwę strony, przenosząc jednocześnie jej historię.\nJesteś odpowiedzialny za to, by linki w dalszym ciągu prowadziły tam, gdzie powinny. \n\nStrona <strong>nie</strong> zostanie przeniesiona, jeśli strona o nowej nazwie już istnieje, chyba że jest pusta lub jest przekierowaniem i ma pustą historię edycji.\nOznacza to, że błędną operację zmiany nazwy można bezpiecznie odwrócić, zmieniając nową nazwę strony na poprzednią, i że nie można nadpisać istniejącej strony. \n\n<strong>UWAGA!</strong>\nW przypadku popularnych stron może to być drastyczna lub nieprzewidywalna zmiana. Upewnij się co do konsekwencji tej operacji, zanim się na nią zdecydujesz.",
        "movepagetalktext": "Jeżeli zaznaczysz to pole, powiązana strona dyskusji zostanie przeniesiona automatycznie, chyba że już istnieje niepusta strona pod nową nazwą.\n\nW takim przypadku stronę dyskusji należy ręcznie przenieść bądź scalić.",
        "moveuserpage-warning": "'''Uwaga!''' Masz zamiar przenieść stronę użytkownika. Miej na uwadze, że zostanie przeniesiona tylko strona, a '''nazwa użytkownika pozostanie niezmieniona'''.",
        "movecategorypage-warning": "<strong>Uwaga!</strong> Masz zamiar przenieść stronę kategorii. Miej na uwadze, że strony, które należały do starej kategorii, <em>nie</em> zostaną przeniesione do nowej.",
        "permanentlink": "Link trwały do wersji",
        "permanentlink-revid": "ID wersji",
        "permanentlink-submit": "Przejdź do wersji",
+       "newsection": "Nowa sekcja",
+       "newsection-page": "Strona docelowa",
+       "newsection-submit": "Przejdź do strony",
        "dberr-problems": "Przepraszamy! Witryna ma problemy techniczne.",
        "dberr-again": "Spróbuj przeładować stronę za kilka minut.",
        "dberr-info": "(Błąd łączności z bazą danych: $1)",
index 2104e3f..d7167ba 100644 (file)
        "changecontentmodel": "Alterar o modelo de conteúdo de uma página",
        "changecontentmodel-legend": "Alterar o modelo de conteúdo",
        "changecontentmodel-title-label": "Título da página",
+       "changecontentmodel-current-label": "Modelo de conteúdo atual:",
        "changecontentmodel-model-label": "Modelo de conteúdo novo",
        "changecontentmodel-reason-label": "Motivo:",
        "changecontentmodel-submit": "Mudar",
        "block-log-flags-angry-autoblock": "autobloqueio melhorado ativado",
        "block-log-flags-hiddenname": "nome de usuário oculto",
        "range_block_disabled": "A funcionalidade de bloquear gamas de IPs encontra-se desativada.",
+       "ipb-prevent-user-talk-edit": "Editar a própria página de discussão tem de ser permitido para um bloqueio parcial, a menos que que este inclua uma restrição sobre o espaço nominal Usuário Discussão.",
        "ipb_expiry_invalid": "Tempo de expiração inválido.",
        "ipb_expiry_old": "O tempo de expiração está no passado.",
        "ipb_expiry_temp": "Bloqueios com nome de usuário ocultado devem ser permanentes.",
        "move-page-legend": "Mover página",
        "movepagetext": "Utilizando o formulário a seguir você poderá renomear uma página, movendo todo o histórico para o novo título.\nO título anterior será transformado em um redirecionamento para o novo.\nVocê poderá optar em atualizar automaticamente os redirecionamentos que se destinem ao título original.\nCaso escolha pela não-atualização, se certifique de verificar por redirecionamentos [[Special:DoubleRedirects|duplos]] ou [[Special:BrokenRedirects|quebrados]].\nÉ de sua responsabilidade que os links continuem direcionando para onde eles devem.\n\nNote que a página <strong>não</strong> será movida se já existir uma página com o novo título, a não ser que ele seja um redirecionamento e não tenha histórico de edições.\nIsto significa que você pode renomear uma página de volta para o seu nome anterior se cometer algum engano e que não poderá sobrescrever uma página existente.\n\n<strong>Nota:</strong>\nEsta pode ser uma mudança drástica e inesperada para uma página popular;\ntenha certeza de que compreende as consequências da mudança antes de prosseguir.",
        "movepagetext-noredirectfixer": "Usando o formulário abaixo, você irá alterar o nome de uma página e moverá todo o histórico desta para o nome novo.\nA página antiga será transformada numa página de redirecionamento para a nova.\nVerifique a existência de [[Special:DoubleRedirects|redirecionamentos duplos]] ou [[Special:BrokenRedirects|quebrados]].\nÉ sua responsabilidade certificar-se de que os links continuam a apontar para onde eles deveriam apontar.\n\nNote que a página <strong>não</strong> será movida se já existir uma página com o nome novo, a menos que esta página esteja vazia ou seja uma página de redirecionamento e não tenha um histórico de edições.\nIsto significa que, se você cometer um engano, poderá alterar o nome da página movida de volta para o seu nome original; e que não pode sobrescrever o conteúdo de uma página existente.\n\n<strong>Nota:</strong>\nPara páginas populares, esta operação pode representar uma mudança drástica e inesperada;\ncertifique-se de que compreende as consequências da operação antes de continuar.",
+       "movepagetext-noredirectsupport": "Usar o formulário abaixo irá alterar o nome de uma página, movendo todo o seu historial para o novo nome.\nO utilizador é responsável por verificar que as hiperligações continuam a apontar para onde devem.\n\nNote que a página <strong>não</strong> é movida se já houver uma página no novo título.\nIsto significa que não pode alterar o nome de uma página de volta para o nome original se cometer um erro, e que não pode sobrescrever uma página existente.\n\n<strong>Nota:</strong>\nEsta alteração pode revelar-se drástica e inesperada para páginas que sejam populares;\nverifique que compreende as consequências da operação antes de prosseguir.",
        "movepagetalktext": "Caso marcar esta caixa, a página de discussão associada será automaticamente movida para um novo título, a menos que uma página de discussão com conteúdo já existir lá.\n\n\nNeste caso, você deverá mover ou mesclar a página manualmente se desejar.",
        "moveuserpage-warning": "'''Aviso:''' Você irá mover uma página de usuário. Note que apenas a página será movida, ''sem'' alterar o nome do usuário.",
        "movecategorypage-warning": "<strong>Aviso:</strong> Você está prestes a mover uma página de categoria. Por favor, note que apenas a página será transferida e quaisquer páginas da categoria antiga <em>não</em> serão recategorizadas para o novo.",
        "permanentlink": "Ligação permanente",
        "permanentlink-revid": "ID da revisão",
        "permanentlink-submit": "Ir para revisão",
+       "newsection": "Nova seção",
+       "newsection-page": "Página de destino",
+       "newsection-submit": "Ir para página",
        "dberr-problems": "Desculpe! Este sítio está passando por dificuldades técnicas.",
        "dberr-again": "Experimente esperar alguns minutos e atualizar.",
        "dberr-info": "(Não pode acessar a base de dados: $1)",
index c0e184d..84e16ee 100644 (file)
        "changecontentmodel": "Alterar modelo de conteúdo de uma página",
        "changecontentmodel-legend": "Editar modelo de contéudo",
        "changecontentmodel-title-label": "Título da página",
+       "changecontentmodel-current-label": "Modelo de conteúdo atual:",
        "changecontentmodel-model-label": "Novo modelo de conteúdo",
        "changecontentmodel-reason-label": "Motivo:",
        "changecontentmodel-submit": "Alterar",
        "block-log-flags-angry-autoblock": "ativado o bloqueio automático melhorado",
        "block-log-flags-hiddenname": "nome de utilizador oculto",
        "range_block_disabled": "A funcionalidade de administrador para o bloqueio de gamas de IP está desativada.",
+       "ipb-prevent-user-talk-edit": "Editar a própria página de discussão tem de ser permitido para um bloqueio parcial, a menos que que este inclua uma restrição sobre o espaço nominal Utilizador Discussão.",
        "ipb_expiry_invalid": "Tempo de expiração inválido.",
        "ipb_expiry_old": "O tempo de expiração está no passado.",
        "ipb_expiry_temp": "Bloqueios com nome de utilizador oculto devem ser permanentes.",
        "move-page-legend": "Mover página",
        "movepagetext": "Usando o formulário abaixo pode mover esta página e todo o seu histórico de edições para uma página nova com outro nome.\nA página original será transformada num redirecionamento para a página nova.\nPode corrigir de forma automática os redirecionamentos existentes que apontam para a página original.\nCaso escolha não o fazer, após a operação certifique-se de que dela não resultaram  [[Special:DoubleRedirects|redirecionamentos duplos]] ou [[Special:BrokenRedirects|quebrados]].\nÉ da sua responsabilidade verificar que as hiperligações continuam a apontar para onde é suposto que apontem.\n\nNote que a página <strong>não</strong> será movida se já existir uma página com o novo título, a menos que esta última seja um redirecionamento sem qualquer histórico de edições.\nIsto significa que pode mover uma página de volta para o seu nome original se a tiver movido por engano e que não pode mover uma página para cima de outra já existente.\n\n<strong>Nota:</strong>\nNuma página popular esta operação pode representar uma mudança drástica e inesperada;\ncertifique-se de que compreende as consequências da mudança antes de prosseguir, por favor.",
        "movepagetext-noredirectfixer": "Usando o formulário abaixo, pode alterar o nome de uma página e mover todo o histórico desta para o nome novo.\nA página antiga é transformada numa página de redirecionamento para a nova.\nVerifique a existência de [[Special:DoubleRedirects|redirecionamentos duplos]] ou [[Special:BrokenRedirects|quebrados]].\nÉ da sua responsabilidade certificar-se de que as hiperligações continuam a apontar para onde é suposto que apontem.\n\nNote que a página <strong>não</strong> será movida se já existir uma página com o nome novo, a menos que esta página já existente esteja vazia ou seja uma página de redirecionamento e não tenha um histórico de edições.\nIsto também significa que, se se tiver enganado, pode alterar o nome da página movida de volta para o seu nome original; e que não pode sobrescrever o conteúdo de uma página existente.\n\n<strong>Nota:</strong>\nPara páginas populares, esta operação pode representar uma mudança drástica e inesperada;\ncertifique-se de que compreende as consequências da operação antes de continuar.",
+       "movepagetext-noredirectsupport": "Usar o formulário abaixo irá alterar o nome de uma página, movendo todo o seu historial para o novo nome.\nO utilizador é responsável por verificar que as hiperligações continuam a apontar para onde devem.\n\nNote que a página <strong>não</strong> é movida se já houver uma página no novo título.\nIsto significa que não pode alterar o nome de uma página de volta para o nome original se cometer um erro, e que não pode sobrescrever uma página existente.\n\n<strong>Nota:</strong>\nEsta alteração pode revelar-se drástica e inesperada para páginas que sejam populares;\nverifique que compreende as consequências da operação antes de prosseguir.",
        "movepagetalktext": "Se assinalar esta opção, e existir uma página de discussão associada, ela será automaticamente movida, a não ser que já exista uma página de discussão com o novo título que não esteja vazia.\n\nNeste caso, terá de mover a página de discussão manualmente, ou fundi-la com a existente, se assim desejar.",
        "moveuserpage-warning": "<strong>Aviso:</strong> Está prestes a mover uma página de utilizador. Note que a página será apenas movida, <em>sem</em> alterar o nome do utilizador.",
        "movecategorypage-warning": "<strong>Aviso:</strong> Está prestes a mover uma categoria. Note, por favor, que apenas moverá a página da categoria e que quaisquer páginas que estejam nesta categoria <em>não</em> serão recategorizadas para a nova.",
index 033be0b..9e53809 100644 (file)
        "rcfilters-clear-all-filters": "Title for the button that clears all filters",
        "rcfilters-show-new-changes": "Label for the button to show new changes. Parameters:\n* $1 - timestamp from which new changes are available. It indicates that clicking the refresh link will bring changes newer than (or equal to) this timestamp. It is formatted according to the user's date, time and timezone preferences",
        "rcfilters-search-placeholder": "Placeholder for the filter search input. The first \"Filter\" is a verb, and the second \"filter\" is a noun.",
-       "rcfilters-search-placeholder-mobile": "Placeholder for the filter search input for mobile devices.",
+       "rcfilters-search-placeholder-mobile": "Placeholder for the filter search input for mobile devices.\n{{Identical|Filter}}",
        "rcfilters-invalid-filter": "A label for an invalid filter.",
        "rcfilters-empty-filter": "Placeholder for the filter list when no filters were chosen.",
        "rcfilters-filterlist-title": "Title for the filters list.\n{{Identical|Filter}}",
        "move-page": "Used as page title of [[Special:MovePage]] to move pages.\n\nSee example: [[Special:MovePage/Portal:En]].\n\nParameters:\n* $1 - the name of the page to be moved (without link)\n{{Identical|Move}}",
        "movepage-summary": "{{doc-specialpagesummary|movepage}}",
        "move-page-legend": "Legend of the fieldset around the input form of [[Special:MovePage/testpage]].\n\nSee also:\n* {{msg-mw|newtitle|label for new title}}\n* {{msg-mw|movereason|label for textarea}}\n* {{msg-mw|movetalk|label for checkbox}}\n* {{msg-mw|move-leave-redirect|label for checkbox}}\n* {{msg-mw|fix-double-redirects|label for checkbox}}\n* {{msg-mw|move-subpages|label for checkbox}}\n* {{msg-mw|move-talk-subpages|label for checkbox}}\n* {{msg-mw|move-watch|label for checkbox}}\n{{Identical|Move page}}",
-       "movepagetext": "Introduction shown when moving a page ([[Special:MovePage]]).\n\nSpecial pages mentioned: {{msg-mw|Doubleredirects}}, {{msg-mw|Brokenredirects}}\n\nSee also:\n* {{msg-mw|Movepagetext-noredirectfixer}}",
-       "movepagetext-noredirectfixer": "A variant of the following message ''Movepagetext'' displayed when the automatic redirect fixer is not enabled.\n\nSpecial pages mentioned: {{msg-mw|Doubleredirects}}, {{msg-mw|Brokenredirects}}\n\nSee also:\n* {{msg-mw|Movepagetext}}",
-       "movepagetext-noredirectsupport": "A variant of the following message ''Movepagetext'' displayed when the content model of the page being moved does not support redirects.\n\nSee also:\n* {{msg-mw|Movepagetext}}",
+       "movepagetext": "Introduction shown when moving a page ([[Special:MovePage]]).\n\nSpecial pages mentioned: {{msg-mw|Doubleredirects}}, {{msg-mw|Brokenredirects}}\n\nSee also:\n* {{msg-mw|Movepagetext-noredirectfixer}}\n* {{msg-mw|Movepagetext-noredirectsupport}}",
+       "movepagetext-noredirectfixer": "A variant of the following message ''Movepagetext'' displayed when the automatic redirect fixer is not enabled.\n\nSpecial pages mentioned: {{msg-mw|Doubleredirects}}, {{msg-mw|Brokenredirects}}\n\nSee also:\n* {{msg-mw|Movepagetext}}\n* {{msg-mw|Movepagetext-noredirectsupport}}",
+       "movepagetext-noredirectsupport": "A variant of the following message ''Movepagetext'' displayed when the content model of the page being moved does not support redirects.\n\nSee also:\n* {{msg-mw|Movepagetext}}\n* {{msg-mw|Movepagetext-noredirectfixer}}",
        "movepagetalktext": "Text on the special 'Move page'. This text only appears if the talk page is not empty.",
        "moveuserpage-warning": "Used as warning in [[Special:MovePage]], when moving a user page.",
        "movecategorypage-warning": "Used as warning in [[Special:MovePage]], when moving a category page.",
        "permanentlink-revid": "Label for the field for the revision ID in [[Special:PermanentLink]]\n{{Identical|Revision ID}}",
        "permanentlink-submit": "Submit button on [[Special:PermanentLink]]",
        "permanentlink-summary": "{{doc-specialpagesummary|permanentlink}}",
+       "newsection": "The title of [[Special:NewSection]]",
+       "newsection-page": "Label for the field for the target page in [[Special:NewSection]]",
+       "newsection-submit": "Submit button on [[Special:NewSection]]",
+       "newsection-summary": "{{doc-specialpagessummary|newsection}}",
        "dberr-problems": "This message does not allow any wiki nor html markup.",
        "dberr-again": "This message does not allow any wiki nor html markup.",
        "dberr-info": "This message does not allow any wiki nor html markup. Parameters:\n* $1 - database server name\nSee also:\n* {{msg-mw|Dberr-info-hidden}} - hides database server name",
index 28e4801..d3f8b0a 100644 (file)
        "changecontentmodel": "Редактирование контентной модели страницы",
        "changecontentmodel-legend": "Изменить модель содержимого",
        "changecontentmodel-title-label": "Заголовок страницы",
+       "changecontentmodel-current-label": "Текущая модель содержимого:",
        "changecontentmodel-model-label": "Новая модель содержимого",
        "changecontentmodel-reason-label": "Причина:",
        "changecontentmodel-submit": "Изменить",
        "block-log-flags-angry-autoblock": "включена расширенная автоблокировка",
        "block-log-flags-hiddenname": "имя участника скрыто",
        "range_block_disabled": "Администраторам запрещено блокировать диапазоны.",
+       "ipb-prevent-user-talk-edit": "Редактирование своей страницы обсуждения должно устанавливаться при частичной блокировке, если не включает ограничение на пространство имён Обсуждение участника.",
        "ipb_expiry_invalid": "Недопустимый период действия.",
        "ipb_expiry_old": "Время окончания — в прошлом.",
        "ipb_expiry_temp": "Блокировки с сокрытием имени участника должны быть бессрочными.",
        "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-noredirectsupport": "Воспользовавшись нижеприведённой формой, вы переименуете страницу, одновременно переместив на новое место её журнал изменений.\nВы отвечаете за то, чтобы ссылки продолжали и далее указывать туда, куда предполагалось.\n\nОбратите внимание, что страница <strong>не будет</strong> переименована, если уже существует страница под новым названием.\nЭто означает, что сделав ошибочное переименование, вы можете переименовать страницу обратно в то название, которое у неё только что было, но не можете случайно затереть существующую страницу.\n\n<strong>Примечание:</strong>\nПереименование популярных страниц может привести к масштабным и неожиданным изменениям.\nПожалуйста, прежде чем продолжать, убедитесь, что понимаете все возможные последствия.",
        "movepagetalktext": "Если вы отметите эту галочку, соответствующая страница обсуждения будет также автоматически переименована, если только уже не существует непустая страница обсуждения с таким же названием.\n\nВ этом случае вам нужно будет переименовать или объединить страницы вручную, если это необходимо.",
        "moveuserpage-warning": "<strong>Внимание:</strong> вы собираетесь переименовать страницу участника. Пожалуйста, обратите внимание, что переименована будет только страница, участник <strong>не</strong> будет переименован.",
        "movecategorypage-warning": "<strong>Предупреждение:</strong> Вы собираетесь переименовать страницу категории. Пожалуйста, обратите внимание, что будет переименована только эта страница, а все страницы старой категории <em>не</em> будут перекатегоризованы в новую.",
        "permanentlink": "Постоянная ссылка",
        "permanentlink-revid": "Идентификатор правки",
        "permanentlink-submit": "Перейти к версии",
+       "newsection": "Новый раздел",
+       "newsection-page": "Целевая страница",
+       "newsection-submit": "Перейти к странице",
        "dberr-problems": "Извините! На данном сайте возникли технические трудности.",
        "dberr-again": "Попробуйте обновить страницу через несколько минут.",
        "dberr-info": "(Нет доступа к базе данных: $1)",
index e9f3a4f..7156881 100644 (file)
        "brokenredirectstext": "Custos redirects ligant cun pàginas chi no esistint.",
        "brokenredirects-edit": "càmbia",
        "brokenredirects-delete": "cantzella",
+       "withoutinterwiki": "Pàginas chene ligàmenes de sas limbas",
        "withoutinterwiki-legend": "Prefissu",
        "withoutinterwiki-submit": "Ammustra",
+       "fewestrevisions": "Pàginas cun prus pagas revisiones",
        "nbytes": "$1 {{PLURAL:$1|byte|bytes}}",
        "ncategories": "$1 {{PLURAL:$1|categoria|categorias}}",
        "ninterwikis": "$1 {{PLURAL:$1|interwiki|interwikis}}",
        "usercreated": "{{GENDER:$3|Creadu}} su $1 a is $2",
        "newpages": "Pàginas noas",
        "newpages-username": "Nùmene impitadore:",
+       "ancientpages": "Pàginas prus betzas",
        "move": "Move",
        "movethispage": "Move custa pàgina (càmbia su tìtulu)",
        "unusedimagestext": "Is documentos chi sighint sunt istados carrigados ma non sunt impreados.\nDia podent èssere immàgines impreadas dae àteros giassos cun unu ligòngiu diretu, e tando podent èssere listados inoghe comente usu ativu.",
index 15ee048..c96df3e 100644 (file)
        "sp-contributions-newbies-sub": "نون کاتن لاءِ",
        "sp-contributions-newbies-title": "نون کاتن جي لاءِ واپرائيندڙ جون ڀاڱيداريون",
        "sp-contributions-blocklog": "بندش لاگ",
+       "sp-contributions-suppresslog": "{{GENDER:$1|واپرائيندڙ}} جو دٻايل ڀاڱيداريون",
        "sp-contributions-deleted": "{{GENDER:$1|واپرائيندڙ}} جون ڊاٿل ڀاڱيداريون",
        "sp-contributions-uploads": "چاڙھَ",
        "sp-contributions-logs": "لاگس",
        "badipaddress": "ناقابلڪار آءِ پي پتو",
        "blockipsuccesssub": "بندش ڪامياب ٿي",
        "ipb-blockingself": "اوهان پنهنجي پاڻ تي بندش وجهي رهيا آهيو! ڇا اوهان اهو ڪرڻ پسند ڪندو؟",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}} جي لاءِ ڀاڱيداريون",
        "block-expiry": "اختتام:",
        "unblockip": "واپرائيندڙ کي اڻبندشيو",
        "ipusubmit": "اها بندش هٽايو",
index 06a683a..f5bbc2f 100644 (file)
        "nowiki_sample": "Dodaj neformatirani tekst ovdje",
        "nowiki_tip": "Ignoriraj wiki formatiranje",
        "image_tip": "Uklopljena datoteka/fajl",
-       "media_tip": "Putanja ka multimedijalnoj datoteci/fajlu",
+       "media_tip": "Veza do datoteke/fajla",
        "sig_tip": "Vaš potpis sa trenutnim vremenom",
        "hr_tip": "Horizontalna linija (koristite rijetko)",
        "summary": "Sažetak:",
        "changecontentmodel": "Promijeni model sadržaja stranice",
        "changecontentmodel-legend": "Promijeni model sadržaja",
        "changecontentmodel-title-label": "Naslov stranice",
+       "changecontentmodel-current-label": "Trenutni sadržajni model:",
        "changecontentmodel-model-label": "Novi model sadržaja",
        "changecontentmodel-reason-label": "Razlog:",
        "changecontentmodel-submit": "Smijeni",
        "block-log-flags-angry-autoblock": "omogućeno napredno autoblokiranje",
        "block-log-flags-hiddenname": "korisničko ime sakriveno",
        "range_block_disabled": "Administratorska mogućnost da blokira grupe je isključena.",
+       "ipb-prevent-user-talk-edit": "Uređivanje vlastite razgovorne stranice mora biti dozvoljeno u djelomičnom bloku osim ako ne uključuje ograničenje za razgovornu stranicu.",
        "ipb_expiry_invalid": "Nevaljano vrijeme trajanja.",
        "ipb_expiry_old": "Vrijeme isteka je u prošlosti.",
        "ipb_expiry_temp": "Sakrivene blokade korisničkih imena moraju biti stalne.",
        "permanentlink": "Trajni link",
        "permanentlink-revid": "Naznaka izmjene",
        "permanentlink-submit": "Idi na izmjenu",
+       "newsection": "Novi podnaslov",
+       "newsection-page": "Ciljna stranica",
+       "newsection-submit": "Idi na stranicu",
        "dberr-problems": "Žao nam je! Ova stranica ima tehničke poteškoće.",
        "dberr-again": "Pokušajte pričekati nekoliko minuta i ponovno učitati.",
        "dberr-info": "(Ne mogu pristupiti bazi podataka: $1)",
index e1605fa..906dfc1 100644 (file)
        "history": "História stránky",
        "history_short": "História",
        "history_small": "história",
-       "updatedmarker": "aktualizované od mojej poslednej návštevy",
+       "updatedmarker": "aktualizované od vašej poslednej návštevy",
        "printableversion": "Verzia na tlač",
        "permalink": "Trvalý odkaz",
        "print": "Tlač",
        "post-expand-template-argument-warning": "Upozornenie: Táto stránka obsahuje aspoň jeden argument šalóny, ktorý je príliš veľký.\nTieto argumenty boli vynechané.",
        "post-expand-template-argument-category": "Stránky obsahujúce vynechané argumenty šablón",
        "parser-template-loop-warning": "Zistená slučka v šablónach: [[$1]]",
+       "template-loop-category": "Stránky so slučkami šablón",
+       "template-loop-category-desc": "Stránka obsahuje slučku šablóny, t. j. šablónu, ktorá je vložená sama do seba.",
+       "template-loop-warning": "<strong>Upozornenie:</strong> Táto stránka volá [[:$1]], čo spôsobuje slučku šablóny (nekonečné rekurzívne volanie).",
        "parser-template-recursion-depth-warning": "Bol prekročený limit rekurzie šablón ($1)",
        "language-converter-depth-warning": "Bolo prekročené obmedzenie hĺbky ($1) jazykového konvertora",
        "node-count-exceeded-category": "Stránky s priveľkým počtom uzlov",
        "doubleredirects": "Dvojité presmerovania",
        "doubleredirectstext": "Táto stránka obsahuje zoznam stránok, ktoré presmerovávajú na iné presmerovacie stránky.\nKaždý riadok obsahuje odkaz na prvé a druhé presmerovanie a tiež prvý riadok z textu na ktorý odkazuje druhé presmerovanie, ktoré zvyčajne odkazuje na „skutočný“ cieľ, na ktorý má odkazovať prvé presmerovanie.\n<del>Prečiarknuté</del> položky boli vyriešené.",
        "double-redirect-fixed-move": "Stránka [[$1]] bola presunutá.\nBola automaticky aktualizovaná a teraz presmerováva na [[$2]]",
-       "double-redirect-fixed-maintenance": "V rámci úlohy údržby sa automaticky sa opravuje dvojité presmerovanie z [[$1]] na [[$2]].",
+       "double-redirect-fixed-maintenance": "V rámci úlohy údržby sa automaticky opravuje dvojité presmerovanie z [[$1]] na [[$2]]",
        "double-redirect-fixer": "Korektor presmerovaní",
        "brokenredirects": "Pokazené presmerovania",
        "brokenredirectstext": "Nasledovné presmerovania odkazujú na neexistujúce stránky:",
index cb440a0..9d3b381 100644 (file)
        "rcfilters-savedqueries-new-name-label": "ناں",
        "rcfilters-savedqueries-apply-label": "چھاݨاں بݨاؤ",
        "rcfilters-savedqueries-cancel-label": "منسوخ",
+       "rcfilters-search-placeholder-mobile": "چھاݨے",
        "rcfilters-filterlist-title": "چھاݨے",
        "rcfilters-highlightmenu-title": "رنگ چݨو",
        "rcfilters-filter-bots-label": "ٻوٹ",
        "tags-active-no": "کو",
        "tags-hitcount": "$1 {{PLURAL:$1|تبدیلی|تبدیلیاں}}",
        "diff-form": "فرق",
+       "newsection": "نواں سیکشن",
+       "newsection-submit": "ورقے تے ونڄو",
        "logentry-delete-delete": "$1 {{GENDER:$2|مٹایا ڳیا}} ورقہ $3",
        "logentry-delete-restore": "$1 {{GENDER:$2|بحال تھی ڳیوہے}} page $3 ($4)",
        "revdelete-content-hid": "مواد لکیا",
index 72d7abb..7cfbd84 100644 (file)
        "changecontentmodel": "Spremeni model vsebine strani",
        "changecontentmodel-legend": "Spremeni model vsebine",
        "changecontentmodel-title-label": "Naslov strani",
+       "changecontentmodel-current-label": "Trenutni model vsebine:",
        "changecontentmodel-model-label": "Novi model vsebine",
        "changecontentmodel-reason-label": "Razlog:",
        "changecontentmodel-submit": "Spremeni",
        "block-log-flags-angry-autoblock": "okrepljeno avtoblokada omogočena",
        "block-log-flags-hiddenname": "uporabniško ime skrito",
        "range_block_disabled": "Možnost administratorjev za blokiranje urejanja IP-razponom je onemogočena.",
+       "ipb-prevent-user-talk-edit": "Urejanje lastne pogovorne strani mora biti pri delni blokadi dovoljeno, razen če vključuje omejitve v imenskem prostoru Uporabniški pogovor.",
        "ipb_expiry_invalid": "Neveljaven čas preteka",
        "ipb_expiry_old": "Čas izteka je v preteklosti.",
        "ipb_expiry_temp": "Blokade skritih uporabniških imen morajo biti trajne.",
        "move-page-legend": "Prestavitev strani",
        "movepagetext": "Z naslednjim obrazcem lahko stran preimenujete in hkrati prestavite tudi vso njeno zgodovino.\nDosedanja stran se bo spremenila v preusmeritev na prihodnje mesto.\nSamodejno lahko posodobite preusmeritve, ki kažejo na dosedanji naslov.\nČe se za to ne odločite, ne pozabite preveriti vseh [[Special:DoubleRedirects|dvojnih]] ali [[Special:BrokenRedirects|pretrganih preusmeritev]].\nOdgovorni ste, da bodo povezave še naprej kazale na prava mesta.\n\nKjer stran z izbranim novim imenom že obstaja, dejanje <strong>ne</strong> bo izvedeno, razen če je sedanja stran preusmeritev in brez zgodovine urejanj.\nTo pomeni, da lahko, če se zmotite, strani vrnete prvotno ime, ne morete pa prepisati že obstoječe strani.\n\n<strong>Opomba:</strong>\nPrestavitev strani je lahko za priljubljeno stran velika in nepričakovana sprememba, zato pred izbiro ukaza dobro premislite.",
        "movepagetext-noredirectfixer": "Z uporabo spodnjega obrazca lahko preimenujete stran tako, da prestavite vso njeno zgodovino na novo ime.\nStar naslov bo postal preusmeritvena stran na nov naslov.\nNe pozabite preveriti [[Special:DoubleRedirects|dvojnih]] ali [[Special:BrokenRedirects|pretrganih preusmeritev]].\nVi ste odgovorni, da vse povezave še naprej kažejo tja, kamor naj bi.\n\nUpoštevajte, da stran <strong>ne</strong> bo prestavljena, če že obstaja stran z novim naslovom, razen če je preusmeritev brez pretekle zgodovine urejanj.\nTo pomeni, da lahko stran preimenujete nazaj, če ste naredili napako, vendar ne morete prepisati obstoječe strani.\n\n<strong>Opomba:</strong>\nTo je lahko velika in nepričakovana sprememba za priljubljeno stran;\nprosimo, pred nadaljevanjem se prepričajte, da razumete posledice tega dejanja.",
+       "movepagetext-noredirectsupport": "Z naslednjim obrazcem lahko stran preimenujete in hkrati prestavite tudi vso njeno zgodovino.\nOdgovorni ste, da bodo povezave še naprej kazale na prava mesta.\n\nKjer stran z izbranim novim imenom že obstaja, dejanje <strong>ne</strong> bo izvedeno.\nTo pomeni, da lahko, če se zmotite, strani vrnete prvotno ime, ne morete pa prepisati že obstoječe strani.\n\n<strong>Opomba:</strong>\nPrestavitev strani je lahko za priljubljeno stran velika in nepričakovana sprememba, zato pred izbiro ukaza dobro premislite.",
        "movepagetalktext": "Če označite to polje, bomo pripadajočo pogovorno stran samodejno prestavili na nov naslov, razen kadar tam že obstaja neprazna pogovorna stran.\n\nČe je tako, boste morali pogovorno stran, če želite, prestaviti ali združiti ročno.",
        "moveuserpage-warning": "'''Opozorilo:''' Premikate uporabniško stran. To pomeni, da bo premaknjena samo stran in uporabnik ''ne'' bo preimenovan.",
        "movecategorypage-warning": "<strong>Opozorilo:</strong> Prestavili boste stran kategorije. Pomnite, da boste prestavili samo stran; vse strani v stari kategoriji <em>ne</em> bomo prekategorizirali v novo kategorijo.",
        "permanentlink": "Trajna povezava",
        "permanentlink-revid": "ID redakcije",
        "permanentlink-submit": "Pojdi na redakcijo",
+       "newsection": "Nov razdelek",
+       "newsection-page": "Ciljna stran",
+       "newsection-submit": "Pojdi na stran",
        "dberr-problems": "Oprostite! Ta stran se sooča s tehničnimi težavami.",
        "dberr-again": "Poskusite počakati nekaj minut in ponovno naložite stran.",
        "dberr-info": "(Ne morem dostopati do zbirke podatkov: $1)",
index ee9fcad..702cd86 100644 (file)
        "rcfilters-clear-all-filters": "Rensa alla filter",
        "rcfilters-show-new-changes": "Visa de nyaste ändringarna sedan $1",
        "rcfilters-search-placeholder": "Filtrera senaste ändringar (använd menyn eller sök efter filternamn)",
+       "rcfilters-search-placeholder-mobile": "Filter",
        "rcfilters-invalid-filter": "Ogiltigt filter",
        "rcfilters-empty-filter": "Inga aktiva filter. Alla bidrag visas.",
        "rcfilters-filterlist-title": "Filter",
        "changecontentmodel": "Ändra innehållsmodell för en sida",
        "changecontentmodel-legend": "Ändra innehållsmodell",
        "changecontentmodel-title-label": "Sidtitel",
+       "changecontentmodel-current-label": "Nuvarande innehållsmodell:",
        "changecontentmodel-model-label": "Ny innehållsmodell",
        "changecontentmodel-reason-label": "Orsak:",
        "changecontentmodel-submit": "Ändra",
        "permanentlink": "Permanent länk",
        "permanentlink-revid": "Sidversions-ID",
        "permanentlink-submit": "Gå till sidversion",
+       "newsection": "Nytt avsnitt",
+       "newsection-page": "Målsida",
+       "newsection-submit": "Gå till sida",
        "dberr-problems": "Ursäkta! Denna sajt har just nu tekniska problem.",
        "dberr-again": "Pröva med att vänta några minuter och ladda om.",
        "dberr-info": "(Kan inte komma åt databasen: $1)",
index 41436b8..26fa5e9 100644 (file)
        "category-file-count-limited": "{{PLURAL:$1|парвандаи|$1 парвандаҳои}} зерин дар гурӯҳи феълӣ қарор {{PLURAL:дорад|доранд}}.",
        "listingcontinuesabbrev": "идома",
        "index-category": "Саҳифаҳои намояшуда",
-       "noindex-category": "СаҳиÑ\84аҳои Ð½Ð°Ð¼Ð¾Ð¸Ñ\8fнаÑ\88Ñ\83да",
+       "noindex-category": "СаҳиÑ\84аҳои Ð±ÐµÐ¸Ð½Ð´ÐµÐºÑ\81",
        "broken-file-category": "Саҳифаҳои дорои пайванди шикаста ба парванда",
        "about": "Дар бораи",
        "article": "Саҳифаи муҳтаво",
        "talk": "Баҳс",
        "views": "Назарот",
        "toolbox": "Абзорҳо",
-       "tool-link-userrights-readonly": "Дидани гурӯҳҳои корбар",
+       "tool-link-userrights-readonly": "Дидани гурӯҳҳои {{GENDER:$1|корбар}}",
        "tool-link-emailuser": "Ба ин {{GENDER:$1|корбар}} паём фиристодан",
        "imagepage": "Намоиши саҳифаи парванда",
        "mediawikipage": "Намоиши саҳифаи акс",
        "nocookiesnew": "Ҳисоби корбарӣ эҷод шуд, аммо шумо вориди сомона нашудаед. {{SITENAME}} барои вуруд кардани корбарон ба сомона аз кукиҳо (cookies) истифода мекунад. Шумо бояд кукиҳоро фаъол кунед. Лутфан кукиҳоро фаъол кунед, баъдан ба систем бо номи корбарии ҷадид ва калимаи убуратон вуруд кунед.",
        "nocookieslogin": "{{SITENAME}} барои ворид кардани корбарон ба систем аз кукиҳо (cookies) истифода мекунад. Кукиҳо фаъол нестанд. Лутфан кукиҳоро фаъол карда бори дигар бисанҷед.",
        "nocookiesfornew": "Ҳисоби корбарӣ сохта нашуд, чун мо манбаъи онро тасдиқ карда натавонистем.\nМутмаин бошед, ки кукиҳои мурургар фаъоланд, ин саҳифро аз нав кушода бори дигар саъй кунед.",
+       "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "Номи корбари дурустеро шумо пешниҳод накардед.",
        "loginsuccesstitle": "Ворид шудед",
        "loginsuccess": "'''Шумо акнун ба Википедия ҳамчун \"$1\". вуруд кардед'''",
        "resetpass_submit": "Калимаи убурро танзим карда ба систем вуруд кунед",
        "changepassword-success": "Гузарвожаи шумо тағйир дода шуд!",
        "botpasswords": "Гузарвожаҳои бот",
+       "botpasswords-createnew": "Эҷоди гузарвожаи нави бот",
        "botpasswords-label-appid": "Номи бот:",
        "botpasswords-label-create": "Эҷод",
        "botpasswords-label-update": "Азнав бор кардан",
        "botpasswords-label-cancel": "Пӯшидан",
        "botpasswords-label-delete": "Ҳазф намудан",
+       "botpasswords-bad-appid": "Ботии \"$1\" ёфта нашуд.",
+       "botpasswords-deleted-title": "Гузарвожаи бот ҳазф шуда аст",
        "resetpass_forbidden": "Гузарвожаҳоро наметавон тағйир дод",
        "resetpass-no-info": "Барои дастрасии мустақим ба ин саҳифа шумо бояд ба систем ворид шуда бошед.",
        "resetpass-submit-loggedin": "Тағйири гузарвожа",
        "group-autoconfirmed-member": "{{GENDER:$1|корбари таъйидшуда}}",
        "group-bot-member": "{{GENDER:$1|бот}}",
        "group-sysop-member": "{{GENDER:$1|мудир}}",
+       "group-interface-admin-member": "{{GENDER:$1|мудири интерфейс}}",
        "group-bureaucrat-member": "{{GENDER:$1|девонсолор}}",
        "group-suppress-member": "{{GENDER:$1|пинҳон}}",
        "grouppage-user": "{{ns:project}}:Корбарон",
        "recentchanges-label-unpatrolled": "Ин вироиш ҳанӯз гаштзанӣ нашудааст",
        "recentchanges-label-plusminus": "Ҳаҷми саҳифа ба андозаи ин миқдор байт тағйир ёфтааст",
        "recentchanges-legend-heading": "Ихтисораҳо:",
-       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ҳамÑ\87Ñ\83нон [[Special:NewPages|Ñ\84еҳÑ\80иÑ\81Ñ\82и Ñ\81аҳиÑ\84аҳои Ð½Ð°Ð²Ñ\80о Ð±Ð¸Ð³ед]])",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ҳамÑ\87Ñ\83нон [[Special:NewPages|Ñ\84еҳÑ\80иÑ\81Ñ\82и Ñ\81аҳиÑ\84аҳои Ð½Ð°Ð²Ñ\80о Ð±Ð¸Ð½ед]])",
        "recentchanges-submit": "Нишон додан",
        "rcfilters-tag-remove": "'$1'ро ҳазф намудан",
        "rcfilters-legend-heading": "<strong>Феҳристи ихтисорот:</strong>",
        "filehist-comment": "Тавзеҳ",
        "imagelinks": "Истифодаи парванда",
        "linkstoimage": "{{PLURAL:$1|Саҳифаҳои|$1 Саҳифаи}} ин аксро истифода мебаранд:",
-       "nolinkstoimage": "Ҳеҷ саҳифае ба ин акс пайванд надорад.",
+       "nolinkstoimage": "Ин акс дар ҳеҷ саҳифа истифода намешавад.",
        "sharedupload": "Ин парванда аз $1 мебошад ва шояд аз тарафи дигар лоиҳаҳо истифода шавад.",
        "sharedupload-desc-here": "Ин файл аз $1 ва дар дигар лоиҳаҳо метавонад истифода шавад. Тафсилоти ин файл [$2 саҳифаи тафсилоти файл] дар зер нишон дода шудааст.",
        "uploadnewversion-linktext": "Бор кардани нусхаи ҷадидӣ ин парванда",
        "booksources-search": "Ҷустуҷӯ",
        "booksources-text": "Дер зер феҳристи пайвандҳо ба сомонаҳое, ки китобҳои нав ва кӯҳна мефурӯшанд, оварда шудааст. Мумкин аст, иттилооти бештарро дар бораи китобҳои ҷустуҷӯ кардаатон дошта бошанд:",
        "specialloguserlabel": "Иҷрокунанда:",
-       "speciallogtitlelabel": "Ҳадаф (унвон ё корбар):",
+       "speciallogtitlelabel": "Ҳадаф (унвон ё {{ns:user}}:номи корбар):",
        "log": "Гузоришҳо",
        "logeventslist-submit": "Намоиш",
        "all-logs-page": "Ҳамаи сабтҳои умумӣ",
        "emailccsubject": "Нусхаи номаи шумо ба $1: $2",
        "emailsent": "Почтаи электронӣ фиристода шуд",
        "emailsenttext": "Номаи почтаи электронии шумо фиристода шуд.",
+       "usermessage-editor": "Пайёмрасони системавӣ",
        "usermessage-template": "MediaWiki:UserMessage",
        "watchlist": "Феҳристи пайгирӣ",
        "mywatchlist": "Феҳристи пайгириҳо",
        "whatlinkshere-prev": "{{PLURAL:$1|қаблӣ|$1-тои қаблӣ}}",
        "whatlinkshere-next": "{{PLURAL:$1|баъдӣ|баъдӣ $1}}",
        "whatlinkshere-links": "← пайвандҳо",
-       "whatlinkshere-hideredirs": "$1 Ñ\82аÒ\93йиÑ\80и Ð¼Ð°Ñ\81иÑ\80",
-       "whatlinkshere-hidetrans": "$1 трансгунҷоишҳо",
-       "whatlinkshere-hidelinks": "$1 пайвандҳо",
-       "whatlinkshere-hideimages": "$1 пайвандҳои парванда",
+       "whatlinkshere-hideredirs": "$1 Ñ\81аҳиÑ\84аи Ñ\80авонакÑ\83нӣ",
+       "whatlinkshere-hidetrans": "$1 трансғунҷоишҳо",
+       "whatlinkshere-hidelinks": "$1 пайванд",
+       "whatlinkshere-hideimages": "$1 пайвандҳои файл",
        "whatlinkshere-filters": "Филтрҳо",
        "whatlinkshere-submit": "Рав",
        "block": "Бастани корбар",
        "importlogpagetext": "Ворид кардани саҳифаҳо бо ҳамроҳи таърихчаи вироиши онҳо аз викиҳои дигар.",
        "import-logentry-upload-detail": "$1 {{PLURAL:$1|нусха|нусха}}",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|нусха|нусха}} аз $2",
-       "tooltip-pt-userpage": "Саҳифаи корбарии шумо",
+       "tooltip-pt-userpage": "{{GENDER:|Саҳифаи корбарии шумо}}",
        "tooltip-pt-anonuserpage": "Саҳифаи корбари IP, ки бо он шумо вироиш мекунед",
        "tooltip-pt-mytalk": "Саҳифаи баҳси {{GENDER:|Шумо}}",
        "tooltip-pt-anontalk": "Баҳси пиромуни вироишҳо аз ин нишонаи IP",
        "tooltip-pt-mycontris": "Феҳристи ҳиссагузориҳои {{GENDER:|Шумо}}",
        "tooltip-pt-login": "Тавсия мешавад ки ба система ворид шавед, лекин маҷбурӣ нест.",
        "tooltip-pt-logout": "Хуруҷ аз систем",
+       "tooltip-pt-createaccount": "Мо ба шумо пешниҳод мекунем, то ҳисоб эҷод намоед ва ба система вортд шавед, ин ҳатмӣ нест",
        "tooltip-ca-talk": "Баҳси матни таркибии ин саҳифа",
        "tooltip-ca-edit": "Вироиши ин саҳифа",
        "tooltip-ca-addsection": "Илова кардани бахши ҷадид",
        "spambot_username": "Спамтозакуни МедиаВики",
        "spam_reverting": "Вогардони ба охирин нусхае, ки пайванде ба $1 надорад",
        "spam_blanking": "Ҳамаи нусхаҳои пайвандҳо $1 доштан, дар ҳоли холӣ кардан",
+       "pageinfo-title": "Иттилооти \"$1\"",
+       "pageinfo-header-basic": "Иттилои одӣ",
+       "pageinfo-header-edits": "Вироиши таърих",
+       "pageinfo-header-restrictions": "Ҳифозати саҳ.",
+       "pageinfo-header-properties": "Хусусиятҳои саҳ.",
        "pageinfo-display-title": "Сарлавҳаи намоишӣ",
        "pageinfo-default-sort": "Тартиб кардан ба унвони калидӣ (пешфарз)",
        "pageinfo-length": "Дарозии саҳифа (дар байт)",
        "pageinfo-content-model": "Навъи таркибии саҳифа",
        "pageinfo-redirects-name": "Шумораи равонакуниҳо ба ин саҳифа",
        "pageinfo-redirects-value": "$1-то",
+       "pageinfo-firstuser": "Эчодгари саҳифа",
+       "pageinfo-lastuser": "Охирин вироишгар",
+       "pageinfo-lasttime": "Санаи вироиши охирин",
+       "pageinfo-edits": "Шумораи ҳамаи вироишот",
+       "pageinfo-magic-words": "{{PLURAL:$1|Калимаи|Калимаҳои}} сеҳрнок ($1)",
        "pageinfo-hidden-categories": "Пинҳон {{PLURAL:$1|гурӯҳ|гурӯҳҳо}} ($1)",
        "pageinfo-toolboxlink": "Иттилооти саҳифа",
        "pageinfo-contentpage-yes": "Бале",
        "iranian-calendar-m10": "Ҷадӣ",
        "iranian-calendar-m11": "Далв",
        "iranian-calendar-m12": "Ҳут",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|баҳс]])",
        "version": "Нусхаи Медиавики",
        "version-extensions": "Афзунаҳои насбшуда",
        "version-specialpages": "Саҳифаҳои вижа",
        "version-software-product": "Маҳсул",
        "version-software-version": "Нусха",
        "version-libraries-description": "Тавзеҳот",
+       "redirect-submit": "Бирав",
+       "redirect-value": "Қимат:",
+       "redirect-user": "Идентификатори Корбар",
        "redirect-page": "Рамзи саҳифа",
+       "redirect-file": "Номи парванда",
        "fileduplicatesearch": "Ҷустуҷӯ барои парвандаҳои такрорӣ",
        "fileduplicatesearch-summary": "Ҷустуҷӯ барои парвандаҳои такрорӣ бар асоси миқдори дар ҳам шудаи онҳо сурат мегирад.",
        "fileduplicatesearch-filename": "Номи парванда:",
        "specialpages-group-developer": "Абзорҳои тавсиядиҳандагон",
        "blankpage": "Саҳифаи холӣ",
        "tag-filter": "Филтри [[Special:Tags|барчасбҳо]]:",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Барчасб|Барчасбҳо}}]]: $2",
        "tags-description-header": "Тавзеҳоти пурраи маънияш",
        "tags-active-header": "Фаъол?",
        "tags-active-yes": "Бале",
+       "tags-active-no": "На",
        "tags-edit": "вироиш",
+       "tags-hitcount": "$1 {{PLURAL:$1|тағйир|тағйирот}}",
+       "newsection": "Ҷузъи нав",
+       "newsection-submit": "Ба саҳифа рафтан",
        "dberr-info": "(Имкони барқарори иртибот бо пойгоҳи дода вуҷуд надорад: $1)",
        "htmlform-invalid-input": "Бахши аз вуруди шумо мушкили дорад",
        "htmlform-select-badoption": "Миқдори воридшуда як гузинаи қобили қабул нест.",
        "logentry-delete-restore": "$1 саҳифаро $3 ($4) {{GENDER:$2|барқарор намуд}}",
        "revdelete-restricted": "маҳдудиятҳо ба мудирон амалӣ шуданд",
        "revdelete-unrestricted": "маҳдудиятҳо аз мудирон бардошта шуданд",
+       "logentry-newusers-create": "Ҳисоби корбарии $1 {{GENDER:$2|эҷод шуд}}",
        "rightsnone": "(ҳеҷ)",
        "feedback-cancel": "Лағв",
        "feedback-close": "Анҷом шуд.",
        "feedback-subject": "Мавзӯъ:",
        "feedback-submit": "Ирсол",
        "searchsuggest-search": "Ҷустуҷӯ дар {{SITENAME}}",
+       "duration-days": "$1 {{PLURAL:$1|рӯз}}",
        "expandtemplates": "Бастдодани шаблонҳо",
        "expand_templates_intro": "Ин саҳифаи вижа матнеро дарёфт карда ва тамоми шаблонҳои ба кор рафта дар онро ба таври бозгаште баст медиҳад. Ҳамчунин тобеҳои таҷзеҳ\n<nowiki>{{</nowiki>#language:...}}, ва мутағйирҳое чун\n<nowiki>{{</nowiki>CURRENTDAY}}&mdash;ро ҳам баст медиҳад – дар воқеъ тақрибан ҳар чиро ки дохили ду акулот бошад.\nИн кор бо садо задани марҳилаи таҷзеҳи марбут дар худи МедиаВики сурат мегирад.",
        "expand_templates_title": "Унвони мавзӯъ, барои {{FULLPAGENAME}} ва ғайра.:",
index 4c6d5df..b83bc05 100644 (file)
@@ -25,7 +25,8 @@
                        "LR Guanzon",
                        "Fitoschido",
                        "Vlad5250",
-                       "Shirayuki"
+                       "Shirayuki",
+                       "Brazal.dang"
                ]
        },
        "tog-underline": "Pagsasalungguhit ng kawing:",
        "returnto": "Bumalik sa $1.",
        "tagline": "Mula sa {{SITENAME}}",
        "help": "Tulong",
+       "help-mediawiki": "Tulong patungkol sa MediaWiki",
        "search": "Paghahanap",
        "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Headings that will be ignored by search.\n# Changes to this take effect as soon as the page with the heading is indexed.\n# You can force page reindexing by doing a null edit.\n# The syntax is as follows:\n#   * Everything from a \"#\" character to the end of the line is a comment.\n#   * Every non-blank line is the exact title to ignore, case and everything.\nMga sanggunian\nMga panlabas na kawing\nMakita rin\n #</pre> <!-- leave this line exactly as it is -->",
        "searchbutton": "Maghanap",
        "badarticleerror": "Hindi maisasagawa ang gawaing ito sa pahinang ito.",
        "cannotdelete": "Hindi mabura ang pahina o talaksang \"$1\".\nMaaaring ibinura na ito ng iba.",
        "cannotdelete-title": "Hindi maibura ang pahinang \"$1\"",
+       "delete-scheduled": "Ang pahinang \"$1\" ay nakatakda nang tanggalin.\nMaging mapagpasensiya.",
        "delete-hook-aborted": "Pinigil ng sungkit ang pagbura.\nWalang ibinigay na paliwanag.",
        "no-null-revision": "Hindi makalikha ng bagong \"null\" para sa pahina na \"$1\"",
        "badtitle": "Hindi kanais-nais na pamagat",
        "cascadeprotected": "Nakasanggalang ang pahinang ito mula sa mga pagbabago, dahil kabilang ito sa sumusunod na {{PLURAL:$1|pahinang|mga pahinang}} nakasanggalang sa pamamagitan ng binuhay na opsyong \"nahuhulog\" (kumakaskada):\n$2",
        "namespaceprotected": "Wala kang pahintulot na magbago ng mga pahinang nasa ngalan-espasyong '''$1'''.",
        "customcssprotected": "Wala kang pahintulot na baguhin ang pahina ng CSS na ito, dahil naglalaman ito ng mga katakdaang pansarili ng ibang tagagamit.",
+       "customjsonprotected": "Wala kang pahintulot na baguhin ang pahina ng JSON na ito, dahil naglalaman ito ng mga katakdaang pansarili ng ibang tagagamit.",
        "customjsprotected": "Wala kang pahintulot na baguhin ang pahina ng JavaScript na ito, dahil naglalaman ito ng mga katakdaang pansarili ng ibang tagagamit.",
+       "sitecssprotected": "Wala kang pahintulot na baguhin an CSS na pahina na to dahil maaaring makaapekto sa ibang bisita.",
        "mycustomcssprotected": "Wala kang pahintulot na baguhin itong pahinang CSS.",
        "mycustomjsprotected": "Wala kang pahintulot na baguhin itong pahinang JavaScript.",
        "myprivateinfoprotected": "Wala kang pahintulot na baguhin ang iyong pribadong impormasyon.",
        "rcfilters-savedqueries-cancel-label": "Balewalain",
        "rcfilters-restore-default-filters": "Ibalik ang mga napagkaukulang 'filters'",
        "rcfilters-clear-all-filters": "Burahin lahat ng mga 'filters'",
+       "rcfilters-search-placeholder-mobile": "Pansala",
        "rcfilters-empty-filter": "Walang aktibong panangga. Lahat ay ipinamalas.",
        "rcfilters-view-tags": "Mga minarkahang pagbabago",
        "rcnotefrom": "Nasa ibaba ang {{PLURAL:$5|pagbabago|mga pagbabago}} mula noong <strong>$3, $4</strong> (ipinapakita hanggang <strong>$1</strong>).",
        "randomrootpage": "Alin mang pinag-ugatang/pinagmulang pahina",
        "authprovider-resetpass-skip-label": "Laktawan",
        "edit-error-long": "Mga kamalian:",
+       "mute-preferences": "Tanggalin ang mga nais",
        "gotointerwiki-invalid": "Di-wasto ang tinukoy na pamagat."
 }
index f091736..b5c9119 100644 (file)
@@ -39,7 +39,7 @@
        "tog-hidecategorization": "Битләрнең төркемләшүе яшерелсен",
        "tog-extendwatchlist": "Соңгыларын гына түгел, ә барлык үзгәрешләрне эченә алган, киңәйтелгән күзәтү исемлеге",
        "tog-usenewrc": "Соңгы үзгәртүләрдә һәм күзәтү исемлегендә үзгәрешләрне төркемләргә",
-       "tog-numberheadings": "Ð\90Ñ\82амалаÑ\80 Ð°Ð²Ñ\82омаÑ\82 Ñ\80Ó\99веÑ\88Ñ\82Ó\99 Ð½Ð¾Ð¼ÐµÑ\80ланÑ\81Ñ\8bн",
+       "tog-numberheadings": "Ð\91аÑ\88иÑ\81емлÓ\99Ñ\80не Ð°Ð²Ñ\82ономеÑ\80лаÑ\83",
        "tog-editondblclick": "Битләргә ике чирттерү белән үзгәртү бите ачылсын",
        "tog-editsectiononrightclick": "Бүлек исеменә тычканның уң чирттермәсе белән төрткәч үзгәртү",
        "tog-watchcreations": "Мин төзегән битләр һәм төягән файллар күзәтү исемлегемә өстәлсен",
@@ -64,7 +64,8 @@
        "tog-watchlisthidebots": "Күзәтү исемлегемдә бот төзәтмәләре яшерелсен",
        "tog-watchlisthideminor": "Күзәтү исемлегемдә кече төзәтмәләр яшерелсен",
        "tog-watchlisthideliu": "Күзәтү исемлегемдә кергән кулланучыларның төзәтмәләре яшерелсен",
-       "tog-watchlistreloadautomatically": "Фильтр алмашкан очракта күзәтү исемлеген автоматик рәвештә яңартырга (JavaScript кирәк)",
+       "tog-watchlistreloadautomatically": "Сөзгеч һәр үзгәртүедән соң күзәтү исемлеген автояңартырга (JavaScript кирәк)",
+       "tog-watchlistunwatchlinks": "Үзгәрешләр белән күзәтелгән битләр өчен күзәтмәү/күзәтү ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) туры тамгаларын өстәү (функцияләрен күчерү өчен JavaScript кирәк)",
        "tog-watchlisthideanons": "Күзәтү исемлегендә аноним кулланучыларның төзәтмәләре яшерелсен",
        "tog-watchlisthidepatrolled": "Күзәтү исемлегемдә тикшерелгән төзәтмәләр яшерелсен",
        "tog-watchlisthidecategorization": "Битләрне төркемләшү яшерелсен",
        "tog-norollbackdiff": "Кире кайтару ясагач юрамалар аермасы күрсәтелмәсен",
        "tog-useeditwarning": "Битне сакламыйча киткәндә мине кисәтергә",
        "tog-prefershttps": "Системага кергәндә һәрвакыт саклаулы тоташу кулланылсын",
+       "tog-showrollbackconfirmation": "Кире кайтару сылтамасына чирткәндә раслау соравын күрсәтергә",
        "underline-always": "Һәрвакыт",
-       "underline-never": "Бервакытта да",
+       "underline-never": "Һичкайчан",
        "underline-default": "Браузер көйләнмәләре кулланылсын",
-       "editfont-style": "Үзгәртү өлкәсендәге шрифт тибы:",
-       "editfont-monospace": "Ð\9aиңÓ\99йÑ\82елгÓ\99н шрифт",
+       "editfont-style": "Үзгәртү өлкәсендәге шрифт төре:",
+       "editfont-monospace": "Тиң ÐºÐ¸Ò£Ð»ÐµÐºÐ»Ðµ шрифт",
        "editfont-sansserif": "Киртексез шрифт",
        "editfont-serif": "Киртекле шрифт",
-       "sunday": "Якшәмбе",
-       "monday": "Ð\94үшәмбе",
-       "tuesday": "Сишәмбе",
-       "wednesday": "Чәршәмбе",
-       "thursday": "Ð\9fәнҗешәмбе",
-       "friday": "Ò\96омга",
-       "saturday": "Шимбә",
+       "sunday": "якшәмбе",
+       "monday": "дүшәмбе",
+       "tuesday": "сишәмбе",
+       "wednesday": "чәршәмбе",
+       "thursday": "пәнҗешәмбе",
+       "friday": "Ò\97омга",
+       "saturday": "шимбә",
        "sun": "Якш",
        "mon": "Дүш",
        "tue": "Сиш",
        "category_header": "«$1» төркемендәге битләр",
        "subcategories": "Төркемчәләр",
        "category-media-header": "«$1» төркемендәге файллар",
-       "category-empty": "<em>Бу төркем әлегә буш.</em>",
+       "category-empty": "<em>Бу төркем хәзерге вакытта буш.</em>",
        "hidden-categories": "{{PLURAL:$1|1=Яшерен төркем|Яшерен төркемнәр}}",
        "hidden-category-category": "Яшерен төркемнәр",
-       "category-subcat-count": "{{PLURAL:$2|1=Әлеге төркем бары тик бу астөркемне генә үз өченә ала.|Әлеге төркемдә $2 астөркемдән бары тик $1 {{PLURAL:$1|астөркем}} генә күрсәтелгән.}}",
-       "category-subcat-count-limited": "Бу төркемдә {{PLURAL:$1|$1 төркемчә}}.",
-       "category-article-count": "{{PLURAL:$2|1=Әлеге төркемдә бер генә бит бар.|Әлеге төркемнең $2 {{PLURAL:$2|битеннән}} {{PLURAL:$1|$1 бит}} кенә курсәтелгән.}}",
-       "category-article-count-limited": "Бу төркемдә {{PLURAL:$1|$1 бит|1=бары тик бер бит}}.",
-       "category-file-count": "{{PLURAL:$2|1=Әлеге төркемдә бер генә файл бар.|Әлеге төркемдә $2 {{PLURAL:$2|файлдан}} {{PLURAL:$1|$1 файл}} гына курсәтелгән.}}",
-       "category-file-count-limited": "Бу төркемдә {{PLURAL:$1|$1 файл|1=бары тик бер файл}}.",
+       "category-subcat-count": "{{PLURAL:$2|Бу төркемдә тик түбәндәге төркемчә генә бар.|Бу төркемдә барлыгы $2 төркемчәдән түбәндәге {{PLURAL:$1|бер төркемчә генә|$1 төркемчә}} күрсәтелә.}}",
+       "category-subcat-count-limited": "Бу төркемдә түбәндәге {{PLURAL:$1|бер төркемчә генә|$1 төркемчә}} бар.",
+       "category-article-count": "{{PLURAL:$2|1=Бу төркемдә түбәндәге бер генә бит бар.|Бу төркемдәге барлыгы $2 биттән түбәндә {{PLURAL:$1|бер генә бит|$1 бит}} күрсәтелгән.}}",
+       "category-article-count-limited": "Бу төркемдә түбәндәге {{PLURAL:$1|1=бер генә бит|$1 бит}} бар.",
+       "category-file-count": "{{PLURAL:$2|Бу төркемдә түбәндәге бер генә файл бар.|Бу төркемдәге барлыгы $2 файлдан түбәндә  {{PLURAL:$1|бер генә файл|$1 файл}} күрсәтелгән.}}",
+       "category-file-count-limited": "Бу төркемдә түбәндәге {{PLURAL:$|1=бер генә файл|$1 файл}} бар.",
        "listingcontinuesabbrev": "дәвамы",
        "index-category": "Индексланган битләр",
-       "noindex-category": "Ð\91илгелÓ\99нмÓ\99Ò¯Ñ\87е битләр",
+       "noindex-category": "Ð\98ндекÑ\81ланмаган битләр",
        "broken-file-category": "Файлларга эшләми торган сылтамалар булган битләр",
+       "categoryviewer-pagedlinks": "($1) ($2)",
+       "category-header-numerals": "$1–$2",
        "about": "Тасвирлама",
        "article": "Мәкалә",
        "newwindow": "(яңа тәрәзәдә ачыла)",
-       "cancel": "Ð\91аÑ\88 Ñ\82аÑ\80Ñ\82у",
+       "cancel": "Ð\9aиÑ\80е Ð°Ð»у",
        "moredotdotdot": "Дәвамы…",
        "morenotlisted": "Исемлек тулы булмаска мөмкин.",
        "mypage": "Бит",
        "history_short": "Тарих",
        "history_small": "тарих",
        "updatedmarker": "соңгы керүегездән соң яңартылган",
-       "printableversion": "Басма юрама",
+       "printableversion": "Басма версия",
        "permalink": "Даими сылтама",
        "print": "Бастыру",
        "view": "Карау",
        "ok": "Ярар",
        "pagetitle": "$1 — {{SITENAME}}",
        "pagetitle-view-mainpage": "{{SITENAME}}",
-       "retrievedfrom": "Чыганагы — \"$1\"",
+       "backlinksubtitle": "← $1",
+       "retrievedfrom": "Чыганагы — $1",
        "youhavenewmessages": "{{PLURAL:$3|Сездә}} $1 бар ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Сезгә}} {{PLURAL:$3|$3 кулланучыдан}} $1 килде ($2).",
        "youhavenewmessagesmanyusers": "Сез бик күп кулланучыдан $1 алдыгыз ($2).",
        "showtoc": "күрсәтү",
        "hidetoc": "яшерү",
        "collapsible-collapse": "төрү",
-       "collapsible-expand": "Ð\90чу",
+       "collapsible-expand": "ачу",
        "confirmable-confirm": "{{GENDER:$1|Шулаймы}}?",
        "confirmable-yes": "Әйе",
        "confirmable-no": "Юк",
-       "thisisdeleted": "$1 карарга яки торгызырга телисезме?",
-       "viewdeleted": "$1 карарга телисезме?",
-       "restorelink": "{{PLURAL:$1|бер бетерелгән үзгәртүне|$1 бетерелгән үзгәртүне}}",
-       "feedlinks": "ШÑ\83Ñ\88Ñ\8bлай:",
+       "thisisdeleted": "$1 караргамы яки торгызыргамы?",
+       "viewdeleted": "$1 караргамы?",
+       "restorelink": "Бетерелгән {{PLURAL:$1|1=төзәтмәне|$1 төзәтмәне}}",
+       "feedlinks": "ТаÑ\81ма:",
        "feed-invalid": "Язылу каналы тибы ялгыш",
        "feed-unavailable": "Синдикация тасмасы ябык",
        "site-rss-feed": "$1 — RSS тасмасы",
        "site-atom-feed": "$1 — Atom тасмасы",
        "page-rss-feed": "«$1» — RSS тасмасы",
        "page-atom-feed": "«$1» — Atom тасмасы",
-       "feed-atom": "Atom-тасмасы",
-       "feed-rss": "RSS-тасмасы",
-       "red-link-title": "$1 (мондÑ\8bй Ð±Ð¸Ñ\82 юк)",
+       "feed-atom": "Atom",
+       "feed-rss": "RSS",
+       "red-link-title": "$1 (биÑ\82 Ð±Ð°Ñ\80лÑ\8bкÑ\82а юк)",
        "sort-descending": "Кимү буенча урнаштыру",
        "sort-ascending": "Арту буенча урнаштыру",
        "nstab-main": "Мәкалә",
        "nstab-image": "Файл",
        "nstab-mediawiki": "Хәбәр",
        "nstab-template": "Калып",
-       "nstab-help": "ЯÑ\80дÓ\99м",
+       "nstab-help": "Ð\91елеÑ\88мÓ\99",
        "nstab-category": "Төркем",
        "mainpage-nstab": "Баш бит",
        "nosuchaction": "Мондый гамәл юк",
        "nosuchactiontext": "URLда күрсәтелгән гамәл хаталы.\nСез URLны хаталы җыйган яисә хаталы сылтамадан күчкән булырга мөмкинсез.\nБу шулай ук {{SITENAME}} проектындагы хата сәбәпле дә булырга мөмкин.",
-       "nosuchspecialpage": "Ð\9cондый махсус бит юк",
+       "nosuchspecialpage": "ШÑ\83ндый махсус бит юк",
        "nospecialpagetext": "<strong>Сез сорый торган махсус бит юк.</strong>\n\nМахсус битләр исемлеген карагыз: [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Хата",
-       "databaseerror": "Мәгълүматлар базасында хата",
+       "databaseerror": "Мәгълүматлар базасы хатасы",
        "databaseerror-textcl": "Мәгълүмат базасында хата чыкты",
        "databaseerror-query": "Сорау: $1",
        "databaseerror-function": "Функция: $1",
        "directoryreadonlyerror": "«$1» каталогы уку өчен генә.",
        "directorynotreadableerror": "«$1» каталогы укылмый.",
        "filenotfound": "«$1» файлын табып булмый.",
-       "unexpected": "Көтелмәгән кыймәт: «$1»=«$2».",
-       "formerror": "Хата: форма мәгълүматларын тапшырып булмый",
+       "unexpected": "Көтелмәгән кыйммәт: «$1»=«$2».",
+       "formerror": "Хата: форма мәгълүматларын җибәреп булмый",
        "badarticleerror": "Бу биттә мондый гамәл башкарып булмый.",
        "cannotdelete": "«$1» исемле битне яки файлны бетереп булмый. Аны бүтән кулланучы бетергән булырга мөмкин.",
        "cannotdelete-title": "«$1» битен бетереп булмый",
        "perfcached": "Бу мәгълүматлар кэштан алынган, аларда соңгы үзгәртүләр булмаска мөмкин. Кэшта иң күбе {{PLURAL:$1|язма|$1 язмалар}}  саклана.",
        "perfcachedts": "Бу мәгълүматлар кэштан алынган, ул соңгы тапкыр $1 яңартылды. Кэшта иң күбе {{PLURAL:$4|язма}} саклана",
        "querypage-no-updates": "Хәзер бу битне яңартып булмый. Монда күрсәтелгән мәгълүматлар кабул ителмәячәк.",
-       "viewsource": "Ð\9aарау",
+       "viewsource": "ЧÑ\8bганакнÑ\8b Ðºарау",
        "viewsource-title": "$1 битенең чыганагын карау",
        "actionthrottled": "Тизлек киметелгән",
        "actionthrottledtext": "Спамга каршы көрәш өчен, аз вакыт эчендә бу гамәлне еш куллану тыелган һәм СЕз бирелгән вакытны бетергәнсез инде. Зинһар, соңарак кабатлагыз.",
        "editinginterface": "<strong>Игътибар:</strong> Сез программа тәэминатының интерфейс тексты булган битне үзгәртәсез. Бу башка кулланучыларга да тәэсир итәчәк.",
        "translateinterface": "Бу хәбәрнең текстын үзгәртү өчен яки өстәмәләр кертү өчен MediaWiki җирләштерү сайтын кулланыгыз [https://translatewiki.net/ translatewiki.net].",
        "cascadeprotected": "Бу бит үзгәртүдән сакланган, чөнки ул каскадлы саклау кабул ителгән {{PLURAL:$1|1=биткә|битләргә}} өстәлгән:\n$2",
-       "namespaceprotected": "'''$1''' исем киңлегендәге битләрне үзгәртү өчен сезнең рөхсәтегез юк.",
-       "customcssprotected": "Сез бу CSS-сәхифәне үзгәртә алмыйсыз, чөнки монда башка кулланучының шәхси көйләнмәләре саклана",
-       "customjsprotected": "Сез бу JavaScript-сәхифәне үзгәртә алмыйсыз, чөнк монда башка кулланучының шәхси көйләнмәләре саклана",
-       "mycustomcssprotected": "Сезнең әлеге CSS битен үзгәртергә хокукыгыз юк.",
-       "mycustomjsprotected": "Сезнең биттә JavaScript үзгәртергә хокукларыгыз юк.",
+       "namespaceprotected": "Сезнең <strong>$1</strong> исем киңлегендәге битләрне үзгәртергә хакыгыз юк.",
+       "customcssprotected": "Сезнең бу CSS битен үзгәртергә хакыгыз юк, чөнки анда башка кулланучының шәхси көйләнмәләре бар.",
+       "customjsonprotected": "Сезнең бу JSON битен үзгәртергә хакыгыз юк, чөнки анда башка кулланучының шәхси көйләнмәләре бар.",
+       "customjsprotected": "Сезнең бу JavaScript битен үзгәртергә хакыгыз юк, чөнки анда башка кулланучының шәхси көйләнмәләре бар.",
+       "sitecssprotected": "Сезнең бу CSS битен үзгәртергә хакыгыз юк, чөнки бу гамәл барлык килүчеләргә тәэсир итәргә мөмкин.",
+       "sitejsonprotected": "Сезнең бу JSON битен үзгәртергә хакыгыз юк, чөнки бу гамәл барлык килүчеләргә тәэсир итәргә мөмкин.",
+       "sitejsprotected": "Сезнең бу JavaScript битен үзгәртергә хакыгыз юк, чөнки бу гамәл барлык килүчеләргә тәэсир итәргә мөмкин.",
+       "mycustomcssprotected": "Сезнең бу CSS битен үзгәртергә хакыгыз юк.",
+       "mycustomjsonprotected": "Сезнең бу JSON битен үзгәртергә хакыгыз юк.",
+       "mycustomjsprotected": "Сезнең бу JavaScript битен үзгәртергә хакыгыз юк.",
+       "myprivateinfoprotected": "Сезнең үзегезнең шәхси мәгълүматыгызны үзгәртергә хакыгыз юк.",
+       "mypreferencesprotected": "Сезнең үзегезнең көйләнмәләрегезне үзгәртергә хакыгыз юк.",
        "ns-specialprotected": "Махсус битләрне үзгәртеп булмый.",
        "titleprotected": "Бу исем белән бит ясау [[User:$1|$1]] тарафыннан тыелган.\nУл күрсәткән сәбәп: <em>$2</em>.",
        "invalidtitle": "Ярамаган атама",
        "botpasswords-label-appid": "Бот исеме:",
        "botpasswords-label-create": "Төзү",
        "botpasswords-label-update": "Яңарту",
-       "botpasswords-label-cancel": "Ð\91аÑ\88 Ñ\82аÑ\80Ñ\82у",
+       "botpasswords-label-cancel": "Ð\9aиÑ\80е Ð°Ð»у",
        "botpasswords-label-delete": "Бетерү",
        "botpasswords-label-resetpassword": "Серсүзне ташлау",
        "botpasswords-label-grants": "Кулланылган рөхсәтләр:",
        "resetpass_forbidden-reason": "Серсүзләрне үзгәртергә мөмкин түгел: $1",
        "resetpass-no-info": "Бу битне карау өчен сез системага үз хисап язмагыз ярдәмендә керергә тиеш.",
        "resetpass-submit-loggedin": "Серсүзне үзгәртү",
-       "resetpass-submit-cancel": "Ð\9aиÑ\80е ÐºÐ°Ð³у",
+       "resetpass-submit-cancel": "Ð\9aиÑ\80е Ð°Ð»у",
        "resetpass-wrong-oldpass": "Хәзерге яисә вакытлы серсүз дөрес түгел.\nСез серсүзегезне үзгәрткән яисә яңа вакытлы серсүз сораткан булырга мөмкинсез.",
        "resetpass-temp-password": "Вакытлы серсүз:",
        "passwordreset": "Серсүзне бетерү",
        "savechanges": "Үзгәрешләрне саклау",
        "publishpage": "Бит төзү",
        "publishchanges": "Үзгәрешләр саклау",
-       "savearticle-start": "Битне саклау...",
+       "savearticle-start": "Битне саклау",
        "savechanges-start": "Үзгәрешләрне саклау…",
-       "publishpage-start": "Битне бастыру...",
+       "publishpage-start": "Бит төзү…",
        "publishchanges-start": "Төзәтмәләрне бастыру...",
        "preview": "Алдан карау",
        "showpreview": "Алдан карау",
        "template-semiprotected": "(өлешчә якланган)",
        "hiddencategories": "Бу бит $1 {{PLURAL:$1|яшерен төркемгә|$1 яшерен төркемнәргә}} керә:",
        "nocreatetext": "{{SITENAME}}: сайтта яңа битләр төзү чикләнгән.\nСез артка кайтып, төзелгән битне үзгәртә аласыз. [[Special:UserLogin|Керергә яисә теркәлергә]] тәгъдим ителә.",
-       "nocreate-loggedin": "СезгÓ\99 Ñ\8fңа Ð±Ð¸Ñ\82лÓ\99Ñ\80 Ñ\82өзү Ñ\85окÑ\83кÑ\8b Ð±Ð¸Ñ\80елмÓ\99гÓ\99н.",
+       "nocreate-loggedin": "Сезнең Ñ\8fңа Ð±Ð¸Ñ\82лÓ\99Ñ\80не Ñ\82өзеÑ\80гÓ\99 Ñ\85акÑ\8bгÑ\8bз Ñ\8eк.",
        "sectioneditnotsupported-title": "Бүлекләрне үзгәртү рөхсәт ителми.",
        "sectioneditnotsupported-text": "Бу биттә бүлекләрне үзгәртү рөхсәт ителми.",
        "permissionserrors": "Керү хатасы",
-       "permissionserrorstext": "Түбәндәге {{PLURAL:$1|1=сәбәп|сәбәпләр}} аркасында сез бу гамәлне башкара алмыйсыз:",
-       "permissionserrorstext-withaction": "$2 гамәлен башкара алмыйсыз. {{PLURAL:$1|1=Сәбәбе|Сәбәпләре}}:",
+       "permissionserrorstext": "Түбәндәге {{PLURAL:$1|1=сәбәп|сәбәпләр}} аркасында сезнең моны эшләргә хакыгыз юк:",
+       "permissionserrorstext-withaction": "Түбәндәге {{PLURAL:$1|1=сәбәп|сәбәпләр}} аркасында сезнең $2 хакыгыз юк:",
        "recreate-moveddeleted-warn": "'''Игътибар: Сез бетерелгән бит урынына яңа бит ясамакчы буласыз.'''\n\nСезгә чыннан да бу битне яңадан ясау кирәкме?\nТүбәндә битнең бетерү һәм күчерү көндәлеге китерелә:",
        "moveddeleted-notice": "Бу бит бетерелгән.\nТүбәндә бу битнең бетерелү, якланышы һәм күчерелү көндәлекләре китерелә.",
        "log-fulllog": "Көндәлекне тулысынча карау",
        "edit-gone-missing": "Битне яңартып булмый.\nУл бетерелгән булырга мөмкин.",
        "edit-conflict": "Үзгәртү конфликты.",
        "edit-no-change": "Текстта үзгәешләр ясалмау сәбәпле, сезнең үзгәртү кире кагыла.",
-       "postedit-confirmation-created": "Бит төзелде",
+       "postedit-confirmation-created": "Бит төзелде.",
+       "postedit-confirmation-restored": "Бит торгызылды.",
        "postedit-confirmation-saved": "Төзәтмәгез сакланды.",
-       "edit-already-exists": "Яңа бит төзеп булмый.\nУл инде бар.",
+       "postedit-confirmation-published": "Сезнең төзәтмәгез сакланган.",
+       "edit-already-exists": "Яңа бит төзеп булмый.\nУл бар инде.",
+       "defaultmessagetext": "Башлангыч текст",
+       "invalid-content-data": "Яраксыз эчтәлек",
        "editwarning-warning": "Башка биткә күчү вакытында бу мәкаләгә керткән үзгәрешләр югалырга мөмкин.\nӘгәрдә сез теркәлгән булсагыз, бу искәрмәне сез көйләнмәләрегезнең «{{int:prefs-editing}}» бүлегендә үзгәртә аласыз.",
        "slot-name-main": "Төп",
        "content-model-wikitext": "викитекст",
        "revdelete-show-file-submit": "Әйе",
        "logdelete-selected": "Көндәлекнең {{PLURAL:$1|1=сайланган язмасы|сайланган язмалары}}:",
        "revdelete-legend": "Чикләүләр урнаштыр:",
-       "revdelete-hide-text": "Үзгәртү тексты",
-       "revdelete-hide-image": "Файл эчендәгеләрне качыр",
-       "revdelete-hide-name": "Ð\93амÓ\99лне Ò»Ó\99м ÐºÓ©Ð¹Ð»Ó\99Ò¯не яшерү",
+       "revdelete-hide-text": "Төзәтмә тексты",
+       "revdelete-hide-image": "Файлның эчтәлеген яшерү",
+       "revdelete-hide-name": "Ð\9cакÑ\81аÑ\82нÑ\8b Ò»Ó\99м Ñ\85аÑ\81иÑ\8fÑ\82лÓ\99Ñ\80не яшерү",
        "revdelete-hide-comment": "Үзгәрешләр аңлатмасы",
        "revdelete-hide-user": "Кулланучы исеме/IP-адрес",
        "revdelete-hide-restricted": "Мәгълүматлар идарәчеләрдән дә яшерелсен",
        "logdelete-success": "Вакыйганың күренүчәнлеге үзгәртелде.",
        "logdelete-failure": "'''Көндәлекнең күренүчәнлеге  куелмады:'''\n$1",
        "revdel-restore": "күренүчәнлекне үзгәртү",
-       "pagehist": "битнең тарихы",
+       "pagehist": "Ð\91итнең тарихы",
        "deletedhist": "Бетерүләр тарихы",
        "revdelete-otherreason": "Башка/өстәмә сәбәп:",
        "revdelete-reasonotherlist": "Башка сәбәп",
        "textmatches": "Бит эчтәлегендә тиңдәшлек",
        "notextmatches": "Тиңдәш текстлы битләр юк",
        "prevn": "алдагы {{PLURAL:$1|$1}}",
-       "nextn": "чираттагы {{PLURAL:$1|$1}}",
+       "nextn": "киләсе {{PLURAL:$1|$1}}",
        "prev-page": "алдагы бит",
        "next-page": "киләсе бит",
-       "prevn-title": "Алдагы $1  {{PLURAL:$1|язма}}",
-       "nextn-title": "{{PLURAL:$1|Киләсе $1 язма}}",
+       "prevn-title": "Алдагы $1 {{PLURAL:$1|язма}}",
+       "nextn-title": "Киләсе $1 {{PLURAL:$1|язма}}",
        "shown-title": "Сәхифәдә $1 {{PLURAL:$1|язма}} күрсәтелсен",
-       "viewprevnext": "Күрсәтелүе: ($1 {{int:pipe-separator}} $2) ($3)",
+       "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) карарга",
        "searchmenu-exists": "<strong>Бу вики-проектта «[[:$1]]» исемле бит бар инде</strong>{{PLURAL:$2|0=|Башка эзләү нәтиҗәләрен дә карап ал.}}",
        "searchmenu-new": "<strong>Әлеге вики-проектта «[[:$1]]» исемле бит ясарга!</strong>\n{{PLURAL:$2|0=|Шулай ук, эзләү ярдәмендә табылган битне карагыз.|Шулай ук, эзләү ярдәмендә табылган битләрне карагыз.}}",
        "searchprofile-articles": "Төп битләр",
        "searchprofile-advanced": "Киңәйтелгән",
        "searchprofile-articles-tooltip": "$1 дә эзләү",
        "searchprofile-images-tooltip": "Файллар эзләү",
-       "searchprofile-everything-tooltip": "Барлык битләрдән эзләү",
+       "searchprofile-everything-tooltip": "Барлык битләрдә эзләү (бәхәс битләрендә дә)",
        "searchprofile-advanced-tooltip": "Бирелгән исемнәр мәйданында эзләү",
        "search-result-size": "$1 ({{PLURAL:$2|$2 сүз}})",
        "search-result-category-size": "$1 {{PLURAL:$1|әгъза}} ($2 {{PLURAL:$2|астөркем}}, $3 {{PLURAL:$3|файл}})",
        "search-redirect": "($1 битеннән юнәлтү)",
        "search-section": "($1 бүлеге)",
-       "search-category": "($1 категориясе)",
+       "search-category": "($1 төркеме)",
        "search-file-match": "(файл эчтәлеге белән туры килә)",
        "search-suggest": "Бәлки, сез моны эзлисез: $1",
        "search-rewritten": "$1 нәтижәсе күрсәтелгән. $2 урынына эзләргә.",
        "search-interwiki-more-results": "күбрәк нәтиҗәләр",
        "search-relatedarticle": "Бәйле",
        "searchrelated": "бәйле",
-       "searchall": "барлык",
-       "showingresults": "Аста №<strong>$2</strong> башлап {{PLURAL:$1|<strong>1</strong> нәтиҗә күрсәтелгән}}.",
-       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> нәтиҗәдән <strong>$1</strong>| <strong>$3</strong> нәтиҗәләрдән <strong>$1 — $2</strong>}}",
-       "search-nonefound": "Сорауга туры килгән нәтиҗәләр табылмады.",
-       "powersearch-legend": "Өстәмә эзләү",
-       "powersearch-ns": "исемнәрендә эзләү",
-       "powersearch-togglelabel": "Тамгалау:",
-       "powersearch-toggleall": "Барысы",
-       "powersearch-togglenone": "Берни юк",
-       "powersearch-remember": "Сайланган алдагы эзләүләр өчен истә калдырылсын",
+       "searchall": "барысы",
+       "showingresults": "Түбәндә <strong>$2</strong>&nbsp;№ башлап {{PLURAL:$1|<strong>бер генә</strong> нәтиҗә|<strong>$1</strong> нәтиҗә}} күрсәтелгән.",
+       "showingresultsinrange": "Түбәндә {{PLURAL:$1|<strong>бер</strong>|<strong>$1</strong>}} нәтиҗәгә кадәр <strong>$2</strong> — <strong>$3</strong> колачында күрсәтелгән.",
+       "search-showingresults": "{{PLURAL:$4|Нәтиҗә: <strong>$3</strong> дан <strong>$1</strong>|Нәтиҗәләр: <strong>$3</strong> дан <strong>$1 — $2</strong>}}",
+       "search-nonefound": "Сорауга туры килгән нәтиҗәләр табылмаган.",
+       "search-nonefound-thiswiki": "Бу сайтта сорауга туры килгән нәтиҗәләр табылмаган.",
+       "powersearch-legend": "Киңәйтелгән эзләү",
+       "powersearch-ns": "Исемнәр киңлекләрендә эзләү:",
+       "powersearch-togglelabel": "Билгеләргә:",
+       "powersearch-toggleall": "Барысы да",
+       "powersearch-togglenone": "Берни дә",
+       "powersearch-remember": "Киләчәк эзләүләр өчен сайлауны истә калдырырга",
        "search-external": "Читтән эзләү",
        "search-error": "Эзләгән вакытта хата килеп чыкты:$1",
        "preferences": "Көйләнмәләр",
        "prefs-editwatchlist-label": "Күзәтү исемлеге язмаларын үзгәртү:",
        "prefs-editwatchlist-edit": "Күзәтү исемлегеннән исемнәрне карау һәм сөртү",
        "prefs-editwatchlist-raw": "Күзәтү исемлеген текстсыман үзгәртү",
-       "prefs-editwatchlist-clear": "Күзәтү исемлеген чистарту",
+       "prefs-editwatchlist-clear": "Күзәтү исемлеген бушату",
        "prefs-watchlist-days": "Күзәтү исемлегендә күрсәтелгән көннәр саны:",
        "prefs-watchlist-days-max": "Иң күбе $1 {{PLURAL:$1|1=көн|көн}}",
        "prefs-watchlist-edits": "Күзәтү исемлегендә күрсәтү өчен үзгәрешләрнең иң зур саны:",
        "stub-threshold": "Ясалма сылтамаларның бизәлеше буенча чикләүләр ($1):",
        "stub-threshold-sample-link": "мисал",
        "stub-threshold-disabled": "Сүнгән",
-       "recentchangesdays": "СоңгÑ\8b Ò¯Ð·Ð³Ó\99Ñ\80Ñ\82үлÓ\99Ñ\80не ÐºÒ¯Ñ\80Ñ\81Ó\99Ñ\82Ò¯Ñ\87е ÐºÓ©Ð½Ð½Ó\99Ñ\80 Ñ\81анÑ\8b:",
+       "recentchangesdays": "Ð\9dиÑ\87Ó\99 ÐºÓ©Ð½ Ñ\8dÑ\87ендÓ\99 Ñ\81оңгÑ\8b Ò¯Ð·Ð³Ó\99Ñ\80еÑ\88лÓ\99Ñ\80не ÐºÒ¯Ñ\80Ñ\81Ó\99Ñ\82еÑ\80гÓ\99:",
        "recentchangesdays-max": "(иң күбе $1 {{PLURAL:$1|көн}})",
        "recentchangescount": "Төп буларак кулланучы соңгы үзгәртүләр исемелегендә, тарихта һәм көндәлектә булган үзгәртүләр саны:",
        "prefs-help-recentchangescount": "Иң күбе: 1000",
        "email-blacklist-label": "Әлеге кулланучыларга минем электрон почтага хат җибәрүне тыярга:",
        "prefs-searchoptions": "Эзләү",
        "prefs-namespaces": "Исемнәр киңлекләре",
-       "default": "килеÑ\88Ò¯ Ð±Ñ\83енÑ\87а",
+       "default": "гадÓ\99Ñ\82Ñ\82Ó\99ге",
        "prefs-files": "Файллар",
        "prefs-custom-css": "Шәхси CSS",
-       "prefs-custom-json": "Ð\9aÑ\83лланма JSON",
+       "prefs-custom-json": "ШÓ\99Ñ\85Ñ\81и JSON",
        "prefs-custom-js": "Шәхси JS",
        "prefs-common-config": "Барлык бизәлешләр өчен гомуми CSS/JSON/JavaScript:",
        "prefs-reset-intro": "Бу бит сезнең көйләнмәләрегезне бетерү өчен кулланыла. Бу эшне башкару нәтиҗәсендә сез яңадан үз көйләнмәләрне яңадан кайтара алмыйсыз.",
        "prefs-emailconfirm-label": "E-mail раслау",
        "youremail": "Электрон почта:",
        "username": "{{GENDER:$1|Кулланучы исеме}}:",
-       "prefs-memberingroups": "{{PLURAL:$1|Төркем}} {{GENDER:$2|әгъзасы}}:",
+       "prefs-memberingroups": "{{PLURAL:$1|Төркем|Төркемнәр}} {{GENDER:$2|әгъзасы}}:",
        "prefs-memberingroups-type": "$1",
        "group-membership-link-with-expiry": "$1 ($2 кадәр)",
        "prefs-registration": "Теркәлү вакыты:",
        "yourrealname": "Чын исем:",
        "yourlanguage": "Тел:",
        "yourvariant": "Эчтәлекнең тел варианты:",
+       "prefs-help-variant": "Бу вики битләренең эчтәлеген күрсәтү өчен өстенлек бирелгән тел варианты яки орфография.",
        "yournick": "Яңа имзагыз:",
        "prefs-help-signature": "Бәхәслек битләрендә сезнең язмаларыгызны калдыру «<nowiki>~~~~</nowiki>» тамгалары куелу нәтиҗәсендә булырга тиеш.",
-       "badsig": "Ð\98мза Ð´Ó©Ñ\80еÑ\81 Ñ\82үгел. HTML Ñ\82еглаÑ\80Ñ\8b тикшерегез.",
+       "badsig": "ЯÑ\80акÑ\81Ñ\8bз Ð¸Ð¼Ð·Ð°. \nHTML-Ñ\82амгалаÑ\80 тикшерегез.",
        "badsiglength": "Имзагыз бигрәк озын.\nУл $1 {{PLURAL:$1|хәрефтән}} күбрәк булырга тиеш түгел.",
        "yourgender": "Сезгә нинди тасвирлама күбрәк туры килә?",
        "gender-unknown": "Сезне искә алганда программа, мөмкин булган очракта, җенси-нейтраль сүзләр кулланачак",
        "prefs-signature": "Имза",
        "prefs-dateformat": "Вакытың форматы",
        "prefs-timeoffset": "Вакыт билгеләнеше",
-       "prefs-advancedediting": "Гомуми көйләүләр",
+       "prefs-advancedediting": "Гомуми көйләнмәләр",
        "prefs-developertools": "Девелопер кораллары",
-       "prefs-editor": "Ð\9cÓ©Ñ\85Ó\99Ñ\80Ñ\80иÑ\80",
+       "prefs-editor": "ТөзÓ\99Ñ\82кеÑ\87",
        "prefs-preview": "Алдан карау",
-       "prefs-advancedrc": "Киңәйтелгән көйләүләр",
-       "prefs-advancedrendering": "Киңәйтелгән көйләүләр",
-       "prefs-advancedsearchoptions": "Киңәйтелгән көйләүләр",
-       "prefs-advancedwatchlist": "Киңәйтелгән көйләүләр",
+       "prefs-advancedrc": "Киңәйтелгән көйләнмәләр",
+       "prefs-advancedrendering": "Киңәйтелгән көйләнмәләр",
+       "prefs-advancedsearchoptions": "Киңәйтелгән көйләнмәләр",
+       "prefs-advancedwatchlist": "Киңәйтелгән көйләнмәләр",
        "prefs-displayrc": "Күрсәтү көйләнмәләре",
        "prefs-displaywatchlist": "Күрсәтү көйләнмәләре",
+       "prefs-changesrc": "Күрсәтелгән үзгәрешләр",
+       "prefs-changeswatchlist": "Күрсәтелгән үзгәрешләр",
        "prefs-pageswatchlist": "Күзәтелгән битләр",
        "prefs-tokenwatchlist": "Токен",
-       "prefs-diffs": "ЮÑ\80амалаÑ\80 Ð°ÐµÑ\80маÑ\81Ñ\8b",
+       "prefs-diffs": "Ð\90еÑ\80малÑ\8bклаÑ\80",
        "userrights": "Кулланучы хокуклары",
        "userrights-lookup-user": "Кулланучыны сайлау",
        "userrights-user-editname": "Кулланучының исемен кертегез:",
-       "editusergroup": "Кулланучының төркемнәрен кую",
+       "editusergroup": "Кулланучы төркемнәрен төяү",
        "editinguser": "{{GENDER:$1|Кулланучы}} <strong>[[User:$1|$1]]</strong> $2 хокукларын үзгәртү",
        "userrights-editusergroup": " {{GENDER:$1|Кулланучының}} төркемнәрен алмаштыру",
        "saveusergroups": "{{GENDER:$1|Кулланучы}} төркемнәрен саклау",
        "userrights-groupsmember-auto": "Билгесез әгъза:",
        "userrights-groups-help": "Сез бу кулланучының хокукларын үзгәртә алмыйсыз.\n*Әгәр дә кулланучы исеме янда тамга торса, димәк бу кулланучы бирелгән төркемнең әгъзасы.\n*Әгәр дә кулланучы исеме янда тамга тормаса, димәк бу кулланучы бирелгән төркемнең әгъзасы түгел.\n*\"*\" тамгасы торса сез бу кулланучыны бу төркемнән бетерә алмыйсыз.",
        "userrights-reason": "Сәбәп:",
-       "userrights-no-interwiki": "Сезнең башка викиларда кулланучыларның хокукларын үзгәртергә хокукларыгыз юк.",
+       "userrights-no-interwiki": "Сезнең башка викиларда кулланучы хокукларын үзгәртергә хакыгыз юк.",
        "userrights-nodatabase": "Бирелгән $1 базасы юк яисә  локаль булып тормый.",
        "userrights-changeable-col": "Сезнең тарафтан үзгәртелми торган төркемнәр",
        "userrights-unchangeable-col": "Сезнең тарафтан үзгәртелми торган төркемнәр",
        "group-sysop": "Идарәчеләр",
        "group-bureaucrat": "Бюрократлар",
        "group-suppress": "Назирләр",
-       "group-all": "(барлык)",
+       "group-all": "(барысы)",
        "group-user-member": "{{GENDER:$1|кулланучы}}",
        "group-autoconfirmed-member": "{{GENDER:$1|авторасланган кулланучы}}",
        "group-bot-member": "{{GENDER:$1|бот}}",
        "right-editinterface": "Кулланучы интерфейсын үзгәртү",
        "right-userrights": "Барлык кулланучы хокукларын үзгәртү",
        "right-userrights-interwiki": "Башка википроектларда кулланучы хокукларын үзгәртү",
+       "right-managechangetags": "[[Special:Tags|Тамгалар]] төзү һәм (де)активлаштыру",
+       "right-deletechangetags": "Мәгълүматлар базасыннан [[Special:Tags|тамгалар]] бетерү",
        "grant-group-email": "Хатлар җибәрү",
+       "grant-rollback": "Битләр үзгәрешләрен кире кайтару",
        "grant-uploadfile": "Яңа файллар төяү",
        "grant-basic": "Төп хокуклар",
        "newuserlogpage": "Кулланучыларны теркәү көндәлеге",
        "newuserlogpagetext": "Яңа теркәлгән кулланучылар исемлеге",
        "rightslog": "Кулланучының хокуклары көндәлеге",
        "action-read": "бу битне уку",
-       "action-edit": "бу битне үзгәртү",
+       "action-edit": "бу битне үзгәртергә",
        "action-createpage": "бу битне төзү",
        "action-createtalk": "бу бәхәс битен төзү",
        "action-createaccount": "бу кулланучы язмасын ясау",
        "action-viewmywatchlist": "күзәтү исемлегегезне карау",
        "action-viewmyprivateinfo": "шәхси мәгълүматыгызны карау",
        "action-editmyprivateinfo": "шәхси мәгълүматыгызны үзгәртү",
-       "nchanges": "$1 {{PLURAL:$1|үзгәртү}}",
+       "action-managechangetags": "тамгалар төзү һәм (де)активлаштыру",
+       "action-deletechangetags": "мәгълүматлар базасыннан тамгалар бетерү",
+       "nchanges": "$1 {{PLURAL:$1|үзгәреш}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|соңгы керүдән соң}}",
        "enhancedrc-history": "тарих",
        "recentchanges": "Соңгы үзгәрешләр",
-       "recentchanges-legend": "Соңгы үзгәртүләр көйләүләре",
-       "recentchanges-summary": "ТөÑ\80ле Ð±Ð¸Ñ\82лÓ\99Ñ\80дÓ\99 Ñ\8dÑ\88лÓ\99нгÓ\99н Ñ\81оңгÑ\8b Ò¯Ð·Ð³Ó\99Ñ\80Ñ\82үлÓ\99Ñ\80 Ð¸Ñ\81емлеге.",
+       "recentchanges-legend": "Соңгы үзгәрешләр көйләнмәләре",
+       "recentchanges-summary": "Ð\91Ñ\83 Ð±Ð¸Ñ\82Ñ\82Ó\99 Ð²Ð¸ÐºÐ¸Ð´Ð° Ñ\81оңгÑ\8b Ò¯Ð·Ð³Ó\99Ñ\80еÑ\88лÓ\99Ñ\80не ÐºÒ¯Ð·Ó\99Ñ\82Ò¯.",
        "recentchanges-noresult": "Сайланган чорда күрсәтелгән шартларга туры килүче төзәтмәләр юк.",
-       "recentchanges-feed-description": "Бу агымда соңгы үзгәртүләрне күзәтү.",
+       "recentchanges-feed-description": "Бу агымда викида соңгы үзгәрешләрне күзәтү.",
        "recentchanges-label-newpage": "Бу төзәтмә белән яңа бит төзелгән",
        "recentchanges-label-minor": "Бу кече төзәтмә",
        "recentchanges-label-bot": "Бу төзәтмә бот белән эшләнгән",
        "recentchanges-label-plusminus": "Битнең зурлыгы шуның кадәрле байтка үзгәрде",
        "recentchanges-legend-heading": "<strong>Аңлатма:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (шулай ук [[Special:NewPages|яңа битләр исемлеген]] карагыз)",
-       "recentchanges-submit": "Күрсәт",
-       "rcfilters-legend-heading": "<strong>Кыскартулар тезмәсе:&nbsp;</strong>",
+       "recentchanges-submit": "Күрсәтү",
+       "rcfilters-tag-remove": "'$1' бетерү",
+       "rcfilters-legend-heading": "<strong>Кыскартмалар исемлеге:</strong>",
+       "rcfilters-other-review-tools": "Башка тикшерү кораллары",
        "rcfilters-group-results-by-page": "Нәтиҗәләрне биттә төркемләргә",
-       "rcfilters-activefilters": "Актив фильтрлар",
-       "rcfilters-activefilters-hide": "Яшер",
-       "rcfilters-activefilters-show": "Күрсәт",
-       "rcfilters-limit-title": "Күрсәтү өчен үзгәртүләр",
-       "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|үзгәртү}}, $2",
-       "rcfilters-date-popup-title": "Эзләү өчен вакыт аралыгы",
+       "rcfilters-activefilters": "Гамәлдәге сөзгечләр",
+       "rcfilters-activefilters-hide": "Яшерү",
+       "rcfilters-activefilters-show": "Күрсәтү",
+       "rcfilters-activefilters-hide-tooltip": "Гамәлдәге сөзгечләр өлкәсен яшерергә",
+       "rcfilters-activefilters-show-tooltip": "Гамәлдәге сөзгечләр өлкәсен күрсәтергә",
+       "rcfilters-advancedfilters": "Киңәйтелгән сөзгечләр",
+       "rcfilters-limit-title": "Күрсәтү өчен нәтиҗәләр",
+       "rcfilters-limit-and-date-label": "$1 {{PLURAL:$1|үзгәреш}}, $2",
+       "rcfilters-date-popup-title": "Эзләү өчен вакыт арасы",
        "rcfilters-days-title": "Соңгы көннәр",
        "rcfilters-hours-title": "Соңгы сәгатьләр",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|көн}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|сәгать}}",
-       "rcfilters-quickfilters": "Сакланган Ñ\84илÑ\8cÑ\82Ñ\80лар",
-       "rcfilters-quickfilters-placeholder-title": "Әлегә сакланылган фильтрлар юк",
+       "rcfilters-quickfilters": "Сакланган Ñ\81өзгеÑ\87лÓ\99р",
+       "rcfilters-quickfilters-placeholder-title": "Сакланган сөзгечләр юк әле",
        "rcfilters-savedqueries-defaultlabel": "Сакланган сөзгечләр",
        "rcfilters-savedqueries-rename": "Исемен үзгәртү",
+       "rcfilters-savedqueries-setdefault": "Гадәттәге дип кую",
+       "rcfilters-savedqueries-unsetdefault": "Гадәттәге дип куймаю",
        "rcfilters-savedqueries-remove": "Бетерү",
        "rcfilters-savedqueries-new-name-label": "Исем",
-       "rcfilters-savedqueries-apply-label": "Фильтр кую",
-       "rcfilters-savedqueries-cancel-label": "Баш тарту",
-       "rcfilters-savedqueries-add-new-title": "Хәзерге фильтр көйләнмәләрен саклау",
+       "rcfilters-savedqueries-new-name-placeholder": "Сөзгечнең максатын язып бирегез",
+       "rcfilters-savedqueries-apply-label": "Сөзгеч төзү",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Гадәттәге сөзгеч төзү",
+       "rcfilters-savedqueries-cancel-label": "Кире алу",
+       "rcfilters-savedqueries-add-new-title": "Хәзерге сөзгеч көйләнмәләрен саклау",
+       "rcfilters-restore-default-filters": "Гадәттәге сөзгечләрне торгызу",
        "rcfilters-clear-all-filters": "Барлык сөзгечләрне бушату",
        "rcfilters-show-new-changes": "$1 башлап яңа үзгәрешләрне карау",
        "rcfilters-search-placeholder": "Үзгәрешләрне сөзү (меню кулланыгыз яки сөзгеч аты буенча эзлигез)",
-       "rcfilters-invalid-filter": "Яраксыз фильтр",
+       "rcfilters-search-placeholder-mobile": "Сөзгечләр",
+       "rcfilters-invalid-filter": "Яраксыз сөзгеч",
        "rcfilters-filterlist-title": "Сөзгечләр",
        "rcfilters-filterlist-whatsthis": "Бу ничек эшли?",
        "rcfilters-filterlist-feedbacklink": "Әлеге фильтрлау кораллары турында турында фикер калдырыгыз",
        "rcfilters-filter-major-description": "«Кече» дип билгеләнмәгән төзәтмәләр.",
        "rcfilters-filtergroup-watchlist": "Күзәтү исемлегендәге битләр",
        "rcfilters-filter-watchlist-watched-label": "Күзәтү исемлегендә",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Каралмаган үзгәрешләр",
+       "rcfilters-filter-watchlistactivity-seen-label": "Каралган үзгәрешләр",
        "rcfilters-filtergroup-changetype": "Үзгәртү төре",
        "rcfilters-filter-pageedits-label": "Бит төзәтмәләре",
        "rcfilters-filter-newpages-label": "Бит төзүләре",
        "rcfilters-filter-excluded": "Чыгарып ташланган",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:not</strong> $1",
        "rcfilters-view-tags": "Тамгаланган төзәтмәләр",
-       "rcfilters-liveupdates-button": "Автоматик яңарту",
+       "rcfilters-liveupdates-button": "Автояңарту",
        "rcfilters-watchlist-markseen-button": "Барлык үзгәрешләрне каралган дип билгеләргә",
        "rcfilters-watchlist-edit-watchlist-button": "Күзәтү исемлегегезне үзгәртү",
-       "rcfilters-watchlist-showupdated": "Сезнең соңгы төзәтмәләрдән соң үзгәргән битләр <strong>калын</strong> һәм тулы маркер белән күрсәтелгән",
+       "rcfilters-watchlist-showupdated": "Сез карап чыгудан соң үзгәртелгән битләрдәге үзгәрешләр <strong>калын</strong> хәрефләр һәм тоташ маркер белән аерып күрсәтелгән.",
        "rcfilters-preference-label": "JavaScript тан башка интерфейсын куллану",
        "rcnotefrom": "Астарак <strong>$3, $4</strong> өчен {{PLURAL:$5|үзгәрешләр күрсәтелгән}} (<strong>$1</strong> артык түгел).",
        "rclistfrom": "$3 $2 башлап яңа үзгәрешләрне күрсәтү",
        "rc-enhanced-expand": "Ваклыкларны күрсәтү",
        "rc-enhanced-hide": "Ваклыкларны яшерү",
        "rc-old-title": "башта «$1» буларак ясала",
-       "recentchangeslinked": "Бәйләнешле үзгәртүләр",
-       "recentchangeslinked-feed": "Бәйләнешле үзгәртүләр",
+       "recentchangeslinked": "Бәйләнешле үзгәрешләр",
+       "recentchangeslinked-feed": "Бәйләнешле үзгәрешләр",
        "recentchangeslinked-toolbox": "Бәйләнешле үзгәрешләр",
        "recentchangeslinked-title": "\"$1\" битенә бәйләнешле үзгәртүләр",
        "recentchangeslinked-summary": "Бу битттән яисә бу биткә сылтаган битләрдәге үзгәртмәле карау өчен битнең исемен кертегез. (Билгеле бер төркемгә караган битләрне карау өчен {{ns:category}}:Төркем исемен языгыз).[[Special:Watchlist|Күзәтү исемлегегезгә]] керә торган битләр '''калын''' итеп күрсәтелгән.",
        "recentchangeslinked-page": "Битң исеме:",
        "recentchangeslinked-to": "Моның урынына бу биткә бәйле булган битләрдәге үзгәртүләрне күрсәтү",
+       "recentchanges-page-added-to-category": "[[:$1]] төркемгә өстәлгән",
+       "recentchanges-page-removed-from-category": "[[:$1]] төркемнән алынган",
+       "autochange-username": "MediaWiki автоүзгәртү",
        "upload": "Файл төяү",
        "uploadbtn": "Файл төяү",
        "reuploaddesc": "Файл төявен кире кагу",
        "listfiles_user": "Кулланучы",
        "listfiles_size": "Зурлык",
        "listfiles_description": "Тасвир",
-       "listfiles_count": "ЮÑ\80амалар",
-       "listfiles-latestversion": "Ð\90гÑ\8bмдагÑ\8b Ñ\8eÑ\80ама",
+       "listfiles_count": "Ð\92еÑ\80Ñ\81иÑ\8fлÓ\99р",
+       "listfiles-latestversion": "Ð¥Ó\99зеÑ\80ге Ð²ÐµÑ\80Ñ\81иÑ\8f",
        "listfiles-latestversion-yes": "Әйе",
        "listfiles-latestversion-no": "Юк",
        "file-anchor-link": "Файл",
        "duplicatesoffile": "{{PLURAL:$1|Әлеге $1 файл }} астагы файлның күчерелмәсе булып тора ([[Special:FileDuplicateSearch/$2|тулырак]]):",
        "sharedupload": "Бу файл $1 проектыннан һәм башка проектларда кулланырга мөмкин",
        "sharedupload-desc-here": "Бу файл $1 проектыннан һәм башка проектларда кулланырга мөмкин. \nФайл турында [$2 тулырак мәгълүмат] түбәндәрәк күрсәтелгән.",
-       "filepage-nofile": "Ð\9cондÑ\8bй Ð¸Ñ\81емле Ñ\84айл юк.",
+       "filepage-nofile": "ШÑ\83ндÑ\8bй Ð¸Ñ\81емле Ñ\84айл Ð±Ð°Ñ\80лÑ\8bкÑ\82а юк.",
        "filepage-nofile-link": "Мондый исемле файл  юк. Сез аны [$1 йөкли аласыз].",
-       "uploadnewversion-linktext": "Бу файлның яңа юрамасын йөкләү",
+       "uploadnewversion-linktext": "Бу файлның яңа версиясен төяү",
        "shared-repo-from": "$1 дән",
        "shared-repo": "гомуми саклагыч",
        "upload-disallowed-here": "Сез бу файлны яңарта алмыйсыз.",
        "statistics-header-hooks": "Башка статистика",
        "statistics-articles": "Мәкаләләр саны",
        "statistics-pages": "Битләр саны",
-       "statistics-pages-desc": "Ð\91аÑ\80лÑ\8bк Ð²Ð¸ÐºÐ¸, Ð±Ó\99Ñ\85Ó\99Ñ\81, ÐºÒ¯Ñ\87еÑ\80Ò¯ Ò»Ó\99м Ð±Ð°Ñ\88ка Ð±Ð¸Ñ\82лÓ\99Ñ\80не Ð´Ó\99 Ð¸Ñ\81Ñ\82Ó\99 Ñ\82оÑ\82Ñ\8bп.",
-       "statistics-files": "Ð\99өклÓ\99нелгән файллар",
+       "statistics-pages-desc": "Ð\92икидагÑ\8b Ð±Ð°Ñ\80лÑ\8bк Ð±Ð¸Ñ\82лÓ\99Ñ\80, Ð±Ó\99Ñ\85Ó\99Ñ\81, Ñ\8eнÓ\99лÑ\82Ò¯ Ð±Ð¸Ñ\82лÓ\99Ñ\80ен Ò»Ó\99м Ð±Ð°Ñ\88ка ÐºÐµÑ\80Ñ\82еп.",
+       "statistics-files": "ТөÑ\8fлгән файллар",
        "statistics-edits": "{{grammar:genitive|{{SITENAME}}}} проекты ачылганнан бирле булган барлык үзгәртүләр исәбе",
        "statistics-edits-average": "Бер биткә уртача үзгәртүләр исәбе",
        "statistics-users": "Теркәлгән кулланучылар",
        "apisandbox-results": "Нәтиҗәләр",
        "apisandbox-continue": "Дәвам итү",
        "apisandbox-continue-clear": "Чистарту",
+       "apisandbox-multivalue-all-namespaces": "$1 (Барлык исемнәр киңлекләре)",
+       "apisandbox-multivalue-all-values": "$1 (Барлык мәгънәләр)",
        "booksources": "Китап чыганаклары",
        "booksources-search-legend": "Китап чыганакларыны эзләү",
+       "booksources-isbn": "ISBN:",
        "booksources-search": "Эзләү",
        "booksources-text": "Әлеге биттә күрсәтелгән сылтамалар ярәмендә сезнең кызыксындырган китап буенча өстәмә мәгълүматлар табарга мөмкин. Болар интернет-кибетләр һәм китапханә җыентыгында эзләүче системалар.",
        "booksources-invalid-isbn": "Бирелгән ISBN саны бәлки хаталдыр. Зинһар, бирелгән саннарны яңадан тикшерегез.",
        "speciallogtitlelabel": "Максат (атама яки {{ns:user}}:кулланучы исеме):",
        "log": "Көндәлекләр",
        "logeventslist-submit": "Күрсәтү",
+       "logeventslist-tag-log": "Тамгалар көндәлеге",
        "all-logs-page": "Барлык көндәлекләр",
        "alllogstext": "{{SITENAME}} сәхифәсенең гомуми көндәлекләре исемлеге.\nСез нәтиҗәләрне көндәлек төре, кулланучы исеме (хәреф зурлыгын истә тотыгыз) яки куззаллаган бит (шулай ук хәреф зурлыгын истә тотыгыз) буенча тәртипкә салырга мөмкин.",
        "logempty": "Кирәкле язмалар көндәлектә юк.",
        "rollback-confirmation-yes": "Кире кайтару",
        "rollback-confirmation-no": "Кире алу",
        "rollbacklink": "кире кайтару",
-       "rollbacklinkcount": "$1 {{PLURAL:$1|төзәтмәне}} кире кагу",
+       "rollbacklinkcount": "$1 {{PLURAL:$1|төзәтмәне}} кире кайтару",
+       "rollbacklinkcount-morethan": "$1 күбрәк {{PLURAL:$1|төзәтмәне}} кире кайтару",
+       "rollbackfailed": "Кире кайтарып булмады",
        "editcomment": "Үзгәртүләр тасвирламасы: <em>$1</em>.",
        "revertpage": "[[Special:Contributions/$2|$2]] үзгәртүләре ([[User talk:$2|бәхәс]])  [[User:$1|$1]] юрамасына кадәр кире кайтарылды",
        "changecontentmodel-title-label": "Битнең исеме",
        "protect-expiring-local": "$1 тәмамлана",
        "protect-expiry-indefinite": "Вакыт чикләнмәгән",
        "protect-cascade": "Бу биткә кергән битләрне яклау (каскадлы яклау)",
-       "protect-cantedit": "Сез бу битнең яклау дәрәҗәсене үзгәрә алмыйсыз, чөнки сездә аны үзгәртергә рөхсәтегез юк.",
+       "protect-cantedit": "Сез бу битнең яклау дәрәҗәсен үзгәрә алмыйсыз, чөнки сезнең аны үзгәртергә хакыгыз юк.",
        "protect-othertime": "Башка вакыт:",
        "protect-othertime-op": "башка вакыт",
        "protect-existing-expiry": "Хәзерге тәмамлану вакыты: $2 $3",
        "protect-expiry-options": "1 сәгать:1 hour,1 көн:1 day,1 атна:1 week,2 атна:2 weeks,1 ай:1 month,3 ай:3 months,6 ай:6 months,1 ел:1 year,чикләүсез:infinite",
        "restriction-type": "Рөхсәт:",
        "restriction-level": "Мөмкинлек дәрәҗәсе:",
-       "minimum-size": "Ð\98Ò£ ÐºÐµÑ\87кенÓ\99 зурлык",
+       "minimum-size": "Ð\98Ò£ ÐºÐµÑ\87е зурлык",
        "maximum-size": "Иң югары зурлык:",
        "pagesize": "(байт)",
        "restriction-edit": "Үзгәртү",
        "undelete-show-file-submit": "Әйе",
        "namespace": "Исемнәр киңлеге:",
        "invert": "Киресен сайлау",
-       "tooltip-invert": "Сайланган Ð¸Ñ\81емлекÑ\82Ó\99ге Ò¯Ð·Ð³Ó\99Ñ\80гÓ\99Ñ\80Ñ\82үлÓ\99Ñ\80 ÐºÒ¯Ñ\80Ñ\81Ó\99Ñ\82елмÓ\99Ñ\81ен Ó©Ñ\87ен Ð¼Ð¾Ð½Ð´Ð° тамга куегыз",
-       "namespace_association": "Бәйле тирәлек",
-       "tooltip-namespace_association": "Сайланган Ð±Ó\99йле Ð¸Ñ\81емнÓ\99Ñ\80 Ñ\82иÑ\80Ó\99легенÓ\99 ÐºÐ°Ñ\80аган Ð¼Ó\99калÓ\99лÓ\99Ñ\80 Ð¸Ñ\81емлеген ÐºÐ°Ð±Ñ\8bзÑ\83 Ó©Ñ\87ен Ñ\8dлеге Ñ\83Ñ\80Ñ\8bнга Ñ\82амганÑ\8b куегыз",
+       "tooltip-invert": "Сайланган Ð¸Ñ\81емнÓ\99Ñ\80 ÐºÐ¸Ò£Ð»ÐµÐ³ÐµÐ½Ð´Ó\99ге (Ò»Ó\99м Ð±Ó\99йлÓ\99нгÓ\99н Ð¸Ñ\81емнÓ\99Ñ\80 ÐºÐ¸Ò£Ð»ÐµÐ³ÐµÐ½Ð´Ó\99ге, Ð±Ð¸Ð»Ð³ÐµÐ»Ó\99нгÓ\99н Ð±Ñ\83лÑ\81а) Ð±Ð¸Ñ\82лÓ\99Ñ\80дÓ\99 Ò¯Ð·Ð³Ó\99Ñ\80еÑ\88лÓ\99Ñ\80 Ñ\8fÑ\88еÑ\80Ò¯ Ó©Ñ\87ен Ð±Ð¸Ñ\80едÓ\99 тамга куегыз",
+       "namespace_association": "Бәйле исемнәр киңлеге",
+       "tooltip-namespace_association": "Сайланган Ð¸Ñ\81емнÓ\99Ñ\80 ÐºÐ¸Ò£Ð»ÐµÐ³Ðµ Ð±ÐµÐ»Ó\99н Ð±Ó\99йлÓ\99нгÓ\99н Ð±Ó\99Ñ\85Ó\99Ñ\81 (Ñ\8fки Ð½Ó\99Ñ\80Ñ\81Ó\99) Ð¸Ñ\81емнÓ\99Ñ\80 ÐºÐ¸Ò£Ð»ÐµÐ³Ðµ Ñ\88Ñ\83лай Ñ\83к ÐºÐµÑ\80Ñ\82Ò¯ Ó©Ñ\87ен Ð±Ð¸Ñ\80едÓ\99 Ñ\82амга куегыз",
        "blanknamespace": "(Төп)",
        "contributions": "{{GENDER:$1|Кулланучының}} кертеме",
        "contributions-title": "$1 исемле кулланучының кертеме",
        "whatlinkshere": "Бирегә нәрсә сылтый",
        "whatlinkshere-title": "$1 битенә сылтый торган битләр",
        "whatlinkshere-page": "Бит:",
-       "linkshere": "'''$1''' битенә чираттагы битләр сылтый:",
+       "linkshere": "<strong>$2</strong> битенә түбәндәге битләр сылтыйлар:",
        "nolinkshere": "'''$1''' битенә башка битләр сылтамыйлар.",
        "isredirect": "юнәлтү бите",
        "istemplate": "кертүләр",
        "move-page-legend": "Битне күчерү",
        "movepagetext": "Астагы форманы куллану битнең исемен алыштырып, аның барлык тарихын яңа исемле биткә күчерер.\nИске исемле бит яңа исемле биткә юнәлтү булып калыр.\nСез иске исемгә юнәлтүләрне автоматик рәвештә яңа исемгә күчерә аласыз.\nӘгәр моны эшләмәсәгез, [[Special:DoubleRedirects|икеле]] һәм [[Special:BrokenRedirects|өзелгән юнәлтүләрне]] тикшерегез.\nСез барлык сылтамаларның кирәкле җиргә сылтавына җаваплы.\n\nКүздә тотыгыз: әгәр яңа исем урынында бит булса инде, һәм ул буш яки юнәлтү түгел исә, бит <strong>күчерелмәячәк</strong>.\nБу шуны аңлата: сез ялгышып күчерсәгез, битне кайтара аласыз, әмма инде булган битне бетерә алмыйсыз.\n\n<strong>Искәрмә:</strong>\nПопуляр битләрне күчерү зур һәм көтелмәгән нәтиҗәләргә китерә ала.\nДәвам иткәнче, барлык нәтиҗәләрне аңлавыгызны тагын бер кат уйлагыз.",
        "movepagetalktext": "Бу пунктны сайлаган очракта, аның бәхәс бите дә автоматик рәвештә күчереләчәк, әгәрдә шундый исемле башка тулы бәхәс бите булмаса.\n\nБу очракларда сезгә битләрне үзегезгә күчерергә туры киләчәк.",
-       "movenotallowed": "Сездә мәкаләләрне күчерү хокуклары юк.",
+       "movenotallowed": "Сезнең мәкаләләрне күчерергә (исем алмаштырырга) хакыгыз юк.",
+       "movenotallowedfile": "Сезнең файлларны күчерергә (исем алмаштырырга) хакыгыз юк.",
+       "cant-move-user-page": "Сезнең кулланучы төп битләрен күчерергә (исем алмаштырырга) хакыгыз юк.",
+       "cant-move-to-user-page": "Сезнең битне кулланучы битенә күчерергә хакыгыз юк (кулланучы асбитенә ярый).",
+       "cant-move-category-page": "Сезнең төркем битләрен күчерергә (исем алмаштырырга) хакыгыз юк.",
+       "cant-move-to-category-page": "Сезнең битне төркем битенә күчерергә хакыгыз юк.",
+       "cant-move-subpages": "Сезнең асбитләрне күчерергә (исем алмаштырырга) хакыгыз юк.",
        "newtitle": "Яңа исем:",
        "move-watch": "Бу битне күзәтү",
        "movepagebtn": "Битне күчерү",
        "movetalk": "Бәйләнешле бәхәс битен күчерү",
        "movelogpage": "Күчерү көндәлеге",
        "movesubpage": "{{PLURAL:$1|1=Асбит|Асбитләр}}",
+       "movenosubpage": "Бу битнең асбитләре юк.",
        "movereason": "Сәбәп:",
        "revertmove": "кире кайту",
        "delete_and_move_confirm": "Әйе, битне бетерү",
        "export-download": "Файл буларак саклау",
        "allmessages": "Система хәбәрләре",
        "allmessagesname": "Исем",
-       "allmessagesdefault": "Баштан ук куелган текс",
+       "allmessagesdefault": "Башлангыч текст",
        "allmessagestext": "Бу исемлек MediaWiki исемнәр мәйданында булган система хәбәрләренең исемлеге.\nГомуми MediaWiki локализациясендә катнашырга теләсәгез, зинһар [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation MediaWiki Локализациясе] һәм [https://translatewiki.net translatewiki.net] сәхифәләрне кулланыгыз.",
        "allmessages-filter-legend": "Сөзгеч",
        "allmessages-filter-unmodified": "Үзгәртелмәгән",
        "thumbnail-more": "Зурайту",
        "filemissing": "Файл табылмады",
        "thumbnail_error": "Кечкенә сүрәт төзүе хатасы: $1",
+       "thumbnail_error_remote": "$1 дан хата турында хәбәр:\n$2",
        "import": "Битләр кертү",
        "importinterwiki": "Башка викидан кертү",
        "import-interwiki-text": "Викины һәм кертелүче битнең исемен языгыз.\nҮзгәртүләр вакыты һәм аның авторлары сакланачак.\nБөтен викиара күчерүләр [[Special:Log/import|махсус журналда]] сакланачак.",
        "tooltip-p-logo": "Баш биткә күчү",
        "tooltip-n-mainpage": "Баш биткә күчү",
        "tooltip-n-mainpage-description": "Баш биткә күчү",
-       "tooltip-n-portal": "Ð\91Ñ\83 Ð¿Ñ\80оекÑ\82 Ñ\82Ñ\83Ñ\80Ñ\8bнда, Ð¼Ð¾Ð½Ð´Ð° нәрсә итә аласыз һәм кайда нәрсәдер таба аласыз",
+       "tooltip-n-portal": "Ð\91Ñ\83 Ð¿Ñ\80оекÑ\82 Ñ\82Ñ\83Ñ\80Ñ\8bнда, Ð±Ð¸Ñ\80едÓ\99 нәрсә итә аласыз һәм кайда нәрсәдер таба аласыз",
        "tooltip-n-currentevents": "Хәзерге вакыйгалар турында мәгълүматны табарга",
        "tooltip-n-recentchanges": "Соңгы үзгәрешләр исемлеге",
        "tooltip-n-randompage": "Очраклы битне карау",
        "tooltip-t-emailuser": "{{GENDER:$1|Бу кулланучыга}} хат җибәрү",
        "tooltip-t-upload": "Файллар төяү",
        "tooltip-t-specialpages": "Барлык махсус битләр исемлеге",
-       "tooltip-t-print": "Бу битнең басма юрамасы",
+       "tooltip-t-print": "Бу битнең басма версиясе",
        "tooltip-t-permalink": "Битнең бу юрамасына даими сылтама",
        "tooltip-ca-nstab-main": "Мәкаләнең эчтәлеге",
        "tooltip-ca-nstab-user": "Кулланучының шәхси бите",
        "tooltip-rollback": "\"Кире кайтару\" соңгы кулланучының бу биттә ясаган '''барлык''' үзгәртүләрен бетерә.",
        "tooltip-undo": "Бу үзгәртүне алдан карап үткәрмәү. Шулай ук үткәрмәүнең сәбәбен язып була.",
        "tooltip-preferences-save": "Көйләнмәләрегезне саклау",
-       "tooltip-summary": "Кыска исемен кертү",
+       "tooltip-summary": "Кыскача аңлатманы кертегез",
        "common.css": "/*  Монда урнаштырылган CSS башкаларында да урнашачак */",
        "anonymous": "{{grammar:genitive|{{SITENAME}}}} {{PLURAL:$1|1=Аноним кулланучысы|Аноним кулланучылары}}",
        "siteuser": "{{SITENAME}} кулланучысы $1",
        "pageinfo-header-restrictions": "Битне яклау",
        "pageinfo-header-properties": "Битнең үзенчәлекләре",
        "pageinfo-display-title": "Күренмә башлык",
-       "pageinfo-default-sort": "Гадәти сайлау ачкычы",
-       "pageinfo-length": "Бит озынлыгы (байтларда)",
+       "pageinfo-default-sort": "Гадәттәге тәртипләү ачкычы",
+       "pageinfo-length": "Бит озынлыгы (байт)",
+       "pageinfo-namespace": "Исемнәр киңлеге",
        "pageinfo-article-id": "Бит идентификаторы",
        "pageinfo-language": "Битнең теле",
        "pageinfo-language-change": "үзгәртү",
        "metadata-expand": "Өстәмә мәгълүматларны күрсәтү",
        "metadata-collapse": "Өстәмә мәгълүматларны яшерү",
        "metadata-fields": "Бу исемлеккә кергән метабирелмәләр кырлары рәсем битендә күрсәтелер, калганнары исә килешү буенча яшерелер.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
-       "namespacesall": "барлык",
-       "monthsall": "барлык",
-       "recreate": "Яңадан ясау",
+       "namespacesall": "барысы",
+       "monthsall": "барысы",
+       "invalidateemail": "Электрон почта адресын раслауны кире алу",
+       "recreate": "Яңадан төзү",
+       "unit-pixel": "нкт",
        "confirm_purge_button": "Ярар",
        "confirm-purge-top": "Бу битнең кэшы чистартылсынмы?",
        "confirm-purge-bottom": "Кэшны чистартудан соң аның соңгы юрамасы күрсәтеләчәк.",
        "imgmultipagenext": "киләсе бит →",
        "imgmultigo": "Күчү!",
        "imgmultigoto": "$1 битенә күчү",
+       "img-lang-default": "(гадәттәге тел)",
        "img-lang-go": "Башкару",
        "ascending_abbrev": "үсү",
        "descending_abbrev": "кимү",
        "table_pager_empty": "Нәтиҗә юк",
        "autoredircomment": "[[$1]] битенә юнәлтү",
        "autosumm-new": "Яңа бит: «$1»",
+       "size-bytes": "$1 {{PLURAL:$1|байт}}",
+       "size-kilobytes": "$1 Кб",
+       "size-megabytes": "$1 Мб",
+       "size-gigabytes": "$1 Гб",
+       "size-terabytes": "$1 Тб",
+       "size-petabytes": "$1 Пб",
+       "size-exabytes": "$1 Эб",
+       "size-zetabytes": "$1 Зб",
+       "size-yottabytes": "$1 Иб",
+       "size-pixel": "$1 {{PLURAL:$1|нокта}}",
+       "size-kilopixel": "$1 Кнкт",
+       "size-megapixel": "$1 Мнкт",
+       "size-gigapixel": "$1 Гнкт",
+       "size-terapixel": "$1 Тнкт",
+       "size-petapixel": "$1 Пнкт",
+       "size-exapixel": "$1 Энкт",
+       "size-zetapixel": "$1 Знкт",
+       "size-yottapixel": "$1 Инкт",
+       "bitrate-bits": "$1 б/с",
+       "bitrate-kilobits": "$1 Кб/с",
+       "bitrate-megabits": "$1 Мб/с",
+       "bitrate-gigabits": "$1 Гб/с",
+       "bitrate-terabits": "$1 Тб/с",
+       "bitrate-petabits": "$1 Пб/с",
+       "bitrate-exabits": "$1 Эб/с",
+       "bitrate-zetabits": "$1 Зб/с",
+       "bitrate-yottabits": "$1 Иб/с",
        "watchlistedit-raw-titles": "Язмалар:",
        "watchlistedit-raw-submit": "Исемлекне саклау",
+       "watchlistedit-clear-title": "Күзәтү исемлеген бушату",
+       "watchlistedit-clear-legend": "Күзәтү исемлеген бушату",
+       "watchlistedit-clear-explain": "Күзәтү исемлегендә барлык язмалар бетереләчәк",
        "watchlistedit-clear-titles": "Башлык:",
+       "watchlistedit-clear-submit": "Күзәтү исемлеген бушату (кире кайтарып булмый!)",
+       "watchlistedit-clear-done": "Сезнең күзәтү исемлегегез бушатылды.",
+       "watchlistedit-clear-jobqueue": "Күзәтү исемлеге бушатуы бара. Моның өчен бераз вакыт кирәк!",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|Бер генә язма|$1 язма}} бетерелде:",
+       "watchlistedit-too-many": "Биредә күрсәтү өчен битләр саны артык күп.",
        "watchlisttools-clear": "Күзәтү исемлеген бушату",
-       "watchlisttools-view": "СоңгÑ\8b Ò¯Ð·Ð³Ó\99Ñ\80Ñ\82үлÓ\99Ñ\80не ÐºÒ¯Ñ\80Ñ\81Ó\99Ñ\82Ò¯",
+       "watchlisttools-view": "Ð\98Ñ\81емлекÑ\82Ó\99ге Ð±Ð¸Ñ\82лÓ\99Ñ\80ендÓ\99 Ò¯Ð·Ð³Ó\99Ñ\80еÑ\88лÓ\99Ñ\80",
        "watchlisttools-edit": "Күзәтү исемлеген карау һәм үзгәртү",
        "watchlisttools-raw": "Текст сыман үзгәртү",
+       "iranian-calendar-m1": "хәмәл",
+       "iranian-calendar-m2": "сәвер",
+       "iranian-calendar-m3": "җәүза",
+       "iranian-calendar-m4": "саратан",
+       "iranian-calendar-m5": "әсәт",
+       "iranian-calendar-m6": "сөмбелә",
+       "iranian-calendar-m7": "мизан",
+       "iranian-calendar-m8": "гакрәп",
+       "iranian-calendar-m9": "кавәс",
+       "iranian-calendar-m10": "җәди",
+       "iranian-calendar-m11": "дәлү",
+       "iranian-calendar-m12": "хут",
        "hijri-calendar-m1": "Мөхәррәм",
-       "hijri-calendar-m7": "Раҗәб",
+       "hijri-calendar-m2": "Сәфәр",
+       "hijri-calendar-m3": "Рабигыль-әүвәл",
+       "hijri-calendar-m4": "Рабигыль-ахыр",
+       "hijri-calendar-m5": "Җөмадиәл-әүвәл",
+       "hijri-calendar-m6": "Җөмадиәл-ахыр",
+       "hijri-calendar-m7": "Рәҗәп",
+       "hijri-calendar-m8": "Шәгъбан",
        "hijri-calendar-m9": "Рамазан",
+       "hijri-calendar-m10": "Шәүвәл",
+       "hijri-calendar-m11": "Зөлкагдә",
+       "hijri-calendar-m12": "Зөлхиҗҗә",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|бәхәс]])",
+       "timezone-local": "Җирле",
        "duplicate-defaultsort": "Игътибар. Уйланма куелган \"$2\" бүлгәләү ачкычы элеккеге уйланма куелган \"$1\" бүлгәләү ачкычын үзгәртә.",
-       "version": "ЮÑ\80ама",
+       "version": "Ð\92еÑ\80Ñ\81иÑ\8f",
        "version-extensions": "Куелган киңәйтүләр",
        "version-specialpages": "Махсус битләр",
+       "version-editors": "Төзәткечләр",
+       "version-antispam": "Спам кисәтү",
        "version-other": "Башка",
        "version-hook-subscribedby": "Түбәндәгеләргә язылган:",
        "version-no-ext-name": "[исемсез]",
        "version-ext-license": "Лицензия",
        "version-ext-colheader-name": "Киңәйтүләр",
        "version-skin-colheader-name": "Күренеш",
-       "version-ext-colheader-version": "ЮÑ\80ама",
+       "version-ext-colheader-version": "Ð\92еÑ\80Ñ\81иÑ\8f",
        "version-ext-colheader-license": "Лицензия",
        "version-ext-colheader-description": "Тасвирлама",
        "version-ext-colheader-credits": "Авторлар",
        "version-software-version": "Версия",
        "version-entrypoints-header-url": "URL",
        "version-libraries-library": "Китапханә",
-       "version-libraries-version": "ЮÑ\80ама",
+       "version-libraries-version": "Ð\92еÑ\80Ñ\81иÑ\8f",
        "version-libraries-license": "Лицензия",
        "version-libraries-description": "Тасвирлама",
        "version-libraries-authors": "Авторлар",
        "redirect-revision": "Бит юрамасы",
        "redirect-file": "Файл исеме",
        "fileduplicatesearch": "Бер үк файлларны эзләү",
+       "fileduplicatesearch-filename": "Файл исеме:",
        "fileduplicatesearch-submit": "Эзләү",
        "fileduplicatesearch-info": "$1 × $2 нокта<br />Файл зурлыгы: $3<br />MIME төре: $4",
        "specialpages": "Махсус битләр",
        "specialpages-group-maintenance": "Техник карау хисапнамәсе",
        "specialpages-group-other": "Башка махсус битләр",
        "specialpages-group-login": "Керү / Теркәлү",
-       "specialpages-group-changes": "Соңгы үзгәртүләр",
+       "specialpages-group-changes": "Соңгы үзгәрешләр һәм көндәлекләр",
        "specialpages-group-media": "Йөкләү һәм медиа-файллар хисапнамәсе",
        "specialpages-group-users": "Кулланучылар һәм аларның хокуклары",
        "specialpages-group-highuse": "Еш кулланылучы битләр",
        "specialpages-group-pages": "Битләр исемлеге",
        "specialpages-group-pagetools": "Бит өчен кораллар",
-       "specialpages-group-wiki": "Мәгълүмат һәм җиһазлар",
+       "specialpages-group-wiki": "Мәгълүматлар һәм кораллар",
        "specialpages-group-redirects": "Күчерелүче махсус битләр",
        "specialpages-group-spam": "Спамга каршы кораллар",
        "blankpage": "Буш бит",
        "intentionallyblankpage": "Бу бит махсус буш калдырылган",
        "external_image_whitelist": "#Бу юлны ничек бар, шулаө калдырыгыз<pre>\n#Монда даими фразаларның фрагментларын куегыз (// арасында торган өлешен)\n#алар тышкы сурәтләрнең URL белән бәйләнерләр.\n#Туры килгәннәре сурәт буларак, туры килмәгәннәре сурәткә сылтама буларак күрсәтеләчәкләр.\n# # билгесе белән башланучы юллар шәрехнамә дип саналалар.\n#Юллар регистрга игътибар бирмиләр.\n\n#Даими фразаларның фрагментларын бу кыр өстендә куегыз. Бу кырны ничек бар, шулай калдырыгыз.</pre>",
-       "tags": "Гамәлдә булучы үзгәртүләр билгеләре",
-       "tag-filter": "[[Special:Tags|Ð\91илгелÓ\99р]] сөзгече:",
+       "tags": "Гамәлдәге үзгәреш тамгалары",
+       "tag-filter": "[[Special:Tags|Тамгалар]] сөзгече:",
        "tag-filter-submit": "Сөзү",
-       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|1=Билге|Билгеләр}}]]: $2",
-       "tags-title": "Теглар",
-       "tags-intro": "Әлеге сәхифәдә төзәтүләрне билгеләгән, программа тәэмин итә торган теглар исемлеге һәм шул тегларның аңламнары китерелгән.",
-       "tags-tag": "Тег исеме",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|1=Тамга|Тамгалар}}]]: $2",
+       "tag-mw-new-redirect": "яңа юнәлтү",
+       "tag-mw-removed-redirect": "юнәлтү бетерелгән",
+       "tag-mw-changed-redirect-target": "юнәлтү максаты үзгәртелгән",
+       "tag-mw-blank": "бушату",
+       "tag-mw-replace": "алмаштыру",
+       "tag-mw-rollback": "кире кайтару",
+       "tags-title": "Тамгалар",
+       "tags-intro": "Бу биттә программа тарафыннан төзәтмәне билгеләү өчен кулланылган тамгалар һәм аларның мәгънәсе исемлеге китерелгән",
+       "tags-tag": "Тамга исеме",
+       "tags-display-header": "Үзгәрешләр исемлегендә күренеше",
+       "tags-description-header": "Мәгънәсенең тулы тасвирламасы",
        "tags-source-header": "Чыганак",
+       "tags-active-header": "Кулланыштамы?",
+       "tags-hitcount-header": "Тамгаланган үзгәрешләр",
+       "tags-actions-header": "Гамәлләр",
        "tags-active-yes": "Әйе",
        "tags-active-no": "Юк",
        "tags-source-extension": "Тәэминат тарафыннан билгеләнә",
        "tags-activate": "активлаштыру",
        "tags-deactivate": "сүндерү",
        "tags-hitcount": "$1 {{PLURAL:$1|үзгәреш}}",
+       "tags-manage-no-permission": "Сезнең үзгәртү тамгаларын идарә итәргә хакыгыз юк.",
+       "tags-create-heading": "Яңа тамга төзү",
+       "tags-create-tag-name": "Билге исеме:",
+       "tags-create-reason": "Сәбәп:",
        "tags-create-submit": "Төзү",
+       "tags-delete-title": "Тамга бетерү",
+       "tags-delete-reason": "Сәбәп:",
+       "tags-delete-no-permission": "Сезнең үзгәртү тамгаларын бетерергә хакыгыз юк.",
+       "tags-activate-title": "Тамга активлаштыру",
+       "tags-activate-reason": "Сәбәп:",
+       "tags-activate-not-found": "«$1» тамгасы барлыкта юк.",
+       "tags-activate-submit": "Активлаштыру",
+       "tags-deactivate-reason": "Сәбәп:",
        "tags-deactivate-submit": "Өзергә",
+       "tags-apply-no-permission": "Сезнең үзегезнең үзгәрешләренә үзгәртү тамгаларын кулланырга хакыгыз юк.",
+       "tags-update-no-permission": "Сезнең аерым юрамалардан яки көндәлек язмалардан үзгәртү тамгаларын өстәргә яки бетерергә хакыгыз юк.",
+       "tags-edit-title": "Тамгаларны үзгәртү",
+       "tags-edit-manage-link": "Тамгаларны идарә итү",
+       "tags-edit-existing-tags": "Бар тамгалар:",
+       "tags-edit-existing-tags-none": "<em>Юк</em>",
+       "tags-edit-new-tags": "Яңа тамгалар:",
+       "tags-edit-add": "Бу тамгаларны өстәү:",
+       "tags-edit-remove": "Бу тамгалар бетерү:",
+       "tags-edit-remove-all-tags": "(бөтен тамгалар бетерү)",
+       "tags-edit-reason": "Сәбәп:",
        "comparepages": "Битләрне чагыштыру",
        "compare-page1": "Беренче бит",
        "compare-page2": "Икенче бит",
        "logentry-newusers-create": "{{GENDER:$2|Кулланучы}} $1 хисап язмасын төзеде",
        "logentry-newusers-create2": "$1 - $3 исемле хисап язмасы {{GENDER:$2|төзеде}}",
        "logentry-newusers-autocreate": "{{GENDER:$2|кулланучының}} автоматик рәвештә $1 хисап язмасы төзелде",
-       "logentry-upload-upload": "$1 {{GENDER:$2|йөкләде}} $3",
-       "logentry-upload-overwrite": "$1 $3 өчен яңа юрама {{GENDER:$2|йөкләде}}",
+       "logentry-upload-upload": "$1 {{GENDER:$2|төяде}} $3",
+       "logentry-upload-overwrite": "$1 $3 өчен яңа версия {{GENDER:$2|төяде}}",
+       "logentry-upload-revert": "$1 $3 өчен иске версияне кире {{GENDER:$2|кайтарды}}",
+       "log-name-tag": "Тамгалар көндәлеге",
        "rightsnone": "(юк)",
        "feedback-adding": "Фикерне сәхифәгә өстәү ...",
        "feedback-back": "Кирегә",
-       "feedback-bugnew": "Мин тикшердем. Яңа хата турында хәбәр итү",
+       "feedback-bugnew": "Мин тикшердем. Яңа хата турында белдерү",
        "feedback-bugornote": "Әгәр дә сез техник проблеманы җентекләп тасвирларга әзер икәнсез, зинһар өчен, [$1 хата турында хәбәр итегез].\nБашка очракта сез түбәндәге гади форманы куллана аласыз. Сезнең шәрехләмә \"[$3 $2]\" сәхифәсенә сезнең кулланучы исеме һәм сез кулланган браузер исеме белән бергә өстәләчәк.",
        "feedback-cancel": "Кире алу",
        "feedback-close": "Тәмам",
        "expand_templates_output": "Нәтиҗә",
        "expand_templates_ok": "Ярар",
        "expand_templates_preview": "Алдан карау",
+       "pagelanguage": "Бит телен үзгәртү",
        "pagelang-name": "Бит",
        "pagelang-language": "Тел",
+       "pagelang-use-default": "Гадәттәге телне кулланырга",
+       "pagelang-select-lang": "Телне сайлагыз",
+       "pagelang-reason": "Сәбәп",
+       "pagelang-submit": "Җибәрү",
+       "pagelang-nonexistent-page": "$1 бите барлыкта юк.",
+       "right-pagelang": "Бит телен үзгәртү",
+       "action-pagelang": "бит телен үзгәртергә",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (ачык)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>ябык</strong>)",
-       "mediastatistics": "Медиа хисабы",
+       "mediastatistics": "Медиа статистикасы",
+       "mediastatistics-header-unknown": "Билгесез",
        "mediastatistics-header-audio": "Аудио",
        "mediastatistics-header-video": "Видео",
+       "mediastatistics-header-office": "Документлар",
+       "mediastatistics-header-executable": "Башкарылган",
        "special-characters-group-latin": "Латин",
        "special-characters-group-latinextended": "Латин (киңәйтелгән)",
        "special-characters-group-ipa": "ХФӘ (IPA)",
-       "special-characters-group-symbols": "Тамгалар",
+       "special-characters-group-symbols": "Ð\91илгелÓ\99р",
        "special-characters-group-greek": "Грек",
        "special-characters-group-greekextended": "Грек (киңәйтелгән)",
        "special-characters-group-cyrillic": "Кирилл",
        "randomrootpage": "Очраклы төп бит",
        "log-action-filter-all": "Барысы",
        "log-action-filter-block-block": "Тыю",
+       "log-action-filter-managetags-create": "Тамга төзү",
+       "log-action-filter-managetags-delete": "Тамга бетерү",
+       "log-action-filter-managetags-activate": "Тамга активлаштыру",
+       "log-action-filter-managetags-deactivate": "Тамга өзү",
+       "log-action-filter-protect-protect": "Яклау",
        "authmanager-email-label": "Электрон почта",
        "authmanager-email-help": "Электрон почта адресы",
-       "authmanager-realname-label": "Чын исеме",
+       "authmanager-realname-label": "Чын исем",
+       "authmanager-realname-help": "Кулланычының чын исеме",
+       "authprovider-confirmlink-failed-line": "$1: $2",
        "authprovider-resetpass-skip-label": "Калдыру",
        "edit-error-short": "Хата: $1",
        "edit-error-long": "Хаталар:\n\n$1",
        "specialmute": "Белдерүсез",
+       "specialmute-submit": "Раслау",
+       "mute-preferences": "Белдерүсез көйләнмәләре",
        "revid": "юрама $1",
        "pagedata-title": "Бит мәгълүматлары",
+       "pagedata-bad-title": "Яраксыз атама: $1.",
        "passwordpolicies-group": "Төркем",
-       "passwordpolicies-policies": "Кагыйдәләр"
+       "passwordpolicies-policies": "Кагыйдәләр",
+       "userlogout-continue": "Чыгасыгыз киләме?"
 }
index 7e49ece..9fd4840 100644 (file)
        "systemblockedtext": "Ваше ім'я користувача або IP-адресу було автоматично заблоковано MediaWiki.\nВказана причина:\n\n:<em>$2</em>\n\n* Початок блокування: $8\n* Закінчення блокування: $6\n* Ціль блокування: $7\n\nВаша поточна IP-адреса — $3.\nБудь ласка, додайте всі вказані подробиці до будь-яких запитів, які Ви будете робити.",
        "blockednoreason": "не вказано причини",
        "blockedtext-composite": "<strong>Ваше ім'я користувача або IP-адресу було заблоковано.</strong>\n\nВказана причина:\n\n:<em>$2</em>.\n\n* Початок блокування: $8\n* Закінчення найдовшого блокування: $6\n\n* $5\n\nВаша поточна IP-адреса — $3.\nБудь ласка, додайте всі вказані подробиці до будь-яких запитів, які Ви будете робити.",
+       "blockedtext-composite-ids": "Релевантні ідентифікатори блокування: $1 (ваша IP-адреса може також бути в чорному списку)",
+       "blockedtext-composite-no-ids": "Ваша IP-адреса наявна у кількох чорних списках",
        "blockedtext-composite-reason": "Встановлено кілька блокувань для Вашого облікового запису та/або IP-адреси",
        "whitelistedittext": "Ви повинні $1, щоб редагувати сторінки.",
        "confirmedittext": "Ви повинні підтвердити вашу адресу електронної пошти перед редагуванням сторінок.\nБудь-ласка вкажіть і підтвердіть вашу електронну адресу на [[Special:Preferences|сторінці налаштувань]].",
        "search-interwiki-more": "(більше)",
        "search-interwiki-more-results": "більше результатів",
        "search-relatedarticle": "Пов'язаний",
+       "search-invalid-sort-order": "Порядок сортування $1 нерозпізнаний, буде застосовано сортування за замовчуванням. Дійсні варіанти порядку сортування: $2",
+       "search-unknown-profile": "Пошуковий профіль $1 нерозпізнано, буде застосовано пошуковий профіль за замовчуванням.",
        "searchrelated": "пов'язаний",
        "searchall": "усі",
        "showingresults": "Нижче {{PLURAL:$1|показане|показані|показані}} '''$1''' {{PLURAL:$1|результат|результати|результатів}}, починаючи з №&nbsp;'''$2'''",
        "right-editmyusercss": "редагування власних CSS-файлів користувача",
        "right-editmyuserjson": "редагування власних JSON-файлів користувача",
        "right-editmyuserjs": "редагування власних JavaScript-файлів користувача",
+       "right-editmyuserjsredirect": "редагування власних користувацьких файлів JavaScript, які є перенаправленнями",
        "right-viewmywatchlist": "перегляд власного списку спостереження",
        "right-editmywatchlist": "редагування власного списку спостереження; зверніть увагу, що деякі дії будуть додавати сторінки навіть без такого права.",
        "right-viewmyprivateinfo": "перегляд власних приватних даних (напр., адреса електронної пошти, справжнє ім'я)",
        "action-editmyusercss": "редагування власних CSS-файлів користувача",
        "action-editmyuserjson": "редагування власних JSON-файлів користувача",
        "action-editmyuserjs": "редагування власних JavaScript-файлів користувача",
+       "action-editmyuserjsredirect": "редагування власних користувацьких файлів JavaScript, які є перенаправленнями",
        "action-viewsuppressed": "перегляд змін, прихованих від усіх користувачів",
        "action-hideuser": "блокування імені користувача і приховування його",
        "action-ipblock-exempt": "уникнення IP-блокування, автоблокування і блокування діапазонів",
        "rcfilters-clear-all-filters": "Очистити фільтри",
        "rcfilters-show-new-changes": "Переглянути нові зміни з $1",
        "rcfilters-search-placeholder": "Фільтрувати зміни (використовуйте меню, або скористайтесь пошуком фільтра за назвою)",
+       "rcfilters-search-placeholder-mobile": "Фільтри",
        "rcfilters-invalid-filter": "Недійсний фільтр",
        "rcfilters-empty-filter": "Без фільтрів. Показано всі зміни.",
        "rcfilters-filterlist-title": "Фільтри",
        "changecontentmodel": "Змінити модель вмісту сторінки",
        "changecontentmodel-legend": "Змінити модель вмісту",
        "changecontentmodel-title-label": "Назва сторінки",
+       "changecontentmodel-current-label": "Поточна модель вмісту:",
        "changecontentmodel-model-label": "Нова модель вмісту",
        "changecontentmodel-reason-label": "Причина:",
        "changecontentmodel-submit": "Змінити",
        "block-log-flags-angry-autoblock": "увімкнене покращене автоблокування",
        "block-log-flags-hiddenname": "ім'я користувача приховане",
        "range_block_disabled": "Адміністраторам заборонено блокувати діапазони.",
+       "ipb-prevent-user-talk-edit": "Редагування власної сторінки обговорення має бути дозволеним під час часткового блокування, якщо тільки немає обмеження на простір назв «Обговорення користувача».",
        "ipb_expiry_invalid": "Невірно вказано термін.",
        "ipb_expiry_old": "Час закінчення — в минулому.",
        "ipb_expiry_temp": "Блокування із приховуванням імені користувача мають бути безстроковими.",
        "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-noredirectsupport": "Використання форми нижче перейменує сторінку, перемістивши всю її історію на нову назву.\nЦе ваша відповідальність переконатися, що посилання продовжують вказувати туди, куди повинні.\n\nЗверніть увагу, що сторінка <strong>не</strong> буде перейменована, якщо уже існує сторінка з новою назвою.\nЦе означає, що ви можете перейменувати сторінку назад, якщо перейменували її помилково, але не можете перезаписати наявну сторінку.\n\n<strong>Примітка:</strong>\nДля популярної сторінки це може бути крутою і неочікуваною зміною;\nбудь ласка, переконайтеся, що ви розумієте наслідки, перш ніж продовжити.",
        "movepagetalktext": "Якщо ви встановите тут прапорець, приєднана сторінка обговорення також буде автоматично перейменована, окрім випадку, коли непорожня сторінка обговорення з такою назвою вже існує.\n\nУ цьому разі ви будете змушені перейменувати чи об'єднати сторінки вручну в разі необхідності.",
        "moveuserpage-warning": "'''Увага:''' Ви збираєтеся перейменувати сторінку користувача. Будь ласка, зверніть увагу, що  буде перейменовано тільки сторінку, але користувача '''не''' буде перейменовано.",
        "movecategorypage-warning": "<strong>Увага:</strong> Ви збираєтесь перейменувати сторінку категорії. Будь ласка, зауважте, що це перейменує лише цю сторінку, <em>не</em> перемістивши сторінки, що входять до категорії до категорії з новою назвою.",
        "permanentlink": "Постійне посилання",
        "permanentlink-revid": "Ідентифікатор версії",
        "permanentlink-submit": "Перейти до версії",
+       "newsection": "Новий розділ",
+       "newsection-page": "Цільова сторінка",
+       "newsection-submit": "Перейти до сторінки",
        "dberr-problems": "Вибачте! На цьому сайті виникли технічні труднощі.",
        "dberr-again": "Спробуйте оновити сторінку за кілька хвилин.",
        "dberr-info": "(неможливо з'єднатися з сервером баз даних: $1)",
        "linkaccounts": "Пов'язати облікові записи",
        "linkaccounts-success-text": "Обліковий запис було пов'язано.",
        "linkaccounts-submit": "Пов'язати облікові записи",
+       "cannotunlink-no-provider-title": "Немає прив'язаних облікових записів для відв'язування",
+       "cannotunlink-no-provider": "Немає прив'язаних облікових записів, які можна відв'язати.",
        "unlinkaccounts": "Відв'язати облікові записи",
        "unlinkaccounts-success": "Обліковий запис було відв'язано.",
        "authenticationdatachange-ignored": "Неопрацьована зміна облікових даних. Можливо, жоден з провайдерів не був налаштований?",
        "restrictionsfield-help": "Одна IP-адреса або CIDR-діапазон на рядок. Щоб увімкнути все, використайте:<pre>0.0.0.0/0\n::/0</pre>",
        "edit-error-short": "Помилка: $1",
        "edit-error-long": "Помилки:\n\n$1",
+       "specialmute": "Без звуку",
+       "specialmute-success": "Ваші налаштування «без звуку» були оновлені. Перегляньте усіх знемовлених користувачів у [[Special:Preferences|своїх налаштуваннях]].",
+       "specialmute-submit": "Підтвердити",
+       "specialmute-label-mute-email": "Вимкнути звук для електронних листів від цього користувача",
+       "specialmute-header": "Будь ласка, виберіть налаштування своїх сповіщень для користувача <b>{{BIDI:[[User:$1|$1]]}}</b>.",
+       "specialmute-error-invalid-user": "Вказане вами ім'я користувача не знайдено.",
+       "specialmute-error-no-options": "Функції знемовлення недоступні. Причиною цьому може бути те, що ви не підтвердили свою адресу електронної пошти, або ж адміністратор вікі вимкнув функції електронної пошти та/або чорний список електронок у цій вікі.",
+       "specialmute-email-footer": "Щоб керувати налаштуваннями електронної пошти від користувача {{BIDI:$2}}, будь ласка, перейдіть на <$1>.",
+       "specialmute-login-required": "Будь ласка, увійдіть, щоб змінити ваші налаштування знемовлення.",
+       "mute-preferences": "Налаштування «без звуку»",
        "revid": "версія $1",
        "pageid": "ID сторінки $1",
        "interfaceadmin-info": "$1\n\nПрава на редагування загальних CSS/JS/JSON-файлів недавно винесено з права <code>editinterface.</code> Якщо Ви не розумієте, чому Ви наткнулись на цю помилку, див. [[mw:MediaWiki_1.32/interface-admin]].",
        "passwordpolicies-policy-passwordnotinlargeblacklist": "Пароль не може перебувати у списку 100 000 найчастіше вживаних паролів.",
        "passwordpolicies-policyflag-forcechange": "має бути змінено при вході",
        "passwordpolicies-policyflag-suggestchangeonlogin": "запропонувати зміну при вході",
+       "mycustomjsredirectprotected": "У вас немає прав редагувати цю сторінку JavaScript, тому що вона є перенаправленням і не веде у ваш користувацький простір.",
        "easydeflate-invaliddeflate": "Наданий вміст не стиснений належним чином",
        "unprotected-js": "З міркувань безпеки JavaScript не можна запускати з незахищених сторінок. Будь ласка, створюйте javascript лише в просторі MediaWiki, або як особисту підсторінку користувача.",
        "userlogout-continue": "Ви хочете вийти із системи?"
index c4ffa03..f90ceb0 100644 (file)
@@ -87,6 +87,7 @@
        "tog-norollbackdiff": "استرجع کے بعد فرق نہ دکھائیں",
        "tog-useeditwarning": "غیر محفوظ تبدیلیاں چھوڑنے پر مجھے آگاہ کریں",
        "tog-prefershttps": "داخل رہنے کے دوران میں ہمیشہ محفوظ کنیکشن استعمال کریں",
+       "tog-showrollbackconfirmation": "استرجع کے ربط پر کلک کرنے کے بعد تصدیق کا پیغام دکھائیں",
        "underline-always": "ہمیشہ",
        "underline-never": "کبھی نہیں",
        "underline-default": "پوشاک یا براؤزر کا طے شدہ",
        "history": "تاریخچۂ صفحہ",
        "history_short": "تاریخچہ",
        "history_small": "تاریخچہ",
-       "updatedmarker": "میری آخری آمد کے بعد تجدید شدہ",
+       "updatedmarker": "آپ کی آخری آمد کے بعد تجدید شدہ",
        "printableversion": "قابل طبع نسخہ",
        "permalink": "مستقل ربط",
        "print": "طباعت",
        "defaultmessagetext": "طے شدہ پیغام کا متن",
        "content-failed-to-parse": "ماڈل $1 کے $2 مواد کے تجزیہ میں ناکامی: $3",
        "invalid-content-data": "نادرست ڈیٹا مندرجات",
-       "content-not-allowed-here": "صفحہ [[:$2]] پر \"$1\" مواد کی اجازت نہیں",
+       "content-not-allowed-here": "صفحہ [[:$2]] کے قطعہ \"$3\" میں \"$1\" مواد کی اجازت نہیں",
        "editwarning-warning": "اس صفحہ کو چھوڑنے پر ممکن ہے جو تبدیلیاں آپ نے کی ہیں وہ سب ضائع ہو جائیں۔\nاگر آپ داخل ہیں تو اپنی ترجیحات کے خانہ «{{int:prefs-editing}}» سے اس انتباہ کو غیر فعال کر سکتے ہیں۔",
        "editpage-invalidcontentmodel-title": "مواد کا ماڈل معاونت یافتہ نہیں",
        "editpage-invalidcontentmodel-text": "مواد کا ماڈل \"$1\" معاونت یافتہ نہیں ہے۔",
        "editpage-notsupportedcontentformat-title": "مواد کا فارمیٹ معاونت یافتہ نہیں",
        "editpage-notsupportedcontentformat-text": "مواد کے ماڈل $2 کی جانب سے مواد کا فارمیٹ $1 معاونت یافتہ نہیں۔",
+       "slot-name-main": "اصل",
        "content-model-wikitext": "ویکی متن",
        "content-model-text": "سادہ متن",
        "content-model-javascript": "جاوا اسکرپٹ",
        "history-feed-item-nocomment": "بہ $2 $1",
        "history-feed-empty": "درخواست کردہ صفحہ موجود نہیں۔\nممکن ہے کہ اسے ویکی سے حذف کر دیا گیا ہو یا اِس کا نام تبدیل کردیا گیا ہو۔\nآپ متعلقہ نئے صفحات کو [[Special:Search|ویکی پر تلاش]] کرسکتے ہیں۔",
        "history-edit-tags": "منتخب نظرثانیوں کے ٹیگوں میں ترمیم کریں",
-       "rev-deleted-comment": "(تبصرہ حذف کی گيا ہے)",
-       "rev-deleted-user": "(صارف نام حذف کیا گيا ہے)",
+       "rev-deleted-comment": "خلاصہ ترمیم حذف کیا",
+       "rev-deleted-user": "صارف نام حذف کیا",
        "rev-deleted-event": "(نوشتہ کی تفصیلات ہٹا دی گئیں)",
        "rev-deleted-user-contribs": "[صارف نام یا آئی پی پتہ ہٹا دیا گیا - شراکتوں سے ترمیم پوشیدہ ہو گئی]",
        "rev-deleted-text-permission": "پیش نظر صفحہ کی یہ ترمیم <strong>حذف کر دی گئی ہے</strong>۔\nمزید تفصیلات [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} نوشتہ حذف شدگی] میں دیکھی جا سکتی ہیں۔",
        "revdelete-hide-text": "نظرثانی متن چھپاؤ",
        "revdelete-hide-image": "فائل کے مشمولات چھپائیں",
        "revdelete-hide-name": "ہدف اور پیرامیٹرز کو چھپائیں",
-       "revdelete-hide-comment": "ترÙ\85Û\8cÙ\85Û\8c ØªØ¨ØµØ±Û\81 Ú\86ھپاؤ",
+       "revdelete-hide-comment": "Ø®Ù\84اصÛ\81 ØªØ±Ù\85Û\8cÙ\85",
        "revdelete-hide-user": "ترمیم کنندہ کا صارف نام/آئی پی پتہ چھپائیں",
        "revdelete-hide-restricted": "منتظمین اور دیگر صارفین سے معلومات کو پوشیدہ کریں",
        "revdelete-radio-same": "(تبدیل مت کرو)",
        "mycontris": "شراکتیں",
        "anoncontribs": "شراکتیں",
        "contribsub2": "{{GENDER:$3|$1}} ($2)",
+       "contributions-subtitle": "برائے {{GENDER:$3|$1}}",
        "contributions-userdoesnotexist": "«$1» کے نام سے صارف کھاتہ مندرج نہیں ہے۔",
        "nocontribs": "اس معیار کے مطابق کوئی ترمیم دستیاب نہیں ہوئی۔",
        "uctop": "موجودہ نسخہ",
index f98efd4..005e6ae 100644 (file)
        "sp-contributions-blocklog": "封鎖日誌",
        "sp-contributions-suppresslog": "壓制咗{{GENDER:$1|user}}嘅用戶貢獻",
        "sp-contributions-deleted": "刪除咗嘅用戶貢獻",
-       "sp-contributions-uploads": "上載",
+       "sp-contributions-uploads": "上載紀錄",
        "sp-contributions-logs": "日誌",
        "sp-contributions-talk": "傾偈",
        "sp-contributions-userrights": "用戶權限管理",
index 257c0b9..e1e5426 100644 (file)
                        "Ps2049",
                        "Suchichi02",
                        "神樂坂秀吉",
-                       "WQL"
+                       "WQL",
+                       "Looong"
                ]
        },
        "tog-underline": "链接下划线:",
        "hidden-categories": "{{PLURAL:$1|隐藏分类}}",
        "hidden-category-category": "隐藏分类",
        "category-subcat-count": "{{PLURAL:$2|本分类只有以下子分类。|本分类有以下$1个子分类,共有$2个子分类。}}",
-       "category-subcat-count-limited": "æ\9c¬å\88\86ç±»æ\9c\89以ä¸\8b{{PLURAL:$1|å­\90å\88\86ç±»|$1个å­\90å\88\86ç±»}}。",
+       "category-subcat-count-limited": "æ­¤å\88\86ç±»æ\9c\89以ä¸\8b$1个å­\90å\88\86ç±»æ\88\96å¤\9a个$1å­\90å\88\86ç±»。",
        "category-article-count": "{{PLURAL:$2|本分类只含有以下页面。|以下{{PLURAL:$1|页面|$1个页面}}属于本分类,共$2个页面。}}",
        "category-article-count-limited": "以下{{PLURAL:$1|页面|$1个页面}}属于当前分类。",
        "category-file-count": "{{PLURAL:$2|本分类只含有以下文件。|以下{{PLURAL:$1|文件|$1个文件}}属于本分类,共$2个文件。}}",
        "redirectedfrom": "(重定向自$1)",
        "redirectpagesub": "重定向页面",
        "redirectto": "重定向至:",
-       "lastmodifiedat": "本页面最后编辑于$1 $2。",
-       "viewcount": "æ\9c¬é¡µé\9d¢å·²ç»\8f被访é\97®è¿\87{{PLURAL:$1|$1次}}。",
+       "lastmodifiedat": "在$2,此页面最后编辑于$1。",
+       "viewcount": "此页é\9d¢å·²ç»\8f被访é\97®è¿\87$1次。",
        "protectedpage": "受保护页面",
        "jumpto": "跳转至:",
        "jumptonavigation": "导航",
        "nstab-image": "文件",
        "nstab-mediawiki": "消息",
        "nstab-template": "模板",
-       "nstab-help": "帮助页面",
+       "nstab-help": "帮助",
        "nstab-category": "分类",
        "mainpage-nstab": "首页",
        "nosuchaction": "无此操作",
        "systemblockedtext": "您的用户名或IP地址已被MediaWiki自动封禁。封禁原因:\n\n:<em>$2</em>\n\n* 开始时间:$8\n* 到期时间:$6\n* 目标用户:$7\n\n您当前的IP地址是$3。请在您做出的任何查询中包含所有上述详情。",
        "blockednoreason": "未给出原因",
        "blockedtext-composite": "您的用户名或IP地址已被封禁。封禁原因:\n\n:<em>$2</em>\n\n* 开始时间:$8\n* 到期时间:$6\n\n* $5\n\n您当前的IP地址是$3。请在您做出的任何查询中包含所有上述详情。",
+       "blockedtext-composite-ids": "相关封锁识别码:$1(您的IP地址也可能被列入黑名单)",
+       "blockedtext-composite-no-ids": "您的IP地址存在于多个黑名单中",
        "blockedtext-composite-reason": "有多个封禁目标为您的账户和/或IP地址",
        "whitelistedittext": "请$1以编辑页面。",
        "confirmedittext": "您必须确认您的电子邮件地址才能编辑页面。请通过[[Special:Preferences|系统设置]]设置并确认您的电子邮件地址。",
        "newarticle": "(新页面)",
        "newarticletext": "您点击了一个尚不存在的页面的链接。要创建该页面,请在下面的编辑框中输入内容(更多信息请见[$1 帮助页面])。如果您是错误地进入了此页面,请点击您的浏览器的<strong>返回</strong>按钮。",
        "anontalkpagetext": "----\n<em>这是一个还未建立账户的匿名用户的讨论页, 因此我们只能用IP地址来与他们联络。</em>该IP地址可能由几名用户共享。如果您是一名匿名用户并认为此页上的评语与您无关,请[[Special:CreateAccount|创建新账户]]或[[Special:UserLogin|登录]]以避免在未来与其他匿名用户混淆。",
-       "noarticletext": "æ\9c¬页面目前没有内容。您可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 创建本页面]</span>。",
-       "noarticletext-nopermission": "æ\9c¬页面目前没有内容。您可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]或<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]</span>,但您没有权限创建本页面。",
+       "noarticletext": "æ­¤页面目前没有内容。您可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]或[{{fullurl:{{FULLPAGENAME}}|action=edit}} 创建本页面]</span>。",
+       "noarticletext-nopermission": "æ­¤页面目前没有内容。您可以在其他页面中[[Special:Search/{{PAGENAME}}|搜索本页标题]]或<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 搜索相关日志]</span>,但您没有权限创建本页面。",
        "missing-revision": "“{{FULLPAGENAME}}”的版本#$1不存在。\n\n这通常是因为进入了一个已被删除的页面的历史链接。详细信息可以在[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} 删除日志]中找到。",
        "userpage-userdoesnotexist": "用户账户“$1”没有注册。请在创建/编辑本页前检查。",
        "userpage-userdoesnotexist-view": "用户账户“$1”没有被注册。",
        "search-interwiki-more": "(更多)",
        "search-interwiki-more-results": "更多结果",
        "search-relatedarticle": "相关",
+       "search-invalid-sort-order": "排序顺序$1无法识别,将应用默认排序。 有效的排序顺序可以是:$2",
+       "search-unknown-profile": "无法识别搜索配置$1,已经应用默认搜索配置",
        "searchrelated": "相关",
        "searchall": "所有",
        "showingresults": "下面显示从第<strong>$2</strong>条结果开始的<strong>$1</strong>条结果。",
        "right-editmyusercss": "编辑您的用户CSS文件",
        "right-editmyuserjson": "编辑您的用户JSON文件",
        "right-editmyuserjs": "编辑您的用户JavaScript文件",
+       "right-editmyuserjsredirect": "编辑您自己的Javascript重定向文件",
        "right-viewmywatchlist": "查看您的监视列表",
        "right-editmywatchlist": "编辑您的监视列表。请留意即使缺少此权限,某些操作仍将添加页面至监视列表。",
        "right-viewmyprivateinfo": "查看您的私人数据(如电子邮件地址、真实姓名)",
        "action-editmyusercss": "编辑您的用户CSS文件",
        "action-editmyuserjson": "编辑您的用户JSON文件",
        "action-editmyuserjs": "编辑您的用户JavaScript文件",
+       "action-editmyuserjsredirect": "编辑您自己的Javascript重定向文件",
        "action-viewsuppressed": "查看被隐藏的任何用户的修订",
        "action-hideuser": "封禁并隐藏用户名",
        "action-ipblock-exempt": "绕过IP封禁、自动封禁和段封禁",
        "rcfilters-clear-all-filters": "清空所有过滤器",
        "rcfilters-show-new-changes": "显示自$1以来的最新更改",
        "rcfilters-search-placeholder": "过滤器更改(使用用于过滤器名称的菜单或搜索功能)",
+       "rcfilters-search-placeholder-mobile": "筛选",
        "rcfilters-invalid-filter": "无效过滤器",
        "rcfilters-empty-filter": "没有应用的过滤器。所有贡献都已显示。",
        "rcfilters-filterlist-title": "过滤器",
        "changecontentmodel": "更改一个页面的内容模型",
        "changecontentmodel-legend": "更改内容类型",
        "changecontentmodel-title-label": "页面标题",
+       "changecontentmodel-current-label": "当前的内容模型:",
        "changecontentmodel-model-label": "新的内容模型",
        "changecontentmodel-reason-label": "原因:",
        "changecontentmodel-submit": "更改",
        "block-log-flags-angry-autoblock": "已启用增强型自动封禁",
        "block-log-flags-hiddenname": "隐藏用户名",
        "range_block_disabled": "管理员执行段封禁的权限已被禁用。",
+       "ipb-prevent-user-talk-edit": "即使是临时封禁,被封禁者仍必须被允许编辑自己的讨论页,除非该封禁包含对用户讨论名字空间的限制。",
        "ipb_expiry_invalid": "无效的终止时间。",
        "ipb_expiry_old": "终止时间已过去。",
        "ipb_expiry_temp": "隐藏用户名的封禁必须是永久性的。",
        "movepagetext": "您可以使用下面的表单来重命名一个页面,同时将其所有版本历史移动到新页面。旧标题将会被重定向到新标题。您可以自动更新链接至原标题的重定向。如果您不选择这样做的话,请检查[[Special:DoubleRedirects|双重]]或[[Special:BrokenRedirects|损坏重定向]]链接。您有责任确保链接会被正确指向他们应该被指向的地方。\n\n注意:如果已存在使用新标题的页面,此页面将<strong>不会</strong>被移动,除非新页面是重定向,并且没有过去的编辑历史。这意味着您可在误操作后将页面移回原处,同时,您无法覆盖现有页面。\n\n<strong>注意:</strong>对这样一个经常被访问的页面而言这可能是一个重大且唐突的更改;请在行动前先了解您的修改可能带来的一切后果。",
        "movepagetext-noredirectfixer": "用下面的表单来重命名一个页面,并将其版本历史同时移动到新页面。老的页面将成为新页面的重定向页。请检查[[Special:DoubleRedirects|双重重定向]]或[[Special:BrokenRedirects|损坏重定向]]链接。您应当负责确定所有链接依然会链到指定的页面。\n\n注意如果新页面已经有内容的话,页面将<strong>不会</strong>被移动,除非新页面无内容或是重定向页,而且没有版本历史。这意味着您可在误操作后将页面移回原处,同时,您无法覆盖现有页面。\n\n<strong>注意:</strong>对一个经常被访问的页面而言这可能是一个重大且唐突的更改;请在行动前先确定您了解其所可能带来的后果。",
        "movepagetalktext": "如果您勾选此框,相关联的讨论页将被自动移动到新的标题,除非这里已经有了一个非空讨论页。\n\n在这种情况下,如有需要,您将不得不手动移动或合并页面。",
-       "moveuserpage-warning": "'''警告:'''你将移动一个用户页面。请注意,只有该页面会被移动,该用户''不''会被更名。",
+       "moveuserpage-warning": "'''警告:'''你将移动一个用户页面。请注意,只有该页面会被移动,该用户'''不会'''被更名。",
        "movecategorypage-warning": "<strong>警告:</strong>您将移动分类页面。请注意只有此页面将会移动,旧有分类的任何页面将<em>不会</em>同步移动。",
        "movenologintext": "您必须是一名登记用户并且[[Special:UserLogin|登录]]\n后才可移动一个页面。",
        "movenotallowed": "您没有权限移动页面。",
        "linkaccounts": "链接账户",
        "linkaccounts-success-text": "账户已链接。",
        "linkaccounts-submit": "链接帐户",
+       "cannotunlink-no-provider-title": "没有关联帐户可以取消关联",
+       "cannotunlink-no-provider": "没有可以取消关联的关联帐户",
        "unlinkaccounts": "取消链接账户",
        "unlinkaccounts-success": "账户已取消链接。",
        "authenticationdatachange-ignored": "身份验证数据更改未处理。也许没有配置的提供者?",
        "edit-error-short": "错误:$1",
        "edit-error-long": "错误:\n\n$1",
        "specialmute": "屏蔽",
-       "specialmute-success": "您的提及设置已经被更新。请在[[Special:参数设置|您的参数设置]]中查看所有被提及的用户。",
+       "specialmute-success": "您的禁言设置已经被更新。请在[[Special:Preferences|你的参数设置]]中查看所有被禁言的用户。",
        "specialmute-submit": "确认",
        "specialmute-label-mute-email": "屏蔽该用户的邮件",
+       "specialmute-header": "请选择您对于<b>{{BIDI:[[User:$1|$1]]}}</b>的禁言设置。",
        "specialmute-error-invalid-user": "未找到您请求的用户名。",
+       "specialmute-error-no-options": "禁言功能不可用。这可能是因为:您还没有确认您的电子邮箱地址,或者Wiki管理员已禁用此Wiki的电子邮箱和/或电子邮箱黑名单功能。",
+       "specialmute-email-footer": "请访问$1管理用户{{BIDI:$2}}的电子邮件首选项",
        "specialmute-login-required": "请登录以更改您的沉默用户提醒设置。",
+       "mute-preferences": "静音设置",
        "revid": "修订版本$1",
        "pageid": "页面ID$1",
        "interfaceadmin-info": "$1\n\n编辑全站CSS/JS/JSON文件的权限刚刚从<code>editinterface</code>权限中拆分。如果您不知道为何收到此错误,请参见[[mw:MediaWiki_1.32/interface-admin]]。",
        "passwordpolicies-policy-passwordnotinlargeblacklist": "密码不能在100000个最常用的密码列表中。",
        "passwordpolicies-policyflag-forcechange": "必须在登录时更改",
        "passwordpolicies-policyflag-suggestchangeonlogin": "建议在登录时更改",
+       "mycustomjsredirectprotected": "您无权编辑此JavaScript页面,因为它是重定向,并且不指向您的用户空间。",
        "easydeflate-invaliddeflate": "提供的内容未被适当缩小",
        "unprotected-js": "基于安全原因,JavaScript不能在未保护页面中载入。请在“MediaWiki:”名字空间或者用户子页面中添加JavaScript。",
        "userlogout-continue": "您确定要退出登录吗?"
index 90e6bac..bd1d304 100644 (file)
                        "Davidzdh",
                        "WQL",
                        "Tang891228",
-                       "Winston Sung"
+                       "Winston Sung",
+                       "Sunny00217",
+                       "Viztor"
                ]
        },
        "tog-underline": "底線標示連結:",
        "tog-hidepatrolled": "隱藏近期變更中巡查過的編輯",
        "tog-newpageshidepatrolled": "隱藏新頁面清單中巡查過的頁面",
        "tog-hidecategorization": "隱藏頁面分類",
-       "tog-extendwatchlist": "展開監視清單顯示包含最近以外的所有變更",
+       "tog-extendwatchlist": "展開監視清單以顯示所有變更,而不是只顯示近期變更",
        "tog-usenewrc": "依近期變更與監視清單的頁面分類顯示變更",
        "tog-numberheadings": "標題自動編號",
        "tog-editondblclick": "點選兩次以編輯頁面",
        "tog-previewontop": "顯示預覽於編輯框上方",
        "tog-previewonfirst": "第一次編輯時顯示預覽",
        "tog-enotifwatchlistpages": "當我的監視清單中的頁面或檔案有變更時,傳送電子郵件通知我",
-       "tog-enotifusertalkpages": "當我的對話頁面有變更時,傳送電子郵件通知我",
-       "tog-enotifminoredits": "當頁面與檔案有小修改時,傳送電子郵件通知我",
+       "tog-enotifusertalkpages": "當我的使用者討論頁面有變更時,傳送電子郵件通知我",
+       "tog-enotifminoredits": "當頁面與檔案有次要修訂時,傳送電子郵件通知我",
        "tog-enotifrevealaddr": "在通知郵件中顯示我的電子郵件地址",
        "tog-shownumberswatching": "顯示監視使用者數量",
        "tog-oldsig": "您現有的簽名:",
-       "tog-fancysig": "將簽名視為 Wikitext 語言 (不自動產生連結)",
-       "tog-uselivepreview": "顯示預覽不重新載入頁面",
+       "tog-fancysig": "將簽名視為 wikitext (不自動產生連結)",
+       "tog-uselivepreview": "顯示預覽不重新載入頁面",
        "tog-forceeditsummary": "未填寫編輯摘要時提示我",
        "tog-watchlisthideown": "隱藏監視清單中我自己的編輯",
        "tog-watchlisthidebots": "隱藏監視清單中機器人的編輯",
        "tog-watchlisthideminor": "隱藏監視清單中的次要修訂",
        "tog-watchlisthideliu": "隱藏監視清單中已登入使用者的編輯",
        "tog-watchlistreloadautomatically": "篩選條件變更時自動重新讀取監視清單(需要使用 JavaScript)",
-       "tog-watchlistunwatchlinks": "為有更改的監視頁面添加直接(取消)監視標記({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}},需要JavaScript才能開啟功能)",
+       "tog-watchlistunwatchlinks": "為有更改的監視頁面直接新增(取消)監視標記({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}},需要JavaScript才能開啟功能)",
        "tog-watchlisthideanons": "隱藏監視清單中匿名使用者的編輯",
        "tog-watchlisthidepatrolled": "隱藏監視清單中已巡查的編輯",
        "tog-watchlisthidecategorization": "隱藏頁面分類",
        "tog-diffonly": "比對差異時下方不顯示頁面內容",
        "tog-showhiddencats": "顯示隱藏分類",
        "tog-norollbackdiff": "執行回退後略過差異比對",
-       "tog-useeditwarning": "未儲存離開編輯頁面時警告我",
-       "tog-prefershttps": "永遠使用安全連線來登入",
+       "tog-useeditwarning": "在我離開未儲存的編輯頁面時警告我",
+       "tog-prefershttps": "登入時永遠使用安全連線",
        "tog-showrollbackconfirmation": "當點擊回退連結時顯示確認提示",
        "underline-always": "永遠使用",
        "underline-never": "永不使用",
-       "underline-default": "外觀或瀏覽器預設",
+       "underline-default": "佈景主題或瀏覽器預設",
        "editfont-style": "編輯區字型樣式:",
-       "editfont-monospace": "等字型",
+       "editfont-monospace": "等字型",
        "editfont-sansserif": "無襯線字型",
        "editfont-serif": "襯線字型",
-       "sunday": "日",
-       "monday": "一",
-       "tuesday": "二",
-       "wednesday": "三",
-       "thursday": "四",
-       "friday": "五",
-       "saturday": "六",
+       "sunday": "星期日",
+       "monday": "星期一",
+       "tuesday": "星期二",
+       "wednesday": "星期三",
+       "thursday": "星期四",
+       "friday": "星期五",
+       "saturday": "星期六",
        "sun": "日",
        "mon": "一",
        "tue": "二",
        "pagecategories": "{{PLURAL:$1|分類}}",
        "category_header": "「$1」分類的頁面",
        "subcategories": "子分類",
-       "category-media-header": "「$1」分類的媒體",
-       "category-empty": "<em>此分類目前未包含頁面或媒體。</em>",
+       "category-media-header": "「$1」分類的媒體檔案",
+       "category-empty": "<em>此分類目前未包含頁面或媒體檔案。</em>",
        "hidden-categories": "{{PLURAL:$1|隱藏分類}}",
        "hidden-category-category": "隱藏分類",
        "category-subcat-count": "{{PLURAL:$2|此分類僅包含以下 1 個子分類。|此分類包含以下 $1 個子分類,共 $2 個。}}",
        "broken-file-category": "檔案連結損壞的頁面",
        "about": "關於",
        "article": "內容頁面",
-       "newwindow": "(新視窗開啟)",
+       "newwindow": "(新視窗開啟)",
        "cancel": "取消",
        "moredotdotdot": "更多...",
-       "morenotlisted": "這可能只是部份清單。",
+       "morenotlisted": "此清單可能不完整。",
        "mypage": "頁面",
-       "mytalk": "對話",
-       "anontalk": "對話",
+       "mytalk": "討論",
+       "anontalk": "討論",
        "navigation": "導覽",
        "and": "&#32;和&#32;",
        "faq": "常見問題",
        "help": "說明",
        "help-mediawiki": "有關 MediaWiki 的說明",
        "search": "搜尋",
-       "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# 在搜尋中要忽略的標題。\n# 更該此檔案以快速對己列入索引的頁面標題生效。\n# 您可以編輯時不變更內容以強制頁面重新索引。\n# 語法如下:\n#   * 任何以 \"#\" 字元開頭的行至結尾會做為註解。\n#   * 任何非空白行代表要忽略的標題。\n參考文獻\n外部連結\n參見\n #</pre> <!-- leave this line exactly as it is -->",
+       "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# 在搜尋中要忽略的標題。\n# 變更此檔案以快速對已列入索引的頁面標題生效。\n# 您可以編輯時不變更內容以強制頁面重新索引。\n# 語法如下:\n#   * 任何以 \"#\" 字元開頭的行至結尾會做為註解。\n#   * 任何非空白行代表要忽略的標題。\n參考文獻\n外部連結\n參見\n #</pre> <!-- leave this line exactly as it is -->",
        "searchbutton": "搜尋",
        "go": "前往",
        "searcharticle": "執行",
        "history_small": "歷史",
        "updatedmarker": "自您上次瀏覽之後的更新",
        "printableversion": "可列印版",
-       "permalink": "靜態連結",
+       "permalink": "固定連結",
        "print": "列印",
-       "view": "檢視",
+       "view": "閱讀",
        "view-foreign": "在$1檢視",
        "edit": "編輯",
        "edit-local": "編輯本地描述",
        "protect_change": "變更",
        "unprotect": "變更保護",
        "newpage": "新頁面",
-       "talkpagelinktext": "對話",
+       "talkpagelinktext": "討論",
        "specialpage": "特殊頁面",
        "personaltools": "個人工具",
        "talk": "討論",
        "versionrequired": "需要 $1 版本的 MediaWiki",
        "versionrequiredtext": "需使用 $1 版本的 MediaWiki 才能使用此頁面。\n請參考 [[Special:Version|版本]]。",
        "ok": "確定",
-       "retrievedfrom": "取自 \"$1\"",
+       "retrievedfrom": "取自「$1」",
        "youhavenewmessages": "{{PLURAL:$3|您有}}$1($2)。",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|您}}有來自{{PLURAL:$3|另一位使用者|$3 位使用者}}的 $1 ($2)。",
        "youhavenewmessagesmanyusers": "你有來自多位使用者的 $1 ($2)。",
        "feed-unavailable": "目前未提供 RSS 或 Atom",
        "site-rss-feed": "$1 的 RSS 來源",
        "site-atom-feed": "$1 的 Atom 來源",
-       "page-rss-feed": "\"$1\" 的 RSS 來源",
-       "page-atom-feed": "\"$1\" 的 Atom 來源",
+       "page-rss-feed": "「$1」的 RSS 來源",
+       "page-atom-feed": "「$1」的 Atom 來源",
        "red-link-title": "$1(頁面不存在)",
        "sort-descending": "降冪排序",
        "sort-ascending": "昇冪排序",
        "nstab-image": "檔案",
        "nstab-mediawiki": "訊息",
        "nstab-template": "模板",
-       "nstab-help": "說明頁面",
+       "nstab-help": "說明",
        "nstab-category": "分類",
        "mainpage-nstab": "首頁",
        "nosuchaction": "無此動作",
        "internalerror": "內部錯誤",
        "internalerror_info": "內部錯誤:$1",
        "internalerror-fatal-exception": "嚴重例外類型 \"$1\"",
-       "filecopyerror": "無法複製檔案 \"$1\" 至 \"$2\"。",
-       "filerenameerror": "無法重新命名檔案 \"$1\" 為 \"$2\"。",
-       "filedeleteerror": "無法刪除檔案 \"$1\"。",
-       "directorycreateerror": "無法建立目錄 \"$1\"。",
-       "directoryreadonlyerror": "目錄 \"$1\" 為唯讀。",
-       "directorynotreadableerror": "ç\9b®é\8c\84 \"$1\" ç\84¡æ³\95è®\80å\8f\96。",
-       "filenotfound": "找不到檔案 \"$1\"。",
+       "filecopyerror": "無法將檔案「$1」複製至「$2」。",
+       "filerenameerror": "無法將檔案「$1」重新命名為「$2」。",
+       "filedeleteerror": "無法刪除檔案「$1」。",
+       "directorycreateerror": "無法建立目錄「$1」。",
+       "directoryreadonlyerror": "目錄「$1」為唯讀。",
+       "directorynotreadableerror": "ç\84¡æ³\95è®\80å\8f\96ç\9b®é\8c\84ã\80\8c$1ã\80\8d。",
+       "filenotfound": "找不到檔案「$1」。",
        "unexpected": "預期之外的資料:\"$1\"=\"$2\"。",
        "formerror": "錯誤:無法送出表單。",
        "badarticleerror": "無法在此頁進行該操作。",
-       "cannotdelete": "無法刪除頁面或檔案 \"$1\"。\n它可能已經被其他人刪除。",
-       "cannotdelete-title": "無法刪除頁面 \"$1\"",
+       "cannotdelete": "無法刪除頁面或檔案「$1」。\n它可能已經被其他人刪除。",
+       "cannotdelete-title": "無法刪除頁面「$1」",
        "delete-scheduled": "頁面「$1」已被安排刪除。\n請耐心等待。",
        "delete-hook-aborted": "刪除已被 Hook 中止。\n且未回應無任何說明。",
-       "no-null-revision": "無法建立頁面 \"$1\" 的新空白修訂",
+       "no-null-revision": "無法建立頁面「$1」的新空白修訂",
        "badtitle": "無效的標題",
        "badtitletext": "指定的頁面標題是無效、空白,或未正確連結的跨語言或跨 Wiki 的標題。\n標題中可能包含無法使用在標題的字元。",
        "title-invalid-empty": "請求的頁面標題為空的或僅含命名空間名稱。",
        "title-invalid-utf8": "請求的頁面標題含有無效的 UTF-8 符號。",
        "title-invalid-interwiki": "請求的頁面標題含有無法使用在標題的跨 Wiki 連結。",
-       "title-invalid-talk-namespace": "請求的頁面標題引用了可能不存在的對話頁。",
+       "title-invalid-talk-namespace": "請求的頁面標題引用了可能不存在的討論頁面。",
        "title-invalid-characters": "請求的頁面標題包含無效的字元:\"$1\"。",
        "title-invalid-relative": "標題中含有相對路徑。相對路徑的頁面標題 (./, ../) 無效,使用者瀏覽器通常無法存取相對路徑。",
        "title-invalid-magic-tilde": "請求的頁面標題含有無效的魔術波浪符號(<nowiki>~~~</nowiki>)。",
        "protectedinterface": "本頁用來提供此 Wiki 軟體介面上的文字,並且已被設為保護以防止惡意修改。\n如欲增加或修改 Wiki 的翻譯,請至 [https://translatewiki.net/ translatewiki.net] 上的 MediaWiki 在地化專案。",
        "editinginterface": "<strong>警告:</strong>您正在編輯的頁面文字是用來提供軟體介面使用。\n變更此頁面將會影響其他使用者在此 Wiki 上看到的使用者介面。",
        "translateinterface": "如欲修改 Wiki 的翻譯,請至 [https://translatewiki.net/ translatewiki.net] 上的 MediaWiki 在地化專案。",
-       "cascadeprotected": "此頁面被保護無法編輯,因為此頁面被以下開啟 \"連鎖保護\" 選項的{{PLURAL:$1|一頁|數頁}}保護頁面引用:\n$2",
+       "cascadeprotected": "此頁面被保護無法編輯,因為此頁面被以下開啟「連鎖保護」選項的{{PLURAL:$1|一頁|數頁}}保護頁面引用:\n$2",
        "namespaceprotected": "您沒有權限編輯 <strong>$1</strong> 命名空間的頁面。",
        "customcssprotected": "您並沒有權限編輯此 CSS 頁面,因為此頁面包含了其他使用者的個人設定。",
        "customjsonprotected": "您沒有權限編輯此JSON頁面,因為此頁面包含了其他使用者的個人設定。",
        "userlogin-joinproject": "加入 {{SITENAME}}",
        "createaccount": "建立帳號",
        "userlogin-resetpassword-link": "忘記密碼?",
-       "userlogin-helplink2": "登入協助",
+       "userlogin-helplink2": "登入說明",
        "userlogin-loggedin": "您目前已登入 {{GENDER:$1|$1}} 使用者,\n請使用下列表單改登入另一位使用者。",
        "userlogin-reauth": "您必須再登入一次來驗証您為 {{GENDER:$1|$1}}。",
        "userlogin-createanother": "建立另一個帳號",
        "cannotchangeemail": "此 wiki 無法變更帳號的電子郵件地址。",
        "emaildisabled": "此網站不能傳送電子郵件。",
        "accountcreated": "已建立帳號",
-       "accountcreatedtext": "使用者帳號 [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|對話]]) 已建立。",
+       "accountcreatedtext": "使用者帳號 [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|討論]]) 已建立。",
        "createaccount-title": "{{SITENAME}} 的帳號建立",
        "createaccount-text": "不明人士使用您的電子郵件地址在 {{SITENAME}} ($4) 建立了一個帳號名稱為 \"$2\",密碼為 \"$3\"。\n您應該立即登入並更改密碼。\n\n如果該帳號是建立錯誤的話,您可以忽略此訊息。",
        "login-throttled": "您已經嘗試太多次的登入動作。\n請稍等 $1 後再試。",
        "systemblockedtext": "您的使用者名稱或 IP 位址已被 MediaWiki 自動封鎖,原因如下:\n\n:<em>$2</em>\n\n* 封鎖開始時間:$8\n* 封鎖結束時間:$6\n* 被封鎖的使用者:$7\n\n您目前的 IP 位址為 $3。\n請在做詢問時附上以上資訊。",
        "blockednoreason": "未說明原因",
        "blockedtext-composite": "<strong>您的使用者名稱或 IP 位址已被封鎖。</strong>\n\n原因如下:\n\n:<em>$2</em>\n\n* 封鎖開始時間:$8\n* 最長的封鎖結束時間:$6\n\n* $5\n\n您目前的 IP 位址為 $3。\n請在做詢問時附上以上資訊。",
+       "blockedtext-composite-ids": "相關的IP封鎖區段:$1(您所使用的IP可能位於封鎖區段中)",
+       "blockedtext-composite-no-ids": "您的IP地址存在於多個黑名單中",
        "blockedtext-composite-reason": "有多個封鎖目標為您的帳號和/或IP位址",
        "whitelistedittext": "請先 $1 才可編輯頁面。",
        "confirmedittext": "在編輯此頁之前您必須確認您的電子郵件地址。\n請透過 [[Special:Preferences|偏好設定]] 設定並驗證您的電子郵件地址。",
        "sitecsspreview": "<strong>您目前正預覽此 CSS,CSS 還尚未儲存!</strong>",
        "sitejsonpreview": "<strong>請注意您僅是在預覽此 JSON 設定,內容還尚未儲存!</strong>",
        "sitejspreview": "<strong>您目前正預覽此 JavaScript,JavaScript 還尚未儲存!</strong>",
-       "userinvalidconfigtitle": "<strong>警告:</strong> 無此外觀樣式 \"$1\"。\n自訂的 .css、.json 和 .js 頁面要使用小寫標題,例如:{{ns:user}}:Foo/vector.css 與 {{ns:user}}:Foo/Vector.css 是不同的。",
+       "userinvalidconfigtitle": "<strong>警告:</strong> 無此佈景主題 \"$1\"。\n自訂的 .css、.json 和 .js 頁面要使用小寫標題,例如:{{ns:user}}:Foo/vector.css 與 {{ns:user}}:Foo/Vector.css 是不同的。",
        "updated": "(已更新)",
        "note": "<strong>注意:</strong>",
        "previewnote": "<strong>您目前正在預覽,您的變更還尚未儲存!</strong>",
        "undo-main-slot-only": "編輯無法還原,因為有包含到在主分配之外的內容。",
        "undo-norev": "此編輯不存在或已被刪除,無法還原。",
        "undo-nochange": "此編輯已被還原。",
-       "undo-summary": "取消由 [[Special:Contributions/$2|$2]] ([[User talk:$2|對話]]) 所作出的修訂 $1",
+       "undo-summary": "取消由 [[Special:Contributions/$2|$2]] ([[User talk:$2|討論]]) 所作出的修訂 $1",
        "undo-summary-username-hidden": "還原隱藏使用者的修訂 $1",
        "cantcreateaccount-text": "自這個 IP 位址 (<strong>$1</strong>) 建立帳號已經被 [[User:$3|$3]] 封鎖。\n\n$3 封鎖的原因是$2",
        "cantcreateaccount-range-text": "來自 IP 位址範圍 <strong>$1</strong>,包含您的 IP 位址 (<strong>$4</strong>) 所建立的帳號已經被 [[User:$3|$3]] 封鎖。\n\n$3 封鎖的原因是 <em>$2</em>",
        "searchprofile-advanced": "進階",
        "searchprofile-articles-tooltip": "在 $1 中搜尋",
        "searchprofile-images-tooltip": "搜尋檔案",
-       "searchprofile-everything-tooltip": "搜尋所有內容 (包含對話頁面)",
+       "searchprofile-everything-tooltip": "搜尋所有內容 (包含討論頁面)",
        "searchprofile-advanced-tooltip": "搜尋自訂命名空間",
        "search-result-size": "$1 ({{PLURAL:$2|1 個字|$2 個字}})",
        "search-result-category-size": "$1 位成員 ($2 個子分類,$3 個檔案)",
        "search-interwiki-more": "(更多)",
        "search-interwiki-more-results": "更多結果",
        "search-relatedarticle": "相關",
+       "search-invalid-sort-order": "排序順序$1無法被識別,將使用預設排序。有效的順序為:$2",
+       "search-unknown-profile": "搜尋設定$1無法被識別,將使用預設設定。",
        "searchrelated": "相關",
        "searchall": "全部",
        "showingresults": "以下顯示從第 <strong>$2</strong> 筆開始,共 {{PLURAL:$1|<strong>1</strong> 筆結果|<strong>$1</strong> 筆結果}}:",
        "mypreferences": "偏好設定",
        "prefs-edits": "編輯次數:",
        "prefsnologintext2": "請登入以變更您的偏好設定。",
-       "prefs-skin": "外觀",
+       "prefs-skin": "佈景主題",
        "skin-preview": "預覽",
        "datedefault": "預設值",
        "prefs-labs": "實驗中的功能",
        "prefs-custom-css": "自訂 CSS",
        "prefs-custom-json": "自訂 JSON",
        "prefs-custom-js": "自訂 JavaScript",
-       "prefs-common-config": "所有外觀共用的 CSS/JSON/JavaScript:",
+       "prefs-common-config": "所有佈景主題共用的 CSS/JSON/JavaScript:",
        "prefs-reset-intro": "您可以使用此頁面重設您的偏好設定為網站預設值。\n這個動作將無法復原。",
        "prefs-emailconfirm-label": "電子郵件確認:",
        "youremail": "Email:",
        "yourvariant": "內容語言變體:",
        "prefs-help-variant": "您希望用於顯示本站內容的語種或拼寫語系。",
        "yournick": "新的簽名:",
-       "prefs-help-signature": "在對話頁面上評論時應使用 \"<nowiki>~~~~</nowiki>\" 簽名,\n該符號會轉換成您的簽名與時間。",
+       "prefs-help-signature": "在討論頁面上評論時應使用 \"<nowiki>~~~~</nowiki>\" 簽名,\n該符號會轉換成您的簽名與時間。",
        "badsig": "錯誤的原始簽名。請檢查 HTML 標籤。",
        "badsiglength": "您的簽名過長。\n它的長度不可超過 $1 個字元。",
        "yourgender": "您希望使用何種性別稱呼?",
        "email": "Email",
        "prefs-help-realname": "真實姓名為選填欄位。\n若提供,真實姓名可能會用來作為您的作品的署名。",
        "prefs-help-email": "電子郵件地址為選填欄位。\n但在重設密碼時會使用,而您很有可能會忘記密碼。",
-       "prefs-help-email-others": "您亦可以選擇讓其他使用者透過您的電子郵件、使用者頁面或對話頁面的連結與您聯絡。\n您的電子郵件地址不會洩漏給其他要聯絡您的使用者。",
+       "prefs-help-email-others": "您亦可以選擇讓其他使用者透過您的電子郵件、使用者頁面或討論頁面的連結與您聯絡。\n您的電子郵件地址不會洩漏給其他要聯絡您的使用者。",
        "prefs-help-email-required": "電子郵件地址是必填項目。",
        "prefs-info": "基本資訊",
        "prefs-i18n": "國際化",
        "right-editmyusercss": "編輯自己的使用者 CSS 檔",
        "right-editmyuserjson": "編輯您自己的使用者 JSON 檔",
        "right-editmyuserjs": "編輯自己的使用者 JavaScript 檔",
+       "right-editmyuserjsredirect": "編輯自己的使用者JavaScript重新導向檔案",
        "right-viewmywatchlist": "檢視自己的監視清單",
        "right-editmywatchlist": "編輯自己的監視清單。注意,即使無此權限,某些操作仍會新增頁面至監視清單。",
        "right-viewmyprivateinfo": "檢視自己的私隱資料(如:電子郵件地址及真實姓名)",
        "right-noratelimit": "不受使用頻率限制",
        "right-import": "由其他 Wiki 匯入頁面",
        "right-importupload": "由檔案上傳匯入頁面",
-       "right-patrol": "標示其他人的編輯爲已巡查",
+       "right-patrol": "標示他人的編輯為已巡查",
        "right-autopatrol": "將自己的編輯自動標示為已巡查",
        "right-patrolmarks": "檢視近期變更的巡查標記",
        "right-unwatchedpages": "檢視未監視的頁面",
        "action-editmyusercss": "編輯您自己的使用者 CSS 檔",
        "action-editmyuserjson": "編輯您自己的使用者 JSON 檔",
        "action-editmyuserjs": "編輯自己的 JavaScript 檔",
+       "action-editmyuserjsredirect": "編輯自己的使用者JavaScript重新導向檔案",
        "action-viewsuppressed": "檢視所有使用者隱藏的修訂",
        "action-hideuser": "封鎖使用者名稱,避免公開顯示",
        "action-ipblock-exempt": "略過IP封鎖、自動封鎖及範圍封鎖檢查",
        "rcfilters-clear-all-filters": "清除所有篩選條件",
        "rcfilters-show-new-changes": "檢視自$1以來的新變更",
        "rcfilters-search-placeholder": "篩選變更(使用選單或搜尋篩選名稱)",
+       "rcfilters-search-placeholder-mobile": "篩選器",
        "rcfilters-invalid-filter": "無效的篩選條件",
        "rcfilters-empty-filter": "沒有使用中的過濾條件。已顯示所有的貢獻。",
        "rcfilters-filterlist-title": "篩選",
        "statistics-header-hooks": "其它統計",
        "statistics-articles": "內容頁面",
        "statistics-pages": "頁面",
-       "statistics-pages-desc": "在 Wiki 上所有的頁面,包括對話頁面、重新導向頁面等。",
+       "statistics-pages-desc": "在 wiki 上所有的頁面,包括討論頁面、重新導向頁面等。",
        "statistics-files": "已上傳的檔案",
        "statistics-edits": "自 {{SITENAME}} 成立以來的頁面編輯數",
        "statistics-edits-average": "每頁平均編輯數",
        "unwatchthispage": "停止監視",
        "notanarticle": "非內容的頁面",
        "notvisiblerev": "最後一次由其他使用者所作的修訂已經被刪除",
-       "watchlist-details": "您的監視清單上共有 $1 個頁面(包含對話頁面)。",
+       "watchlist-details": "您的監視清單上共有 $1 個頁面(包含討論頁面)。",
        "wlheader-enotif": "已開啟電子郵件通知功能。",
        "wlheader-showupdated": "在您最後一次檢視過後修改的頁面會以 <strong>粗體</strong> 顯示。",
        "wlnote": "以下為自 $3 $4 之前的 <strong>$2</strong> 小時內所做的 <strong>$1</strong> 次變更。",
        "deletepage": "刪除頁面",
        "confirm": "確認",
        "excontent": "內容為:「$1」",
-       "excontentauthor": "內容為:「$1」,且僅有一位貢獻者「[[Special:Contributions/$2|$2]]」([[User talk:$2|對話]])",
+       "excontentauthor": "內容為:「$1」,且僅有一位貢獻者「[[Special:Contributions/$2|$2]]」([[User talk:$2|討論]])",
        "exbeforeblank": "被清空前的內容為:\"$1\"",
        "delete-confirm": "刪除 \"$1\"",
        "delete-legend": "刪除",
        "rollback-missingparam": "請求缺少必要參數。",
        "rollback-missingrevision": "無法載入修訂資料。",
        "cantrollback": "無法還原編輯;\n此頁面的最後貢獻者是唯一的作者。",
-       "alreadyrolled": "無法回退由[[User:$2|$2]]([[User talk:$2|對話]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])所作的最後一次編輯[[:$1]],已有其他人編輯或回退了該頁面。\n\n最後一次編輯該頁面的使用者是[[User:$3|$3]]([[User talk:$3|對話]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])。",
+       "alreadyrolled": "無法回退由[[User:$2|$2]]([[User talk:$2|討論]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]])所作的最後一次編輯[[:$1]],已有其他人編輯或回退了該頁面。\n\n最後一次編輯該頁面的使用者是[[User:$3|$3]]([[User talk:$3|討論]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]])。",
        "editcomment": "編輯摘要為:<em>$1</em>。",
-       "revertpage": "已還原[[Special:Contributions/$2|$2]]([[User talk:$2|對話]])的編輯為最後由[[User:$1|$1]]所修訂的版本",
+       "revertpage": "已還原[[Special:Contributions/$2|$2]]([[User talk:$2|討論]])的編輯至最後由[[User:$1|$1]]所修訂的版本",
        "revertpage-nouser": "已還原隱藏使用者的編輯為最後 {{GENDER:$1|[[User:$1|$1]]}} 修訂的版本",
        "rollback-success": "已還原 {{GENDER:$3|$1}} 所做的編輯;\n變更回由 {{GENDER:$4|$2}} 修訂的最後一個版本。",
        "sessionfailure-title": "連線階段失敗",
        "changecontentmodel": "變更頁面的內容模型",
        "changecontentmodel-legend": "變更內容模型",
        "changecontentmodel-title-label": "頁面標題",
+       "changecontentmodel-current-label": "目前內容模型:",
        "changecontentmodel-model-label": "新內容模型",
        "changecontentmodel-reason-label": "原因:",
        "changecontentmodel-submit": "變更",
        "tooltip-invert": "勾選此核選方塊以隱藏選擇命名空間中的頁面變更 (若勾選相關命名空間,則會同時隱藏相關命名空間)",
        "tooltip-whatlinkshere-invert": "勾選此核選方塊以隱藏選擇命名空間中的頁面連結。",
        "namespace_association": "相關命名空間",
-       "tooltip-namespace_association": "勾選此核選方塊以包含與選擇命名空間相關的對話或主題命名空間",
+       "tooltip-namespace_association": "勾選此核選方塊以包含與選擇命名空間相關的討論或主題命名空間",
        "blanknamespace": "(主要)",
        "contributions": "{{GENDER:$1|使用者}}貢獻",
        "contributions-title": "$1的使用者貢獻",
        "sp-contributions-newbies": "僅顯示新帳號的貢獻",
        "sp-contributions-newbies-sub": "新帳號的貢獻",
        "sp-contributions-newbies-title": "新帳號的使用者貢獻",
-       "sp-contributions-blocklog": "封鎖紀錄",
+       "sp-contributions-blocklog": "封鎖日誌",
        "sp-contributions-suppresslog": "已禁止顯示的{{GENDER:$1|使用者}}貢獻",
        "sp-contributions-deleted": "已刪除的{{GENDER:$1|使用者}}貢獻",
        "sp-contributions-uploads": "上傳",
        "sp-contributions-logs": "日誌",
-       "sp-contributions-talk": "對話",
+       "sp-contributions-talk": "討論",
        "sp-contributions-userrights": "{{GENDER:$1|使用者}}權限管理",
        "sp-contributions-blocked-notice": "此使用者目前已被封鎖。\n以下為最近的封鎖紀錄以供參考:",
        "sp-contributions-blocked-notice-anon": "此 IP 位址目前已被封鎖。\n以下為最近的封鎖記錄以供參考:",
        "ipbother": "其他時間:",
        "ipboptions": "2 小時:2 hours,1 天:1 day,3 天:3 days,1 週:1 week,2 週:2 weeks,1 個月:1 month,3 個月:3 months,6 個月:6 months,1 年:1 year,無限期:infinite",
        "ipbhidename": "在編輯及清單中隱藏使用者名稱",
-       "ipbwatchuser": "監視這位使用者的使用者頁面及其對話頁面",
+       "ipbwatchuser": "監視這位使用者的使用者頁面及其討論頁面",
        "ipb-disableusertalk": "編輯自己的對話頁面",
        "ipb-change-block": "使用現有設定重新封鎖使用者",
        "ipb-confirm": "確認封鎖",
        "noautoblockblock": "自動封鎖已停用",
        "createaccountblock": "帳號建立已停用",
        "emailblock": "停用電子郵件",
-       "blocklist-nousertalk": "無法編輯自己的對話頁面",
+       "blocklist-nousertalk": "無法編輯自己的討論頁面",
        "blocklist-editing": "編輯",
        "blocklist-editing-sitewide": "編輯(全站範圍)",
        "blocklist-editing-page": "頁面",
        "emaillink": "傳送電子郵件",
        "autoblocker": "您的 IP 位址因最近被 [[User:$1|$1]] 使用過而被自動封鎖。\n封鎖 $1 的原因為 \"$2\"",
        "blocklogpage": "封鎖日誌",
-       "blocklog-showlog": "此使用者先前被封鎖過。\n以下為封鎖錄以供參考:",
+       "blocklog-showlog": "此使用者先前被封鎖過。\n以下為封鎖錄以供參考:",
        "blocklog-showsuppresslog": "此使用者先前被封鎖並且隱藏過。\n以下為禁止顯示紀錄以供參考:",
        "blocklogentry": "已封鎖 [[$1]] 的期限至 $2 $3",
        "reblock-logentry": "變更 [[$1]] 的封鎖設定,到期時間為 $2 $3",
        "block-log-flags-nocreate": "停用帳號建立",
        "block-log-flags-noautoblock": "停用自動封鎖",
        "block-log-flags-noemail": "停用電子郵件",
-       "block-log-flags-nousertalk": "無法編輯自己的對話頁面",
+       "block-log-flags-nousertalk": "無法編輯自己的討論頁面",
        "block-log-flags-angry-autoblock": "加強自動封鎖已開啟",
        "block-log-flags-hiddenname": "隱藏使用者名稱",
        "range_block_disabled": "管理員可建立範圍封鎖的權限已被關閉。",
+       "ipb-prevent-user-talk-edit": "必須允許被部分封鎖的使用者編輯他的使用者討論頁,除非該封鎖限制包含使用者討論命名空間。",
        "ipb_expiry_invalid": "無效的期限。",
        "ipb_expiry_old": "到期時間已過。",
        "ipb_expiry_temp": "隱藏使用者名稱的封鎖不可設定期限。",
        "move-page-legend": "移動頁面",
        "movepagetext": "以下表單可以用來重新命名一個頁面,並將該頁面的所有歷史記錄一併移至擁有新名稱的頁面。舊標題的頁面將會變成重新導向頁面,指向使用新標題的頁面。您可以選擇自動更新所有指向舊頁面的重新導向,讓它們改為指向新頁面。若您選擇不自動更新,請檢查有沒有[[Special:DoubleRedirects|雙重重新導向]]或[[Special:BrokenRedirects|損壞的重新導向]]需要修正。您有責任讓連結繼續指向正確的地方。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>移動至該處,除非新名稱下是個重新導向頁面而且沒有任何編輯歷史。即是說,您可以將錯誤移動至其他名稱的頁面還原到原有名稱,但不能覆蓋任何現有的頁面。\n\n<strong>注意:</strong>這個動作對受歡迎的頁面來說可能是重大而唐突的變更;在行動前請先確認您了解移動可能帶來的後果。",
        "movepagetext-noredirectfixer": "以下表單可以用來重新命名一個頁面,並將該頁面的所有歷史記錄一併移至擁有新名稱的頁面。\n舊標題的頁面將會變成重新導向頁面,指向使用新標題的頁面。\n請檢查有沒有[[Special:DoubleRedirects|雙重重新導向]]或[[Special:BrokenRedirects|損壞的重新導向]]需要修正。\n您有責任讓連結繼續指向正確的地方。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>移動至該處,除非新名稱下是個重新導向頁面而且沒有任何編輯歷史。\n即是說,您可以將錯誤移動至其他名稱的頁面還原到原有名稱,但不能覆蓋任何現有的頁面。\n\n<strong>注意:</strong>\n這個動作對受歡迎的頁面來說可能是重大而唐突的變更;\n在行動前請先確認您了解移動可能帶來的後果。",
-       "movepagetalktext": "若勾選此方塊,相關的對話頁面會自動與此頁面一起移動至新的位置,除非新的名稱已有一個存在的對話頁面。\n在此情況下,若有必要您必須手動移動或合併已存在的頁面。",
-       "moveuserpage-warning": "<strong>警告:</strong>您正要移動使用者頁面,請注意只有使用者頁面會變更名稱,並<em>不會</em>重新命名使用者。",
+       "movepagetext-noredirectsupport": "以下表單可以用來重新命名一個頁面,並將該頁面的所有歷史記錄一併移至擁有新名稱的頁面。\n您有責任讓連結繼續指向正確的地方。\n\n請注意,若新的頁面名稱已經被使用,則此頁面將<strong>不會</strong>移動至該處。\n即是說,您可以將錯誤移動至其他名稱的頁面還原到原有名稱,但不能覆蓋任何現有的頁面。\n\n<strong>注意:</strong>\n這個動作對受歡迎的頁面來說可能是重大而唐突的變更;\n在行動前請先確認您了解移動可能帶來的後果。",
+       "movepagetalktext": "若勾選此方塊,相關的討論頁面會自動與此頁面一起移動至新的位置,除非新的名稱已有一個存在的討論頁面。\n在此情況下,若有必要,您必須手動移動或合併已存在的頁面。",
+       "moveuserpage-warning": "<strong>警告:</strong>您正要移動使用者頁面,請注意只有使用者頁面會變更名稱,並<strong>不會</strong>重新命名使用者。",
        "movecategorypage-warning": "<strong>警告:</strong>您正要移動分類頁面。請注意此操作只會移動頁面,在舊分類中的頁面將<em>不會</em>移動到新的分類。",
        "movenologintext": "您必須是已註冊的使用者並且 [[Special:UserLogin|登入]] 才可移動頁面。",
        "movenotallowed": "您沒有權限移動頁面。",
        "movepage-delete-first": "目標頁面有太多修訂,而無法刪除作為頁面移動的部份。請先手動刪除頁面後再重試。",
        "articleexists": "該頁面名稱已存在,或您選擇的名稱無效。\n請改選擇其他名稱。",
        "cantmove-titleprotected": "您選擇的新標題已被禁止使用,您不可移動頁面到該位置。",
-       "movetalk": "移動相關的對話頁面",
+       "movetalk": "移動相關的討論頁面",
        "move-subpages": "移動子頁面(至多 $1 頁)",
-       "move-talk-subpages": "移動對話頁面的子頁面 (共 $1 頁)",
+       "move-talk-subpages": "移動討論頁面的子頁面 (共 $1 頁)",
        "movepage-page-exists": "頁面 $1 已存在,無法自動覆蓋。",
        "movepage-page-moved": "已移動頁面 $1 到 $2。",
        "movepage-page-unmoved": "無法移動頁面 $1 到 $2。",
        "movelogpagetext": "以下是所有移動頁面的動作記錄清單。",
        "movesubpage": "{{PLURAL:$1|子頁面}}",
        "movesubpagetext": "此頁面有 $1 個子頁面如下所示。",
-       "movesubpagetalktext": "對應的對話頁有以下 $1 頁{{PLURAL:$1|子頁面|子頁面}}。",
+       "movesubpagetalktext": "對應的討論頁有以下 $1 頁{{PLURAL:$1|子頁面|子頁面}}。",
        "movenosubpage": "此頁面沒有任何子頁面。",
        "movereason": "原因:",
        "revertmove": "還原",
        "javascripttest-qunit-intro": "請參考 mediawiki.org 的 [$1 測試說明文件]。",
        "tooltip-pt-userpage": "{{GENDER:|您的使用者}}頁面",
        "tooltip-pt-anonuserpage": "您正在作為以下身分編輯此 IP 位址的使用者頁面",
-       "tooltip-pt-mytalk": "{{GENDER:|您的}}對話頁面",
+       "tooltip-pt-mytalk": "{{GENDER:|您的}}討論頁面",
        "tooltip-pt-anontalk": "有關來自此 IP 位址編輯的討論",
        "tooltip-pt-preferences": "{{GENDER:|您的}}偏好設定",
        "tooltip-pt-watchlist": "您正在監視變更的頁面清單",
        "scarytranscludefailed-httpstatus": "[模板 $1 讀取失敗:HTTP $2]",
        "scarytranscludetoolong": "[URL 過長]",
        "deletedwhileediting": "<strong>警告:</strong>此頁在您開始編輯之後已經被刪除﹗",
-       "confirmrecreate": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|對話]]) 刪除了此頁面,原因為:\n: <em>$2</em>\n請確認您是否真的要重新建立此頁面。",
-       "confirmrecreate-noreason": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|對話]]) 刪除了此頁面,請確認您是否真的要重新建立此頁面。",
+       "confirmrecreate": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|討論]]) 刪除了此頁面,原因為:\n: <em>$2</em>\n請確認您是否真的要重新建立此頁面。",
+       "confirmrecreate-noreason": "在您編輯的同時,使用者 [[User:$1|$1]] ([[User talk:$1|討論]]) 刪除了此頁面,請確認您是否真的要重新建立此頁面。",
        "recreate": "重新建立",
        "confirm-purge-title": "清除此頁快取",
        "confirm_purge_button": "確定",
        "watchlisttools-view": "檢視相關變更",
        "watchlisttools-edit": "檢視並編輯監視清單",
        "watchlisttools-raw": "編輯原始監視清單",
-       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|對話]])",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|討論]])",
        "timezone-local": "當地",
        "duplicate-defaultsort": "<strong>警告:</strong>預設的排序鍵 \"$2\" 會覆蓋先前預設的排序鍵 \"$1\"。",
        "duplicate-displaytitle": "<strong>警告:</strong> 顯示標題 \"$2\" 覆蓋之前的顯示標題 \"$1\"。",
        "invalid-indicator-name": "<strong>錯誤:</strong>頁面狀態指示的 <code>name</code> 屬性不能為空。",
        "version": "版本",
        "version-extensions": "已安裝的擴充套件",
-       "version-skins": "已安裝的外觀",
+       "version-skins": "已安裝的佈景主題",
        "version-specialpages": "特殊頁面",
        "version-parserhooks": "剖析器鉤",
        "version-variables": "變數",
        "version-license": "MediaWiki 授權條款",
        "version-ext-license": "授權條款",
        "version-ext-colheader-name": "擴充套件",
-       "version-skin-colheader-name": "外觀",
+       "version-skin-colheader-name": "佈景主題",
        "version-ext-colheader-version": "版本",
        "version-ext-colheader-license": "授權條款",
        "version-ext-colheader-description": "描述",
        "permanentlink": "固定連結",
        "permanentlink-revid": "修訂版本ID",
        "permanentlink-submit": "前往修訂版本",
+       "newsection": "新章節",
+       "newsection-page": "目標頁面",
+       "newsection-submit": "前往頁面",
        "dberr-problems": "抱歉!這個網站出現了一些技術上的問題。",
        "dberr-again": "請稍後數分鐘後再試。",
        "dberr-info": "(無法存取資料庫:$1)",
        "log-name-pagelang": "語言變更日誌",
        "log-description-pagelang": "此頁為頁面語言的變更日誌。",
        "logentry-pagelang-pagelang": "$1 已將 $3 的語言從 $4 {{GENDER:$2|變更}}至 $5",
-       "default-skin-not-found": "哎呀!您於 <code dir=\"ltr\">$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您的安裝程序應包含以下{{PLURAL:$4|外觀}}。請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何{{PLURAL:$4|開啟外觀並設為預設值}}的資訊。\n\n$2\n\n; 若您才剛安裝完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 自 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] 下載個別外觀 tarball。\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins 使用 Git 下載外觀]。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。\n\n; 若您才剛升級 MediaWiki:\n: MediaWiki 1.24 與較新的版本不再自動開啟已安裝的外觀 (請參考 [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 操作手冊:外觀自動搜尋])。您可以將下列{{PLURAL:$5|行}}貼上至 <code>LocalSettings.php</code> 來開啟{{PLURAL:$5|所有}}目前已經安裝的{{PLURAL:$5|外觀}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 若您才剛修改 <code>LocalSettings.php</code>:\n: 請再次確認您輸入的外觀名稱是否有誤。",
-       "default-skin-not-found-no-skins": "哎呀!您於 <code>$wgDefaultSkin</code> 設定的 Wiki 預設外觀 <code>$1</code> 無法使用。\n\n您未安裝任何的外觀。\n\n; 若您才剛安裝完或升級完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。 MediaWiki 1.24 或較新的版本在主要儲存庫中不再包含任何的外觀。 請嘗試安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的外觀目錄] 中的部份外觀使用以下方式:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個外觀與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 自 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] 下載個別外觀 tarball。\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins 使用 Git 下載外觀]。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。 請參考 [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration 操作手冊:外觀設定] 以取得如何開啟外觀並設為預設值的資訊。",
+       "default-skin-not-found": "哎呀!您於 <code dir=\"ltr\">$wgDefaultSkin</code> 設定的 Wiki 預設佈景主題 <code>$1</code> 無法使用。\n\n您的安裝程序應包含以下{{PLURAL:$4|外觀}}。請參考 [https://www.mediawiki.org/wiki/Manual:Skin_configuration 手冊:組態佈景主題] 以取得如何{{PLURAL:$4|啟用佈景主題並設為預設值}}的資訊。\n\n$2\n\n; 若您才剛安裝完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。請嘗試使用以下方式安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的佈景主題目錄] 中的部份佈景主題:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個佈景主題與擴充套件。您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 自 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] 下載個別佈景主題 tarball。\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins 使用 Git 下載佈景主題]。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。\n\n; 若您才剛升級 MediaWiki:\n: MediaWiki 1.24 與較新的版本不再自動開啟已安裝的佈景主題 (請參考 [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery 手冊:佈景主題自動搜尋])。您可以將下列{{PLURAL:$5|行}}貼上至 <code>LocalSettings.php</code> 來啟用{{PLURAL:$5|所有}}目前已經安裝的{{PLURAL:$5|佈景主題}}:\n\n<pre dir=\"ltr\">$3</pre>\n\n; 若您才剛修改 <code>LocalSettings.php</code>:\n: 請再次確認您輸入的佈景主題名稱是否有誤。",
+       "default-skin-not-found-no-skins": "哎呀!您於 <code>$wgDefaultSkin</code> 設定的 wiki 預設佈景主題 <code>$1</code> 無法使用。\n\n您尚未安裝任何的佈景主題。\n\n; 若您才剛安裝完或升級完 MediaWiki:\n: 您大概是使用 git 或直接透過原始碼使用其他方法安裝,這種情況是正常的。 MediaWiki 1.24 或較新的版本在主要儲存庫中不再包含任何的佈景主題。請嘗試使用以下方式安裝 [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org 的佈景主題目錄] 中的部份佈景主題:\n:* 下載 [https://www.mediawiki.org/wiki/Special:MyLanguage/Download tarball 安裝程式],該程式包含數個佈景主題與擴充套件。 您可以複製並貼上至 <code>skins/</code> 目錄。\n:* 自 [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] 下載個別佈景主題 tarball。\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins 使用 Git 下載佈景主題]。\n: 若您是 MediaWiki 的開發人員,這麼做應該不會影響到您的 git 儲存庫。 請參考[https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Skin_configuration 手冊:組態佈景主題]以取得如何開啟佈景主題並設為預設值的資訊。",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (已開啟)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>已停用</strong>)",
        "mediastatistics": "媒體統計資訊",
        "linkaccounts": "連結帳號",
        "linkaccounts-success-text": "已連結帳號。",
        "linkaccounts-submit": "連結帳號",
+       "cannotunlink-no-provider-title": "沒有已連結的帳號可以取消連結",
+       "cannotunlink-no-provider": "沒有已連結的帳號可以取消連結。",
        "unlinkaccounts": "取消連結帳號",
        "unlinkaccounts-success": "已取消連結帳號。",
        "authenticationdatachange-ignored": "認證資料變更未被處理,可能未設定提供者?",
        "specialmute-label-mute-email": "遮蓋來自此使用者的郵件",
        "specialmute-header": "請選擇您對於<b>{{BIDI:[[User:$1]]}}</b>的遮蓋偏好設定。",
        "specialmute-error-invalid-user": "無法找到請求的使用者名稱。",
+       "specialmute-error-no-options": "通知功能不可用。這可能是因為:您尚未確認您的電子郵件地址,或者wiki管理員已禁用此Wiki的電子郵件功能或輸入的電子郵件存在於電子郵件黑名單中。",
        "specialmute-email-footer": "要管理{{BIDI:$2}}的電子郵件偏好設定,請查看<$1>。",
        "specialmute-login-required": "請登入以變更您的遮蓋偏好設定。",
+       "mute-preferences": "通知偏好設定",
        "revid": "修訂 $1",
        "pageid": "頁面 ID $1",
        "interfaceadmin-info": "$1\n\n編輯全站 CSS/JS/JSON 檔案的權限,近期已從 <code>editinterface</code> 權限裡拆分。若您不清楚為何會收到此錯誤,請查看 [[mw:MediaWiki_1.32/interface-admin]]。",
        "passwordpolicies-policy-passwordnotinlargeblacklist": "不能採用列在 100000 個最常用到密碼清單當中的密碼。",
        "passwordpolicies-policyflag-forcechange": "必須在登入時更改",
        "passwordpolicies-policyflag-suggestchangeonlogin": "建議在登入時更改",
+       "mycustomjsredirectprotected": "您無權編輯此JavaScript頁面,因為它是重新導向,且不是重新導向到您的用戶空間。",
        "easydeflate-invaliddeflate": "提供的內容未被正常的壓縮",
        "unprotected-js": "基於安全因素,JavaScript 不能從未保護的頁面來載入。請僅在 MediaWiki:命名空間或使用者子頁面中建立 JavaScript。",
        "userlogout-continue": "您想要登出嗎?"
index d3167cc..16937d7 100644 (file)
@@ -100,6 +100,7 @@ $specialPageAliases = [
        'Mytalk'                    => [ 'Meine_Diskussionsseite' ],
        'Myuploads'                 => [ 'Meine_hochgeladenen_Dateien' ],
        'Newimages'                 => [ 'Neue_Dateien' ],
+       'NewSection'                => [ 'Neuer_Abschnitt' ],
        'Newpages'                  => [ 'Neue_Seiten' ],
        'PagesWithProp'             => [ 'Seiten_mit_Eigenschaften' ],
        'PageLanguage'              => [ 'Seitensprache' ],
@@ -302,6 +303,8 @@ $magicWords = [
        'url_query'                 => [ '0', 'ABFRAGE', 'QUERY' ],
        'defaultsort_noerror'       => [ '0', 'keinfehler', 'noerror' ],
        'defaultsort_noreplace'     => [ '0', 'keineersetzung', 'noreplace' ],
+       'displaytitle_noerror'      => [ '0', 'keinfehler', 'noerror' ],
+       'displaytitle_noreplace'    => [ '0', 'keineersetzung', 'noreplace' ],
        'pagesincategory_all'       => [ '0', 'alle', 'all' ],
        'pagesincategory_pages'     => [ '0', 'seiten', 'pages' ],
        'pagesincategory_subcats'   => [ '0', 'unterkategorien', 'unterkats', 'subcats' ],
index 22313a4..fc21843 100644 (file)
@@ -454,6 +454,7 @@ $specialPageAliases = [
        'Mytalk'                    => [ 'MyTalk' ],
        'Myuploads'                 => [ 'MyUploads', 'MyFiles' ],
        'Newimages'                 => [ 'NewFiles', 'NewImages' ],
+       'NewSection'                => [ 'NewSection', 'Newsection' ],
        'Newpages'                  => [ 'NewPages' ],
        'PagesWithProp'             => [ 'PagesWithProp', 'Pageswithprop', 'PagesByProp', 'Pagesbyprop' ],
        'PageData'                  => [ 'PageData' ],
index a40241c..c3a2a7d 100644 (file)
@@ -1,12 +1,12 @@
 <?php
 /** Ingush (ГӀалгӀай)
-*
-* To improve a translation please visit https://translatewiki.net
-*
-* @ingroup Language
-* @file
-*
-*/
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ */
 
 $fallback = 'ru';
 
index ddae17d..820deb6 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Maintenance
  */
+use Wikimedia\AtEase\AtEase;
 
 require_once __DIR__ . '/Maintenance.php';
 
@@ -34,83 +35,66 @@ class MinifyScript extends Maintenance {
        public function __construct() {
                parent::__construct();
                $this->addOption( 'outfile',
-                       'File for output. Only a single file may be specified for input.',
-                       false, true );
-               $this->addOption( 'outdir',
-                       "Directory for output. If this is not specified, and neither is --outfile, then the\n" .
-                       "output files will be sent to the same directories as the input files.",
-                       false, true );
-               $this->addDescription( "Minify a file or set of files.\n\n" .
-                       "If --outfile is not specified, then the output file names will have a .min extension\n" .
-                       "added, e.g. jquery.js -> jquery.min.js."
+                       'Write minified output to this file (instead of standard out).',
+                       false, true, 'o'
+               );
+               $this->addOption( 'type',
+                       'Override the input type (one of "js" or "css"). Defaults to file extension. ' .
+                               'Required if reading from standard input.',
+                       false, true, 'o'
+               );
+               $this->addArg( 'file', 'Input file. Use - to read from standard input.' );
+               $this->addDescription(
+                       "Minify one or more JavaScript or CSS files.\n" .
+                               "If multiple input files are given, they will be concatenated."
                );
        }
 
        public function execute() {
-               if ( !count( $this->mArgs ) ) {
-                       $this->fatalError( "minify.php: At least one input file must be specified." );
-               }
-
-               if ( $this->hasOption( 'outfile' ) ) {
-                       if ( count( $this->mArgs ) > 1 ) {
-                               $this->fatalError( '--outfile may only be used with a single input file.' );
+               $outputFile = $this->getOption( 'outfile', false );
+               if ( $outputFile === false ) {
+                       // Only output the minified result (or errors)
+                       // Avoid output() because this should not honour --quiet
+                       foreach ( $this->mArgs as $arg ) {
+                               print $this->minify( $arg ) . "\n";
                        }
-
-                       // Minify one file
-                       $this->minify( $this->getArg( 0 ), $this->getOption( 'outfile' ) );
-
-                       return;
-               }
-
-               $outDir = $this->getOption( 'outdir', false );
-
-               foreach ( $this->mArgs as $arg ) {
-                       $inPath = realpath( $arg );
-                       $inName = basename( $inPath );
-                       $inDir = dirname( $inPath );
-
-                       if ( strpos( $inName, '.min.' ) !== false ) {
-                               $this->error( "Skipping $inName\n" );
-                               continue;
+               } else {
+                       $result = '';
+                       foreach ( $this->mArgs as $arg ) {
+                               $this->output( "Minifying {$arg} ...\n" );
+                               $result .= $this->minify( $arg );
                        }
-
-                       if ( !file_exists( $inPath ) ) {
-                               $this->fatalError( "File does not exist: $arg" );
-                       }
-
-                       $extension = $this->getExtension( $inName );
-                       $outName = substr( $inName, 0, -strlen( $extension ) ) . 'min.' . $extension;
-                       if ( $outDir === false ) {
-                               $outPath = $inDir . '/' . $outName;
-                       } else {
-                               $outPath = $outDir . '/' . $outName;
-                       }
-
-                       $this->minify( $inPath, $outPath );
+                       $this->output( "Writing to {$outputFile} ...\n" );
+                       file_put_contents( $outputFile, $result );
+                       $this->output( "Done!\n" );
                }
        }
 
        public function getExtension( $fileName ) {
                $dotPos = strrpos( $fileName, '.' );
                if ( $dotPos === false ) {
-                       $this->fatalError( "No file extension, cannot determine type: $fileName" );
+                       $this->fatalError( "Unknown file type ($fileName). Use --type." );
                }
-
                return substr( $fileName, $dotPos + 1 );
        }
 
-       public function minify( $inPath, $outPath ) {
-               $extension = $this->getExtension( $inPath );
-               $this->output( basename( $inPath ) . ' -> ' . basename( $outPath ) . '...' );
-
-               $inText = file_get_contents( $inPath );
-               if ( $inText === false ) {
-                       $this->fatalError( "Unable to open file $inPath for reading." );
-               }
-               $outFile = fopen( $outPath, 'w' );
-               if ( !$outFile ) {
-                       $this->fatalError( "Unable to open file $outPath for writing." );
+       private function readFile( $fileName ) {
+               if ( $fileName === '-' ) {
+                       $inText = $this->getStdin( self::STDIN_ALL );
+               } else {
+                       AtEase::suppressWarnings();
+                       $inText = file_get_contents( $fileName );
+                       AtEase::restoreWarnings();
+                       if ( $inText === false ) {
+                               $this->fatalError( "Unable to open file $fileName for reading." );
+                       }
                }
+               return $inText;
+       }
+
+       public function minify( $inPath ) {
+               $extension = $this->getOption( 'type', null ) ?? $this->getExtension( $inPath );
+               $inText = $this->readFile( $inPath );
 
                switch ( $extension ) {
                        case 'js':
@@ -120,12 +104,10 @@ class MinifyScript extends Maintenance {
                                $outText = CSSMin::minify( $inText );
                                break;
                        default:
-                               $this->error( "No minifier defined for extension \"$extension\"" );
+                               $this->fatalError( "Unsupported file type \"$extension\"." );
                }
 
-               fwrite( $outFile, $outText );
-               fclose( $outFile );
-               $this->output( " ok\n" );
+               return $outText;
        }
 }
 
diff --git a/maintenance/mssql/archives/patch-actor-table.sql b/maintenance/mssql/archives/patch-actor-table.sql
deleted file mode 100644 (file)
index ad524a7..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
---
--- patch-actor-table.sql
---
--- T167246. Add an `actor` table and various columns (and temporary tables) to reference it.
-
-CREATE TABLE /*_*/actor (
-  actor_id bigint NOT NULL CONSTRAINT PK_actor PRIMARY KEY IDENTITY(0,1),
-  actor_user int,
-  actor_name nvarchar(255) NOT NULL
-);
-CREATE UNIQUE INDEX /*i*/actor_user ON /*_*/actor (actor_user);
-CREATE UNIQUE INDEX /*i*/actor_name ON /*_*/actor (actor_name);
-
--- Dummy
-INSERT INTO /*_*/actor (actor_name) VALUES ('##Anonymous##');
-
-CREATE TABLE /*_*/revision_actor_temp (
-  revactor_rev int NOT NULL CONSTRAINT FK_revactor_rev FOREIGN KEY REFERENCES /*_*/revision(rev_id) ON DELETE CASCADE,
-  revactor_actor bigint NOT NULL,
-  revactor_timestamp varchar(14) NOT NULL CONSTRAINT DF_revactor_timestamp DEFAULT '',
-  revactor_page int NOT NULL,
-  CONSTRAINT PK_revision_actor_temp PRIMARY KEY (revactor_rev, revactor_actor)
-);
-CREATE UNIQUE INDEX /*i*/revactor_rev ON /*_*/revision_actor_temp (revactor_rev);
-CREATE INDEX /*i*/actor_timestamp ON /*_*/revision_actor_temp (revactor_actor,revactor_timestamp);
-CREATE INDEX /*i*/page_actor_timestamp ON /*_*/revision_actor_temp (revactor_page,revactor_actor,revactor_timestamp);
-
-ALTER TABLE /*_*/archive ADD CONSTRAINT DF_ar_user_text DEFAULT '' FOR ar_user_text;
-ALTER TABLE /*_*/archive ADD ar_actor bigint NOT NULL CONSTRAINT DF_ar_actor DEFAULT 0;
-CREATE INDEX /*i*/ar_actor_timestamp ON /*_*/archive (ar_actor,ar_timestamp);
-
-ALTER TABLE /*_*/ipblocks ADD ipb_by_actor bigint NOT NULL CONSTRAINT DF_ipb_by_actor DEFAULT 0;
-
-ALTER TABLE /*_*/image ADD CONSTRAINT DF_img_user_text DEFAULT '' FOR img_user_text;
-ALTER TABLE /*_*/image ADD img_actor bigint NOT NULL CONSTRAINT DF_img_actor DEFAULT 0;
-CREATE INDEX /*i*/img_actor_timestamp ON /*_*/image (img_actor, img_timestamp);
-
-ALTER TABLE /*_*/oldimage ADD CONSTRAINT DF_oi_user_text DEFAULT '' FOR oi_user_text;
-ALTER TABLE /*_*/oldimage ADD oi_actor bigint NOT NULL CONSTRAINT DF_oi_actor DEFAULT 0;
-CREATE INDEX /*i*/oi_actor_timestamp ON /*_*/oldimage (oi_actor,oi_timestamp);
-
-ALTER TABLE /*_*/filearchive ADD CONSTRAINT DF_fa_user_text DEFAULT '' FOR fa_user_text;
-ALTER TABLE /*_*/filearchive ADD fa_actor bigint NOT NULL CONSTRAINT DF_fa_actor DEFAULT 0;
-CREATE INDEX /*i*/fa_actor_timestamp ON /*_*/filearchive (fa_actor,fa_timestamp);
-
-ALTER TABLE /*_*/recentchanges ADD CONSTRAINT DF_rc_user_text DEFAULT '' FOR rc_user_text;
-ALTER TABLE /*_*/recentchanges ADD rc_actor bigint NOT NULL CONSTRAINT DF_rc_actor DEFAULT 0;
-CREATE INDEX /*i*/rc_ns_actor ON /*_*/recentchanges (rc_namespace, rc_actor);
-CREATE INDEX /*i*/rc_actor ON /*_*/recentchanges (rc_actor, rc_timestamp);
-
-ALTER TABLE /*_*/logging ADD log_actor bigint NOT NULL CONSTRAINT DF_log_actor DEFAULT 0;
-CREATE INDEX /*i*/actor_time ON /*_*/logging (log_actor, log_timestamp);
-CREATE INDEX /*i*/log_actor_type_time ON /*_*/logging (log_actor, log_type, log_timestamp);
diff --git a/maintenance/mssql/archives/patch-add-3d.sql b/maintenance/mssql/archives/patch-add-3d.sql
deleted file mode 100644 (file)
index 51d2775..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-ALTER TABLE /*$wgDBprefix*/image
-       DROP CONSTRAINT img_media_type_ckc;
-
-ALTER TABLE /*$wgDBprefix*/image
-       ADD CONSTRAINT img_media_type_ckc
-       CHECK (img_media_type IN("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D"));
-
-ALTER TABLE /*$wgDBprefix*/oldimage
-       DROP CONSTRAINT oi_media_type_ckc;
-
-ALTER TABLE /*$wgDBprefix*/oldimage
-       ADD CONSTRAINT oi_media_type_ckc
-       CHECK (oi_media_type IN("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D"));
-
-ALTER TABLE /*$wgDBprefix*/filearchive
-       DROP CONSTRAINT fa_media_type_ckc;
-
-ALTER TABLE /*$wgDBprefix*/filearchive
-       ADD CONSTRAINT fa_media_type_ckc
-       CHECK (fa_media_type IN("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D"));
-
-ALTER TABLE /*$wgDBprefix*/uploadstash
-       DROP CONSTRAINT us_media_type_ckc;
-
-ALTER TABLE /*$wgDBprefix*/uploadstash
-       ADD CONSTRAINT us_media_type_ckc
-       CHECK (us_media_type IN("UNKNOWN", "BITMAP", "DRAWING", "AUDIO", "VIDEO", "MULTIMEDIA", "OFFICE", "TEXT", "EXECUTABLE", "ARCHIVE", "3D"));
diff --git a/maintenance/mssql/archives/patch-add-cl_collation_ext_index.sql b/maintenance/mssql/archives/patch-add-cl_collation_ext_index.sql
deleted file mode 100644 (file)
index 8137dc6..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
--- @since 1.27
-CREATE INDEX /*i*/cl_collation_ext ON /*_*/categorylinks (cl_collation, cl_to, cl_type, cl_from);
diff --git a/maintenance/mssql/archives/patch-alter-table-oldimage.sql b/maintenance/mssql/archives/patch-alter-table-oldimage.sql
deleted file mode 100644 (file)
index fb31d6a..0000000
+++ /dev/null
@@ -1 +0,0 @@
-DROP INDEX /*i*/oi_name_archive_name ON /*_*/oldimage;
diff --git a/maintenance/mssql/archives/patch-ar_rev_id-not-null.sql b/maintenance/mssql/archives/patch-ar_rev_id-not-null.sql
deleted file mode 100644 (file)
index d287f49..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE /*_*/archive ALTER COLUMN ar_rev_id INT NOT NULL;
diff --git a/maintenance/mssql/archives/patch-archive-drop-fks.sql b/maintenance/mssql/archives/patch-archive-drop-fks.sql
deleted file mode 100644 (file)
index 3055ac9..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-DECLARE @base nvarchar(max),
-       @SQL nvarchar(max),
-       @id sysname;--
-
-SET @base = 'ALTER TABLE /*_*/archive DROP CONSTRAINT ';--
-
-SELECT @id = fk.name
-FROM sys.foreign_keys fk
-JOIN sys.foreign_key_columns fkc
-       ON fkc.constraint_object_id = fk.object_id
-JOIN sys.columns c
-       ON c.column_id = fkc.parent_column_id
-       AND c.object_id = fkc.parent_object_id
-WHERE
-       fk.parent_object_id = OBJECT_ID('/*_*/archive')
-       AND fk.referenced_object_id = OBJECT_ID('/*_*/revision')
-       AND c.name = 'ar_parent_id';--
-
-SET @SQL = @base + @id;--
-
-EXEC sp_executesql @SQL;--
-
--- while we're at it, let's fix up the other foreign key constraints on archive
--- as future patches touch constraints on other tables, they'll take the time to update constraint names there as well
-SELECT @id = fk.name
-FROM sys.foreign_keys fk
-JOIN sys.foreign_key_columns fkc
-       ON fkc.constraint_object_id = fk.object_id
-JOIN sys.columns c
-       ON c.column_id = fkc.parent_column_id
-       AND c.object_id = fkc.parent_object_id
-WHERE
-       fk.parent_object_id = OBJECT_ID('/*_*/archive')
-       AND fk.referenced_object_id = OBJECT_ID('/*_*/mwuser')
-       AND c.name = 'ar_user';--
-
-SET @SQL = @base + @id;--
-
-EXEC sp_executesql @SQL;--
-
-ALTER TABLE /*_*/archive ADD CONSTRAINT ar_user__user_id__fk FOREIGN KEY (ar_user) REFERENCES /*_*/mwuser(user_id);--
-
-SELECT @id = fk.name
-FROM sys.foreign_keys fk
-JOIN sys.foreign_key_columns fkc
-       ON fkc.constraint_object_id = fk.object_id
-JOIN sys.columns c
-       ON c.column_id = fkc.parent_column_id
-       AND c.object_id = fkc.parent_object_id
-WHERE
-       fk.parent_object_id = OBJECT_ID('/*_*/archive')
-       AND fk.referenced_object_id = OBJECT_ID('/*_*/text')
-       AND c.name = 'ar_text_id';--
-
-SET @SQL = @base + @id;--
-
-EXEC sp_executesql @SQL;--
-
-ALTER TABLE /*_*/archive ADD CONSTRAINT ar_text_id__old_id__fk FOREIGN KEY (ar_text_id) REFERENCES /*_*/text(old_id) ON DELETE CASCADE;
diff --git a/maintenance/mssql/archives/patch-bot_passwords.sql b/maintenance/mssql/archives/patch-bot_passwords.sql
deleted file mode 100644 (file)
index 7718ffa..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---
--- This table contains a user's bot passwords: passwords that allow access to
--- the account via the API with limited rights.
---
-CREATE TABLE /*_*/bot_passwords (
-       bp_user int NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
-       bp_app_id nvarchar(32) NOT NULL,
-       bp_password nvarchar(255) NOT NULL,
-       bp_token nvarchar(255) NOT NULL,
-       bp_restrictions nvarchar(max) NOT NULL,
-       bp_grants nvarchar(max) NOT NULL,
-       PRIMARY KEY (bp_user, bp_app_id)
-);
diff --git a/maintenance/mssql/archives/patch-categorylinks-constraints.sql b/maintenance/mssql/archives/patch-categorylinks-constraints.sql
deleted file mode 100644 (file)
index cf9b565..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-DECLARE @baseSQL nvarchar(max),
-       @SQL nvarchar(max),
-       @id sysname;--
-
-SET @baseSQL = 'ALTER TABLE /*_*/categorylinks DROP CONSTRAINT ';--
-
-SELECT @id = cc.name
-FROM sys.check_constraints cc
-JOIN sys.columns c
-       ON c.object_id = cc.parent_object_id
-       AND c.column_id = cc.parent_column_id
-WHERE
-       cc.parent_object_id = OBJECT_ID('/*_*/categorylinks')
-       AND c.name = 'cl_type';--
-
-SET @SQL = @baseSQL + @id;--
-
-EXEC sp_executesql @SQL;--
-
-ALTER TABLE /*_*/categorylinks ADD CONSTRAINT cl_type_ckc CHECK (cl_type IN('page', 'subcat', 'file'));
diff --git a/maintenance/mssql/archives/patch-change_tag-ct_id.sql b/maintenance/mssql/archives/patch-change_tag-ct_id.sql
deleted file mode 100644 (file)
index 94cb9d1..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
--- Primary key in change_tag table
-
-ALTER TABLE /*_*/change_tag ADD ct_id INT IDENTITY;
-ALTER TABLE /*_*/change_tag ADD CONSTRAINT pk_change_tag PRIMARY KEY(ct_id)
diff --git a/maintenance/mssql/archives/patch-change_tag-tag_id.sql b/maintenance/mssql/archives/patch-change_tag-tag_id.sql
deleted file mode 100644 (file)
index 869ee11..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
---
--- Add ctd_tag_id to change_tag table to normalize it
---
-ALTER TABLE /*_*/change_tag
-  ADD COLUMN ct_tag_id int NULL CONSTRAINT ctd_tag_id__fk FOREIGN KEY REFERENCES /*_*/change_tag_def(ctd_id);
-
-CREATE INDEX /*i*/change_tag_tag_id_id ON /*_*/change_tag (ct_tag_id,ct_rc_id,ct_rev_id,ct_log_id);
diff --git a/maintenance/mssql/archives/patch-change_tag_def.sql b/maintenance/mssql/archives/patch-change_tag_def.sql
deleted file mode 100644 (file)
index 1ddeb01..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
--- Table defining tag names for IDs. Also stores hit counts to avoid expensive queries on change_tag
-
-CREATE TABLE /*_*/change_tag_def (
-    -- Numerical ID of the tag (ct_tag_id refers to this)
-    ctd_id int NOT NULL CONSTRAINT PK_change_tag_def PRIMARY KEY IDENTITY,
-    -- Symbolic name of the tag (what would previously be put in ct_tag)
-    ctd_name nvarchar(255) NOT NULL,
-    -- Whether this tag was defined manually by a privileged user using Special:Tags
-    ctd_user_defined tinyint NOT NULL CONSTRAINT DF_ctd_user_defined DEFAULT 0,
-    -- Number of times this tag was used
-    ctd_count int NOT NULL CONSTRAINT DF_ctd_count DEFAULT 0
-) /*$wgDBTableOptions*/;
-
-CREATE UNIQUE INDEX /*i*/ctd_name ON /*_*/change_tag_def (ctd_name);
-CREATE INDEX /*i*/ctd_count ON /*_*/change_tag_def (ctd_count);
-CREATE INDEX /*i*/ctd_user_defined ON /*_*/change_tag_def (ctd_user_defined);
diff --git a/maintenance/mssql/archives/patch-comment-table.sql b/maintenance/mssql/archives/patch-comment-table.sql
deleted file mode 100644 (file)
index c532082..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
---
--- patch-comment-table.sql
---
--- T166732. Add a `comment` table and various columns (and temporary tables) to reference it.
-
-CREATE TABLE /*_*/comment (
-  comment_id bigint NOT NULL PRIMARY KEY IDENTITY(0,1),
-  comment_hash INT NOT NULL,
-  comment_text nvarchar(max) NOT NULL,
-  comment_data nvarchar(max)
-);
-CREATE INDEX /*i*/comment_hash ON /*_*/comment (comment_hash);
-
--- dummy row for FKs. Hash is intentionally wrong so CommentStore won't match it.
-INSERT INTO /*_*/comment (comment_hash, comment_text) VALUES (-1, '** dummy **');
-
-
-CREATE TABLE /*_*/revision_comment_temp (
-  revcomment_rev INT NOT NULL CONSTRAINT FK_revcomment_rev FOREIGN KEY REFERENCES /*_*/revision(rev_id) ON DELETE CASCADE,
-  revcomment_comment_id bigint NOT NULL CONSTRAINT FK_revcomment_comment_id FOREIGN KEY REFERENCES /*_*/comment(comment_id),
-  CONSTRAINT PK_revision_comment_temp PRIMARY KEY (revcomment_rev, revcomment_comment_id)
-);
-CREATE UNIQUE INDEX /*i*/revcomment_rev ON /*_*/revision_comment_temp (revcomment_rev);
-
-
-CREATE TABLE /*_*/image_comment_temp (
-  imgcomment_name nvarchar(255) NOT NULL CONSTRAINT FK_imgcomment_name FOREIGN KEY REFERENCES /*_*/image(img_name) ON DELETE CASCADE,
-  imgcomment_description_id bigint NOT NULL CONSTRAINT FK_imgcomment_description_id FOREIGN KEY REFERENCES /*_*/comment(comment_id),
-  CONSTRAINT PK_image_comment_temp PRIMARY KEY (imgcomment_name, imgcomment_description_id)
-);
-CREATE UNIQUE INDEX /*i*/imgcomment_name ON /*_*/image_comment_temp (imgcomment_name);
-
-
-ALTER TABLE /*_*/revision ADD CONSTRAINT DF_rev_comment DEFAULT '' FOR rev_comment;
-
-ALTER TABLE /*_*/archive ADD CONSTRAINT DF_ar_comment DEFAULT '' FOR ar_comment;
-ALTER TABLE /*_*/archive ADD ar_comment_id bigint NOT NULL CONSTRAINT DF_ar_comment_id DEFAULT 0 CONSTRAINT FK_ar_comment_id FOREIGN KEY REFERENCES /*_*/comment(comment_id);
-
-ALTER TABLE /*_*/ipblocks ADD CONSTRAINT DF_ipb_reason DEFAULT '' FOR ipb_reason;
-ALTER TABLE /*_*/ipblocks ADD ipb_reason_id bigint NOT NULL CONSTRAINT DF_ipb_reason_id DEFAULT 0 CONSTRAINT FK_ipb_reason_id FOREIGN KEY REFERENCES /*_*/comment(comment_id);
-
-ALTER TABLE /*_*/image ADD CONSTRAINT DF_img_description DEFAULT '' FOR img_description;
-
-ALTER TABLE /*_*/oldimage ADD CONSTRAINT DF_oi_description DEFAULT '' FOR oi_description;
-ALTER TABLE /*_*/oldimage ADD oi_description_id bigint NOT NULL CONSTRAINT DF_oi_description_id DEFAULT 0 CONSTRAINT FK_oi_description_id FOREIGN KEY REFERENCES /*_*/comment(comment_id);
-
-ALTER TABLE /*_*/filearchive ADD CONSTRAINT DF_fa_deleted_reason DEFAULT '' FOR fa_deleted_reason;
-ALTER TABLE /*_*/filearchive ADD fa_deleted_reason_id bigint NOT NULL CONSTRAINT DF_fa_deleted_reason_id DEFAULT 0 CONSTRAINT FK_fa_deleted_reason_id FOREIGN KEY REFERENCES /*_*/comment(comment_id);
-ALTER TABLE /*_*/filearchive ADD CONSTRAINT DF_fa_description DEFAULT '' FOR fa_description;
-ALTER TABLE /*_*/filearchive ADD fa_description_id bigint NOT NULL CONSTRAINT DF_fa_description_id DEFAULT 0 CONSTRAINT FK_fa_description_id FOREIGN KEY REFERENCES /*_*/comment(comment_id);
-
-ALTER TABLE /*_*/recentchanges ADD rc_comment_id bigint NOT NULL CONSTRAINT DF_rc_comment_id DEFAULT 0 CONSTRAINT FK_rc_comment_id FOREIGN KEY REFERENCES /*_*/comment(comment_id);
-
-ALTER TABLE /*_*/logging ADD log_comment_id bigint NOT NULL CONSTRAINT DF_log_comment_id DEFAULT 0 CONSTRAINT FK_log_comment_id FOREIGN KEY REFERENCES /*_*/comment(comment_id);
-
-ALTER TABLE /*_*/protected_titles ADD CONSTRAINT DF_pt_reason DEFAULT '' FOR pt_reason;
-ALTER TABLE /*_*/protected_titles ADD pt_reason_id bigint NOT NULL CONSTRAINT DF_pt_reason_id DEFAULT 0 CONSTRAINT FK_pt_reason_id FOREIGN KEY REFERENCES /*_*/comment(comment_id);
diff --git a/maintenance/mssql/archives/patch-content.sql b/maintenance/mssql/archives/patch-content.sql
deleted file mode 100644 (file)
index a899f27..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---
--- The content table represents content objects. It's primary purpose is to provide the necessary
--- meta-data for loading and interpreting a serialized data blob to create a content object.
---
-CREATE TABLE /*_*/content (
-
-  -- ID of the content object
-  content_id bigint NOT NULL CONSTRAINT PK_content PRIMARY KEY IDENTITY,
-
-  -- Nominal size of the content object (not necessarily of the serialized blob)
-  content_size int NOT NULL,
-
-  -- Nominal hash of the content object (not necessarily of the serialized blob)
-  content_sha1 varchar(32) NOT NULL,
-
-  -- reference to model_id
-  content_model smallint NOT NULL CONSTRAINT FK_content_content_models FOREIGN KEY REFERENCES /*_*/content_models(model_id),
-
-  -- URL-like address of the content blob
-  content_address nvarchar(255) NOT NULL
-);
diff --git a/maintenance/mssql/archives/patch-content_models.sql b/maintenance/mssql/archives/patch-content_models.sql
deleted file mode 100644 (file)
index b94de0b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-
---
--- Normalization table for content model names
---
-CREATE TABLE /*_*/content_models (
-  model_id smallint NOT NULL CONSTRAINT PK_content_models PRIMARY KEY IDENTITY,
-  model_name nvarchar(64) NOT NULL
-);
-
--- Index for looking of the internal ID of for a name
-CREATE UNIQUE INDEX /*i*/model_name ON /*_*/content_models (model_name);
\ No newline at end of file
diff --git a/maintenance/mssql/archives/patch-drop-ar_text.sql b/maintenance/mssql/archives/patch-drop-ar_text.sql
deleted file mode 100644 (file)
index c9b975c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-DECLARE @sql nvarchar(max),
-       @id sysname;--
-
-SET @sql = 'ALTER TABLE /*_*/archive DROP CONSTRAINT ';--
-
-SELECT @id = df.name
-FROM sys.default_constraints df
-JOIN sys.columns c
-       ON c.object_id = df.parent_object_id
-       AND c.column_id = df.parent_column_id
-WHERE
-       df.parent_object_id = OBJECT_ID('/*_*/archive')
-       AND ( c.name = 'ar_text' OR c.name = 'ar_flags' );--
-
-SET @sql = @sql + @id;--
-
-EXEC sp_executesql @sql;--
-
-ALTER TABLE /*_*/archive DROP COLUMN ar_text;
-ALTER TABLE /*_*/archive DROP COLUMN ar_flags;
-ALTER TABLE /*_*/archive ALTER COLUMN ar_text_id INT NOT NULL CONSTRAINT DF_ar_text_id DEFAULT 0;
diff --git a/maintenance/mssql/archives/patch-drop-comment-fields.sql b/maintenance/mssql/archives/patch-drop-comment-fields.sql
deleted file mode 100644 (file)
index bdc8c91..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
---
--- patch-drop-comment-fields.sql
---
--- T166732. Drop old xx_comment fields, and defaults from xx_comment_id fields.
-
-DECLARE @sql nvarchar(max),
-       @id sysname;
-
-ALTER TABLE /*_*/archive DROP CONSTRAINT DF_ar_comment, COLUMN ar_comment;
-ALTER TABLE /*_*/archive DROP CONSTRAINT DF_ar_comment_id;
-
-ALTER TABLE /*_*/ipblocks DROP CONSTRAINT DF_ipb_reason, COLUMN ipb_reason;
-ALTER TABLE /*_*/ipblocks DROP CONSTRAINT DF_ipb_reason_id;
-
-ALTER TABLE /*_*/image DROP CONSTRAINT DF_img_description, COLUMN img_description;
-ALTER TABLE /*_*/image DROP CONSTRAINT DF_img_description_id;
-
-ALTER TABLE /*_*/oldimage DROP CONSTRAINT DF_oi_description, COLUMN oi_description;
-ALTER TABLE /*_*/oldimage DROP CONSTRAINT DF_oi_description_id;
-
-ALTER TABLE /*_*/filearchive DROP CONSTRAINT DF_fa_deleted_reason, COLUMN fa_deleted_reason;
-ALTER TABLE /*_*/filearchive DROP CONSTRAINT DF_fa_deleted_reason_id;
-ALTER TABLE /*_*/filearchive DROP CONSTRAINT DF_fa_description, COLUMN fa_description;
-ALTER TABLE /*_*/filearchive DROP CONSTRAINT DF_fa_description_id;
-
-SET @sql = 'ALTER TABLE /*_*/recentchanges DROP CONSTRAINT ';
-SELECT @id = df.name
-FROM sys.default_constraints df
-JOIN sys.columns c
-       ON c.object_id = df.parent_object_id
-       AND c.column_id = df.parent_column_id
-WHERE
-       df.parent_object_id = OBJECT_ID('/*_*/recentchanges')
-       AND c.name = 'rc_comment';
-SET @sql = @sql + @id;
-EXEC sp_executesql @sql;
-ALTER TABLE /*_*/recentchanges DROP COLUMN rc_comment;
-ALTER TABLE /*_*/recentchanges DROP CONSTRAINT DF_rc_comment_id;
-
-SET @sql = 'ALTER TABLE /*_*/logging DROP CONSTRAINT ';
-SELECT @id = df.name
-FROM sys.default_constraints df
-JOIN sys.columns c
-       ON c.object_id = df.parent_object_id
-       AND c.column_id = df.parent_column_id
-WHERE
-       df.parent_object_id = OBJECT_ID('/*_*/logging')
-       AND c.name = 'log_comment';
-SET @sql = @sql + @id;
-EXEC sp_executesql @sql;
-ALTER TABLE /*_*/logging DROP COLUMN log_comment;
-ALTER TABLE /*_*/logging DROP CONSTRAINT DF_log_comment_id;
-
-ALTER TABLE /*_*/protected_titles DROP CONSTRAINT DF_pt_reason, COLUMN pt_reason;
-ALTER TABLE /*_*/protected_titles DROP CONSTRAINT DF_pt_reason_id;
diff --git a/maintenance/mssql/archives/patch-drop-ct_tag.sql b/maintenance/mssql/archives/patch-drop-ct_tag.sql
deleted file mode 100644 (file)
index 5498a1c..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
--- T185355
-ALTER TABLE /*_*/change_tag ALTER COLUMN ct_tag INTEGER NOT NULL
-
-DECLARE @sql nvarchar(max),
-       @id sysname;--
-
-SET @sql = 'ALTER TABLE /*_*/change_tag DROP CONSTRAINT ';--
-
-SELECT @id = df.name
-FROM sys.default_constraints df
-JOIN sys.columns c
-       ON c.object_id = df.parent_object_id
-       AND c.column_id = df.parent_column_id
-WHERE
-       df.parent_object_id = OBJECT_ID('/*_*/change_tag')
-       AND c.name = 'ct_tag';--
-
-SET @sql = @sql + @id;--
-
-EXEC sp_executesql @sql;--
-
-ALTER TABLE /*_*/change_tag DROP COLUMN ct_tag;
diff --git a/maintenance/mssql/archives/patch-drop-page_counter.sql b/maintenance/mssql/archives/patch-drop-page_counter.sql
deleted file mode 100644 (file)
index 54ab9f7..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-DECLARE @sql nvarchar(max),
-       @id sysname;--
-
-SET @sql = 'ALTER TABLE /*_*/page DROP CONSTRAINT ';--
-
-SELECT @id = df.name
-FROM sys.default_constraints df
-JOIN sys.columns c
-       ON c.object_id = df.parent_object_id
-       AND c.column_id = df.parent_column_id
-WHERE
-       df.parent_object_id = OBJECT_ID('/*_*/page')
-       AND c.name = 'page_counter';--
-
-SET @sql = @sql + @id;--
-
-EXEC sp_executesql @sql;--
-
-ALTER TABLE /*_*/page DROP COLUMN page_counter;
diff --git a/maintenance/mssql/archives/patch-drop-rc_cur_time.sql b/maintenance/mssql/archives/patch-drop-rc_cur_time.sql
deleted file mode 100644 (file)
index 01c46d3..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-DECLARE @sql nvarchar(max),
-       @id sysname;--
-
-SET @sql = 'ALTER TABLE /*_*/recentchanges DROP CONSTRAINT ';--
-
-SELECT @id = df.name
-FROM sys.default_constraints df
-JOIN sys.columns c
-       ON c.object_id = df.parent_object_id
-       AND c.column_id = df.parent_column_id
-WHERE
-       df.parent_object_id = OBJECT_ID('/*_*/recentchanges')
-       AND c.name = 'rc_cur_time';--
-
-SET @sql = @sql + @id;--
-
-EXEC sp_executesql @sql;--
-
-ALTER TABLE /*_*/recentchanges DROP COLUMN rc_cur_time;
diff --git a/maintenance/mssql/archives/patch-drop-ss_total_views.sql b/maintenance/mssql/archives/patch-drop-ss_total_views.sql
deleted file mode 100644 (file)
index 7525ed5..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-DECLARE @sql nvarchar(max),
-       @id sysname;--
-
-SET @sql = 'ALTER TABLE /*_*/site_stats DROP CONSTRAINT ';--
-
-SELECT @id = df.name
-FROM sys.default_constraints df
-JOIN sys.columns c
-       ON c.object_id = df.parent_object_id
-       AND c.column_id = df.parent_column_id
-WHERE
-       df.parent_object_id = OBJECT_ID('/*_*/site_stats')
-       AND c.name = 'ss_total_views';--
-
-SET @sql = @sql + @id;--
-
-EXEC sp_executesql @sql;--
-
-ALTER TABLE /*_*/site_stats DROP COLUMN ss_total_views;
diff --git a/maintenance/mssql/archives/patch-drop-user_options.sql b/maintenance/mssql/archives/patch-drop-user_options.sql
deleted file mode 100644 (file)
index ab37956..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-DECLARE @sql nvarchar(max),
-       @id sysname;--
-
-SET @sql = 'ALTER TABLE /*_*/mwuser DROP CONSTRAINT ';--
-
-SELECT @id = df.name
-FROM sys.default_constraints df
-JOIN sys.columns c
-       ON c.object_id = df.parent_object_id
-       AND c.column_id = df.parent_column_id
-WHERE
-       df.parent_object_id = OBJECT_ID('/*_*/mwuser')
-       AND c.name = 'user_options';--
-
-SET @sql = @sql + @id;--
-
-EXEC sp_executesql @sql;--
-
-ALTER TABLE /*_*/mwuser DROP COLUMN user_options;
diff --git a/maintenance/mssql/archives/patch-externallinks-el_index_60-drop-default.sql b/maintenance/mssql/archives/patch-externallinks-el_index_60-drop-default.sql
deleted file mode 100644 (file)
index 7755e66..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-DECLARE @sql nvarchar(max)
-SET @sql=''
-
-SELECT @sql= @sql + 'ALTER TABLE /*_*/externallinks DROP CONSTRAINT ' + df.name + '; '
-FROM sys.default_constraints df
-JOIN sys.columns c
-       ON c.object_id = df.parent_object_id
-       AND c.column_id = df.parent_column_id
-WHERE
-       df.parent_object_id =  OBJECT_ID('/*_*/externallinks')
-       AND c.name = 'el_index_60';--
-
-EXEC sp_executesql @sql;
diff --git a/maintenance/mssql/archives/patch-fa_major_mime-chemical.sql b/maintenance/mssql/archives/patch-fa_major_mime-chemical.sql
deleted file mode 100644 (file)
index 1836808..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-ALTER TABLE /*_*/filearchive
-DROP CONSTRAINT fa_major_mime_ckc;
-ALTER TABLE /*_*/filearchive
-WITH NOCHECK ADD CONSTRAINT fa_major_mime_ckc CHECK (fa_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical'));
\ No newline at end of file
diff --git a/maintenance/mssql/archives/patch-filearchive-constraints.sql b/maintenance/mssql/archives/patch-filearchive-constraints.sql
deleted file mode 100644 (file)
index cefead5..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-DECLARE @baseSQL nvarchar(max),
-       @SQL nvarchar(max),
-       @id sysname;--
-
-SET @baseSQL = 'ALTER TABLE /*_*/filearchive DROP CONSTRAINT ';--
-
-SELECT @id = cc.name
-FROM sys.check_constraints cc
-JOIN sys.columns c
-       ON c.object_id = cc.parent_object_id
-       AND c.column_id = cc.parent_column_id
-WHERE
-       cc.parent_object_id = OBJECT_ID('/*_*/filearchive')
-       AND c.name = 'fa_major_mime';--
-
-SET @SQL = @baseSQL + @id;--
-
-EXEC sp_executesql @SQL;--
-
-SELECT @id = cc.name
-FROM sys.check_constraints cc
-JOIN sys.columns c
-       ON c.object_id = cc.parent_object_id
-       AND c.column_id = cc.parent_column_id
-WHERE
-       cc.parent_object_id = OBJECT_ID('/*_*/filearchive')
-       AND c.name = 'fa_media_type';--
-
-SET @SQL = @baseSQL + @id;--
-
-EXEC sp_executesql @SQL;--
-
-ALTER TABLE /*_*/filearchive ADD CONSTRAINT fa_major_mime_ckc check (fa_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart'));--
-ALTER TABLE /*_*/filearchive ADD CONSTRAINT fa_media_type_ckc check (fa_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'));
diff --git a/maintenance/mssql/archives/patch-filearchive-schema.sql b/maintenance/mssql/archives/patch-filearchive-schema.sql
deleted file mode 100644 (file)
index cf1c01f..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
--- MediaWiki looks for lines ending with semicolons and sends them as separate queries
--- However here we *really* need this all to be sent as a single batch. As such, DO NOT
--- remove the -- from the end of each statement.
-
-DECLARE @temp table (
-       fa_id int,
-       fa_name nvarchar(255),
-       fa_archive_name nvarchar(255),
-       fa_storage_group nvarchar(16),
-       fa_storage_key nvarchar(64),
-       fa_deleted_user int,
-       fa_deleted_timestamp varchar(14),
-       fa_deleted_reason nvarchar(max),
-       fa_size int,
-       fa_width int,
-       fa_height int,
-       fa_metadata nvarchar(max),
-       fa_bits int,
-       fa_media_type varchar(16),
-       fa_major_mime varchar(16),
-       fa_minor_mime nvarchar(100),
-       fa_description nvarchar(255),
-       fa_user int,
-       fa_user_text nvarchar(255),
-       fa_timestamp varchar(14),
-       fa_deleted tinyint,
-       fa_sha1 nvarchar(32)
-);--
-
-INSERT INTO @temp
-SELECT * FROM /*_*/filearchive;--
-
-DROP TABLE /*_*/filearchive;--
-
-CREATE TABLE /*_*/filearchive (
-  fa_id int NOT NULL PRIMARY KEY IDENTITY,
-  fa_name nvarchar(255) NOT NULL default '',
-  fa_archive_name nvarchar(255) default '',
-  fa_storage_group nvarchar(16),
-  fa_storage_key nvarchar(64) default '',
-  fa_deleted_user int,
-  fa_deleted_timestamp varchar(14) default '',
-  fa_deleted_reason nvarchar(max),
-  fa_size int default 0,
-  fa_width int default 0,
-  fa_height int default 0,
-  fa_metadata varbinary(max),
-  fa_bits int default 0,
-  fa_media_type varchar(16) default null,
-  fa_major_mime varchar(16) not null default 'unknown',
-  fa_minor_mime nvarchar(100) default 'unknown',
-  fa_description nvarchar(255),
-  fa_user int default 0 REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
-  fa_user_text nvarchar(255),
-  fa_timestamp varchar(14) default '',
-  fa_deleted tinyint NOT NULL default 0,
-  fa_sha1 nvarchar(32) NOT NULL default '',
-  CONSTRAINT fa_major_mime_ckc check (fa_major_mime in('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical')),
-  CONSTRAINT fa_media_type_ckc check (fa_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'))
-);--
-
-CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);--
-CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);--
-CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);--
-CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);--
-CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1);--
-
-SET IDENTITY_INSERT /*_*/filearchive ON;--
-
-INSERT INTO /*_*/filearchive
-(
-       fa_id,
-       fa_name,
-       fa_archive_name,
-       fa_storage_group,
-       fa_storage_key,
-       fa_deleted_user,
-       fa_deleted_timestamp,
-       fa_deleted_reason,
-       fa_size,
-       fa_width,
-       fa_height,
-       fa_metadata,
-       fa_bits,
-       fa_media_type,
-       fa_major_mime,
-       fa_minor_mime,
-       fa_description,
-       fa_user,
-       fa_user_text,
-       fa_timestamp,
-       fa_deleted,
-       fa_sha1
-)
-SELECT
-       fa_id,
-       fa_name,
-       fa_archive_name,
-       fa_storage_group,
-       fa_storage_key,
-       fa_deleted_user,
-       fa_deleted_timestamp,
-       fa_deleted_reason,
-       fa_size,
-       fa_width,
-       fa_height,
-       CONVERT(varbinary(max), fa_metadata, 0),
-       fa_bits,
-       fa_media_type,
-       fa_major_mime,
-       fa_minor_mime,
-       fa_description,
-       fa_user,
-       fa_user_text,
-       fa_timestamp,
-       fa_deleted,
-       fa_sha1
-FROM @temp t;--
-
-SET IDENTITY_INSERT /*_*/filearchive OFF;
diff --git a/maintenance/mssql/archives/patch-il_from_namespace.sql b/maintenance/mssql/archives/patch-il_from_namespace.sql
deleted file mode 100644 (file)
index e4ac98f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-ALTER TABLE /*_*/imagelinks
-  ADD il_from_namespace int NOT NULL default 0;
-
-CREATE INDEX /*i*/il_backlinks_namespace ON /*_*/imagelinks (il_from_namespace,il_to,il_from);
\ No newline at end of file
diff --git a/maintenance/mssql/archives/patch-image-constraints.sql b/maintenance/mssql/archives/patch-image-constraints.sql
deleted file mode 100644 (file)
index 0aeb627..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-DECLARE @baseSQL nvarchar(max),
-       @SQL nvarchar(max),
-       @id sysname;--
-
-SET @baseSQL = 'ALTER TABLE /*_*/image DROP CONSTRAINT ';--
-
-SELECT @id = cc.name
-FROM sys.check_constraints cc
-JOIN sys.columns c
-       ON c.object_id = cc.parent_object_id
-       AND c.column_id = cc.parent_column_id
-WHERE
-       cc.parent_object_id = OBJECT_ID('/*_*/image')
-       AND c.name = 'img_major_mime';--
-
-SET @SQL = @baseSQL + @id;--
-
-EXEC sp_executesql @SQL;--
-
-SELECT @id = cc.name
-FROM sys.check_constraints cc
-JOIN sys.columns c
-       ON c.object_id = cc.parent_object_id
-       AND c.column_id = cc.parent_column_id
-WHERE
-       cc.parent_object_id = OBJECT_ID('/*_*/image')
-       AND c.name = 'img_media_type';--
-
-SET @SQL = @baseSQL + @id;--
-
-EXEC sp_executesql @SQL;--
-
-ALTER TABLE /*_*/image ADD CONSTRAINT img_major_mime_ckc check (img_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart'));--
-ALTER TABLE /*_*/image ADD CONSTRAINT img_media_type_ckc check (img_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'));
diff --git a/maintenance/mssql/archives/patch-image-img_description_id.sql b/maintenance/mssql/archives/patch-image-img_description_id.sql
deleted file mode 100644 (file)
index bc51b52..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
---
--- patch-image-img_description_id.sql
---
--- T188132. Add `img_description_id` to the `image` table.
-
-ALTER TABLE /*_*/image ADD img_description_id bigint NOT NULL CONSTRAINT DF_img_description_id DEFAULT 0 CONSTRAINT FK_img_description_id FOREIGN KEY REFERENCES /*_*/comment(comment_id);
diff --git a/maintenance/mssql/archives/patch-image-schema.sql b/maintenance/mssql/archives/patch-image-schema.sql
deleted file mode 100644 (file)
index 213b438..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
--- MediaWiki looks for lines ending with semicolons and sends them as separate queries
--- However here we *really* need this all to be sent as a single batch. As such, DO NOT
--- remove the -- from the end of each statement.
-
-DECLARE @temp table (
-       img_name varbinary(255),
-       img_size int,
-       img_width int,
-       img_height int,
-       img_metadata varbinary(max),
-       img_bits int,
-       img_media_type varchar(16),
-       img_major_mime varchar(16),
-       img_minor_mime nvarchar(100),
-       img_description nvarchar(255),
-       img_user int,
-       img_user_text nvarchar(255),
-       img_timestamp nvarchar(14),
-       img_sha1 nvarchar(32)
-);--
-
-INSERT INTO @temp
-SELECT * FROM /*_*/image;--
-
-DROP TABLE /*_*/image;--
-
-CREATE TABLE /*_*/image (
-  img_name nvarchar(255) NOT NULL default '' PRIMARY KEY,
-  img_size int NOT NULL default 0,
-  img_width int NOT NULL default 0,
-  img_height int NOT NULL default 0,
-  img_metadata varbinary(max) NOT NULL,
-  img_bits int NOT NULL default 0,
-  img_media_type varchar(16) default null,
-  img_major_mime varchar(16) not null default 'unknown',
-  img_minor_mime nvarchar(100) NOT NULL default 'unknown',
-  img_description nvarchar(255) NOT NULL,
-  img_user int REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
-  img_user_text nvarchar(255) NOT NULL,
-  img_timestamp nvarchar(14) NOT NULL default '',
-  img_sha1 nvarchar(32) NOT NULL default '',
-  CONSTRAINT img_major_mime_ckc check (img_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical')),
-  CONSTRAINT img_media_type_ckc check (img_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'))
-);--
-
-CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);--
-CREATE INDEX /*i*/img_size ON /*_*/image (img_size);--
-CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);--
-CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1);--
-CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);--
-
-INSERT INTO /*_*/image
-(
-       img_name,
-       img_size,
-       img_width,
-       img_height,
-       img_metadata,
-       img_bits,
-       img_media_type,
-       img_major_mime,
-       img_minor_mime,
-       img_description,
-       img_user,
-       img_user_text,
-       img_timestamp,
-       img_sha1
-)
-SELECT
-       img_name,
-       img_size,
-       img_width,
-       img_height,
-       img_metadata,
-       img_bits,
-       img_media_type,
-       img_major_mime,
-       img_minor_mime,
-       img_description,
-       img_user,
-       img_user_text,
-       img_timestamp,
-       img_sha1
-FROM @temp t;
diff --git a/maintenance/mssql/archives/patch-img_major_mime-chemical.sql b/maintenance/mssql/archives/patch-img_major_mime-chemical.sql
deleted file mode 100644 (file)
index eed0786..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-ALTER TABLE /*_*/image
-DROP CONSTRAINT img_major_mime_ckc;
-ALTER TABLE /*_*/image
-WITH NOCHECK ADD CONSTRAINT img_major_mime_ckc CHECK (img_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical'));
\ No newline at end of file
diff --git a/maintenance/mssql/archives/patch-interwiki-pk.sql b/maintenance/mssql/archives/patch-interwiki-pk.sql
deleted file mode 100644 (file)
index e989c44..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-DROP INDEX IF EXISTS /*i*/iw_prefix ON /*_*/interwiki;
-ALTER TABLE /*_*/interwiki ADD CONSTRAINT PK_interwiki PRIMARY KEY(iw_prefix);
\ No newline at end of file
diff --git a/maintenance/mssql/archives/patch-ipb_sitewide.sql b/maintenance/mssql/archives/patch-ipb_sitewide.sql
deleted file mode 100644 (file)
index 4f7ef8e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
--- Adding ipb_sitewide for blocks
-ALTER TABLE /*$wgDBprefix*/ipblocks
-  ADD ipb_sitewide bit NOT NULL CONSTRAINT DF_ipb_sitewide DEFAULT 1;
diff --git a/maintenance/mssql/archives/patch-ipblocks_restrictions-table.sql b/maintenance/mssql/archives/patch-ipblocks_restrictions-table.sql
deleted file mode 100644 (file)
index e3095dd..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
--- For partial block restrictions --
-
-CREATE TABLE /*_*/ipblocks_restrictions (
-  ir_ipb_id int NOT NULL CONSTRAINT FK_ir_ipb_id FOREIGN KEY REFERENCES /*_*/ipblocks(ipb_id) ON DELETE CASCADE,
-  ir_type tinyint NOT NULL,
-  ir_value int NOT NULL,
-  CONSTRAINT PK_ipblocks_restrictions PRIMARY KEY (ir_ipb_id, ir_type, ir_value)
-) /*$wgDBTableOptions*/;
-
--- Index to query restrictions by the page or namespace.
-CREATE INDEX /*i*/ir_type_value ON /*_*/ipblocks_restrictions (ir_type, ir_value);
diff --git a/maintenance/mssql/archives/patch-kill-cl_collation_index.sql b/maintenance/mssql/archives/patch-kill-cl_collation_index.sql
deleted file mode 100644 (file)
index 7f75a62..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
---
--- Kill cl_collation index.
--- @since 1.27
---
-
-DROP INDEX /*i*/cl_collation ON /*_*/categorylinks;
-
diff --git a/maintenance/mssql/archives/patch-logging-drop-fks.sql b/maintenance/mssql/archives/patch-logging-drop-fks.sql
deleted file mode 100644 (file)
index c9cbca3..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-DECLARE @base nvarchar(max),
-       @SQL nvarchar(max),
-       @id sysname;--
-
-SET @base = 'ALTER TABLE /*_*/logging DROP CONSTRAINT ';--
-
-SELECT @id = fk.name
-FROM sys.foreign_keys fk
-JOIN sys.foreign_key_columns fkc
-       ON fkc.constraint_object_id = fk.object_id
-JOIN sys.columns c
-       ON c.column_id = fkc.parent_column_id
-       AND c.object_id = fkc.parent_object_id
-WHERE
-       fk.parent_object_id = OBJECT_ID('/*_*/logging')
-       AND fk.referenced_object_id = OBJECT_ID('/*_*/mwuser')
-       AND c.name = 'log_user';--
-
-SET @SQL = @base + @id;--
-
-EXEC sp_executesql @SQL;--
-
-SELECT @id = fk.name
-FROM sys.foreign_keys fk
-JOIN sys.foreign_key_columns fkc
-       ON fkc.constraint_object_id = fk.object_id
-JOIN sys.columns c
-       ON c.column_id = fkc.parent_column_id
-       AND c.object_id = fkc.parent_object_id
-WHERE
-       fk.parent_object_id = OBJECT_ID('/*_*/logging')
-       AND fk.referenced_object_id = OBJECT_ID('/*_*/page')
-       AND c.name = 'log_page';--
-
-SET @SQL = @base + @id;--
-
-EXEC sp_executesql @SQL;
diff --git a/maintenance/mssql/archives/patch-oi_major_mime-chemical.sql b/maintenance/mssql/archives/patch-oi_major_mime-chemical.sql
deleted file mode 100644 (file)
index 35482ed..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-ALTER TABLE /*_*/oldimage
-DROP CONSTRAINT oi_major_mime_ckc;
-ALTER TABLE /*_*/oldimage
-WITH NOCHECK ADD CONSTRAINT oi_major_mime_ckc CHECK (oi_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical'));
\ No newline at end of file
diff --git a/maintenance/mssql/archives/patch-oldimage-constraints.sql b/maintenance/mssql/archives/patch-oldimage-constraints.sql
deleted file mode 100644 (file)
index 69ede2c..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-DECLARE @baseSQL nvarchar(max),
-       @SQL nvarchar(max),
-       @id sysname;--
-
-SET @baseSQL = 'ALTER TABLE /*_*/oldimage DROP CONSTRAINT ';--
-
-SELECT @id = cc.name
-FROM sys.check_constraints cc
-JOIN sys.columns c
-       ON c.object_id = cc.parent_object_id
-       AND c.column_id = cc.parent_column_id
-WHERE
-       cc.parent_object_id = OBJECT_ID('/*_*/oldimage')
-       AND c.name = 'oi_major_mime';--
-
-SET @SQL = @baseSQL + @id;--
-
-EXEC sp_executesql @SQL;--
-
-SELECT @id = cc.name
-FROM sys.check_constraints cc
-JOIN sys.columns c
-       ON c.object_id = cc.parent_object_id
-       AND c.column_id = cc.parent_column_id
-WHERE
-       cc.parent_object_id = OBJECT_ID('/*_*/oldimage')
-       AND c.name = 'oi_media_type';--
-
-SET @SQL = @baseSQL + @id;--
-
-EXEC sp_executesql @SQL;--
-
-ALTER TABLE /*_*/oldimage ADD CONSTRAINT oi_major_mime_ckc check (oi_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart'));--
-ALTER TABLE /*_*/oldimage ADD CONSTRAINT oi_media_type_ckc check (oi_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'));
diff --git a/maintenance/mssql/archives/patch-oldimage-schema.sql b/maintenance/mssql/archives/patch-oldimage-schema.sql
deleted file mode 100644 (file)
index 3391c1b..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
--- MediaWiki looks for lines ending with semicolons and sends them as separate queries
--- However here we *really* need this all to be sent as a single batch. As such, DO NOT
--- remove the -- from the end of each statement.
-
-DECLARE @temp table (
-       oi_name varbinary(255),
-       oi_archive_name varbinary(255),
-       oi_size int,
-       oi_width int,
-       oi_height int,
-       oi_bits int,
-       oi_description nvarchar(255),
-       oi_user int,
-       oi_user_text nvarchar(255),
-       oi_timestamp varchar(14),
-       oi_metadata nvarchar(max),
-       oi_media_type varchar(16),
-       oi_major_mime varchar(16),
-       oi_minor_mime nvarchar(100),
-       oi_deleted tinyint,
-       oi_sha1 nvarchar(32)
-);--
-
-INSERT INTO @temp
-SELECT * FROM /*_*/oldimage;--
-
-DROP TABLE /*_*/oldimage;--
-
-CREATE TABLE /*_*/oldimage (
-  oi_name nvarchar(255) NOT NULL default '',
-  oi_archive_name nvarchar(255) NOT NULL default '',
-  oi_size int NOT NULL default 0,
-  oi_width int NOT NULL default 0,
-  oi_height int NOT NULL default 0,
-  oi_bits int NOT NULL default 0,
-  oi_description nvarchar(255) NOT NULL,
-  oi_user int REFERENCES /*_*/mwuser(user_id),
-  oi_user_text nvarchar(255) NOT NULL,
-  oi_timestamp varchar(14) NOT NULL default '',
-  oi_metadata varbinary(max) NOT NULL,
-  oi_media_type varchar(16) default null,
-  oi_major_mime varchar(16) not null default 'unknown',
-  oi_minor_mime nvarchar(100) NOT NULL default 'unknown',
-  oi_deleted tinyint NOT NULL default 0,
-  oi_sha1 nvarchar(32) NOT NULL default '',
-  CONSTRAINT oi_major_mime_ckc check (oi_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical')),
-  CONSTRAINT oi_media_type_ckc check (oi_media_type IN('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'))
-);--
-
-CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text, oi_timestamp);--
-CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name, oi_timestamp);--
-CREATE INDEX /*i*/oi_name_archive_name ON /*_*/oldimage (oi_name, oi_archive_name);--
-CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1);--
-
-INSERT INTO /*_*/oldimage
-(
-       oi_name,
-       oi_archive_name,
-       oi_size,
-       oi_width,
-       oi_height,
-       oi_bits,
-       oi_description,
-       oi_user,
-       oi_user_text,
-       oi_timestamp,
-       oi_metadata,
-       oi_media_type,
-       oi_major_mime,
-       oi_minor_mime,
-       oi_deleted,
-       oi_sha1
-)
-SELECT
-       oi_name,
-       oi_archive_name,
-       oi_size,
-       oi_width,
-       oi_height,
-       oi_bits,
-       oi_description,
-       oi_user,
-       oi_user_text,
-       oi_timestamp,
-       CONVERT(varbinary(max), oi_metadata, 0),
-       oi_media_type,
-       oi_major_mime,
-       oi_minor_mime,
-       oi_deleted,
-       oi_sha1
-FROM @temp t;
diff --git a/maintenance/mssql/archives/patch-page_page_lang.sql b/maintenance/mssql/archives/patch-page_page_lang.sql
deleted file mode 100644 (file)
index d2f537b..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE /*_*/page ADD page_lang VARBINARY(35) DEFAULT NULL
diff --git a/maintenance/mssql/archives/patch-page_props-pk.sql b/maintenance/mssql/archives/patch-page_props-pk.sql
deleted file mode 100644 (file)
index 0615440..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-DROP INDEX IF EXISTS /*i*/pp_page_propname ON /*_*/page_props;
-ALTER TABLE /*_*/page_props ADD CONSTRAINT PK_page_props PRIMARY KEY(pp_page,pp_propname);
\ No newline at end of file
diff --git a/maintenance/mssql/archives/patch-pl_from_namespace.sql b/maintenance/mssql/archives/patch-pl_from_namespace.sql
deleted file mode 100644 (file)
index b3bbd78..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-ALTER TABLE /*_*/pagelinks
-       ADD pl_from_namespace int NOT NULL default 0;
-
-CREATE INDEX /*i*/pl_backlinks_namespace ON /*_*/pagelinks (pl_from_namespace,pl_namespace,pl_title,pl_from);
diff --git a/maintenance/mssql/archives/patch-pp_sortkey.sql b/maintenance/mssql/archives/patch-pp_sortkey.sql
deleted file mode 100644 (file)
index b13b605..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
--- Add a 'sortkey' field to page_props so pages can be efficiently
--- queried by the numeric value of a property.
-
-ALTER TABLE /*_*/page_props
-        ADD pp_sortkey float DEFAULT NULL;
-
-CREATE UNIQUE INDEX /*i*/pp_propname_sortkey_page
-        ON /*_*/page_props ( pp_propname, pp_sortkey, pp_page );
diff --git a/maintenance/mssql/archives/patch-protected_titles-pk.sql b/maintenance/mssql/archives/patch-protected_titles-pk.sql
deleted file mode 100644 (file)
index 17e059e..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-DROP INDEX IF EXISTS /*i*/pt_namespace_title ON /*_*/protected_titles;
-ALTER TABLE /*_*/protected_titles ADD CONSTRAINT PK_protected_titles PRIMARY KEY(pt_namespace,pt_title);
\ No newline at end of file
diff --git a/maintenance/mssql/archives/patch-rc_patrolled_type.sql b/maintenance/mssql/archives/patch-rc_patrolled_type.sql
deleted file mode 100644 (file)
index c8c7755..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-DECLARE @cname sysname;--
-
-SELECT @cname = dc.name
-FROM sys.default_constraints dc
-JOIN sys.columns c
-       ON c.object_id = dc.parent_object_id
-       AND c.column_id = dc.parent_column_id
-WHERE
-       c.name = 'rc_patrolled'
-       AND c.object_id = OBJECT_ID('/*_*/recentchanges', 'U');--
-
-IF @cname IS NOT NULL
-BEGIN;--
-       DECLARE @sql nvarchar(max);--
-       SET @sql = N'ALTER TABLE /*_*/recentchanges DROP CONSTRAINT ' + @cname;--
-       EXEC sp_executesql @sql;--
-END;--
-
-DROP INDEX /*i*/rc_name_type_patrolled_timestamp ON /*_*/recentchanges;--
-ALTER TABLE /*_*/recentchanges ALTER COLUMN rc_patrolled tinyint NOT NULL;--
-ALTER TABLE /*_*/recentchanges ADD CONSTRAINT DF_rc_patrolled DEFAULT 0 FOR rc_patrolled;--
-CREATE INDEX /*i*/rc_name_type_patrolled_timestamp ON /*_*/recentchanges (rc_namespace, rc_type, rc_patrolled, rc_timestamp);
\ No newline at end of file
diff --git a/maintenance/mssql/archives/patch-recentchanges-drop-fks.sql b/maintenance/mssql/archives/patch-recentchanges-drop-fks.sql
deleted file mode 100644 (file)
index 24f78f6..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-DECLARE @base nvarchar(max),
-       @SQL nvarchar(max),
-       @id sysname;--
-
-SET @base = 'ALTER TABLE /*_*/recentchanges DROP CONSTRAINT ';--
-
-SELECT @id = fk.name
-FROM sys.foreign_keys fk
-JOIN sys.foreign_key_columns fkc
-       ON fkc.constraint_object_id = fk.object_id
-JOIN sys.columns c
-       ON c.column_id = fkc.parent_column_id
-       AND c.object_id = fkc.parent_object_id
-WHERE
-       fk.parent_object_id = OBJECT_ID('/*_*/recentchanges')
-       AND fk.referenced_object_id = OBJECT_ID('/*_*/page')
-       AND c.name = 'rc_cur_id';--
-
-SET @SQL = @base + @id;--
-
-EXEC sp_executesql @SQL;--
-
-SELECT @id = fk.name
-FROM sys.foreign_keys fk
-JOIN sys.foreign_key_columns fkc
-       ON fkc.constraint_object_id = fk.object_id
-JOIN sys.columns c
-       ON c.column_id = fkc.parent_column_id
-       AND c.object_id = fkc.parent_object_id
-WHERE
-       fk.parent_object_id = OBJECT_ID('/*_*/recentchanges')
-       AND fk.referenced_object_id = OBJECT_ID('/*_*/revision')
-       AND c.name = 'rc_this_oldid';--
-
-SET @SQL = @base + @id;--
-
-EXEC sp_executesql @SQL;--
-
-SELECT @id = fk.name
-FROM sys.foreign_keys fk
-JOIN sys.foreign_key_columns fkc
-       ON fkc.constraint_object_id = fk.object_id
-JOIN sys.columns c
-       ON c.column_id = fkc.parent_column_id
-       AND c.object_id = fkc.parent_object_id
-WHERE
-       fk.parent_object_id = OBJECT_ID('/*_*/recentchanges')
-       AND fk.referenced_object_id = OBJECT_ID('/*_*/revision')
-       AND c.name = 'rc_last_oldid';--
-
-SET @SQL = @base + @id;--
-
-EXEC sp_executesql @SQL;--
-
--- while we're at it, let's fix up the other foreign key constraints on recentchanges
--- as future patches touch constraints on other tables, they'll take the time to update constraint names there as well
-ALTER TABLE /*_*/recentchanges DROP CONSTRAINT FK_rc_logid_log_id;--
-ALTER TABLE /*_*/recentchanges ADD CONSTRAINT rc_logid__log_id__fk FOREIGN KEY (rc_logid) REFERENCES /*_*/logging(log_id) ON DELETE CASCADE;--
-
-SELECT @id = fk.name
-FROM sys.foreign_keys fk
-JOIN sys.foreign_key_columns fkc
-       ON fkc.constraint_object_id = fk.object_id
-JOIN sys.columns c
-       ON c.column_id = fkc.parent_column_id
-       AND c.object_id = fkc.parent_object_id
-WHERE
-       fk.parent_object_id = OBJECT_ID('/*_*/recentchanges')
-       AND fk.referenced_object_id = OBJECT_ID('/*_*/mwuser')
-       AND c.name = 'rc_user';--
-
-SET @SQL = @base + @id;--
-
-EXEC sp_executesql @SQL;--
-
-ALTER TABLE /*_*/recentchanges ADD CONSTRAINT rc_user__user_id__fk FOREIGN KEY (rc_user) REFERENCES /*_*/mwuser(user_id);
diff --git a/maintenance/mssql/archives/patch-rev_text_id-default.sql b/maintenance/mssql/archives/patch-rev_text_id-default.sql
deleted file mode 100644 (file)
index 0c9d48a..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---
--- Adds a default value to the rev_text_id field in the revision table.
--- This is to allow the Multi Content Revisions migration to happen where
--- rows will have to be added to the revision table with no rev_text_id.
---
--- 2018-03-12
---
-
-ALTER TABLE /*_*/revision
-  ADD CONSTRAINT DF_rev_text_id DEFAULT 0 FOR rev_text_id;
\ No newline at end of file
diff --git a/maintenance/mssql/archives/patch-site_identifiers-pk.sql b/maintenance/mssql/archives/patch-site_identifiers-pk.sql
deleted file mode 100644 (file)
index fa12f70..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-DROP INDEX IF EXISTS /*i*/site_ids_type ON /*_*/site_identifiers;
-ALTER TABLE /*_*/site_identifiers ADD CONSTRAINT PK_site_identifiers PRIMARY KEY(si_type, si_key);
\ No newline at end of file
diff --git a/maintenance/mssql/archives/patch-site_stats-modify.sql b/maintenance/mssql/archives/patch-site_stats-modify.sql
deleted file mode 100644 (file)
index b2de948..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Delete old default constraints */
-DECLARE @sql nvarchar(max)
-SET @sql=''
-
-/* IMHO: A DBMS where you have to do THIS to change a default value sucks. */
-SELECT @sql= @sql + 'ALTER TABLE site_stats DROP CONSTRAINT ' + df.name + '; '
-FROM sys.default_constraints df
-JOIN sys.columns c
-       ON c.object_id = df.parent_object_id
-       AND c.column_id = df.parent_column_id
-WHERE
-       df.parent_object_id =  OBJECT_ID('site_stats');--
-
-EXEC sp_executesql @sql;
-
-/* Change data type of ss_images from int to bigint.
- * All other fields (except ss_row_id) already are bigint.
- * This MUST happen before adding new constraints. */
-ALTER TABLE site_stats ALTER COLUMN ss_images bigint;
-
-/* Add new default constraints.
- * Don't ask me why I have to repeat ALTER TABLE site_stats
- * instead of using commas, for some reason SQL Server 2016
- * didn't accept it in any other way. Maybe I just don't know
- * enough about mssql, but this works.
- */
-ALTER TABLE site_stats ADD CONSTRAINT col_ss_total_edits DEFAULT NULL FOR ss_total_edits;
-ALTER TABLE site_stats ADD CONSTRAINT col_ss_good_article DEFAULT NULL FOR ss_good_articles;
-ALTER TABLE site_stats ADD CONSTRAINT col_ss_total_pages DEFAULT NULL FOR ss_total_pages;
-ALTER TABLE site_stats ADD CONSTRAINT col_ss_users DEFAULT NULL FOR ss_users;
-ALTER TABLE site_stats ADD CONSTRAINT col_ss_active_users DEFAULT NULL FOR ss_active_users;
-ALTER TABLE site_stats ADD CONSTRAINT col_ss_images DEFAULT NULL FOR ss_images;
diff --git a/maintenance/mssql/archives/patch-site_stats-pk.sql b/maintenance/mssql/archives/patch-site_stats-pk.sql
deleted file mode 100644 (file)
index 7533719..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-DROP INDEX ss_row_id ON site_stats;
-ALTER TABLE /*_*/site_stats ADD CONSTRAINT /*i*/ss_row_id PRIMARY KEY (ss_row_id);
diff --git a/maintenance/mssql/archives/patch-slot-origin.sql b/maintenance/mssql/archives/patch-slot-origin.sql
deleted file mode 100644 (file)
index bba3be4..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
---
--- Replace slot_inherited with slot_origin.
---
--- NOTE: There is no release that has slot_inherited. This is only needed to transition between
--- snapshot versions of 1.30.
---
--- NOTE: No code that writes to the slots table was merge yet, the table is assumed to be empty.
---
-DROP INDEX /*i*/slot_role_inherited ON /*_*/slots;
-
-ALTER TABLE /*_*/slots DROP CONSTRAINT DF_slot_inherited, COLUMN slot_inherited;
-ALTER TABLE /*_*/slots ADD COLUMN slot_origin bigint NOT NULL;
-
-CREATE INDEX /*i*/slot_revision_origin_role ON /*_*/slots (slot_revision_id, slot_origin, slot_role_id);
diff --git a/maintenance/mssql/archives/patch-slot_roles.sql b/maintenance/mssql/archives/patch-slot_roles.sql
deleted file mode 100644 (file)
index 228510c..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---
--- Normalization table for role names
---
-CREATE TABLE /*_*/slot_roles (
-  role_id smallint NOT NULL CONSTRAINT PK_slot_roles PRIMARY KEY IDENTITY,
-  role_name nvarchar(64) NOT NULL
-);
-
--- Index for looking of the internal ID of for a name
-CREATE UNIQUE INDEX /*i*/role_name ON /*_*/slot_roles (role_name);
\ No newline at end of file
diff --git a/maintenance/mssql/archives/patch-slots.sql b/maintenance/mssql/archives/patch-slots.sql
deleted file mode 100644 (file)
index 2fc615e..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---
--- Slots represent an n:m relation between revisions and content objects.
--- A content object can have a specific "role" in one or more revisions.
--- Each revision can have multiple content objects, each having a different role.
---
-CREATE TABLE /*_*/slots (
-
-  -- reference to rev_id
-  slot_revision_id bigint NOT NULL,
-
-  -- reference to role_id
-  slot_role_id smallint NOT NULL CONSTRAINT FK_slots_slot_role FOREIGN KEY REFERENCES slot_roles(role_id),
-
-  -- reference to content_id
-  slot_content_id bigint NOT NULL CONSTRAINT FK_slots_content_id FOREIGN KEY REFERENCES content(content_id),
-
-  -- The revision ID of the revision that originated the slot's content.
-  -- To find revisions that changed slots, look for slot_origin = slot_revision_id.
-  slot_origin bigint NOT NULL,
-
-  CONSTRAINT PK_slots PRIMARY KEY (slot_revision_id, slot_role_id)
-);
-
--- Index for finding revisions that modified a specific slot
-CREATE INDEX /*i*/slot_revision_origin_role ON /*_*/slots (slot_revision_id, slot_origin, slot_role_id);
diff --git a/maintenance/mssql/archives/patch-tl_from_namespace.sql b/maintenance/mssql/archives/patch-tl_from_namespace.sql
deleted file mode 100644 (file)
index 9655165..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-ALTER TABLE /*_*/templatelinks
-       ADD tl_from_namespace int NOT NULL default 0;
-
-CREATE INDEX /*i*/tl_backlinks_namespace ON /*_*/templatelinks (tl_from_namespace,tl_namespace,tl_title,tl_from);
diff --git a/maintenance/mssql/archives/patch-uploadstash-constraints.sql b/maintenance/mssql/archives/patch-uploadstash-constraints.sql
deleted file mode 100644 (file)
index 1cd668c..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-DECLARE @baseSQL nvarchar(max),
-       @SQL nvarchar(max),
-       @id sysname;--
-
-SET @baseSQL = 'ALTER TABLE /*_*/uploadstash DROP CONSTRAINT ';--
-
-SELECT @id = cc.name
-FROM sys.check_constraints cc
-JOIN sys.columns c
-       ON c.object_id = cc.parent_object_id
-       AND c.column_id = cc.parent_column_id
-WHERE
-       cc.parent_object_id = OBJECT_ID('/*_*/uploadstash')
-       AND c.name = 'us_media_type';--
-
-SET @SQL = @baseSQL + @id;--
-
-EXEC sp_executesql @SQL;--
-
-ALTER TABLE /*_*/uploadstash ADD CONSTRAINT us_media_type_ckc check (us_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE'));
diff --git a/maintenance/mssql/archives/patch-user_groups-ug_expiry.sql b/maintenance/mssql/archives/patch-user_groups-ug_expiry.sql
deleted file mode 100644 (file)
index 4bafc8b..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
--- Primary key and expiry column in user_groups table
-
-DROP INDEX IF EXISTS /*i*/ug_user_group ON /*_*/user_groups;
-ALTER TABLE /*_*/user_groups ADD CONSTRAINT pk_user_groups PRIMARY KEY(ug_user, ug_group);
-ALTER TABLE /*_*/user_groups ADD ug_expiry varchar(14) DEFAULT NULL;
-CREATE INDEX /*i*/ug_expiry ON /*_*/user_groups(ug_expiry);
diff --git a/maintenance/mssql/archives/patch-user_password_expires.sql b/maintenance/mssql/archives/patch-user_password_expires.sql
deleted file mode 100644 (file)
index c22b10c..0000000
+++ /dev/null
@@ -1 +0,0 @@
-ALTER TABLE /*_*/mwuser ADD user_password_expires VARCHAR(14) DEFAULT NULL
\ No newline at end of file
diff --git a/maintenance/mssql/archives/patch-watchlist-wl_id.sql b/maintenance/mssql/archives/patch-watchlist-wl_id.sql
deleted file mode 100644 (file)
index b71f817..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-ALTER TABLE /*_*/watchlist ADD wl_id INT IDENTITY;
-ALTER TABLE /*_*/watchlist ADD CONSTRAINT pk_watchlist PRIMARY KEY(wl_id)
diff --git a/maintenance/mssql/patch-change_tag-change_tag_rc_tag_id.sql b/maintenance/mssql/patch-change_tag-change_tag_rc_tag_id.sql
deleted file mode 100644 (file)
index e276afd..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
--- T193874: Add new indexes to change_tag table using ct_tag_id instead of ct_tag
-
-CREATE UNIQUE INDEX /*i*/change_tag_rc_tag_id ON /*_*/change_tag (ct_rc_id,ct_tag_id);
-CREATE UNIQUE INDEX /*i*/change_tag_log_tag_id ON /*_*/change_tag (ct_log_id,ct_tag_id);
-CREATE UNIQUE INDEX /*i*/change_tag_rev_tag_id ON /*_*/change_tag (ct_rev_id,ct_tag_id);
-
-CREATE INDEX /*i*/change_tag_rc_tag_nonuniq ON /*_*/change_tag (ct_rc_id,ct_tag);
-CREATE INDEX /*i*/change_tag_log_tag_nonuniq ON /*_*/change_tag (ct_log_id,ct_tag);
-CREATE INDEX /*i*/change_tag_rev_tag_nonuniq ON /*_*/change_tag (ct_rev_id,ct_tag);
-
-DROP INDEX /*i*/change_tag_rc_tag ON /*_*/change_tag;
-DROP INDEX /*i*/change_tag_log_tag ON /*_*/change_tag;
-DROP INDEX /*i*/change_tag_rev_tag ON /*_*/change_tag;
-
-ALTER TABLE /*i*/change_tag
-  ADD CONSTRAINT DF_ct_tag DEFAULT '' FOR ct_tag;
\ No newline at end of file
diff --git a/maintenance/mssql/tables.sql b/maintenance/mssql/tables.sql
deleted file mode 100644 (file)
index 72ea69d..0000000
+++ /dev/null
@@ -1,1487 +0,0 @@
--- Experimental table definitions for Microsoft SQL Server with
--- content-holding fields switched to explicit BINARY charset.
--- ------------------------------------------------------------
-
--- SQL to create the initial tables for the MediaWiki database.
--- This is read and executed by the install script; you should
--- not have to run it by itself unless doing a manual install.
-
---
--- General notes:
---
--- The comments in this and other files are
--- replaced with the defined table prefix by the installer
--- and updater scripts. If you are installing or running
--- updates manually, you will need to manually insert the
--- table prefix if any when running these scripts.
---
-
-
---
--- The user table contains basic account information,
--- authentication keys, etc.
---
--- Some multi-wiki sites may share a single central user table
--- between separate wikis using the $wgSharedDB setting.
---
--- Note that when a external authentication plugin is used,
--- user table entries still need to be created to store
--- preferences and to key tracking information in the other
--- tables.
-
--- LINE:53
-CREATE TABLE /*_*/mwuser (
-   user_id           INT           NOT NULL  PRIMARY KEY IDENTITY(0,1),
-   user_name         NVARCHAR(255)  NOT NULL UNIQUE DEFAULT '',
-   user_real_name    NVARCHAR(255)  NOT NULL DEFAULT '',
-   user_password     NVARCHAR(255)  NOT NULL DEFAULT '',
-   user_newpassword  NVARCHAR(255)  NOT NULL DEFAULT '',
-   user_newpass_time varchar(14) NULL DEFAULT NULL,
-   user_email        NVARCHAR(255)  NOT NULL DEFAULT '',
-   user_touched      varchar(14)      NOT NULL DEFAULT '',
-   user_token        NCHAR(32)      NOT NULL DEFAULT '',
-   user_email_authenticated varchar(14) DEFAULT NULL,
-   user_email_token  NCHAR(32) DEFAULT '',
-   user_email_token_expires varchar(14) DEFAULT NULL,
-   user_registration varchar(14) DEFAULT NULL,
-   user_editcount    INT NULL DEFAULT NULL,
-   user_password_expires varchar(14) DEFAULT NULL
-);
-CREATE UNIQUE INDEX /*i*/user_name ON /*_*/mwuser (user_name);
-CREATE INDEX /*i*/user_email_token ON /*_*/mwuser (user_email_token);
-CREATE INDEX /*i*/user_email ON /*_*/mwuser (user_email);
-
--- Insert a dummy user to represent anons
-INSERT INTO /*_*/mwuser (user_name) VALUES ('##Anonymous##');
-
---
--- The "actor" table associates user names or IP addresses with integers for
--- the benefit of other tables that need to refer to either logged-in or
--- logged-out users. If something can only ever be done by logged-in users, it
--- can refer to the user table directly.
---
-CREATE TABLE /*_*/actor (
-  actor_id bigint NOT NULL CONSTRAINT PK_actor PRIMARY KEY IDENTITY(0,1),
-  actor_user int,
-  actor_name nvarchar(255) NOT NULL
-);
-CREATE UNIQUE INDEX /*i*/actor_user ON /*_*/actor (actor_user);
-CREATE UNIQUE INDEX /*i*/actor_name ON /*_*/actor (actor_name);
-
--- Insert a dummy actor to represent no actor
-INSERT INTO /*_*/actor (actor_name) VALUES ('##Anonymous##');
-
---
--- User permissions have been broken out to a separate table;
--- this allows sites with a shared user table to have different
--- permissions assigned to a user in each project.
---
--- This table replaces the old user_rights field which used a
--- comma-separated nvarchar(max).
-CREATE TABLE /*_*/user_groups (
-   ug_user  INT     NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
-   ug_group NVARCHAR(255) NOT NULL DEFAULT '',
-   ug_expiry varchar(14) DEFAULT NULL,
-   PRIMARY KEY(ug_user, ug_group)
-);
-CREATE INDEX /*i*/ug_group ON /*_*/user_groups(ug_group);
-CREATE INDEX /*i*/ug_expiry ON /*_*/user_groups(ug_expiry);
-
--- Stores the groups the user has once belonged to.
--- The user may still belong to these groups (check user_groups).
--- Users are not autopromoted to groups from which they were removed.
-CREATE TABLE /*_*/user_former_groups (
-  ufg_user INT NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
-  ufg_group nvarchar(255) NOT NULL default ''
-);
-CREATE UNIQUE INDEX /*i*/ufg_user_group ON /*_*/user_former_groups (ufg_user,ufg_group);
-
--- Stores notifications of user talk page changes, for the display
--- of the "you have new messages" box
--- Changed user_id column to user_id to avoid clashing with user_id function
-CREATE TABLE /*_*/user_newtalk (
-   user_id INT         NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
-   user_ip NVARCHAR(40) NOT NULL DEFAULT '',
-   user_last_timestamp varchar(14) DEFAULT NULL,
-);
-CREATE INDEX /*i*/un_user_id ON /*_*/user_newtalk (user_id);
-CREATE INDEX /*i*/un_user_ip ON /*_*/user_newtalk (user_ip);
-
---
--- User preferences and other fun stuff
--- replaces old user.user_options nvarchar(max)
---
-CREATE TABLE /*_*/user_properties (
-       up_user INT NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
-       up_property NVARCHAR(255) NOT NULL,
-       up_value NVARCHAR(MAX),
-);
-CREATE UNIQUE CLUSTERED INDEX /*i*/user_properties_user_property ON /*_*/user_properties (up_user,up_property);
-CREATE INDEX /*i*/user_properties_property ON /*_*/user_properties (up_property);
-
---
--- This table contains a user's bot passwords: passwords that allow access to
--- the account via the API with limited rights.
---
-CREATE TABLE /*_*/bot_passwords (
-       bp_user int NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
-       bp_app_id nvarchar(32) NOT NULL,
-       bp_password nvarchar(255) NOT NULL,
-       bp_token nvarchar(255) NOT NULL,
-       bp_restrictions nvarchar(max) NOT NULL,
-       bp_grants nvarchar(max) NOT NULL,
-       PRIMARY KEY (bp_user, bp_app_id)
-);
-
-
---
--- Edits, blocks, and other actions typically have a textual comment describing
--- the action. They are stored here to reduce the size of the main tables, and
--- to allow for deduplication.
---
--- Deduplication is currently best-effort to avoid locking on inserts that
--- would be required for strict deduplication. There MAY be multiple rows with
--- the same comment_text and comment_data.
---
-CREATE TABLE /*_*/comment (
-  comment_id bigint NOT NULL PRIMARY KEY IDENTITY(0,1),
-  comment_hash INT NOT NULL,
-  comment_text nvarchar(max) NOT NULL,
-  comment_data nvarchar(max)
-);
--- Index used for deduplication.
-CREATE INDEX /*i*/comment_hash ON /*_*/comment (comment_hash);
-
--- dummy row for FKs. Hash is intentionally wrong so CommentStore won't match it.
-INSERT INTO /*_*/comment (comment_hash, comment_text) VALUES (-1, '** dummy **');
-
-
---
--- Core of the wiki: each page has an entry here which identifies
--- it by title and contains some essential metadata.
---
-CREATE TABLE /*_*/page (
-   page_id        INT          NOT NULL  PRIMARY KEY IDENTITY(0,1),
-   page_namespace INT          NOT NULL,
-   page_title     NVARCHAR(255)  NOT NULL,
-   page_restrictions NVARCHAR(255) NOT NULL,
-   page_is_redirect BIT           NOT NULL DEFAULT 0,
-   page_is_new BIT                NOT NULL DEFAULT 0,
-   page_random real     NOT NULL DEFAULT RAND(),
-   page_touched varchar(14) NOT NULL default '',
-   page_links_updated varchar(14) DEFAULT NULL,
-   page_latest INT, -- FK inserted later
-   page_len INT NOT NULL,
-   page_content_model nvarchar(32) default null,
-   page_lang VARBINARY(35) DEFAULT NULL
-);
-CREATE UNIQUE INDEX /*i*/name_title ON /*_*/page (page_namespace,page_title);
-CREATE INDEX /*i*/page_random ON /*_*/page (page_random);
-CREATE INDEX /*i*/page_len ON /*_*/page (page_len);
-CREATE INDEX /*i*/page_redirect_namespace_len ON /*_*/page (page_is_redirect, page_namespace, page_len);
-
--- insert a dummy page
-INSERT INTO /*_*/page (page_namespace, page_title, page_restrictions, page_latest, page_len) VALUES (-1,'','',0,0);
-
---
--- Every edit of a page creates also a revision row.
--- This stores metadata about the revision, and a reference
--- to the TEXT storage backend.
---
-CREATE TABLE /*_*/revision (
-   rev_id INT NOT NULL UNIQUE IDENTITY(0,1),
-   rev_page INT NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
-   rev_text_id INT NOT NULL CONSTRAINT DF_rev_text_id DEFAULT 0, -- FK added later
-   rev_comment NVARCHAR(255) NOT NULL CONSTRAINT DF_rev_comment DEFAULT '',
-   rev_user INT REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
-   rev_user_text NVARCHAR(255) NOT NULL DEFAULT '',
-   rev_timestamp varchar(14) NOT NULL default '',
-   rev_minor_edit BIT NOT NULL DEFAULT 0,
-   rev_deleted TINYINT  NOT NULL DEFAULT 0,
-   rev_len INT,
-   rev_parent_id INT DEFAULT NULL REFERENCES /*_*/revision(rev_id),
-   rev_sha1 nvarchar(32) not null default '',
-   rev_content_model nvarchar(32) default null,
-   rev_content_format nvarchar(64) default null
-);
-CREATE UNIQUE CLUSTERED INDEX /*i*/rev_page_id ON /*_*/revision (rev_page, rev_id);
-CREATE INDEX /*i*/rev_timestamp ON /*_*/revision (rev_timestamp);
-CREATE INDEX /*i*/page_timestamp ON /*_*/revision (rev_page,rev_timestamp);
-CREATE INDEX /*i*/user_timestamp ON /*_*/revision (rev_user,rev_timestamp);
-CREATE INDEX /*i*/usertext_timestamp ON /*_*/revision (rev_user_text,rev_timestamp);
-CREATE INDEX /*i*/page_user_timestamp ON /*_*/revision (rev_page,rev_user,rev_timestamp);
-
--- insert a dummy revision
-INSERT INTO /*_*/revision (rev_page,rev_text_id,rev_comment,rev_user,rev_len) VALUES (0,0,'',0,0);
-
-ALTER TABLE /*_*/page ADD CONSTRAINT FK_page_latest_page_id FOREIGN KEY (page_latest) REFERENCES /*_*/revision(rev_id);
-
---
--- Temporary tables to avoid blocking on an alter of revision.
---
--- On large wikis like the English Wikipedia, altering the revision table is a
--- months-long process. This table is being created to avoid such an alter, and
--- will be merged back into revision in the future.
---
-CREATE TABLE /*_*/revision_comment_temp (
-  revcomment_rev INT NOT NULL CONSTRAINT FK_revcomment_rev FOREIGN KEY REFERENCES /*_*/revision(rev_id) ON DELETE CASCADE,
-  revcomment_comment_id bigint NOT NULL CONSTRAINT FK_revcomment_comment_id FOREIGN KEY REFERENCES /*_*/comment(comment_id),
-  CONSTRAINT PK_revision_comment_temp PRIMARY KEY (revcomment_rev, revcomment_comment_id)
-);
-CREATE UNIQUE INDEX /*i*/revcomment_rev ON /*_*/revision_comment_temp (revcomment_rev);
-
-CREATE TABLE /*_*/revision_actor_temp (
-  revactor_rev int NOT NULL CONSTRAINT FK_revactor_rev FOREIGN KEY REFERENCES /*_*/revision(rev_id) ON DELETE CASCADE,
-  revactor_actor bigint NOT NULL,
-  revactor_timestamp varchar(14) NOT NULL CONSTRAINT DF_revactor_timestamp DEFAULT '',
-  revactor_page int NOT NULL,
-  CONSTRAINT PK_revision_actor_temp PRIMARY KEY (revactor_rev, revactor_actor)
-);
-CREATE UNIQUE INDEX /*i*/revactor_rev ON /*_*/revision_actor_temp (revactor_rev);
-CREATE INDEX /*i*/actor_timestamp ON /*_*/revision_actor_temp (revactor_actor,revactor_timestamp);
-CREATE INDEX /*i*/page_actor_timestamp ON /*_*/revision_actor_temp (revactor_page,revactor_actor,revactor_timestamp);
-
---
--- Holds TEXT of individual page revisions.
---
--- Field names are a holdover from the 'old' revisions table in
--- MediaWiki 1.4 and earlier: an upgrade will transform that
--- table INTo the 'text' table to minimize unnecessary churning
--- and downtime. If upgrading, the other fields will be left unused.
-CREATE TABLE /*_*/text (
-   old_id INT NOT NULL  PRIMARY KEY IDENTITY(0,1),
-   old_text nvarchar(max) NOT NULL,
-   old_flags NVARCHAR(255) NOT NULL,
-);
-
--- insert a dummy text
-INSERT INTO /*_*/text (old_text,old_flags) VALUES ('','');
-
-ALTER TABLE /*_*/revision ADD CONSTRAINT FK_rev_text_id_old_id FOREIGN KEY (rev_text_id) REFERENCES /*_*/text(old_id) ON DELETE CASCADE;
-
---
--- Holding area for deleted articles, which may be viewed
--- or restored by admins through the Special:Undelete interface.
--- The fields generally correspond to the page, revision, and text
--- fields, with several caveats.
--- Cannot reasonably create views on this table, due to the presence of TEXT
--- columns.
-CREATE TABLE /*_*/archive (
-   ar_id int NOT NULL PRIMARY KEY IDENTITY,
-   ar_namespace SMALLINT NOT NULL DEFAULT 0,
-   ar_title NVARCHAR(255) NOT NULL DEFAULT '',
-   ar_comment_id bigint NOT NULL CONSTRAINT FK_ar_comment_id FOREIGN KEY REFERENCES /*_*/comment(comment_id),
-   ar_user INT CONSTRAINT ar_user__user_id__fk FOREIGN KEY REFERENCES /*_*/mwuser(user_id),
-   ar_user_text NVARCHAR(255) NOT NULL CONSTRAINT DF_ar_user_text DEFAULT '',
-   ar_actor bigint NOT NULL CONSTRAINT DF_ar_actor DEFAULT 0,
-   ar_timestamp varchar(14) NOT NULL default '',
-   ar_minor_edit BIT NOT NULL DEFAULT 0,
-   ar_rev_id INT NOT NULL, -- NOT a FK, the row gets deleted from revision and moved here
-   ar_text_id INT NOT NULL CONSTRAINT DF_ar_text_id DEFAULT 0 CONSTRAINT ar_text_id__old_id__fk FOREIGN KEY REFERENCES /*_*/text(old_id) ON DELETE CASCADE,
-   ar_deleted TINYINT NOT NULL DEFAULT 0,
-   ar_len INT,
-   ar_page_id INT NULL, -- NOT a FK, the row gets deleted from page and moved here
-   ar_parent_id INT NULL, -- NOT FK
-   ar_sha1 nvarchar(32) default null,
-   ar_content_model nvarchar(32) DEFAULT NULL,
-  ar_content_format nvarchar(64) DEFAULT NULL
-);
-CREATE INDEX /*i*/name_title_timestamp ON /*_*/archive (ar_namespace,ar_title,ar_timestamp);
-CREATE INDEX /*i*/ar_usertext_timestamp ON /*_*/archive (ar_user_text,ar_timestamp);
-CREATE INDEX /*i*/ar_actor_timestamp ON /*_*/archive (ar_actor,ar_timestamp);
-CREATE UNIQUE INDEX /*i*/ar_revid_uniq ON /*_*/archive (ar_rev_id);
-
-
---
--- Normalization table for role names
---
-CREATE TABLE /*_*/slot_roles (
-  role_id smallint NOT NULL CONSTRAINT PK_slot_roles PRIMARY KEY IDENTITY,
-  role_name nvarchar(64) NOT NULL
-);
-
--- Index for looking of the internal ID of for a name
-CREATE UNIQUE INDEX /*i*/role_name ON /*_*/slot_roles (role_name);
-
---
--- Normalization table for content model names
---
-CREATE TABLE /*_*/content_models (
-  model_id smallint NOT NULL CONSTRAINT PK_content_models PRIMARY KEY IDENTITY,
-  model_name nvarchar(64) NOT NULL
-);
-
--- Index for looking of the internal ID of for a name
-CREATE UNIQUE INDEX /*i*/model_name ON /*_*/content_models (model_name);
-
---
--- The content table represents content objects. It's primary purpose is to provide the necessary
--- meta-data for loading and interpreting a serialized data blob to create a content object.
---
-CREATE TABLE /*_*/content (
-
-  -- ID of the content object
-  content_id bigint NOT NULL CONSTRAINT PK_content PRIMARY KEY IDENTITY,
-
-  -- Nominal size of the content object (not necessarily of the serialized blob)
-  content_size int NOT NULL,
-
-  -- Nominal hash of the content object (not necessarily of the serialized blob)
-  content_sha1 varchar(32) NOT NULL,
-
-  -- reference to model_id
-  content_model smallint NOT NULL CONSTRAINT FK_content_content_models FOREIGN KEY REFERENCES /*_*/content_models(model_id),
-
-  -- URL-like address of the content blob
-  content_address nvarchar(255) NOT NULL
-);
-
---
--- Slots represent an n:m relation between revisions and content objects.
--- A content object can have a specific "role" in one or more revisions.
--- Each revision can have multiple content objects, each having a different role.
---
-CREATE TABLE /*_*/slots (
-
-  -- reference to rev_id
-  slot_revision_id bigint NOT NULL,
-
-  -- reference to role_id
-  slot_role_id smallint NOT NULL CONSTRAINT FK_slots_slot_role FOREIGN KEY REFERENCES slot_roles(role_id),
-
-  -- reference to content_id
-  slot_content_id bigint NOT NULL CONSTRAINT FK_slots_content_id FOREIGN KEY REFERENCES content(content_id),
-
-  -- The revision ID of the revision that originated the slot's content.
-  -- To find revisions that changed slots, look for slot_origin = slot_revision_id.
-  slot_origin bigint NOT NULL,
-
-  CONSTRAINT PK_slots PRIMARY KEY (slot_revision_id, slot_role_id)
-);
-
--- Index for finding revisions that modified a specific slot
-CREATE INDEX /*i*/slot_revision_origin_role ON /*_*/slots (slot_revision_id, slot_origin, slot_role_id);
-
-
---
--- Track page-to-page hyperlinks within the wiki.
---
-CREATE TABLE /*_*/pagelinks (
-   pl_from INT NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
-   pl_from_namespace int NOT NULL DEFAULT 0,
-   pl_namespace INT NOT NULL DEFAULT 0,
-   pl_title NVARCHAR(255) NOT NULL DEFAULT '',
-);
-CREATE UNIQUE INDEX /*i*/pl_from ON /*_*/pagelinks (pl_from,pl_namespace,pl_title);
-CREATE UNIQUE INDEX /*i*/pl_namespace ON /*_*/pagelinks (pl_namespace,pl_title,pl_from);
-CREATE INDEX /*i*/pl_backlinks_namespace ON /*_*/pagelinks (pl_from_namespace,pl_namespace,pl_title,pl_from);
-
-
---
--- Track template inclusions.
---
-CREATE TABLE /*_*/templatelinks (
-  tl_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
-  tl_from_namespace int NOT NULL default 0,
-  tl_namespace int NOT NULL default 0,
-  tl_title nvarchar(255) NOT NULL default ''
-);
-
-CREATE UNIQUE INDEX /*i*/tl_from ON /*_*/templatelinks (tl_from,tl_namespace,tl_title);
-CREATE UNIQUE INDEX /*i*/tl_namespace ON /*_*/templatelinks (tl_namespace,tl_title,tl_from);
-CREATE INDEX /*i*/tl_backlinks_namespace ON /*_*/templatelinks (tl_from_namespace,tl_namespace,tl_title,tl_from);
-
-
---
--- Track links to images *used inline*
--- We don't distinguish live from broken links here, so
--- they do not need to be changed on upload/removal.
---
-CREATE TABLE /*_*/imagelinks (
-  -- Key to page_id of the page containing the image / media link.
-  il_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
-  il_from_namespace int NOT NULL default 0,
-
-  -- Filename of target image.
-  -- This is also the page_title of the file's description page;
-  -- all such pages are in namespace 6 (NS_FILE).
-  il_to nvarchar(255) NOT NULL default ''
-);
-
-CREATE UNIQUE INDEX /*i*/il_from ON /*_*/imagelinks (il_from,il_to);
-CREATE UNIQUE INDEX /*i*/il_to ON /*_*/imagelinks (il_to,il_from);
-CREATE INDEX /*i*/il_backlinks_namespace ON /*_*/imagelinks (il_from_namespace,il_to,il_from);
-
---
--- Track category inclusions *used inline*
--- This tracks a single level of category membership
---
-CREATE TABLE /*_*/categorylinks (
-  -- Key to page_id of the page defined as a category member.
-  cl_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
-
-  -- Name of the category.
-  -- This is also the page_title of the category's description page;
-  -- all such pages are in namespace 14 (NS_CATEGORY).
-  cl_to nvarchar(255) NOT NULL default '',
-
-  -- A binary string obtained by applying a sortkey generation algorithm
-  -- (Collation::getSortKey()) to page_title, or cl_sortkey_prefix . "\n"
-  -- . page_title if cl_sortkey_prefix is nonempty.
-  cl_sortkey varbinary(230) NOT NULL default 0x,
-
-  -- A prefix for the raw sortkey manually specified by the user, either via
-  -- [[Category:Foo|prefix]] or {{defaultsort:prefix}}.  If nonempty, it's
-  -- concatenated with a line break followed by the page title before the sortkey
-  -- conversion algorithm is run.  We store this so that we can update
-  -- collations without reparsing all pages.
-  -- Note: If you change the length of this field, you also need to change
-  -- code in LinksUpdate.php. See T27254.
-  cl_sortkey_prefix varbinary(255) NOT NULL default 0x,
-
-  -- This isn't really used at present. Provided for an optional
-  -- sorting method by approximate addition time.
-  cl_timestamp varchar(14) NOT NULL,
-
-  -- Stores $wgCategoryCollation at the time cl_sortkey was generated.  This
-  -- can be used to install new collation versions, tracking which rows are not
-  -- yet updated.  '' means no collation, this is a legacy row that needs to be
-  -- updated by updateCollation.php.  In the future, it might be possible to
-  -- specify different collations per category.
-  cl_collation nvarchar(32) NOT NULL default '',
-
-  -- Stores whether cl_from is a category, file, or other page, so we can
-  -- paginate the three categories separately.  This never has to be updated
-  -- after the page is created, since none of these page types can be moved to
-  -- any other.
-  cl_type varchar(10) NOT NULL default 'page',
-  -- SQL server doesn't have enums, so we approximate with this
-  CONSTRAINT cl_type_ckc CHECK (cl_type IN('page', 'subcat', 'file'))
-);
-
-CREATE UNIQUE INDEX /*i*/cl_from ON /*_*/categorylinks (cl_from,cl_to);
-
--- We always sort within a given category, and within a given type.  FIXME:
--- Formerly this index didn't cover cl_type (since that didn't exist), so old
--- callers won't be using an index: fix this?
-CREATE INDEX /*i*/cl_sortkey ON /*_*/categorylinks (cl_to,cl_type,cl_sortkey,cl_from);
-
--- Used by the API (and some extensions)
-CREATE INDEX /*i*/cl_timestamp ON /*_*/categorylinks (cl_to,cl_timestamp);
-
--- Used when updating collation (e.g. updateCollation.php)
-CREATE INDEX /*i*/cl_collation_ext ON /*_*/categorylinks (cl_collation, cl_to, cl_type, cl_from);
-
---
--- Track all existing categories. Something is a category if 1) it has an entry
--- somewhere in categorylinks, or 2) it has a description page. Categories
--- might not have corresponding pages, so they need to be tracked separately.
---
-CREATE TABLE /*_*/category (
-  -- Primary key
-  cat_id int NOT NULL PRIMARY KEY IDENTITY,
-
-  -- Name of the category, in the same form as page_title (with underscores).
-  -- If there is a category page corresponding to this category, by definition,
-  -- it has this name (in the Category namespace).
-  cat_title nvarchar(255) NOT NULL,
-
-  -- The numbers of member pages (including categories and media), subcatego-
-  -- ries, and Image: namespace members, respectively.  These are signed to
-  -- make underflow more obvious.  We make the first number include the second
-  -- two for better sorting: subtracting for display is easy, adding for order-
-  -- ing is not.
-  cat_pages int NOT NULL default 0,
-  cat_subcats int NOT NULL default 0,
-  cat_files int NOT NULL default 0
-);
-
-CREATE UNIQUE INDEX /*i*/cat_title ON /*_*/category (cat_title);
-
--- For Special:Mostlinkedcategories
-CREATE INDEX /*i*/cat_pages ON /*_*/category (cat_pages);
-
-
---
--- Table defining tag names for IDs. Also stores hit counts to avoid expensive queries on change_tag
---
-CREATE TABLE /*_*/change_tag_def (
-    -- Numerical ID of the tag (ct_tag_id refers to this)
-    ctd_id int NOT NULL CONSTRAINT PK_change_tag_def PRIMARY KEY IDENTITY,
-    -- Symbolic name of the tag (what would previously be put in ct_tag)
-    ctd_name nvarchar(255) NOT NULL,
-    -- Whether this tag was defined manually by a privileged user using Special:Tags
-    ctd_user_defined tinyint NOT NULL CONSTRAINT DF_ctd_user_defined DEFAULT 0,
-    -- Number of times this tag was used
-    ctd_count int NOT NULL CONSTRAINT DF_ctd_count DEFAULT 0
-) /*$wgDBTableOptions*/;
-
-CREATE UNIQUE INDEX /*i*/ctd_name ON /*_*/change_tag_def (ctd_name);
-CREATE INDEX /*i*/ctd_count ON /*_*/change_tag_def (ctd_count);
-CREATE INDEX /*i*/ctd_user_defined ON /*_*/change_tag_def (ctd_user_defined);
-
---
--- Track links to external URLs
---
-CREATE TABLE /*_*/externallinks (
-  -- Primary key
-  el_id int NOT NULL PRIMARY KEY IDENTITY,
-
-  -- page_id of the referring page
-  el_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
-
-  -- The URL
-  el_to nvarchar(max) NOT NULL,
-
-  -- In the case of HTTP URLs, this is the URL with any username or password
-  -- removed, and with the labels in the hostname reversed and converted to
-  -- lower case. An extra dot is added to allow for matching of either
-  -- example.com or *.example.com in a single scan.
-  -- Example:
-  --      http://user:password@sub.example.com/page.html
-  --   becomes
-  --      http://com.example.sub./page.html
-  -- which allows for fast searching for all pages under example.com with the
-  -- clause:
-  --      WHERE el_index LIKE 'http://com.example.%'
-  --
-  -- Note if you enable or disable PHP's intl extension, you'll need to run
-  -- maintenance/refreshExternallinksIndex.php to refresh this field.
-  el_index nvarchar(450) NOT NULL,
-
-  -- This is el_index truncated to 60 bytes to allow for sortable queries that
-  -- aren't supported by a partial index.
-  el_index_60 varbinary(60) NOT NULL
-);
-
-CREATE INDEX /*i*/el_from ON /*_*/externallinks (el_from);
-CREATE INDEX /*i*/el_index ON /*_*/externallinks (el_index);
-CREATE INDEX /*i*/el_index_60 ON /*_*/externallinks (el_index_60, el_id);
-CREATE INDEX /*i*/el_from_index_60 ON /*_*/externallinks (el_from, el_index_60, el_id);
--- el_to index intentionally not added; we cannot index nvarchar(max) columns,
--- but we also cannot restrict el_to to a smaller column size as the external
--- link may be larger.
-
---
--- Track interlanguage links
---
-CREATE TABLE /*_*/langlinks (
-  -- page_id of the referring page
-  ll_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
-
-  -- Language code of the target
-  ll_lang nvarchar(20) NOT NULL default '',
-
-  -- Title of the target, including namespace
-  ll_title nvarchar(255) NOT NULL default ''
-);
-
-CREATE UNIQUE INDEX /*i*/ll_from ON /*_*/langlinks (ll_from, ll_lang);
-CREATE INDEX /*i*/ll_lang ON /*_*/langlinks (ll_lang, ll_title);
-
-
---
--- Track inline interwiki links
---
-CREATE TABLE /*_*/iwlinks (
-  -- page_id of the referring page
-  iwl_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
-
-  -- Interwiki prefix code of the target
-  iwl_prefix nvarchar(20) NOT NULL default '',
-
-  -- Title of the target, including namespace
-  iwl_title nvarchar(255) NOT NULL default ''
-);
-
-CREATE UNIQUE INDEX /*i*/iwl_from ON /*_*/iwlinks (iwl_from, iwl_prefix, iwl_title);
-CREATE INDEX /*i*/iwl_prefix_title_from ON /*_*/iwlinks (iwl_prefix, iwl_title, iwl_from);
-CREATE INDEX /*i*/iwl_prefix_from_title ON /*_*/iwlinks (iwl_prefix, iwl_from, iwl_title);
-
-
---
--- Contains a single row with some aggregate info
--- on the state of the site.
---
-CREATE TABLE /*_*/site_stats (
-  -- The single row should contain 1 here.
-  ss_row_id int NOT NULL CONSTRAINT /*i*/ss_row_id PRIMARY KEY,
-
-  -- Total number of edits performed.
-  ss_total_edits bigint default NULL,
-
-  -- See SiteStatsInit::articles().
-  ss_good_articles bigint default NULL,
-
-  -- Total pages, theoretically equal to SELECT COUNT(*) FROM page.
-  ss_total_pages bigint default NULL,
-
-  -- Number of users, theoretically equal to SELECT COUNT(*) FROM user.
-  ss_users bigint default NULL,
-
-  -- Number of users that still edit.
-  ss_active_users bigint default NULL,
-
-  -- Number of images, equivalent to SELECT COUNT(*) FROM image.
-  ss_images bigint default NULL
-);
-
-
---
--- The internet is full of jerks, alas. Sometimes it's handy
--- to block a vandal or troll account.
---
-CREATE TABLE /*_*/ipblocks (
-  -- Primary key, introduced for privacy.
-  ipb_id int NOT NULL PRIMARY KEY IDENTITY,
-
-  -- Blocked IP address in dotted-quad form or user name.
-  ipb_address nvarchar(255) NOT NULL,
-
-  -- Blocked user ID or 0 for IP blocks.
-  ipb_user int REFERENCES /*_*/mwuser(user_id),
-
-  -- User ID who made the block.
-  ipb_by int REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
-
-  -- Actor ID who made the block.
-  ipb_by_actor bigint NOT NULL CONSTRAINT DF_ipb_by_actor DEFAULT 0,
-
-  -- User name of blocker
-  ipb_by_text nvarchar(255) NOT NULL default '',
-
-  -- Key to comment_id. Text comment made by blocker.
-  ipb_reason_id bigint NOT NULL CONSTRAINT FK_ipb_reason_id FOREIGN KEY REFERENCES /*_*/comment(comment_id),
-
-  -- Creation (or refresh) date in standard YMDHMS form.
-  -- IP blocks expire automatically.
-  ipb_timestamp varchar(14) NOT NULL default '',
-
-  -- Indicates that the IP address was banned because a banned
-  -- user accessed a page through it. If this is 1, ipb_address
-  -- will be hidden, and the block identified by block ID number.
-  ipb_auto bit NOT NULL default 0,
-
-  -- If set to 1, block applies only to logged-out users
-  ipb_anon_only bit NOT NULL default 0,
-
-  -- Block prevents account creation from matching IP addresses
-  ipb_create_account bit NOT NULL default 1,
-
-  -- Block triggers autoblocks
-  ipb_enable_autoblock bit NOT NULL default 1,
-
-  -- Time at which the block will expire.
-  -- May be "infinity"
-  ipb_expiry varchar(14) NOT NULL,
-
-  -- Start and end of an address range, in hexadecimal
-  -- Size chosen to allow IPv6
-  -- FIXME: these fields were originally blank for single-IP blocks,
-  -- but now they are populated. No migration was ever done. They
-  -- should be fixed to be blank again for such blocks (T51504).
-  ipb_range_start varchar(255) NOT NULL,
-  ipb_range_end varchar(255) NOT NULL,
-
-  -- Flag for entries hidden from users and Sysops
-  ipb_deleted bit NOT NULL default 0,
-
-  -- Block prevents user from accessing Special:Emailuser
-  ipb_block_email bit NOT NULL default 0,
-
-  -- Block allows user to edit their own talk page
-  ipb_allow_usertalk bit NOT NULL default 0,
-
-  -- ID of the block that caused this block to exist
-  -- Autoblocks set this to the original block
-  -- so that the original block being deleted also
-  -- deletes the autoblocks
-  ipb_parent_block_id int default NULL REFERENCES /*_*/ipblocks(ipb_id),
-
-  -- Block user from editing any page on the site (other than their own user
-  -- talk page).
-  ipb_sitewide bit NOT NULL CONSTRAINT DF_ipb_sitewide DEFAULT 1
-);
-
--- Unique index to support "user already blocked" messages
--- Any new options which prevent collisions should be included
-CREATE UNIQUE INDEX /*i*/ipb_address ON /*_*/ipblocks (ipb_address, ipb_user, ipb_auto, ipb_anon_only);
-
-CREATE INDEX /*i*/ipb_user ON /*_*/ipblocks (ipb_user);
-CREATE INDEX /*i*/ipb_range ON /*_*/ipblocks (ipb_range_start, ipb_range_end);
-CREATE INDEX /*i*/ipb_timestamp ON /*_*/ipblocks (ipb_timestamp);
-CREATE INDEX /*i*/ipb_expiry ON /*_*/ipblocks (ipb_expiry);
-CREATE INDEX /*i*/ipb_parent_block_id ON /*_*/ipblocks (ipb_parent_block_id);
-
---
--- Partial Block Restrictions
---
-CREATE TABLE /*_*/ipblocks_restrictions (
-
-  -- The ipb_id from ipblocks
-  ir_ipb_id int NOT NULL CONSTRAINT FK_ir_ipb_id FOREIGN KEY REFERENCES /*_*/ipblocks(ipb_id) ON DELETE CASCADE,
-
-  -- The restriction type id.
-  ir_type tinyint NOT NULL,
-
-  -- The restriction id that corrposponds to the type. Typically a Page ID or a
-  -- Namespace ID.
-  ir_value int NOT NULL,
-
-  CONSTRAINT PK_ipblocks_restrictions PRIMARY KEY (ir_ipb_id, ir_type, ir_value)
-) /*$wgDBTableOptions*/;
-
--- Index to query restrictions by the page or namespace.
-CREATE INDEX /*i*/ir_type_value ON /*_*/ipblocks_restrictions (ir_type, ir_value);
-
---
--- Uploaded images and other files.
---
-CREATE TABLE /*_*/image (
-  -- Filename.
-  -- This is also the title of the associated description page,
-  -- which will be in namespace 6 (NS_FILE).
-  img_name nvarchar(255) NOT NULL default '' PRIMARY KEY,
-
-  -- File size in bytes.
-  img_size int NOT NULL default 0,
-
-  -- For images, size in pixels.
-  img_width int NOT NULL default 0,
-  img_height int NOT NULL default 0,
-
-  -- Extracted Exif metadata stored as a serialized PHP array.
-  img_metadata varbinary(max) NOT NULL,
-
-  -- For images, bits per pixel if known.
-  img_bits int NOT NULL default 0,
-
-  -- Media type as defined by the MEDIATYPE_xxx constants
-  img_media_type varchar(16) default null,
-
-  -- major part of a MIME media type as defined by IANA
-  -- see https://www.iana.org/assignments/media-types/
-  img_major_mime varchar(16) not null default 'unknown',
-
-  -- minor part of a MIME media type as defined by IANA
-  -- the minor parts are not required to adher to any standard
-  -- but should be consistent throughout the database
-  -- see https://www.iana.org/assignments/media-types/
-  img_minor_mime nvarchar(100) NOT NULL default 'unknown',
-
-  -- Description field as entered by the uploader.
-  -- This is displayed in image upload history and logs.
-  img_description_id bigint NOT NULL CONSTRAINT FK_img_description_id FOREIGN KEY REFERENCES /*_*/comment(comment_id),
-
-  -- user_id and user_name of uploader.
-  img_user int REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
-  img_user_text nvarchar(255) NOT NULL CONSTRAINT DF_img_user_text DEFAULT '',
-  img_actor bigint NOT NULL CONSTRAINT DF_img_actor DEFAULT 0,
-
-  -- Time of the upload.
-  img_timestamp nvarchar(14) NOT NULL default '',
-
-  -- SHA-1 content hash in base-36
-  img_sha1 nvarchar(32) NOT NULL default '',
-
-  CONSTRAINT img_major_mime_ckc check (img_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical')),
-  CONSTRAINT img_media_type_ckc check (img_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE','3D'))
-);
-
-CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
-CREATE INDEX /*i*/img_actor_timestamp ON /*_*/image (img_actor, img_timestamp);
--- Used by Special:ListFiles for sort-by-size
-CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
--- Used by Special:Newimages and Special:ListFiles
-CREATE INDEX /*i*/img_timestamp ON /*_*/image (img_timestamp);
--- Used in API and duplicate search
-CREATE INDEX /*i*/img_sha1 ON /*_*/image (img_sha1);
--- Used to get media of one type
-CREATE INDEX /*i*/img_media_mime ON /*_*/image (img_media_type,img_major_mime,img_minor_mime);
-
-
---
--- Previous revisions of uploaded files.
--- Awkwardly, image rows have to be moved into
--- this table at re-upload time.
---
-CREATE TABLE /*_*/oldimage (
-  -- Base filename: key to image.img_name
-  -- Not a FK because deleting images removes them from image
-  oi_name nvarchar(255) NOT NULL default '',
-
-  -- Filename of the archived file.
-  -- This is generally a timestamp and '!' prepended to the base name.
-  oi_archive_name nvarchar(255) NOT NULL default '',
-
-  -- Other fields as in image...
-  oi_size int NOT NULL default 0,
-  oi_width int NOT NULL default 0,
-  oi_height int NOT NULL default 0,
-  oi_bits int NOT NULL default 0,
-  oi_description_id bigint NOT NULL CONSTRAINT FK_oi_description_id FOREIGN KEY REFERENCES /*_*/comment(comment_id),
-  oi_user int REFERENCES /*_*/mwuser(user_id),
-  oi_user_text nvarchar(255) NOT NULL CONSTRAINT DF_oi_user_text DEFAULT '',
-  oi_actor bigint NOT NULL CONSTRAINT DF_oi_actor DEFAULT 0,
-  oi_timestamp varchar(14) NOT NULL default '',
-
-  oi_metadata varbinary(max) NOT NULL,
-  oi_media_type varchar(16) default null,
-  oi_major_mime varchar(16) not null default 'unknown',
-  oi_minor_mime nvarchar(100) NOT NULL default 'unknown',
-  oi_deleted tinyint NOT NULL default 0,
-  oi_sha1 nvarchar(32) NOT NULL default '',
-
-  CONSTRAINT oi_major_mime_ckc check (oi_major_mime IN('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical')),
-  CONSTRAINT oi_media_type_ckc check (oi_media_type IN('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE','3D'))
-);
-
-CREATE INDEX /*i*/oi_usertext_timestamp ON /*_*/oldimage (oi_user_text,oi_timestamp);
-CREATE INDEX /*i*/oi_actor_timestamp ON /*_*/oldimage (oi_actor,oi_timestamp);
-CREATE INDEX /*i*/oi_name_timestamp ON /*_*/oldimage (oi_name,oi_timestamp);
-CREATE INDEX /*i*/oi_sha1 ON /*_*/oldimage (oi_sha1);
-
-
---
--- Record of deleted file data
---
-CREATE TABLE /*_*/filearchive (
-  -- Unique row id
-  fa_id int NOT NULL PRIMARY KEY IDENTITY,
-
-  -- Original base filename; key to image.img_name, page.page_title, etc
-  fa_name nvarchar(255) NOT NULL default '',
-
-  -- Filename of archived file, if an old revision
-  fa_archive_name nvarchar(255) default '',
-
-  -- Which storage bin (directory tree or object store) the file data
-  -- is stored in. Should be 'deleted' for files that have been deleted;
-  -- any other bin is not yet in use.
-  fa_storage_group nvarchar(16),
-
-  -- SHA-1 of the file contents plus extension, used as a key for storage.
-  -- eg 8f8a562add37052a1848ff7771a2c515db94baa9.jpg
-  --
-  -- If NULL, the file was missing at deletion time or has been purged
-  -- from the archival storage.
-  fa_storage_key nvarchar(64) default '',
-
-  -- Deletion information, if this file is deleted.
-  fa_deleted_user int,
-  fa_deleted_timestamp varchar(14) default '',
-  fa_deleted_reason_id bigint NOT NULL CONSTRAINT FK_fa_deleted_reason_id FOREIGN KEY REFERENCES /*_*/comment(comment_id),
-
-  -- Duped fields from image
-  fa_size int default 0,
-  fa_width int default 0,
-  fa_height int default 0,
-  fa_metadata varbinary(max),
-  fa_bits int default 0,
-  fa_media_type varchar(16) default null,
-  fa_major_mime varchar(16) not null default 'unknown',
-  fa_minor_mime nvarchar(100) default 'unknown',
-  fa_description_id bigint NOT NULL CONSTRAINT FK_fa_description_id FOREIGN KEY REFERENCES /*_*/comment(comment_id),
-  fa_user int default 0 REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
-  fa_user_text nvarchar(255) CONSTRAINT DF_fa_user_text DEFAULT '',
-  fa_actor bigint NOT NULL CONSTRAINT DF_fa_actor DEFAULT 0,
-  fa_timestamp varchar(14) default '',
-
-  -- Visibility of deleted revisions, bitfield
-  fa_deleted tinyint NOT NULL default 0,
-
-  -- sha1 hash of file content
-  fa_sha1 nvarchar(32) NOT NULL default '',
-
-  CONSTRAINT fa_major_mime_ckc check (fa_major_mime in('unknown', 'application', 'audio', 'image', 'text', 'video', 'message', 'model', 'multipart', 'chemical')),
-  CONSTRAINT fa_media_type_ckc check (fa_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE','3D'))
-);
-
--- pick out by image name
-CREATE INDEX /*i*/fa_name ON /*_*/filearchive (fa_name, fa_timestamp);
--- pick out dupe files
-CREATE INDEX /*i*/fa_storage_group ON /*_*/filearchive (fa_storage_group, fa_storage_key);
--- sort by deletion time
-CREATE INDEX /*i*/fa_deleted_timestamp ON /*_*/filearchive (fa_deleted_timestamp);
--- sort by uploader
-CREATE INDEX /*i*/fa_user_timestamp ON /*_*/filearchive (fa_user_text,fa_timestamp);
-CREATE INDEX /*i*/fa_actor_timestamp ON /*_*/filearchive (fa_actor,fa_timestamp);
--- find file by sha1, 10 bytes will be enough for hashes to be indexed
-CREATE INDEX /*i*/fa_sha1 ON /*_*/filearchive (fa_sha1);
-
-
---
--- Store information about newly uploaded files before they're
--- moved into the actual filestore
---
-CREATE TABLE /*_*/uploadstash (
-  us_id int NOT NULL PRIMARY KEY IDENTITY,
-
-  -- the user who uploaded the file.
-  us_user int REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
-
-  -- file key. this is how applications actually search for the file.
-  -- this might go away, or become the primary key.
-  us_key nvarchar(255) NOT NULL,
-
-  -- the original path
-  us_orig_path nvarchar(255) NOT NULL,
-
-  -- the temporary path at which the file is actually stored
-  us_path nvarchar(255) NOT NULL,
-
-  -- which type of upload the file came from (sometimes)
-  us_source_type nvarchar(50),
-
-  -- the date/time on which the file was added
-  us_timestamp varchar(14) NOT NULL,
-
-  us_status nvarchar(50) NOT NULL,
-
-  -- chunk counter starts at 0, current offset is stored in us_size
-  us_chunk_inx int NULL,
-
-  -- Serialized file properties from FSFile::getProps()
-  us_props nvarchar(max),
-
-  -- file size in bytes
-  us_size int NOT NULL,
-  -- this hash comes from FSFile::getSha1Base36(), and is 31 characters
-  us_sha1 nvarchar(31) NOT NULL,
-  us_mime nvarchar(255),
-  -- Media type as defined by the MEDIATYPE_xxx constants, should duplicate definition in the image table
-  us_media_type varchar(16) default null,
-  -- image-specific properties
-  us_image_width int,
-  us_image_height int,
-  us_image_bits smallint,
-
-  CONSTRAINT us_media_type_ckc check (us_media_type in('UNKNOWN', 'BITMAP', 'DRAWING', 'AUDIO', 'VIDEO', 'MULTIMEDIA', 'OFFICE', 'TEXT', 'EXECUTABLE', 'ARCHIVE', '3D'))
-);
-
--- sometimes there's a delete for all of a user's stuff.
-CREATE INDEX /*i*/us_user ON /*_*/uploadstash (us_user);
--- pick out files by key, enforce key uniqueness
-CREATE UNIQUE INDEX /*i*/us_key ON /*_*/uploadstash (us_key);
--- the abandoned upload cleanup script needs this
-CREATE INDEX /*i*/us_timestamp ON /*_*/uploadstash (us_timestamp);
-
-
---
--- Primarily a summary table for Special:Recentchanges,
--- this table contains some additional info on edits from
--- the last few days, see Article::editUpdates()
---
-CREATE TABLE /*_*/recentchanges (
-  rc_id int NOT NULL CONSTRAINT recentchanges__pk PRIMARY KEY IDENTITY,
-  rc_timestamp varchar(14) not null default '',
-
-  -- As in revision
-  rc_user int NOT NULL default 0 CONSTRAINT rc_user__user_id__fk FOREIGN KEY REFERENCES /*_*/mwuser(user_id),
-  rc_user_text nvarchar(255) NOT NULL CONSTRAINT DF_rc_user_text DEFAULT '',
-  rc_actor bigint NOT NULL CONSTRAINT DF_rc_actor DEFAULT 0,
-
-  -- When pages are renamed, their RC entries do _not_ change.
-  rc_namespace int NOT NULL default 0,
-  rc_title nvarchar(255) NOT NULL default '',
-
-  -- as in revision...
-  rc_comment_id bigint NOT NULL CONSTRAINT FK_rc_comment_id FOREIGN KEY REFERENCES /*_*/comment(comment_id),
-  rc_minor bit NOT NULL default 0,
-
-  -- Edits by user accounts with the 'bot' rights key are
-  -- marked with a 1 here, and will be hidden from the
-  -- default view.
-  rc_bot bit NOT NULL default 0,
-
-  -- Set if this change corresponds to a page creation
-  rc_new bit NOT NULL default 0,
-
-  -- Key to page_id (was cur_id prior to 1.5).
-  -- This will keep links working after moves while
-  -- retaining the at-the-time name in the changes list.
-  rc_cur_id int, -- NOT FK
-
-  -- rev_id of the given revision
-  rc_this_oldid int, -- NOT FK
-
-  -- rev_id of the prior revision, for generating diff links.
-  rc_last_oldid int, -- NOT FK
-
-  -- The type of change entry (RC_EDIT,RC_NEW,RC_LOG,RC_EXTERNAL)
-  rc_type tinyint NOT NULL default 0,
-
-  -- The source of the change entry (replaces rc_type)
-  -- default of '' is temporary, needed for initial migration
-  rc_source nvarchar(16) not null default '',
-
-  -- If the Recent Changes Patrol option is enabled,
-  -- users may mark edits as having been reviewed to
-  -- remove a warning flag on the RC list.
-  -- A value of 1 indicates the page has been reviewed manually.
-  -- A value of 2 indicates the page has been automatically reviewed.
-  rc_patrolled tinyint NOT NULL CONSTRAINT DF_rc_patrolled DEFAULT 0,
-
-  -- Recorded IP address the edit was made from, if the
-  -- $wgPutIPinRC option is enabled.
-  rc_ip nvarchar(40) NOT NULL default '',
-
-  -- Text length in characters before
-  -- and after the edit
-  rc_old_len int,
-  rc_new_len int,
-
-  -- Visibility of recent changes items, bitfield
-  rc_deleted tinyint NOT NULL default 0,
-
-  -- Value corresponding to log_id, specific log entries
-  rc_logid int, -- FK added later
-  -- Store log type info here, or null
-  rc_log_type nvarchar(255) NULL default NULL,
-  -- Store log action or null
-  rc_log_action nvarchar(255) NULL default NULL,
-  -- Log params
-  rc_params nvarchar(max) NULL
-);
-
-CREATE INDEX /*i*/rc_timestamp ON /*_*/recentchanges (rc_timestamp);
-CREATE INDEX /*i*/rc_namespace_title_timestamp ON /*_*/recentchanges (rc_namespace, rc_title, rc_timestamp);
-CREATE INDEX /*i*/rc_cur_id ON /*_*/recentchanges (rc_cur_id);
-CREATE INDEX /*i*/new_name_timestamp ON /*_*/recentchanges (rc_new,rc_namespace,rc_timestamp);
-CREATE INDEX /*i*/rc_ip ON /*_*/recentchanges (rc_ip);
-CREATE INDEX /*i*/rc_ns_usertext ON /*_*/recentchanges (rc_namespace, rc_user_text);
-CREATE INDEX /*i*/rc_user_text ON /*_*/recentchanges (rc_user_text, rc_timestamp);
-CREATE INDEX /*i*/rc_ns_actor ON /*_*/recentchanges (rc_namespace, rc_actor);
-CREATE INDEX /*i*/rc_actor ON /*_*/recentchanges (rc_actor, rc_timestamp);
-CREATE INDEX /*i*/rc_name_type_patrolled_timestamp ON /*_*/recentchanges (rc_namespace, rc_type, rc_patrolled, rc_timestamp);
-CREATE INDEX /*i*/rc_this_oldid ON /*_*/recentchanges (rc_this_oldid);
-
-
-CREATE TABLE /*_*/watchlist (
-  wl_id int NOT NULL PRIMARY KEY IDENTITY,
-  -- Key to user.user_id
-  wl_user int NOT NULL REFERENCES /*_*/mwuser(user_id) ON DELETE CASCADE,
-
-  -- Key to page_namespace/page_title
-  -- Note that users may watch pages which do not exist yet,
-  -- or existed in the past but have been deleted.
-  wl_namespace int NOT NULL default 0,
-  wl_title nvarchar(255) NOT NULL default '',
-
-  -- Timestamp used to send notification e-mails and show "updated since last visit" markers on
-  -- history and recent changes / watchlist. Set to NULL when the user visits the latest revision
-  -- of the page, which means that they should be sent an e-mail on the next change.
-  wl_notificationtimestamp varchar(14)
-
-);
-
-CREATE UNIQUE INDEX /*i*/wl_user ON /*_*/watchlist (wl_user, wl_namespace, wl_title);
-CREATE INDEX /*i*/namespace_title ON /*_*/watchlist (wl_namespace, wl_title);
-
-
---
--- Our search index for the builtin MediaWiki search
---
-CREATE TABLE /*_*/searchindex (
-  -- Key to page_id
-  si_page int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
-
-  -- Munged version of title
-  si_title nvarchar(255) NOT NULL default '',
-
-  -- Munged version of body text
-  si_text nvarchar(max) NOT NULL
-);
-
-CREATE UNIQUE INDEX /*i*/si_page ON /*_*/searchindex (si_page);
--- Fulltext index is defined in MssqlInstaller.php
-
---
--- Recognized interwiki link prefixes
---
-CREATE TABLE /*_*/interwiki (
-  -- The interwiki prefix, (e.g. "Meatball", or the language prefix "de")
-  iw_prefix nvarchar(32) NOT NULL CONSTRAINT PK_interwiki PRIMARY KEY,
-
-  -- The URL of the wiki, with "$1" as a placeholder for an article name.
-  -- Any spaces in the name will be transformed to underscores before
-  -- insertion.
-  iw_url nvarchar(max) NOT NULL,
-
-  -- The URL of the file api.php
-  iw_api nvarchar(max) NOT NULL,
-
-  -- The name of the database (for a connection to be established with LBFactory::getMainLB( 'wikiid' ))
-  iw_wikiid nvarchar(64) NOT NULL,
-
-  -- A boolean value indicating whether the wiki is in this project
-  -- (used, for example, to detect redirect loops)
-  iw_local bit NOT NULL,
-
-  -- Boolean value indicating whether interwiki transclusions are allowed.
-  iw_trans bit NOT NULL default 0
-);
-
---
--- Used for caching expensive grouped queries
---
-CREATE TABLE /*_*/querycache (
-  -- A key name, generally the base name of of the special page.
-  qc_type nvarchar(32) NOT NULL,
-
-  -- Some sort of stored value. Sizes, counts...
-  qc_value int NOT NULL default 0,
-
-  -- Target namespace+title
-  qc_namespace int NOT NULL default 0,
-  qc_title nvarchar(255) NOT NULL default ''
-);
-
-CREATE INDEX /*i*/qc_type ON /*_*/querycache (qc_type,qc_value);
-
-
---
--- For a few generic cache operations if not using Memcached
---
-CREATE TABLE /*_*/objectcache (
-  keyname nvarchar(255) NOT NULL default '' PRIMARY KEY,
-  value varbinary(max),
-  exptime varchar(14)
-);
-CREATE INDEX /*i*/exptime ON /*_*/objectcache (exptime);
-
-
-CREATE TABLE /*_*/logging (
-  -- Log ID, for referring to this specific log entry, probably for deletion and such.
-  log_id int NOT NULL PRIMARY KEY IDENTITY(0,1),
-
-  -- Symbolic keys for the general log type and the action type
-  -- within the log. The output format will be controlled by the
-  -- action field, but only the type controls categorization.
-  log_type nvarchar(32) NOT NULL default '',
-  log_action nvarchar(32) NOT NULL default '',
-
-  -- Timestamp. Duh.
-  log_timestamp varchar(14) NOT NULL default '',
-
-  -- The user who performed this action; key to user_id
-  log_user int, -- NOT an FK, if a user is deleted we still want to maintain a record of who did a thing
-
-  -- Name of the user who performed this action
-  log_user_text nvarchar(255) NOT NULL default '',
-
-  -- The actor who performed this action
-  log_actor bigint NOT NULL CONSTRAINT DF_log_actor DEFAULT 0,
-
-  -- Key to the page affected. Where a user is the target,
-  -- this will point to the user page.
-  log_namespace int NOT NULL default 0,
-  log_title nvarchar(255) NOT NULL default '',
-  log_page int NULL, -- NOT an FK, logging entries are inserted for deleted pages which still reference the deleted page ids
-
-  -- Key to comment_id. Comment summarizing the change.
-  log_comment_id bigint NOT NULL CONSTRAINT FK_log_comment_id FOREIGN KEY REFERENCES /*_*/comment(comment_id),
-
-  -- miscellaneous parameters:
-  -- LF separated list (old system) or serialized PHP array (new system)
-  log_params nvarchar(max) NOT NULL,
-
-  -- rev_deleted for logs
-  log_deleted tinyint NOT NULL default 0
-);
-
-CREATE INDEX /*i*/type_time ON /*_*/logging (log_type, log_timestamp);
-CREATE INDEX /*i*/user_time ON /*_*/logging (log_user, log_timestamp);
-CREATE INDEX /*i*/page_time ON /*_*/logging (log_namespace, log_title, log_timestamp);
-CREATE INDEX /*i*/times ON /*_*/logging (log_timestamp);
-CREATE INDEX /*i*/log_user_type_time ON /*_*/logging (log_user, log_type, log_timestamp);
-CREATE INDEX /*i*/log_page_id_time ON /*_*/logging (log_page,log_timestamp);
-CREATE INDEX /*i*/log_type_action ON /*_*/logging (log_type, log_action, log_timestamp);
-CREATE INDEX /*i*/log_user_text_type_time ON /*_*/logging (log_user_text, log_type, log_timestamp);
-CREATE INDEX /*i*/log_user_text_time ON /*_*/logging (log_user_text, log_timestamp);
-CREATE INDEX /*i*/actor_time ON /*_*/logging (log_actor, log_timestamp);
-CREATE INDEX /*i*/log_actor_type_time ON /*_*/logging (log_actor, log_type, log_timestamp);
-
-INSERT INTO /*_*/logging (log_user,log_page,log_params) VALUES(0,0,'');
-
-ALTER TABLE /*_*/recentchanges ADD CONSTRAINT rc_logid__log_id__fk FOREIGN KEY (rc_logid) REFERENCES /*_*/logging(log_id) ON DELETE CASCADE;
-
-CREATE TABLE /*_*/log_search (
-  -- The type of ID (rev ID, log ID, rev timestamp, username)
-  ls_field nvarchar(32) NOT NULL,
-  -- The value of the ID
-  ls_value nvarchar(255) NOT NULL,
-  -- Key to log_id
-  ls_log_id int REFERENCES /*_*/logging(log_id) ON DELETE CASCADE
-);
-CREATE UNIQUE INDEX /*i*/ls_field_val ON /*_*/log_search (ls_field,ls_value,ls_log_id);
-CREATE INDEX /*i*/ls_log_id ON /*_*/log_search (ls_log_id);
-
-
--- Jobs performed by parallel apache threads or a command-line daemon
-CREATE TABLE /*_*/job (
-  job_id int NOT NULL PRIMARY KEY IDENTITY,
-
-  -- Command name
-  -- Limited to 60 to prevent key length overflow
-  job_cmd nvarchar(60) NOT NULL default '',
-
-  -- Namespace and title to act on
-  -- Should be 0 and '' if the command does not operate on a title
-  job_namespace int NOT NULL,
-  job_title nvarchar(255) NOT NULL,
-
-  -- Timestamp of when the job was inserted
-  -- NULL for jobs added before addition of the timestamp
-  job_timestamp nvarchar(14) NULL default NULL,
-
-  -- Any other parameters to the command
-  -- Stored as a PHP serialized array, or an empty string if there are no parameters
-  job_params nvarchar(max) NOT NULL,
-
-  -- Random, non-unique, number used for job acquisition (for lock concurrency)
-  job_random int NOT NULL default 0,
-
-  -- The number of times this job has been locked
-  job_attempts int NOT NULL default 0,
-
-  -- Field that conveys process locks on rows via process UUIDs
-  job_token nvarchar(32) NOT NULL default '',
-
-  -- Timestamp when the job was locked
-  job_token_timestamp varchar(14) NULL default NULL,
-
-  -- Base 36 SHA1 of the job parameters relevant to detecting duplicates
-  job_sha1 nvarchar(32) NOT NULL default ''
-);
-
-CREATE INDEX /*i*/job_sha1 ON /*_*/job (job_sha1);
-CREATE INDEX /*i*/job_cmd_token ON /*_*/job (job_cmd,job_token,job_random);
-CREATE INDEX /*i*/job_cmd_token_id ON /*_*/job (job_cmd,job_token,job_id);
-CREATE INDEX /*i*/job_cmd ON /*_*/job (job_cmd, job_namespace, job_title);
-CREATE INDEX /*i*/job_timestamp ON /*_*/job (job_timestamp);
-
-
--- Details of updates to cached special pages
-CREATE TABLE /*_*/querycache_info (
-  -- Special page name
-  -- Corresponds to a qc_type value
-  qci_type nvarchar(32) NOT NULL default '',
-
-  -- Timestamp of last update
-  qci_timestamp varchar(14) NOT NULL default ''
-);
-
-CREATE UNIQUE INDEX /*i*/qci_type ON /*_*/querycache_info (qci_type);
-
-
--- For each redirect, this table contains exactly one row defining its target
-CREATE TABLE /*_*/redirect (
-  -- Key to the page_id of the redirect page
-  rd_from int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
-
-  -- Key to page_namespace/page_title of the target page.
-  -- The target page may or may not exist, and due to renames
-  -- and deletions may refer to different page records as time
-  -- goes by.
-  rd_namespace int NOT NULL default 0,
-  rd_title nvarchar(255) NOT NULL default '',
-  rd_interwiki nvarchar(32) default NULL,
-  rd_fragment nvarchar(255) default NULL
-);
-
-CREATE INDEX /*i*/rd_ns_title ON /*_*/redirect (rd_namespace,rd_title,rd_from);
-
-
--- Used for caching expensive grouped queries that need two links (for example double-redirects)
-CREATE TABLE /*_*/querycachetwo (
-  -- A key name, generally the base name of of the special page.
-  qcc_type nvarchar(32) NOT NULL,
-
-  -- Some sort of stored value. Sizes, counts...
-  qcc_value int NOT NULL default 0,
-
-  -- Target namespace+title
-  qcc_namespace int NOT NULL default 0,
-  qcc_title nvarchar(255) NOT NULL default '',
-
-  -- Target namespace+title2
-  qcc_namespacetwo int NOT NULL default 0,
-  qcc_titletwo nvarchar(255) NOT NULL default ''
-);
-
-CREATE INDEX /*i*/qcc_type ON /*_*/querycachetwo (qcc_type,qcc_value);
-CREATE INDEX /*i*/qcc_title ON /*_*/querycachetwo (qcc_type,qcc_namespace,qcc_title);
-CREATE INDEX /*i*/qcc_titletwo ON /*_*/querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
-
-
--- Used for storing page restrictions (i.e. protection levels)
-CREATE TABLE /*_*/page_restrictions (
-  -- Field for an ID for this restrictions row (sort-key for Special:ProtectedPages)
-  pr_id int NOT NULL PRIMARY KEY IDENTITY,
-  -- Page to apply restrictions to (Foreign Key to page).
-  pr_page int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
-  -- The protection type (edit, move, etc)
-  pr_type nvarchar(60) NOT NULL,
-  -- The protection level (Sysop, autoconfirmed, etc)
-  pr_level nvarchar(60) NOT NULL,
-  -- Whether or not to cascade the protection down to pages transcluded.
-  pr_cascade bit NOT NULL,
-  -- Field for future support of per-user restriction.
-  pr_user int NULL,
-  -- Field for time-limited protection.
-  pr_expiry varchar(14) NULL
-);
-
-CREATE UNIQUE INDEX /*i*/pr_pagetype ON /*_*/page_restrictions (pr_page,pr_type);
-CREATE INDEX /*i*/pr_typelevel ON /*_*/page_restrictions (pr_type,pr_level);
-CREATE INDEX /*i*/pr_level ON /*_*/page_restrictions (pr_level);
-CREATE INDEX /*i*/pr_cascade ON /*_*/page_restrictions (pr_cascade);
-
-
--- Protected titles - nonexistent pages that have been protected
-CREATE TABLE /*_*/protected_titles (
-  pt_namespace int NOT NULL,
-  pt_title nvarchar(255) NOT NULL,
-  pt_user int REFERENCES /*_*/mwuser(user_id) ON DELETE SET NULL,
-  pt_reason_id bigint NOT NULL CONSTRAINT FK_pt_reason_id FOREIGN KEY REFERENCES /*_*/comment(comment_id),
-  pt_timestamp varchar(14) NOT NULL,
-  pt_expiry varchar(14) NOT NULL,
-  pt_create_perm nvarchar(60) NOT NULL,
-  CONSTRAINT PK_protected_titles PRIMARY KEY(pt_namespace,pt_title)
-);
-
-CREATE INDEX /*i*/pt_timestamp ON /*_*/protected_titles (pt_timestamp);
-
-
--- Name/value pairs indexed by page_id
-CREATE TABLE /*_*/page_props (
-  pp_page int NOT NULL REFERENCES /*_*/page(page_id) ON DELETE CASCADE,
-  pp_propname nvarchar(60) NOT NULL,
-  pp_value nvarchar(max) NOT NULL,
-  pp_sortkey float DEFAULT NULL,
-  CONSTRAINT PK_page_props PRIMARY KEY(pp_page,pp_propname)
-);
-
-CREATE UNIQUE INDEX /*i*/pp_propname_page ON /*_*/page_props (pp_propname,pp_page);
-CREATE UNIQUE INDEX /*i*/pp_propname_sortkey_page ON /*_*/page_props (pp_propname,pp_sortkey,pp_page);
-
-
--- A table to log updates, one text key row per update.
-CREATE TABLE /*_*/updatelog (
-  ul_key nvarchar(255) NOT NULL PRIMARY KEY,
-  ul_value nvarchar(max)
-);
-
-
--- A table to track tags for revisions, logs and recent changes.
-CREATE TABLE /*_*/change_tag (
-  ct_id int NOT NULL PRIMARY KEY IDENTITY,
-  -- RCID for the change
-  ct_rc_id int NULL REFERENCES /*_*/recentchanges(rc_id),
-  -- LOGID for the change
-  ct_log_id int NULL REFERENCES /*_*/logging(log_id),
-  -- REVID for the change
-  ct_rev_id int NULL REFERENCES /*_*/revision(rev_id),
-  -- Parameters for the tag, presently unused
-  ct_params nvarchar(max) NULL,
-  -- Foreign key to change_tag_def row
-  ct_tag_id int NOT NULL CONSTRAINT ctd_tag_id__fk FOREIGN KEY REFERENCES /*_*/change_tag_def(ctd_id)
-);
-
-CREATE UNIQUE INDEX /*i*/change_tag_rc_tag_id ON /*_*/change_tag (ct_rc_id,ct_tag_id);
-CREATE UNIQUE INDEX /*i*/change_tag_log_tag_id ON /*_*/change_tag (ct_log_id,ct_tag_id);
-CREATE UNIQUE INDEX /*i*/change_tag_rev_tag_id ON /*_*/change_tag (ct_rev_id,ct_tag_id);
-
--- Covering index, so we can pull all the info only out of the index.
-CREATE INDEX /*i*/change_tag_tag_id_id ON /*_*/change_tag (ct_tag_id,ct_rc_id,ct_rev_id,ct_log_id);
-
--- Table for storing localisation data
-CREATE TABLE /*_*/l10n_cache (
-  -- Language code
-  lc_lang nvarchar(32) NOT NULL,
-  -- Cache key
-  lc_key nvarchar(255) NOT NULL,
-  -- Value
-  lc_value varbinary(max) NOT NULL
-);
-CREATE INDEX /*i*/lc_lang_key ON /*_*/l10n_cache (lc_lang, lc_key);
-
--- Table caching which local files a module depends on that aren't
--- registered directly, used for fast retrieval of file dependency.
--- Currently only used for tracking images that CSS depends on
-CREATE TABLE /*_*/module_deps (
-  -- Module name
-  md_module nvarchar(255) NOT NULL,
-  -- Skin name
-  md_skin nvarchar(32) NOT NULL,
-  -- JSON nvarchar(max) with file dependencies
-  md_deps nvarchar(max) NOT NULL
-);
-CREATE UNIQUE INDEX /*i*/md_module_skin ON /*_*/module_deps (md_module, md_skin);
-
--- Holds all the sites known to the wiki.
-CREATE TABLE /*_*/sites (
-  -- Numeric id of the site
-  site_id                    int        NOT NULL PRIMARY KEY IDENTITY,
-
-  -- Global identifier for the site, ie 'enwiktionary'
-  site_global_key            nvarchar(32)       NOT NULL,
-
-  -- Type of the site, ie 'mediawiki'
-  site_type                  nvarchar(32)       NOT NULL,
-
-  -- Group of the site, ie 'wikipedia'
-  site_group                 nvarchar(32)       NOT NULL,
-
-  -- Source of the site data, ie 'local', 'wikidata', 'my-magical-repo'
-  site_source                nvarchar(32)       NOT NULL,
-
-  -- Language code of the sites primary language.
-  site_language              nvarchar(32)       NOT NULL,
-
-  -- Protocol of the site, ie 'http://', 'irc://', '//'
-  -- This field is an index for lookups and is build from type specific data in site_data.
-  site_protocol              nvarchar(32)       NOT NULL,
-
-  -- Domain of the site in reverse order, ie 'org.mediawiki.www.'
-  -- This field is an index for lookups and is build from type specific data in site_data.
-  site_domain                NVARCHAR(255)        NOT NULL,
-
-  -- Type dependent site data.
-  site_data                  nvarchar(max)                NOT NULL,
-
-  -- If site.tld/path/key:pageTitle should forward users to  the page on
-  -- the actual site, where "key" is the local identifier.
-  site_forward              bit                NOT NULL,
-
-  -- Type dependent site config.
-  -- For instance if template transclusion should be allowed if it's a MediaWiki.
-  site_config               nvarchar(max)                NOT NULL
-);
-
-CREATE UNIQUE INDEX /*i*/sites_global_key ON /*_*/sites (site_global_key);
-CREATE INDEX /*i*/sites_type ON /*_*/sites (site_type);
-CREATE INDEX /*i*/sites_group ON /*_*/sites (site_group);
-CREATE INDEX /*i*/sites_source ON /*_*/sites (site_source);
-CREATE INDEX /*i*/sites_language ON /*_*/sites (site_language);
-CREATE INDEX /*i*/sites_protocol ON /*_*/sites (site_protocol);
-CREATE INDEX /*i*/sites_domain ON /*_*/sites (site_domain);
-CREATE INDEX /*i*/sites_forward ON /*_*/sites (site_forward);
-
--- Links local site identifiers to their corresponding site.
-CREATE TABLE /*_*/site_identifiers (
-  -- Key on site.site_id
-  si_site                    int        NOT NULL REFERENCES /*_*/sites(site_id) ON DELETE CASCADE,
-
-  -- local key type, ie 'interwiki' or 'langlink'
-  si_type                    nvarchar(32)       NOT NULL,
-
-  -- local key value, ie 'en' or 'wiktionary'
-  si_key                     nvarchar(32)       NOT NULL,
-
-  CONSTRAINT PK_site_identifiers PRIMARY KEY(si_type, si_key)
-);
-
-CREATE INDEX /*i*/site_ids_site ON /*_*/site_identifiers (si_site);
-CREATE INDEX /*i*/site_ids_key ON /*_*/site_identifiers (si_key);
diff --git a/maintenance/mssql/update-keys.sql b/maintenance/mssql/update-keys.sql
deleted file mode 100644 (file)
index 4d2c1c1..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
--- Update keys for Microsoft SQL Server
--- SQL to insert update keys into the initial tables after a
--- fresh installation of MediaWiki's database.
--- This is read and executed by the install script; you should
--- not have to run it by itself unless doing a manual install.
--- Insert keys here if either the unnecessary would cause heavy
--- processing or could potentially cause trouble by lowering field
--- sizes, adding constraints, etc.
--- When adjusting field sizes, it is recommended removing old
--- patches but to play safe, update keys should also inserted here.
-
---
--- The /*_*/ comments in this and other files are
--- replaced with the defined table prefix by the installer
--- and updater scripts. If you are installing or running
--- updates manually, you will need to manually insert the
--- table prefix if any when running these scripts.
---
-
-INSERT INTO /*_*/updatelog
-       SELECT 'filearchive-fa_major_mime-patch-fa_major_mime-chemical.sql' AS ul_key, null as ul_value
-       UNION SELECT 'image-img_major_mime-patch-img_major_mime-chemical.sql', null
-       UNION SELECT 'oldimage-oi_major_mime-patch-oi_major_mime-chemical.sql', null
-       UNION SELECT 'cl_type-category_types-ck', null
-       UNION SELECT 'fa_major_mime-major_mime-ck', null
-       UNION SELECT 'fa_media_type-media_type-ck', null
-       UNION SELECT 'img_major_mime-major_mime-ck', null
-       UNION SELECT 'img_media_type-media_type-ck', null
-       UNION SELECT 'oi_major_mime-major_mime-ck', null
-       UNION SELECT 'oi_media_type-media_type-ck', null
-       UNION SELECT 'us_media_type-media_type-ck', null;
\ No newline at end of file
diff --git a/maintenance/oracle/alterSharedConstraints.php b/maintenance/oracle/alterSharedConstraints.php
deleted file mode 100644 (file)
index 7f997cb..0000000
+++ /dev/null
@@ -1,97 +0,0 @@
-<?php
-/**
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Maintenance
- */
-
-use Wikimedia\Rdbms\DBQueryError;
-
-/**
- * When using shared tables that are referenced by foreign keys on local
- * tables you have to change the constraints on local tables.
- *
- * The shared tables have to have GRANT REFERENCE on shared tables to local schema
- * i.e.: GRANT REFERENCES (user_id) ON mwuser TO hubclient;
- */
-
-require_once __DIR__ . '/../Maintenance.php';
-
-class AlterSharedConstraints extends Maintenance {
-       public function __construct() {
-               parent::__construct();
-               $this->addDescription( 'Alter foreign key to reference master tables in shared database setup.' );
-       }
-
-       public function getDbType() {
-               return Maintenance::DB_ADMIN;
-       }
-
-       public function execute() {
-               global $wgSharedDB, $wgSharedTables, $wgSharedPrefix, $wgDBprefix;
-
-               if ( $wgSharedDB == null ) {
-                       $this->output( "Database sharing is not enabled\n" );
-
-                       return;
-               }
-
-               $dbw = $this->getDB( DB_MASTER );
-               foreach ( $wgSharedTables as $table ) {
-                       $stable = $dbw->tableNameInternal( $table );
-                       if ( $wgSharedPrefix != null ) {
-                               $ltable = preg_replace( "/^$wgSharedPrefix(.*)/i", "$wgDBprefix\\1", $stable );
-                       } else {
-                               $ltable = "{$wgDBprefix}{$stable}";
-                       }
-
-                       $result = $dbw->query( "SELECT uc.constraint_name, uc.table_name, ucc.column_name,
-                                               uccpk.table_name pk_table_name, uccpk.column_name pk_column_name,
-                                               uc.delete_rule, uc.deferrable, uc.deferred
-                                       FROM user_constraints uc, user_cons_columns ucc, user_cons_columns uccpk
-                                       WHERE uc.constraint_type = 'R'
-                                               AND ucc.constraint_name = uc.constraint_name
-                                               AND uccpk.constraint_name = uc.r_constraint_name
-                                               AND uccpk.table_name = '$ltable'" );
-
-                       while ( ( $row = $result->fetchRow() ) !== false ) {
-                               $this->output( "Altering {$row['constraint_name']} ..." );
-
-                               try {
-                                       $dbw->query( "ALTER TABLE {$row['table_name']}
-                                                       DROP CONSTRAINT {$wgDBprefix}{$row['constraint_name']}" );
-                               } catch ( DBQueryError $exdb ) {
-                                       if ( $exdb->errno != 2443 ) {
-                                               throw $exdb;
-                                       }
-                               }
-
-                               $deleteRule = $row['delete_rule'] == 'NO ACTION' ? '' : "ON DELETE {$row['delete_rule']}";
-                               $dbw->query( "ALTER TABLE {$row['table_name']}
-                                               ADD CONSTRAINT {$wgDBprefix}{$row['constraint_name']}
-                                               FOREIGN KEY ({$row['column_name']})
-                                               REFERENCES {$wgSharedDB}.$stable({$row['pk_column_name']})
-                                               {$deleteRule} {$row['deferrable']} INITIALLY {$row['deferred']}" );
-
-                               $this->output( "DONE\n" );
-                       }
-               }
-       }
-}
-
-$maintClass = AlterSharedConstraints::class;
-require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/maintenance/oracle/archives/patch-actor-table.sql b/maintenance/oracle/archives/patch-actor-table.sql
deleted file mode 100644 (file)
index 8a33888..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
---
--- patch-actor-table.sql
---
--- T167246. Add an `actor` table and various columns (and temporary tables) to reference it.
-
-define mw_prefix='{$wgDBprefix}';
-
-CREATE SEQUENCE actor_actor_id_seq;
-CREATE TABLE &mw_prefix.actor (
-  actor_id NUMBER NOT NULL,
-  actor_user NUMBER,
-  actor_name VARCHAR2(255) NOT NULL
-);
-
-ALTER TABLE &mw_prefix.actor ADD CONSTRAINT &mw_prefix.actor_pk PRIMARY KEY (actor_id);
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.actor_seq_trg BEFORE INSERT ON &mw_prefix.actor
-       FOR EACH ROW WHEN (new.actor_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(actor_actor_id_seq.nextval, :new.actor_id);
-END;
-/*$mw$*/
-
--- Create a dummy actor to satisfy fk contraints
-INSERT INTO &mw_prefix.actor (actor_id, actor_name) VALUES (0,'##Anonymous##');
-
-CREATE TABLE &mw_prefix.revision_actor_temp (
-  revactor_rev NUMBER NOT NULL,
-  revactor_actor NUMBER NOT NULL,
-  revactor_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL,
-  revactor_page NUMBER NOT NULL
-);
-ALTER TABLE &mw_prefix.revision_actor_temp ADD CONSTRAINT &mw_prefix.revision_actor_temp_pk PRIMARY KEY (revactor_rev, revactor_actor);
-CREATE UNIQUE INDEX &mw_prefix.revactor_rev ON &mw_prefix.revision_actor_temp (revactor_rev);
-CREATE INDEX &mw_prefix.actor_timestamp ON &mw_prefix.revision_actor_temp (revactor_actor,revactor_timestamp);
-CREATE INDEX &mw_prefix.page_actor_timestamp ON &mw_prefix.revision_actor_temp (revactor_page,revactor_actor,revactor_timestamp);
-
-ALTER TABLE &mw_prefix.archive MODIFY ( ar_user_text NULL );
-ALTER TABLE &mw_prefix.archive ADD ( ar_actor NUMBER DEFAULT 0 NOT NULL );
-CREATE INDEX &mw_prefix.ar_actor_timestamp ON &mw_prefix.archive (ar_actor,ar_timestamp);
-
-ALTER TABLE &mw_prefix.ipblocks ADD ( ipb_by_actor NUMBER DEFAULT 0 NOT NULL );
-
-ALTER TABLE &mw_prefix.image MODIFY ( img_user_text NULL );
-ALTER TABLE &mw_prefix.image ADD ( img_actor NUMBER DEFAULT 0 NOT NULL );
-CREATE INDEX &mw_prefix.img_actor_timestamp ON &mw_prefix.image (img_actor, img_timestamp);
-
-ALTER TABLE &mw_prefix.oldimage MODIFY ( oi_user_text NULL );
-ALTER TABLE &mw_prefix.oldimage ADD ( oi_actor NUMBER DEFAULT 0 NOT NULL );
-CREATE INDEX &mw_prefix.oi_actor_timestamp ON &mw_prefix.oldimage (oi_actor,oi_timestamp);
-
-ALTER TABLE &mw_prefix.filearchive MODIFY ( fa_user_text NULL );
-ALTER TABLE &mw_prefix.filearchive ADD ( fa_actor NUMBER DEFAULT 0 NOT NULL );
-CREATE INDEX &mw_prefix.fa_actor_timestamp ON &mw_prefix.filearchive (fa_actor,fa_timestamp);
-
-ALTER TABLE &mw_prefix.recentchanges MODIFY ( rc_user_text NULL );
-ALTER TABLE &mw_prefix.recentchanges ADD ( rc_actor NUMBER DEFAULT 0 NOT NULL );
-CREATE INDEX &mw_prefix.rc_ns_actor ON &mw_prefix.recentchanges (rc_namespace, rc_actor);
-CREATE INDEX &mw_prefix.rc_actor ON &mw_prefix.recentchanges (rc_actor, rc_timestamp);
-
-ALTER TABLE &mw_prefix.logging ADD ( log_actor NUMBER DEFAULT 0 NOT NULL );
-CREATE INDEX &mw_prefix.actor_time ON &mw_prefix.logging (log_actor, log_timestamp);
-CREATE INDEX &mw_prefix.log_actor_type_time ON &mw_prefix.logging (log_actor, log_type, log_timestamp);
diff --git a/maintenance/oracle/archives/patch-add-rc_name_type_patrolled_timestamp_index.sql b/maintenance/oracle/archives/patch-add-rc_name_type_patrolled_timestamp_index.sql
deleted file mode 100644 (file)
index cd0d396..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-CREATE INDEX &mw_prefix.recentchanges_i08 ON &mw_prefix.recentchanges (rc_namespace, rc_type, rc_patrolled, rc_timestamp);
-
diff --git a/maintenance/oracle/archives/patch-ar_rev_id-not-null.sql b/maintenance/oracle/archives/patch-ar_rev_id-not-null.sql
deleted file mode 100644 (file)
index 56f1598..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
--- T182678: Make ar_rev_id not nullable
-
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.archive MODIFY ar_rev_id NUMBER NOT NULL;
diff --git a/maintenance/oracle/archives/patch-ar_sha1_field.sql b/maintenance/oracle/archives/patch-ar_sha1_field.sql
deleted file mode 100644 (file)
index de723ce..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.archive ADD ar_sha1               VARCHAR2(32);
diff --git a/maintenance/oracle/archives/patch-archive-ar_content_format.sql b/maintenance/oracle/archives/patch-archive-ar_content_format.sql
deleted file mode 100644 (file)
index 0c0c0d9..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.archive ADD ar_content_format VARCHAR2(64);
diff --git a/maintenance/oracle/archives/patch-archive-ar_content_model.sql b/maintenance/oracle/archives/patch-archive-ar_content_model.sql
deleted file mode 100644 (file)
index d18fc9e..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.archive ADD ar_content_model VARCHAR2(32);
diff --git a/maintenance/oracle/archives/patch-archive-ar_id.sql b/maintenance/oracle/archives/patch-archive-ar_id.sql
deleted file mode 100644 (file)
index a43f760..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.archive ADD (
-ar_id NUMBER NOT NULL,
-);
-ALTER TABLE &mw_prefix.archive ADD CONSTRAINT &mw_prefix.archive_pk PRIMARY KEY (ar_id);
diff --git a/maintenance/oracle/archives/patch-archive-ar_rev_id-unique.sql b/maintenance/oracle/archives/patch-archive-ar_rev_id-unique.sql
deleted file mode 100644 (file)
index c1cccc2..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
--- T193180: ar_rev_id should be unique
-
-define mw_prefix='{$wgDBprefix}';
-
-CREATE UNIQUE INDEX &mw_prefix.archive_i04 ON &mw_prefix.archive (ar_rev_id);
-DROP INDEX &mw_prefix.archive_i03;
diff --git a/maintenance/oracle/archives/patch-auto_increment_triggers.sql b/maintenance/oracle/archives/patch-auto_increment_triggers.sql
deleted file mode 100644 (file)
index 62a2f4f..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
--- Package to help with making Oracle more like other DBs with respect to
--- auto-incrementing columns.
-/*$mw$*/
-CREATE PACKAGE &mw_prefix.lastval_pkg IS
-  lastval NUMBER;
-  PROCEDURE setLastval(val IN NUMBER, field OUT NUMBER);
-  FUNCTION getLastval RETURN NUMBER;
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE PACKAGE BODY &mw_prefix.lastval_pkg IS
-  PROCEDURE setLastval(val IN NUMBER, field OUT NUMBER) IS BEGIN
-    lastval := val;
-    field := val;
-  END;
-
-  FUNCTION getLastval RETURN NUMBER IS BEGIN
-    RETURN lastval;
-  END;
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.mwuser_seq_trg BEFORE INSERT ON &mw_prefix.mwuser
-       FOR EACH ROW WHEN (new.user_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(user_user_id_seq.nextval, :new.user_id);
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.page_seq_trg BEFORE INSERT ON &mw_prefix.page
-       FOR EACH ROW WHEN (new.page_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(page_page_id_seq.nextval, :new.page_id);
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.revision_seq_trg BEFORE INSERT ON &mw_prefix.revision
-       FOR EACH ROW WHEN (new.rev_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(revision_rev_id_seq.nextval, :new.rev_id);
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.pagecontent_seq_trg BEFORE INSERT ON &mw_prefix.pagecontent
-       FOR EACH ROW WHEN (new.old_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(text_old_id_seq.nextval, :new.old_id);
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.archive_seq_trg BEFORE INSERT ON &mw_prefix.archive
-       FOR EACH ROW WHEN (new.ar_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(archive_ar_id_seq.nextval, :new.ar_id);
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.category_seq_trg BEFORE INSERT ON &mw_prefix.category
-       FOR EACH ROW WHEN (new.cat_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(category_cat_id_seq.nextval, :new.cat_id);
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.externallinks_seq_trg BEFORE INSERT ON &mw_prefix.externallinks
-       FOR EACH ROW WHEN (new.el_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(externallinks_el_id_seq.nextval, :new.el_id);
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.ipblocks_seq_trg BEFORE INSERT ON &mw_prefix.ipblocks
-       FOR EACH ROW WHEN (new.ipb_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(ipblocks_ipb_id_seq.nextval, :new.ipb_id);
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.filearchive_seq_trg BEFORE INSERT ON &mw_prefix.filearchive
-       FOR EACH ROW WHEN (new.fa_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(filearchive_fa_id_seq.nextval, :new.fa_id);
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.uploadstash_seq_trg BEFORE INSERT ON &mw_prefix.uploadstash
-       FOR EACH ROW WHEN (new.us_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(uploadstash_us_id_seq.nextval, :new.us_id);
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.recentchanges_seq_trg BEFORE INSERT ON &mw_prefix.recentchanges
-       FOR EACH ROW WHEN (new.rc_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(recentchanges_rc_id_seq.nextval, :new.rc_id);
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.logging_seq_trg BEFORE INSERT ON &mw_prefix.logging
-       FOR EACH ROW WHEN (new.log_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(logging_log_id_seq.nextval, :new.log_id);
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.job_seq_trg BEFORE INSERT ON &mw_prefix.job
-       FOR EACH ROW WHEN (new.job_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(job_job_id_seq.nextval, :new.job_id);
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.page_restrictions_seq_trg BEFORE INSERT ON &mw_prefix.page_restrictions
-       FOR EACH ROW WHEN (new.pr_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(page_restrictions_pr_id_seq.nextval, :new.pr_id);
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.sites_seq_trg BEFORE INSERT ON &mw_prefix.sites
-       FOR EACH ROW WHEN (new.site_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(sites_site_id_seq.nextval, :new.site_id);
-END;
-/*$mw$*/
diff --git a/maintenance/oracle/archives/patch-cat_hidden.sql b/maintenance/oracle/archives/patch-cat_hidden.sql
deleted file mode 100644 (file)
index d1649c7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.category DROP COLUMN cat_hidden;
-
diff --git a/maintenance/oracle/archives/patch-change_tag-change_tag_rc_tag_id.sql b/maintenance/oracle/archives/patch-change_tag-change_tag_rc_tag_id.sql
deleted file mode 100644 (file)
index 65d5b35..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
--- T193874: Add new indexes to change_tag table using ct_tag_id instead of ct_tag
-
-define mw_prefix='{$wgDBprefix}';
-
-CREATE UNIQUE INDEX &mw_prefix.change_tag_u04 ON &mw_prefix.change_tag (ct_rc_id,ct_tag_id);
-CREATE UNIQUE INDEX &mw_prefix.change_tag_u05 ON &mw_prefix.change_tag (ct_log_id,ct_tag_id);
-CREATE UNIQUE INDEX &mw_prefix.change_tag_u06 ON &mw_prefix.change_tag (ct_rev_id,ct_tag_id);
-
-CREATE INDEX &mw_prefix.change_tag_i03 ON &mw_prefix.change_tag (ct_rc_id,ct_tag);
-CREATE INDEX &mw_prefix.change_tag_i04 ON &mw_prefix.change_tag (ct_log_id,ct_tag);
-CREATE INDEX &mw_prefix.change_tag_i05 ON &mw_prefix.change_tag (ct_rev_id,ct_tag);
-
-DROP INDEX &mw_prefix.change_tag_u01;
-DROP INDEX &mw_prefix.change_tag_u02;
-DROP INDEX &mw_prefix.change_tag_u03;
-
-ALTER TABLE &mw_prefix.change_tag
-       MODIFY ct_tag DEFAULT '///invalid///';
\ No newline at end of file
diff --git a/maintenance/oracle/archives/patch-change_tag-ct_id.sql b/maintenance/oracle/archives/patch-change_tag-ct_id.sql
deleted file mode 100644 (file)
index 6672872..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.change_tag ADD (
-ct_id NUMBER NOT NULL,
-);
-ALTER TABLE &mw_prefix.change_tag ADD CONSTRAINT &mw_prefix.change_tag_pk PRIMARY KEY (ct_id);
diff --git a/maintenance/oracle/archives/patch-change_tag-tag_id.sql b/maintenance/oracle/archives/patch-change_tag-tag_id.sql
deleted file mode 100644 (file)
index 1f4067c..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
---
--- Add ctd_tag_id to change_tag table to normalize it
---
-ALTER TABLE &mw_prefix.change_tag ADD ( ct_tag_id NUMBER DEFAULT NULL );
-
-CREATE INDEX &mw_prefix.change_tag_i02 ON &mw_prefix.change_tag (ct_tag_id,ct_rc_id,ct_rev_id,ct_log_id);
diff --git a/maintenance/oracle/archives/patch-change_tag_def.sql b/maintenance/oracle/archives/patch-change_tag_def.sql
deleted file mode 100644 (file)
index 6bf7772..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
--- Table defining tag names for IDs. Also stores hit counts to avoid expensive queries on change_tag
-CREATE SEQUENCE change_tag_def_ctd_id_seq;
-CREATE TABLE &mw_prefix.change_tag_def (
-    -- Numerical ID of the tag (ct_tag_id refers to this)
-    ctd_id NUMBER  NOT NULL,
-    -- Symbolic name of the tag (what would previously be put in ct_tag)
-    ctd_name VARCHAR2(255) NOT NULL,
-    -- Whether this tag was defined manually by a privileged user using Special:Tags
-    ctd_user_defined CHAR(1) DEFAULT '0' NOT NULL,
-    -- Number of times this tag was used
-    ctd_count NUMBER NOT NULL DEFAULT 0
-);
-
-ALTER TABLE &mw_prefix.change_tag_def ADD CONSTRAINT &mw_prefix.change_tag_def_pk PRIMARY KEY (ctd_id);
-CREATE UNIQUE INDEX &mw_prefix.ctd_name ON &mw_prefix.change_tag_def (ctd_name);
-CREATE INDEX &mw_prefix.ctd_count ON &mw_prefix.change_tag_def (ctd_count);
-CREATE INDEX &mw_prefix.ctd_user_defined ON &mw_prefix.change_tag_def (ctd_user_defined);
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.change_tag_def_seq_trg BEFORE INSERT ON &mw_prefix.change_tag_def
-    FOR EACH ROW WHEN (new.ctd_id IS NULL)
-BEGIN
-    &mw_prefix.lastval_pkg.setLastval(change_tag_def_ctd_id_seq.nextval, :new.ctd_id);
-END;
-/*$mw$*/
\ No newline at end of file
diff --git a/maintenance/oracle/archives/patch-comment-table.sql b/maintenance/oracle/archives/patch-comment-table.sql
deleted file mode 100644 (file)
index cdab291..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
---
--- patch-comment-table.sql
---
--- T166732. Add a `comment` table and various columns (and temporary tables) to reference it.
-
-CREATE SEQUENCE comment_comment_id_seq;
-CREATE TABLE &mw_prefix."COMMENT" (
-  comment_id NUMBER NOT NULL,
-  comment_hash NUMBER NOT NULL,
-  comment_text CLOB,
-  comment_data CLOB
-);
-CREATE INDEX &mw_prefix.comment_hash ON &mw_prefix."COMMENT" (comment_hash);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.comment_seq_trg BEFORE INSERT ON &mw_prefix."COMMENT"
-       FOR EACH ROW WHEN (new.comment_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(comment_comment_id_seq.nextval, :new.comment_id);
-END;
-/*$mw$*/
-
--- dummy row for FKs. Hash is intentionally wrong so CommentStore won't match it.
-INSERT INTO &mw_prefix."COMMENT" (comment_hash, comment_text) VALUES (-1, '** dummy **');
-
-
-CREATE TABLE &mw_prefix.revision_comment_temp (
-  revcomment_rev NUMBER NOT NULL,
-  revcomment_comment_id NUMBER NOT NULL
-);
-ALTER TABLE &mw_prefix.revision_comment_temp ADD CONSTRAINT &mw_prefix.revision_comment_temp_pk PRIMARY KEY (revcomment_rev, revcomment_comment_id);
-ALTER TABLE &mw_prefix.revision_comment_temp ADD CONSTRAINT &mw_prefix.revision_comment_temp_fk1 FOREIGN KEY (revcomment_rev) REFERENCES &mw_prefix.revision(rev_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.revision_comment_temp ADD CONSTRAINT &mw_prefix.revision_comment_temp_fk2 FOREIGN KEY (revcomment_comment_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.revcomment_rev ON &mw_prefix.revision_comment_temp (revcomment_rev);
-
-
-CREATE TABLE &mw_prefix.image_comment_temp (
-  imgcomment_name VARCHAR2(255) NOT NULL,
-  imgcomment_description_id NUMBER NOT NULL
-);
-ALTER TABLE &mw_prefix.image_comment_temp ADD CONSTRAINT &mw_prefix.image_comment_temp_pk PRIMARY KEY (imgcomment_name, imgcomment_description_id);
-ALTER TABLE &mw_prefix.image_comment_temp ADD CONSTRAINT &mw_prefix.image_comment_temp_fk1 FOREIGN KEY (imgcomment_name) REFERENCES &mw_prefix.image(img_name) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.image_comment_temp ADD CONSTRAINT &mw_prefix.image_comment_temp_fk2 FOREIGN KEY (imgcomment_description_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.imgcomment_name ON &mw_prefix.image_comment_temp (imgcomment_name);
-
-
-ALTER TABLE &mw_prefix.archive ADD ( ar_comment_id NUMBER DEFAULT 0 NOT NULL );
-ALTER TABLE &mw_prefix.archive ADD CONSTRAINT &mw_prefix.archive_fk2 FOREIGN KEY (ar_comment_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-
-ALTER TABLE &mw_prefix.ipblocks MODIFY ( ipb_reason NULL );
-ALTER TABLE &mw_prefix.ipblocks ADD ( ipb_reason_id NUMBER DEFAULT 0 NOT NULL );
-ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_fk3 FOREIGN KEY (ipb_reason_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-
-ALTER TABLE &mw_prefix.oldimage ADD ( oi_description_id NUMBER DEFAULT 0 NOT NULL );
-ALTER TABLE &mw_prefix.oldimage ADD CONSTRAINT &mw_prefix.oldimage_fk3 FOREIGN KEY (oi_description_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-
-ALTER TABLE &mw_prefix.filearchive ADD ( fa_deleted_reason_id NUMBER DEFAULT 0 NOT NULL );
-ALTER TABLE &mw_prefix.filearchive ADD ( fa_description_id NUMBER DEFAULT 0 NOT NULL );
-ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk3 FOREIGN KEY (fa_deleted_reason_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk4 FOREIGN KEY (fa_description_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-
-ALTER TABLE &mw_prefix.recentchanges ADD ( rc_comment_id NUMBER DEFAULT 0 NOT NULL );
-ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk3 FOREIGN KEY (rc_comment_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-
-ALTER TABLE &mw_prefix.logging ADD ( log_comment_id NUMBER DEFAULT 0 NOT NULL );
-ALTER TABLE &mw_prefix.logging ADD CONSTRAINT &mw_prefix.logging_fk2 FOREIGN KEY (log_comment_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-
-ALTER TABLE &mw_prefix.protected_titles ADD ( pt_reason_id NUMBER DEFAULT 0 NOT NULL );
-ALTER TABLE &mw_prefix.protected_titles ADD CONSTRAINT &mw_prefix.protected_titles_fk1 FOREIGN KEY (pt_reason_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
diff --git a/maintenance/oracle/archives/patch-content.sql b/maintenance/oracle/archives/patch-content.sql
deleted file mode 100644 (file)
index 17d76ae..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-CREATE SEQUENCE content_content_id_seq;
-CREATE TABLE &mw_prefix.content (
-  content_id NUMBER NOT NULL,
-  content_size NUMBER NOT NULL,
-  content_sha1 VARCHAR2(32) NOT NULL,
-  content_model NUMBER NOT NULL,
-  content_address VARCHAR2(255) NOT NULL
-);
-
-ALTER TABLE &mw_prefix.content ADD CONSTRAINT &mw_prefix.content_pk PRIMARY KEY (content_id);
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.content_seq_trg BEFORE INSERT ON &mw_prefix.content
-       FOR EACH ROW WHEN (new.content_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(content_content_id_seq.nextval, :new.content_id);
-END;
-/*$mw$*/
\ No newline at end of file
diff --git a/maintenance/oracle/archives/patch-content_models.sql b/maintenance/oracle/archives/patch-content_models.sql
deleted file mode 100644 (file)
index 49b9127..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-CREATE SEQUENCE content_models_model_id_seq;
-CREATE TABLE &mw_prefix.content_models (
-  model_id NUMBER NOT NULL,
-  model_name VARCHAR2(64) NOT NULL
-);
-
-
-ALTER TABLE &mw_prefix.content_models ADD CONSTRAINT &mw_prefix.content_models_pk PRIMARY KEY (model_id);
-
-CREATE UNIQUE INDEX &mw_prefix.model_name_u01 ON &mw_prefix.content_models (model_name);
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.content_models_seq_trg BEFORE INSERT ON &mw_prefix.content_models
-       FOR EACH ROW WHEN (new.model_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(content_models_model_id_seq.nextval, :new.model_id);
-END;
-/*$mw$*/
\ No newline at end of file
diff --git a/maintenance/oracle/archives/patch-drop-ar_text.sql b/maintenance/oracle/archives/patch-drop-ar_text.sql
deleted file mode 100644 (file)
index 40b0478..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
--- T33223: Remove obsolete ar_text and ar_flags columns
--- (and make ar_text_id not nullable and default 0)
-
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.archive DROP (ar_text, ar_flags);
-ALTER TABLE &mw_prefix.archive MODIFY ar_text_id NUMBER DEFAULT 0 NOT NULL;
diff --git a/maintenance/oracle/archives/patch-drop-comment-fields.sql b/maintenance/oracle/archives/patch-drop-comment-fields.sql
deleted file mode 100644 (file)
index ea3c641..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
---
--- patch-drop-comment-fields.sql
---
--- T166732. Drop old xx_comment fields, and defaults from xx_comment_id fields.
-
-ALTER TABLE &mw_prefix.archive DROP COLUMN ar_comment;
-ALTER TABLE &mw_prefix.archive MODIFY ar_comment_id DEFAULT NULL;
-
-ALTER TABLE &mw_prefix.ipblocks DROP COLUMN ipb_reason;
-ALTER TABLE &mw_prefix.ipblocks MODIFY ipb_reason_id DEFAULT NULL;
-
-ALTER TABLE &mw_prefix.image DROP COLUMN img_description;
-ALTER TABLE &mw_prefix.image MODIFY img_description_id DEFAULT NULL;
-
-ALTER TABLE &mw_prefix.oldimage DROP COLUMN oi_description;
-ALTER TABLE &mw_prefix.oldimage MODIFY oi_description_id DEFAULT NULL;
-
-ALTER TABLE &mw_prefix.filearchive DROP COLUMN fa_deleted_reason;
-ALTER TABLE &mw_prefix.filearchive MODIFY fa_deleted_reason_id DEFAULT NULL,
-ALTER TABLE &mw_prefix.filearchive DROP COLUMN fa_description;
-ALTER TABLE &mw_prefix.filearchive MODIFY fa_description_id DEFAULT NULL;
-
-ALTER TABLE &mw_prefix.recentchanges DROP COLUMN rc_comment;
-ALTER TABLE &mw_prefix.recentchanges MODIFY rc_comment_id DEFAULT NULL;
-
-ALTER TABLE &mw_prefix.logging DROP COLUMN log_comment;
-ALTER TABLE &mw_prefix.logging MODIFY log_comment_id DEFAULT NULL;
-
-ALTER TABLE &mw_prefix.protected_titles DROP COLUMN pt_reason;
-ALTER TABLE &mw_prefix.protected_titles MODIFY pt_reason_id DEFAULT NULL;
diff --git a/maintenance/oracle/archives/patch-drop-ct_tag.sql b/maintenance/oracle/archives/patch-drop-ct_tag.sql
deleted file mode 100644 (file)
index 4c5d128..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
--- T185355
-ALTER TABLE &mw_prefix.change_tag MODIFY &mw_prefix.ct_tag_id NUMBER NOT NULL;
-
-DROP INDEX &mw_prefix.change_tag_i03;
-DROP INDEX &mw_prefix.change_tag_i04;
-DROP INDEX &mw_prefix.change_tag_i05;
-DROP INDEX &mw_prefix.change_tag_i01;
-
-ALTER TABLE &mw_prefix.change_tag DROP COLUMN &mw_prefix.ct_tag;
diff --git a/maintenance/oracle/archives/patch-externallinks-el_id.sql b/maintenance/oracle/archives/patch-externallinks-el_id.sql
deleted file mode 100644 (file)
index a8c443f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.externallinks ADD el_id NUMBER NOT NULL;
-ALTER TABLE &mw_prefix.externallinks ADD CONSTRAINT &mw_prefix.externallinks_pk PRIMARY KEY (el_id);
\ No newline at end of file
diff --git a/maintenance/oracle/archives/patch-externallinks-el_index_60.sql b/maintenance/oracle/archives/patch-externallinks-el_index_60.sql
deleted file mode 100644 (file)
index 39680ef..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.externallinks ADD el_index_60 VARCHAR2(60);
-CREATE INDEX &mw_prefix.externallinks_i04 ON &mw_prefix.externallinks (el_index_60, el_id);
-CREATE INDEX &mw_prefix.externallinks_i05 ON &mw_prefix.externallinks (el_from, el_index_60, el_id);
diff --git a/maintenance/oracle/archives/patch-fa_sha1.sql b/maintenance/oracle/archives/patch-fa_sha1.sql
deleted file mode 100644 (file)
index 70c9e60..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.filearchive ADD fa_sha1 VARCHAR2(32);
-CREATE INDEX &mw_prefix.filearchive_i05 ON &mw_prefix.filearchive (fa_sha1);
-
diff --git a/maintenance/oracle/archives/patch-image-img_description_id.sql b/maintenance/oracle/archives/patch-image-img_description_id.sql
deleted file mode 100644 (file)
index 5995b24..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
---
--- patch-image-img_description_id.sql
---
--- T188132. Add `img_description_id` to the `image` table.
-
-ALTER TABLE &mw_prefix.image ADD ( img_description_id NUMBER DEFAULT 0 NOT NULL );
-ALTER TABLE &mw_prefix.image ADD CONSTRAINT &mw_prefix.oldimage_fk2 FOREIGN KEY (img_description_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
diff --git a/maintenance/oracle/archives/patch-ipb_sitewide.sql b/maintenance/oracle/archives/patch-ipb_sitewide.sql
deleted file mode 100644 (file)
index e9affb9..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
--- Adding ipb_sitewide for blocks
-ALTER TABLE &mw_prefix.ipblocks
-  ADD ipb_sitewide CHAR(1) DEFAULT '1' NOT NULL;
diff --git a/maintenance/oracle/archives/patch-ipblocks_i05_index.sql b/maintenance/oracle/archives/patch-ipblocks_i05_index.sql
deleted file mode 100644 (file)
index 1427538..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-CREATE INDEX &mw_prefix.ipblocks_i05 ON &mw_prefix.ipblocks (ipb_parent_block_id);
-
diff --git a/maintenance/oracle/archives/patch-ipblocks_restrictions-table.sql b/maintenance/oracle/archives/patch-ipblocks_restrictions-table.sql
deleted file mode 100644 (file)
index d44417c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
--- For partial block restrictions --
-
-CREATE TABLE &mw_prefix.ipblocks_restrictions (
-  ir_ipb_id NUMBER NOT NULL,
-  ir_type NUMBER NOT NULL,
-  ir_value NUMBER NOT NULL
-);
-
-ALTER TABLE &mw_prefix.ipblocks_restrictions ADD CONSTRAINT ipblocks_restrictions_pk PRIMARY KEY (ir_ipb_id, ir_type, ir_value);
-
--- Index to query restrictions by the page or namespace.
-CREATE INDEX &mw_prefix.ir_type_value ON &mw_prefix.ipblocks_restrictions (ir_type, ir_value);
diff --git a/maintenance/oracle/archives/patch-job_attempts.sql b/maintenance/oracle/archives/patch-job_attempts.sql
deleted file mode 100644 (file)
index b05c877..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.job ADD   job_attempts NUMBER DEFAULT 0 NOT NULL;
-CREATE INDEX &mw_prefix.job_i05 ON &mw_prefix.job (job_attempts);
diff --git a/maintenance/oracle/archives/patch-job_timestamp_field.sql b/maintenance/oracle/archives/patch-job_timestamp_field.sql
deleted file mode 100644 (file)
index 4901c87..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.job ADD job_timestamp            TIMESTAMP(6) WITH TIME ZONE NULL;
-
diff --git a/maintenance/oracle/archives/patch-job_timestamp_index.sql b/maintenance/oracle/archives/patch-job_timestamp_index.sql
deleted file mode 100644 (file)
index 6db4304..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-CREATE INDEX &mw_prefix.job_i02 ON &mw_prefix.job (job_timestamp);
-
diff --git a/maintenance/oracle/archives/patch-job_token.sql b/maintenance/oracle/archives/patch-job_token.sql
deleted file mode 100644 (file)
index 1a730e9..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.job ADD (
-       job_random NUMBER DEFAULT 0 NOT NULL,
-       job_token VARCHAR2(32),
-       job_token_timestamp TIMESTAMP(6) WITH TIME ZONE,
-       job_sha1 VARCHAR2(32)
-);
-
-CREATE INDEX &mw_prefix.job_i03 ON &mw_prefix.job (job_sha1);
-CREATE INDEX &mw_prefix.job_i04 ON &mw_prefix.job (job_cmd,job_token,job_random);
-
diff --git a/maintenance/oracle/archives/patch-logging_type_action_index.sql b/maintenance/oracle/archives/patch-logging_type_action_index.sql
deleted file mode 100644 (file)
index d30e0cf..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-CREATE INDEX &mw_prefix.logging_i05 ON &mw_prefix.logging (log_type, log_action, log_timestamp);
-
diff --git a/maintenance/oracle/archives/patch-logging_user_text_time_index.sql b/maintenance/oracle/archives/patch-logging_user_text_time_index.sql
deleted file mode 100644 (file)
index e04abf5..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-CREATE INDEX &mw_prefix.logging_i07 ON &mw_prefix.logging (log_user_text, log_timestamp);
-
diff --git a/maintenance/oracle/archives/patch-logging_user_text_type_time_index.sql b/maintenance/oracle/archives/patch-logging_user_text_type_time_index.sql
deleted file mode 100644 (file)
index c1c0d4f..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-CREATE INDEX &mw_prefix.logging_i06 ON &mw_prefix.logging (log_user_text, log_type, log_timestamp);
-
diff --git a/maintenance/oracle/archives/patch-page-page_content_model.sql b/maintenance/oracle/archives/patch-page-page_content_model.sql
deleted file mode 100644 (file)
index e5839d9..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.page ADD page_content_model VARCHAR2(32);
diff --git a/maintenance/oracle/archives/patch-page-page_lang.sql b/maintenance/oracle/archives/patch-page-page_lang.sql
deleted file mode 100644 (file)
index cae7cf9..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.page ADD page_lang VARCHAR2(35);
diff --git a/maintenance/oracle/archives/patch-page_links_updated.sql b/maintenance/oracle/archives/patch-page_links_updated.sql
deleted file mode 100644 (file)
index 5360329..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.page ADD page_links_updated TIMESTAMP(6) WITH TIME ZONE;
-
diff --git a/maintenance/oracle/archives/patch-page_redirect_namespace_len.sql b/maintenance/oracle/archives/patch-page_redirect_namespace_len.sql
deleted file mode 100644 (file)
index 1f8b9d9..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-CREATE INDEX &mw_prefix.page_i03 ON &mw_prefix.page (page_is_redirect, page_namespace, page_len);
-
diff --git a/maintenance/oracle/archives/patch-page_restrictions_pkuk_fix.sql b/maintenance/oracle/archives/patch-page_restrictions_pkuk_fix.sql
deleted file mode 100644 (file)
index 56c392c..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.page_restrictions DROP CONSTRAINT &mw_prefix.page_restrictions_pk;
-
-ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_pk PRIMARY KEY (pr_id);
-
-CREATE UNIQUE INDEX &mw_prefix.page_restrictions_u01 ON &mw_prefix.page_restrictions (pr_page,pr_type);
diff --git a/maintenance/oracle/archives/patch-rc_moved.sql b/maintenance/oracle/archives/patch-rc_moved.sql
deleted file mode 100644 (file)
index 2a71315..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.recentchanges DROP ( rc_moved_to_ns, rc_moved_to_title );
-
diff --git a/maintenance/oracle/archives/patch-rc_source.sql b/maintenance/oracle/archives/patch-rc_source.sql
deleted file mode 100644 (file)
index 0c80afa..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.recentchanges ADD rc_source VARCHAR2(16);
diff --git a/maintenance/oracle/archives/patch-recentchanges-nttindex.sql b/maintenance/oracle/archives/patch-recentchanges-nttindex.sql
deleted file mode 100644 (file)
index e24082b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-DROP INDEX IF EXISTS &mw_prefix.recentchanges_i02;
-CREATE INDEX &mw_prefix.recentchanges_i09 ON &mw_prefix.recentchanges (rc_namespace, rc_title, rc_timestamp);
diff --git a/maintenance/oracle/archives/patch-rev_sha1_field.sql b/maintenance/oracle/archives/patch-rev_sha1_field.sql
deleted file mode 100644 (file)
index 80544e8..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.revision ADD rev_sha1             VARCHAR2(32);
-
diff --git a/maintenance/oracle/archives/patch-revision-rev_content_format.sql b/maintenance/oracle/archives/patch-revision-rev_content_format.sql
deleted file mode 100644 (file)
index ebde71c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.revision ADD rev_content_format VARCHAR2(64);
diff --git a/maintenance/oracle/archives/patch-revision-rev_content_model.sql b/maintenance/oracle/archives/patch-revision-rev_content_model.sql
deleted file mode 100644 (file)
index dd22642..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.revision ADD rev_content_model VARCHAR2(32);
diff --git a/maintenance/oracle/archives/patch-revision_i05_index.sql b/maintenance/oracle/archives/patch-revision_i05_index.sql
deleted file mode 100644 (file)
index 929c7b3..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-CREATE INDEX &mw_prefix.revision_i05 ON &mw_prefix.revision (rev_page,rev_user,rev_timestamp);
-
diff --git a/maintenance/oracle/archives/patch-site_stats-modify.sql b/maintenance/oracle/archives/patch-site_stats-modify.sql
deleted file mode 100644 (file)
index 1c784d9..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-ALTER TABLE /*_*/site_stats
-       ALTER ss_total_edits SET DEFAULT NULL,
-       ALTER ss_good_articles SET DEFAULT NULL,
-       ALTER ss_total_pages SET DEFAULT NULL,
-       ALTER ss_users SET DEFAULT NULL,
-       ALTER ss_active_users SET DEFAULT NULL,
-       ALTER ss_images SET DEFAULT NULL;
diff --git a/maintenance/oracle/archives/patch-site_stats-pk.sql b/maintenance/oracle/archives/patch-site_stats-pk.sql
deleted file mode 100644 (file)
index a288c08..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.site_stats DROP CONSTRAINT &mw_prefix.site_stats_u01;
-ALTER TABLE &mw_prefix.site_stats ADD CONSTRAINT &mw_prefix.site_stats_pk PRIMARY KEY(ss_row_id);
diff --git a/maintenance/oracle/archives/patch-sites.sql b/maintenance/oracle/archives/patch-sites.sql
deleted file mode 100644 (file)
index 868b210..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-CREATE SEQUENCE sites_site_id_seq MINVALUE 0 START WITH 0;
-CREATE TABLE &mw_prefix.sites (
-  site_id NUMBER NOT NULL,
-  site_global_key VARCHAR2(32) NOT NULL,
-  site_type VARCHAR2(32) NOT NULL,
-  site_group VARCHAR2(32) NOT NULL,
-  site_source VARCHAR2(32) NOT NULL,
-  site_language VARCHAR2(32) NOT NULL,
-  site_protocol VARCHAR2(32) NOT NULL,
-  site_domain VARCHAR2(255) NOT NULL,
-  site_data BLOB NOT NULL,
-  site_forward NUMBER(1) NOT NULL,
-  site_config BLOB NOT NULL
-);
-ALTER TABLE &mw_prefix.sites ADD CONSTRAINT &mw_prefix.sites_pk PRIMARY KEY (site_id);
-CREATE UNIQUE INDEX &mw_prefix.sites_u01 ON &mw_prefix.sites (site_global_key);
-CREATE INDEX &mw_prefix.sites_i01 ON &mw_prefix.sites (site_type);
-CREATE INDEX &mw_prefix.sites_i02 ON &mw_prefix.sites (site_group);
-CREATE INDEX &mw_prefix.sites_i03 ON &mw_prefix.sites (site_source);
-CREATE INDEX &mw_prefix.sites_i04 ON &mw_prefix.sites (site_language);
-CREATE INDEX &mw_prefix.sites_i05 ON &mw_prefix.sites (site_protocol);
-CREATE INDEX &mw_prefix.sites_i06 ON &mw_prefix.sites (site_domain);
-CREATE INDEX &mw_prefix.sites_i07 ON &mw_prefix.sites (site_forward);
-
-CREATE TABLE &mw_prefix.site_identifiers (
-  si_site NUMBER NOT NULL,
-  si_type VARCHAR2(32) NOT NULL,
-  si_key VARCHAR2(32) NOT NULL
-);
-CREATE UNIQUE INDEX &mw_prefix.site_identifiers_u01 ON &mw_prefix.site_identifiers (si_type, si_key);
-CREATE INDEX &mw_prefix.site_identifiers_i01 ON &mw_prefix.site_identifiers (si_site);
-CREATE INDEX &mw_prefix.site_identifiers_i02 ON &mw_prefix.site_identifiers (si_key);
diff --git a/maintenance/oracle/archives/patch-slot-origin.sql b/maintenance/oracle/archives/patch-slot-origin.sql
deleted file mode 100644 (file)
index 1b398cd..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
---
--- Replace slot_inherited with slot_origin.
---
--- NOTE: There is no release that has slot_inherited. This is only needed to transition between
--- snapshot versions of 1.30.
---
--- NOTE: No code that writes to the slots table was merge yet, the table is assumed to be empty.
---
-DROP INDEX &mw_prefix.slot_role_inherited;
-
-ALTER TABLE &mw_prefix.slots DROP COLUMN slot_inherited;
-ALTER TABLE &mw_prefix.slots ADD ( slot_origin NUMBER NOT NULL );
-
-CREATE INDEX &mw_prefix.slot_revision_origin_role ON &mw_prefix.slots (slot_revision_id, slot_origin, slot_role_id);
diff --git a/maintenance/oracle/archives/patch-slot_roles.sql b/maintenance/oracle/archives/patch-slot_roles.sql
deleted file mode 100644 (file)
index 960cfbf..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-CREATE SEQUENCE slot_roles_role_id_seq;
-CREATE TABLE &mw_prefix.slot_roles (
-  role_id NUMBER NOT NULL,
-  role_name VARCHAR2(64) NOT NULL
-);
-
-ALTER TABLE &mw_prefix.slot_roles ADD CONSTRAINT &mw_prefix.slot_roles_pk PRIMARY KEY (role_id);
-
-CREATE UNIQUE INDEX &mw_prefix.role_name_u01 ON &mw_prefix.slot_roles (role_name);
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.slot_roles_seq_trg BEFORE INSERT ON &mw_prefix.slot_roles
-       FOR EACH ROW WHEN (new.role_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(slot_roles_role_id_seq.nextval, :new.role_id);
-END;
-/*$mw$*/
\ No newline at end of file
diff --git a/maintenance/oracle/archives/patch-slots.sql b/maintenance/oracle/archives/patch-slots.sql
deleted file mode 100644 (file)
index fde35d5..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-CREATE TABLE &mw_prefix.slots (
-  slot_revision_id NUMBER NOT NULL,
-  slot_role_id NUMBER NOT NULL,
-  slot_content_id NUMBER NOT NULL,
-  slot_origin NUMBER NOT NULL
-);
-
-ALTER TABLE &mw_prefix.slots ADD CONSTRAINT &mw_prefix.slots_pk PRIMARY KEY (slot_revision_id, slot_role_id);
-
-CREATE INDEX &mw_prefix.slot_revision_origin_role ON &mw_prefix.slots (slot_revision_id, slot_origin, slot_role_id);
diff --git a/maintenance/oracle/archives/patch-ss_admins.sql b/maintenance/oracle/archives/patch-ss_admins.sql
deleted file mode 100644 (file)
index c2e9242..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.site_stats DROP COLUMN ss_admins;
-
diff --git a/maintenance/oracle/archives/patch-testrun.sql b/maintenance/oracle/archives/patch-testrun.sql
deleted file mode 100644 (file)
index 84facab..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
---
--- Optional tables for parserTests recording mode
--- With --record option, success data will be saved to these tables,
--- and comparisons of what's changed from the previous run will be
--- displayed at the end of each run.
---
--- defines must comply with ^define\s*([^\s=]*)\s*=\s?'\{\$([^\}]*)\}';
-define mw_prefix='{$wgDBprefix}';
-
-DROP TABLE &mw_prefix.testitem CASCADE CONSTRAINTS;
-DROP TABLE &mw_prefix.testrun CASCADE CONSTRAINTS;
-
-CREATE SEQUENCE testrun_tr_id_seq;
-CREATE TABLE &mw_prefix.testrun (
-  tr_id NUMBER NOT NULL,
-  tr_date DATE,
-  tr_mw_version BLOB,
-  tr_php_version BLOB,
-  tr_db_version BLOB,
-  tr_uname BLOB,
-);
-ALTER TABLE &mw_prefix.testrun ADD CONSTRAINT &mw_prefix.testrun_pk PRIMARY KEY (tr_id);
-CREATE OR REPLACE TRIGGER &mw_prefix.testrun_bir
-BEFORE UPDATE FOR EACH ROW
-ON &mw_prefix.testrun
-BEGIN
-  SELECT testrun_tr_id_seq.NEXTVAL into :NEW.tr_id FROM dual;
-END;
-
-CREATE TABLE /*$wgDBprefix*/testitem (
-  ti_run NUMBER NOT NULL REFERENCES &mw_prefix.testrun (tr_id) ON DELETE CASCADE,
-  ti_name VARCHAR22(255),
-  ti_success NUMBER(1)
-);
-CREATE UNIQUE INDEX &mw_prefix.testitem_u01 ON &mw_prefix.testitem (ti_run, ti_name);
-CREATE UNIQUE INDEX &mw_prefix.testitem_u01 ON &mw_prefix.testitem (ti_run, ti_success);
-
diff --git a/maintenance/oracle/archives/patch-ufg_group-length-increase-255.sql b/maintenance/oracle/archives/patch-ufg_group-length-increase-255.sql
deleted file mode 100644 (file)
index 6a4a751..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-/*$mw$*/
-BEGIN
-       EXECUTE IMMEDIATE 'ALTER TABLE &mw_prefix.user_former_groups MODIFY ufg_group VARCHAR2(255) NOT NULL';
-EXCEPTION WHEN OTHERS THEN
-       IF (SQLCODE = -01442) THEN NULL; ELSE RAISE; END IF;
-END;
-/*$mw$*/
diff --git a/maintenance/oracle/archives/patch-ug_group-length-increase-255.sql b/maintenance/oracle/archives/patch-ug_group-length-increase-255.sql
deleted file mode 100644 (file)
index 00a5e7b..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-/*$mw$*/
-BEGIN
-       EXECUTE IMMEDIATE 'ALTER TABLE &mw_prefix.user_groups MODIFY ug_group VARCHAR2(255) NOT NULL';
-EXCEPTION WHEN OTHERS THEN
-       IF (SQLCODE = -01442) THEN NULL; ELSE RAISE; END IF;
-END;
-/*$mw$*/
diff --git a/maintenance/oracle/archives/patch-up_property.sql b/maintenance/oracle/archives/patch-up_property.sql
deleted file mode 100644 (file)
index c8e2dd9..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.user_properties MODIFY up_property varchar2(255);
diff --git a/maintenance/oracle/archives/patch-uploadstash-us_props.sql b/maintenance/oracle/archives/patch-uploadstash-us_props.sql
deleted file mode 100644 (file)
index 8962dc7..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.uploadstash ADD us_props BLOB;
-
diff --git a/maintenance/oracle/archives/patch-uploadstash.sql b/maintenance/oracle/archives/patch-uploadstash.sql
deleted file mode 100644 (file)
index 3e37cef..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-CREATE SEQUENCE uploadstash_us_id_seq;
-CREATE TABLE &mw_prefix.uploadstash (
-       us_id                 NUMBER       NOT NULL,
-  us_user               NUMBER          DEFAULT 0 NOT NULL,
-       us_key                                                          VARCHAR2(255) NOT NULL,
-       us_orig_path                                    VARCHAR2(255) NOT NULL,
-       us_path                                                         VARCHAR2(255) NOT NULL,
-       us_source_type                          VARCHAR2(50),
-  us_timestamp          TIMESTAMP(6) WITH TIME ZONE,
-       us_status                                                       VARCHAR2(50) NOT NULL,
-       us_size                                                         NUMBER NOT NULL,
-       us_sha1                                                         VARCHAR2(32) NOT NULL,
-       us_mime                                                         VARCHAR2(255),
-  us_media_type         VARCHAR2(32) DEFAULT NULL,
-       us_image_width                          NUMBER,
-       us_image_height                         NUMBER,
-       us_image_bits                                   NUMBER
-);
-ALTER TABLE &mw_prefix.uploadstash ADD CONSTRAINT &mw_prefix.uploadstash_pk PRIMARY KEY (us_id);
-ALTER TABLE &mw_prefix.uploadstash ADD CONSTRAINT &mw_prefix.uploadstash_fk1 FOREIGN KEY (us_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-CREATE INDEX &mw_prefix.uploadstash_i01 ON &mw_prefix.uploadstash (us_user);
-CREATE INDEX &mw_prefix.uploadstash_i02 ON &mw_prefix.uploadstash (us_timestamp);
-CREATE UNIQUE INDEX &mw_prefix.uploadstash_u01 ON &mw_prefix.uploadstash (us_key);
diff --git a/maintenance/oracle/archives/patch-us_chunk_inx_field.sql b/maintenance/oracle/archives/patch-us_chunk_inx_field.sql
deleted file mode 100644 (file)
index 43ee16e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.uploadstash ADD us_chunk_inx              NUMBER;
-
diff --git a/maintenance/oracle/archives/patch-user_email_index.sql b/maintenance/oracle/archives/patch-user_email_index.sql
deleted file mode 100644 (file)
index e34d865..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-CREATE INDEX &mw_prefix.mwuser_i02 ON &mw_prefix.mwuser (user_email);
-
diff --git a/maintenance/oracle/archives/patch-user_former_groups.sql b/maintenance/oracle/archives/patch-user_former_groups.sql
deleted file mode 100644 (file)
index c14824e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-CREATE TABLE &mw_prefix.user_former_groups (
-  ufg_user   NUMBER      DEFAULT 0 NOT NULL,
-  ufg_group  VARCHAR2(255)     NOT NULL
-);
-ALTER TABLE &mw_prefix.user_former_groups ADD CONSTRAINT &mw_prefix.user_former_groups_fk1 FOREIGN KEY (ufg_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.user_former_groups_u01 ON &mw_prefix.user_former_groups (ufg_user,ufg_group);
-
diff --git a/maintenance/oracle/archives/patch-user_groups-ug_expiry.sql b/maintenance/oracle/archives/patch-user_groups-ug_expiry.sql
deleted file mode 100644 (file)
index d5376a3..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.user_groups ADD (
-ug_expiry TIMESTAMP(6) WITH TIME ZONE  NULL
-);
-DROP INDEX IF EXISTS &mw_prefix.user_groups_u01;
-ALTER TABLE &mw_prefix.user_groups ADD CONSTRAINT &mw_prefix.user_groups_pk PRIMARY KEY (ug_user,ug_group);
-CREATE INDEX &mw_prefix.user_groups_i02 ON &mw_prefix.user_groups (ug_expiry);
diff --git a/maintenance/oracle/archives/patch-user_password_expire.sql b/maintenance/oracle/archives/patch-user_password_expire.sql
deleted file mode 100644 (file)
index 824cc82..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.mwuser ADD user_password_expires TIMESTAMP(6) WITH TIME ZONE;
diff --git a/maintenance/oracle/archives/patch-watchlist-wl_id.sql b/maintenance/oracle/archives/patch-watchlist-wl_id.sql
deleted file mode 100644 (file)
index 4f7180d..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.watchlist ADD (
-wl_id NUMBER NOT NULL,
-);
-ALTER TABLE &mw_prefix.watchlist ADD CONSTRAINT &mw_prefix.watchlist_pk PRIMARY KEY (wl_id);
diff --git a/maintenance/oracle/archives/patch_16_17_schema_changes.sql b/maintenance/oracle/archives/patch_16_17_schema_changes.sql
deleted file mode 100644 (file)
index dfaaf5c..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.archive MODIFY ar_user DEFAULT 0 NOT NULL;
-ALTER TABLE &mw_prefix.archive MODIFY ar_deleted CHAR(1);
-CREATE INDEX &mw_prefix.archive_i03 ON &mw_prefix.archive (ar_rev_id);
-
-ALTER TABLE &mw_prefix.page MODIFY page_is_redirect default '0';
-ALTER TABLE &mw_prefix.page MODIFY page_is_new default '0';
-ALTER TABLE &mw_prefix.page MODIFY page_latest default 0;
-ALTER TABLE &mw_prefix.page MODIFY page_len default 0;
-
-ALTER TABLE &mw_prefix.categorylinks MODIFY cl_sortkey VARCHAR2(230);
-ALTER TABLE &mw_prefix.categorylinks ADD cl_sortkey_prefix VARCHAR2(255) DEFAULT '' NOT NULL;
-ALTER TABLE &mw_prefix.categorylinks ADD cl_collation VARCHAR2(32) DEFAULT '' NOT NULL;
-ALTER TABLE &mw_prefix.categorylinks ADD cl_type VARCHAR2(6) DEFAULT 'page' NOT NULL;
-DROP INDEX &mw_prefix.categorylinks_i01;
-CREATE INDEX &mw_prefix.categorylinks_i01 ON &mw_prefix.categorylinks (cl_to,cl_type,cl_sortkey,cl_from);
-CREATE INDEX &mw_prefix.categorylinks_i03 ON &mw_prefix.categorylinks (cl_collation);
-
-ALTER TABLE &mw_prefix.filearchive MODIFY fa_deleted_user DEFAULT 0 NOT NULL;
-ALTER TABLE &mw_prefix.filearchive MODIFY fa_size DEFAULT 0;
-ALTER TABLE &mw_prefix.filearchive MODIFY fa_width DEFAULT 0;
-ALTER TABLE &mw_prefix.filearchive MODIFY fa_height DEFAULT 0;
-ALTER TABLE &mw_prefix.filearchive MODIFY fa_bits DEFAULT 0 NOT NULL;
-ALTER TABLE &mw_prefix.filearchive MODIFY fa_user DEFAULT 0 NOT NULL;
-ALTER TABLE &mw_prefix.filearchive MODIFY fa_deleted DEFAULT 0;
-
-ALTER TABLE &mw_prefix.image MODIFY img_size DEFAULT 0;
-ALTER TABLE &mw_prefix.image MODIFY img_width DEFAULT 0;
-ALTER TABLE &mw_prefix.image MODIFY img_height DEFAULT 0;
-ALTER TABLE &mw_prefix.image MODIFY img_bits DEFAULT 0 NOT NULL;
-ALTER TABLE &mw_prefix.image MODIFY img_user DEFAULT 0 NOT NULL;
-
-ALTER TABLE &mw_prefix.interwiki ADD iw_api BLOB DEFAULT EMPTY_BLOB();
-ALTER TABLE &mw_prefix.interwiki MODIFY iw_api DEFAULT NULL NOT NULL;
-ALTER TABLE &mw_prefix.interwiki ADD iw_wikiid VARCHAR2(64);
-
-ALTER TABLE &mw_prefix.ipblocks MODIFY ipb_user DEFAULT 0 NOT NULL;
-ALTER TABLE &mw_prefix.ipblocks MODIFY ipb_by DEFAULT 0;
-
-CREATE TABLE &mw_prefix.iwlinks (
-  iwl_from NUMBER DEFAULT 0 NOT NULL,
-  iwl_prefix VARCHAR2(20) DEFAULT '' NOT NULL,
-  iwl_title VARCHAR2(255) DEFAULT '' NOT NULL
-);
-CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui01 ON &mw_prefix.iwlinks (iwl_from, iwl_prefix, iwl_title);
-CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui02 ON &mw_prefix.iwlinks (iwl_prefix, iwl_title, iwl_from);
-
-ALTER TABLE &mw_prefix.logging MODIFY log_user DEFAULT 0 NOT NULL;
-ALTER TABLE &mw_prefix.logging MODIFY log_deleted CHAR(1);
-
-CREATE TABLE &mw_prefix.module_deps (
-  md_module VARCHAR2(255) NOT NULL,
-  md_skin VARCHAR2(32) NOT NULL,
-  md_deps BLOB NOT NULL
-);
-CREATE UNIQUE INDEX &mw_prefix.module_deps_u01 ON &mw_prefix.module_deps (md_module, md_skin);
-
-ALTER TABLE &mw_prefix.oldimage MODIFY oi_name DEFAULT 0;
-ALTER TABLE &mw_prefix.oldimage MODIFY oi_size DEFAULT 0;
-ALTER TABLE &mw_prefix.oldimage MODIFY oi_width DEFAULT 0;
-ALTER TABLE &mw_prefix.oldimage MODIFY oi_height DEFAULT 0;
-ALTER TABLE &mw_prefix.oldimage MODIFY oi_bits DEFAULT 0;
-ALTER TABLE &mw_prefix.oldimage MODIFY oi_user DEFAULT 0 NOT NULL;
-
-ALTER TABLE &mw_prefix.querycache MODIFY qc_value DEFAULT 0;
-
-ALTER TABLE &mw_prefix.recentchanges MODIFY rc_user DEFAULT 0 NOT NULL;
-ALTER TABLE &mw_prefix.recentchanges MODIFY rc_cur_id DEFAULT 0 NOT NULL;
-ALTER TABLE &mw_prefix.recentchanges MODIFY rc_this_oldid DEFAULT 0;
-ALTER TABLE &mw_prefix.recentchanges MODIFY rc_last_oldid DEFAULT 0;
-ALTER TABLE &mw_prefix.recentchanges MODIFY rc_moved_to_ns DEFAULT 0 NOT NULL;
-ALTER TABLE &mw_prefix.recentchanges MODIFY rc_deleted CHAR(1);
-ALTER TABLE &mw_prefix.recentchanges MODIFY rc_logid DEFAULT 0;
-
-ALTER TABLE &mw_prefix.revision MODIFY rev_page NOT NULL;
-ALTER TABLE &mw_prefix.revision MODIFY rev_user DEFAULT 0;
-
-ALTER TABLE &mw_prefix.updatelog ADD ul_value BLOB;
-
-ALTER TABLE &mw_prefix.user_groups MODIFY ug_user DEFAULT 0 NOT NULL;
-
-ALTER TABLE &mw_prefix.user_newtalk MODIFY user_id DEFAULT 0;
-
diff --git a/maintenance/oracle/archives/patch_create_17_functions.sql b/maintenance/oracle/archives/patch_create_17_functions.sql
deleted file mode 100644 (file)
index 6c9c954..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-/*$mw$*/
-CREATE OR REPLACE PROCEDURE duplicate_table(p_tabname   IN VARCHAR2,
-                                            p_oldprefix IN VARCHAR2,
-                                            p_newprefix IN VARCHAR2,
-                                            p_temporary IN BOOLEAN) IS
-  e_table_not_exist EXCEPTION;
-  PRAGMA EXCEPTION_INIT(e_table_not_exist, -00942);
-  l_temp_ei_sql VARCHAR2(2000);
-BEGIN
-  BEGIN
-    EXECUTE IMMEDIATE 'DROP TABLE ' || p_newprefix || p_tabname ||
-                      ' CASCADE CONSTRAINTS';
-  EXCEPTION
-    WHEN e_table_not_exist THEN
-      NULL;
-  END;
-  IF (p_temporary) THEN
-    EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE ' || p_newprefix ||
-                      p_tabname || ' AS SELECT * FROM ' || p_oldprefix ||
-                      p_tabname || ' WHERE ROWNUM = 0';
-  ELSE
-    EXECUTE IMMEDIATE 'CREATE TABLE ' || p_newprefix || p_tabname ||
-                      ' AS SELECT * FROM ' || p_oldprefix || p_tabname ||
-                      ' WHERE ROWNUM = 0';
-  END IF;
-  FOR rc IN (SELECT column_name, data_default
-               FROM user_tab_columns
-              WHERE table_name = p_oldprefix || p_tabname
-                AND data_default IS NOT NULL) LOOP
-    EXECUTE IMMEDIATE 'ALTER TABLE ' || p_newprefix || p_tabname ||
-                      ' MODIFY ' || rc.column_name || ' DEFAULT ' ||
-                      SUBSTR(rc.data_default, 1, 2000);
-  END LOOP;
-  FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('CONSTRAINT',
-                                                                          constraint_name),
-                                                    32767,
-                                                    1),
-                                    USER || '"."' || p_oldprefix,
-                                    USER || '"."' || p_newprefix),
-                            '"' || constraint_name || '"',
-                            '"' || p_newprefix || constraint_name || '"') DDLVC2,
-                    constraint_name
-               FROM user_constraints uc
-              WHERE table_name = p_oldprefix || p_tabname
-                AND constraint_type = 'P') LOOP
-    l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
-    l_temp_ei_sql := SUBSTR(l_temp_ei_sql, 1, INSTR(l_temp_ei_sql, ')', INSTR(l_temp_ei_sql, 'PRIMARY KEY')+1)+1);
-    EXECUTE IMMEDIATE l_temp_ei_sql;
-  END LOOP;
-  IF (NOT p_temporary) THEN
-  FOR rc IN (SELECT REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('REF_CONSTRAINT',
-                                                                  constraint_name),
-                                            32767,
-                                            1),
-                            USER || '"."' || p_oldprefix,
-                            USER || '"."' || p_newprefix) DDLVC2,
-                    constraint_name
-               FROM user_constraints uc
-              WHERE table_name = p_oldprefix || p_tabname
-                AND constraint_type = 'R') LOOP
-    EXECUTE IMMEDIATE rc.ddlvc2;
-  END LOOP;
-  END IF;
-  FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('INDEX',
-                                                                          index_name),
-                                                    32767,
-                                                    1),
-                                    USER || '"."' || p_oldprefix,
-                                    USER || '"."' || p_newprefix),
-                            '"' || index_name || '"',
-                            '"' || p_newprefix || index_name || '"') DDLVC2,
-                    index_name,
-                    index_type
-               FROM user_indexes ui
-              WHERE table_name = p_oldprefix || p_tabname
-                AND index_type NOT IN ('LOB', 'DOMAIN')
-                AND NOT EXISTS
-              (SELECT NULL
-                       FROM user_constraints
-                      WHERE table_name = ui.table_name
-                        AND constraint_name = ui.index_name)) LOOP
-    l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
-    l_temp_ei_sql := SUBSTR(l_temp_ei_sql, 1, INSTR(l_temp_ei_sql, ')', INSTR(l_temp_ei_sql, '"' || USER || '"."' || p_newprefix || '"')+1)+1);
-    EXECUTE IMMEDIATE l_temp_ei_sql;
-  END LOOP;
-  FOR rc IN (SELECT REPLACE(REPLACE(UPPER(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('TRIGGER',
-                                                                                trigger_name),
-                                                          32767,
-                                                          1)),
-                                    USER || '"."' || p_oldprefix,
-                                    USER || '"."' || p_newprefix),
-                            ' ON ' || p_oldprefix || p_tabname,
-                            ' ON ' || p_newprefix || p_tabname) DDLVC2,
-                    trigger_name
-               FROM user_triggers
-              WHERE table_name = p_oldprefix || p_tabname) LOOP
-    l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'ALTER ') - 1);
-    dbms_output.put_line(l_temp_ei_sql);
-    EXECUTE IMMEDIATE l_temp_ei_sql;
-  END LOOP;
-END;
-/*$mw$*/
-
-CREATE OR REPLACE TYPE GET_OUTPUT_TYPE IS TABLE OF VARCHAR2(255);
-
-/*$mw$*/
-CREATE OR REPLACE FUNCTION GET_OUTPUT_LINES RETURN GET_OUTPUT_TYPE PIPELINED AS
-  v_line VARCHAR2(255);
-  v_status INTEGER := 0;
-BEGIN
-
-  LOOP
-    DBMS_OUTPUT.GET_LINE(v_line, v_status);
-    IF (v_status = 0) THEN RETURN; END IF;
-    PIPE ROW (v_line);
-  END LOOP;
-  RETURN;
-EXCEPTION
-  WHEN OTHERS THEN
-    RETURN;
-END;
-/*$mw$*/
-
diff --git a/maintenance/oracle/archives/patch_fk_rename_deferred.sql b/maintenance/oracle/archives/patch_fk_rename_deferred.sql
deleted file mode 100644 (file)
index ca9c997..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-/*$mw$*/
-BEGIN
--- drop all, recreate manual in case anyone was missing
-  FOR cc1 IN (SELECT uc.table_name,
-                     uc.constraint_name
-                FROM user_constraints  uc
-               WHERE uc.constraint_type = 'R') LOOP
-    EXECUTE IMMEDIATE 'ALTER TABLE &mw_prefix.' || cc1.table_name ||
-                      ' DROP CONSTRAINT ' || cc1.constraint_name;
-  END LOOP;
-END;
-/*$mw$*/
-
-ALTER TABLE &mw_prefix.user_groups ADD CONSTRAINT &mw_prefix.user_groups_fk1 FOREIGN KEY (ug_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.user_newtalk ADD CONSTRAINT &mw_prefix.user_newtalk_fk1 FOREIGN KEY (user_id) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_fk1 FOREIGN KEY (rev_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_fk2 FOREIGN KEY (rev_user) REFERENCES &mw_prefix.mwuser(user_id) DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.archive ADD CONSTRAINT &mw_prefix.archive_fk1 FOREIGN KEY (ar_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.pagelinks ADD CONSTRAINT &mw_prefix.pagelinks_fk1 FOREIGN KEY (pl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.templatelinks ADD CONSTRAINT &mw_prefix.templatelinks_fk1 FOREIGN KEY (tl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.imagelinks ADD CONSTRAINT &mw_prefix.imagelinks_fk1 FOREIGN KEY (il_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.categorylinks ADD CONSTRAINT &mw_prefix.categorylinks_fk1 FOREIGN KEY (cl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.externallinks ADD CONSTRAINT &mw_prefix.externallinks_fk1 FOREIGN KEY (el_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.langlinks ADD CONSTRAINT &mw_prefix.langlinks_fk1 FOREIGN KEY (ll_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_fk1 FOREIGN KEY (ipb_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_fk2 FOREIGN KEY (ipb_by) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.image ADD CONSTRAINT &mw_prefix.image_fk1 FOREIGN KEY (img_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.oldimage ADD CONSTRAINT &mw_prefix.oldimage_fk1 FOREIGN KEY (oi_name) REFERENCES &mw_prefix.image(img_name) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.oldimage ADD CONSTRAINT &mw_prefix.oldimage_fk2 FOREIGN KEY (oi_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk1 FOREIGN KEY (fa_deleted_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk2 FOREIGN KEY (fa_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk1 FOREIGN KEY (rc_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk2 FOREIGN KEY (rc_cur_id) REFERENCES &mw_prefix.page(page_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.watchlist ADD CONSTRAINT &mw_prefix.watchlist_fk1 FOREIGN KEY (wl_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.logging ADD CONSTRAINT &mw_prefix.logging_fk1 FOREIGN KEY (log_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.redirect ADD CONSTRAINT &mw_prefix.redirect_fk1 FOREIGN KEY (rd_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_fk1 FOREIGN KEY (pr_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-
diff --git a/maintenance/oracle/archives/patch_namespace_defaults.sql b/maintenance/oracle/archives/patch_namespace_defaults.sql
deleted file mode 100644 (file)
index 24c9564..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.page MODIFY page_namespace DEFAULT 0;
-ALTER TABLE &mw_prefix.archive MODIFY ar_namespace DEFAULT 0;
-ALTER TABLE &mw_prefix.pagelinks MODIFY pl_namespace DEFAULT 0;
-ALTER TABLE &mw_prefix.templatelinks MODIFY tl_namespace DEFAULT 0;
-ALTER TABLE &mw_prefix.recentchanges MODIFY rc_namespace DEFAULT 0;
-ALTER TABLE &mw_prefix.querycache MODIFY qc_namespace DEFAULT 0;
-ALTER TABLE &mw_prefix.logging MODIFY log_namespace DEFAULT 0;
-ALTER TABLE &mw_prefix.job MODIFY job_namespace DEFAULT 0;
-ALTER TABLE &mw_prefix.redirect MODIFY rd_namespace DEFAULT 0;
-ALTER TABLE &mw_prefix.protected_titles MODIFY pt_namespace DEFAULT 0;
-ALTER TABLE &mw_prefix.archive MODIFY ar_namespace DEFAULT 0;
-ALTER TABLE &mw_prefix.archive MODIFY ar_namespace DEFAULT 0;
-ALTER TABLE &mw_prefix.archive MODIFY ar_namespace DEFAULT 0;
-ALTER TABLE &mw_prefix.archive MODIFY ar_namespace DEFAULT 0;
-
diff --git a/maintenance/oracle/archives/patch_rebuild_dupfunc.sql b/maintenance/oracle/archives/patch_rebuild_dupfunc.sql
deleted file mode 100644 (file)
index 56ee5b3..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-/*$mw$*/
-CREATE OR REPLACE PROCEDURE duplicate_table(p_tabname   IN VARCHAR2,
-                                            p_oldprefix IN VARCHAR2,
-                                            p_newprefix IN VARCHAR2,
-                                            p_temporary IN BOOLEAN) IS
-  e_table_not_exist EXCEPTION;
-  PRAGMA EXCEPTION_INIT(e_table_not_exist, -00942);
-  l_temp_ei_sql VARCHAR2(2000);
-  l_temporary   BOOLEAN := p_temporary;
-BEGIN
-  BEGIN
-    EXECUTE IMMEDIATE 'DROP TABLE ' || p_newprefix || p_tabname ||
-                      ' CASCADE CONSTRAINTS PURGE';
-  EXCEPTION
-    WHEN e_table_not_exist THEN
-      NULL;
-  END;
-  IF (p_tabname = 'SEARCHINDEX') THEN
-    l_temporary := FALSE;
-  END IF;
-  IF (l_temporary) THEN
-    EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE ' || p_newprefix ||
-                      p_tabname ||
-                      ' ON COMMIT PRESERVE ROWS AS SELECT * FROM ' ||
-                      p_oldprefix || p_tabname || ' WHERE ROWNUM = 0';
-  ELSE
-    EXECUTE IMMEDIATE 'CREATE TABLE ' || p_newprefix || p_tabname ||
-                      ' AS SELECT * FROM ' || p_oldprefix || p_tabname ||
-                      ' WHERE ROWNUM = 0';
-  END IF;
-  FOR rc IN (SELECT column_name, data_default
-               FROM user_tab_columns
-              WHERE table_name = p_oldprefix || p_tabname
-                AND data_default IS NOT NULL) LOOP
-    EXECUTE IMMEDIATE 'ALTER TABLE ' || p_newprefix || p_tabname ||
-                      ' MODIFY ' || rc.column_name || ' DEFAULT ' ||
-                      SUBSTR(rc.data_default, 1, 2000);
-  END LOOP;
-  FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('CONSTRAINT',
-                                                                          constraint_name),
-                                                    32767,
-                                                    1),
-                                    USER || '"."' || p_oldprefix,
-                                    USER || '"."' || p_newprefix),
-                            '"' || constraint_name || '"',
-                            '"' || p_newprefix || constraint_name || '"') DDLVC2,
-                    constraint_name
-               FROM user_constraints uc
-              WHERE table_name = p_oldprefix || p_tabname
-                AND constraint_type = 'P') LOOP
-    l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
-    l_temp_ei_sql := SUBSTR(l_temp_ei_sql,
-                            1,
-                            INSTR(l_temp_ei_sql,
-                                  ')',
-                                  INSTR(l_temp_ei_sql, 'PRIMARY KEY') + 1) + 1);
-    IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
-      EXECUTE IMMEDIATE l_temp_ei_sql;
-    END IF;
-  END LOOP;
-  IF (NOT l_temporary) THEN
-    FOR rc IN (SELECT REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('REF_CONSTRAINT',
-                                                                    constraint_name),
-                                              32767,
-                                              1),
-                              USER || '"."' || p_oldprefix,
-                              USER || '"."' || p_newprefix) DDLVC2,
-                      constraint_name
-                 FROM user_constraints uc
-                WHERE table_name = p_oldprefix || p_tabname
-                  AND constraint_type = 'R') LOOP
-      IF nvl(length(l_temp_ei_sql), 0) > 0 AND
-         INSTR(l_temp_ei_sql, 'PRIMARY KEY') = 0 THEN
-        EXECUTE IMMEDIATE l_temp_ei_sql;
-      END IF;
-    END LOOP;
-  END IF;
-  FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('INDEX',
-                                                                          index_name),
-                                                    32767,
-                                                    1),
-                                    USER || '"."' || p_oldprefix,
-                                    USER || '"."' || p_newprefix),
-                            '"' || index_name || '"',
-                            '"' || p_newprefix || index_name || '"') DDLVC2,
-                    index_name,
-                    index_type
-               FROM user_indexes ui
-              WHERE table_name = p_oldprefix || p_tabname
-                AND index_type NOT IN ('LOB', 'DOMAIN')
-                AND NOT EXISTS
-              (SELECT NULL
-                       FROM user_constraints
-                      WHERE table_name = ui.table_name
-                        AND constraint_name = ui.index_name)) LOOP
-    l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
-    l_temp_ei_sql := SUBSTR(l_temp_ei_sql,
-                            1,
-                            INSTR(l_temp_ei_sql,
-                                  ')',
-                                  INSTR(l_temp_ei_sql,
-                                        '"' || USER || '"."' || p_newprefix || '"') + 1) + 1);
-    IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
-      EXECUTE IMMEDIATE l_temp_ei_sql;
-    END IF;
-  END LOOP;
-  FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('INDEX',
-                                                                          index_name),
-                                                    32767,
-                                                    1),
-                                    USER || '"."' || p_oldprefix,
-                                    USER || '"."' || p_newprefix),
-                            '"' || index_name || '"',
-                            '"' || p_newprefix || index_name || '"') DDLVC2,
-                    index_name,
-                    index_type
-               FROM user_indexes ui
-              WHERE table_name = p_oldprefix || p_tabname
-                AND index_type = 'DOMAIN'
-                AND NOT EXISTS
-              (SELECT NULL
-                       FROM user_constraints
-                      WHERE table_name = ui.table_name
-                        AND constraint_name = ui.index_name)) LOOP
-    l_temp_ei_sql := rc.ddlvc2;
-    IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
-      EXECUTE IMMEDIATE l_temp_ei_sql;
-    END IF;
-  END LOOP;
-  FOR rc IN (SELECT REPLACE(REPLACE(UPPER(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('TRIGGER',
-                                                                                trigger_name),
-                                                          32767,
-                                                          1)),
-                                    USER || '"."' || p_oldprefix,
-                                    USER || '"."' || p_newprefix),
-                            ' ON ' || p_oldprefix || p_tabname,
-                            ' ON ' || p_newprefix || p_tabname) DDLVC2,
-                    trigger_name
-               FROM user_triggers
-              WHERE table_name = p_oldprefix || p_tabname) LOOP
-    l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'ALTER ') - 1);
-    IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
-      EXECUTE IMMEDIATE l_temp_ei_sql;
-    END IF;
-  END LOOP;
-END;
-
-/*$mw$*/
-
diff --git a/maintenance/oracle/archives/patch_recentchanges_fk2_cascade.sql b/maintenance/oracle/archives/patch_recentchanges_fk2_cascade.sql
deleted file mode 100644 (file)
index 4550951..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.recentchanges DROP CONSTRAINT &mw_prefix.recentchanges_fk2;
-ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk2 FOREIGN KEY (rc_cur_id) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-
diff --git a/maintenance/oracle/archives/patch_remove_not_null_empty_defs.sql b/maintenance/oracle/archives/patch_remove_not_null_empty_defs.sql
deleted file mode 100644 (file)
index 76e50a0..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.categorylinks MODIFY cl_sortkey_prefix DEFAULT NULL NULL;
-ALTER TABLE &mw_prefix.categorylinks MODIFY cl_collation DEFAULT NULL NULL;
-ALTER TABLE &mw_prefix.iwlinks MODIFY iwl_prefix DEFAULT NULL NULL;
-ALTER TABLE &mw_prefix.iwlinks MODIFY iwl_title DEFAULT NULL NULL;
-ALTER TABLE &mw_prefix.searchindex MODIFY si_title DEFAULT NULL NULL;
-ALTER TABLE &mw_prefix.querycachetwo MODIFY qcc_title DEFAULT NULL NULL;
-ALTER TABLE &mw_prefix.querycachetwo MODIFY qcc_titletwo DEFAULT NULL NULL;
diff --git a/maintenance/oracle/archives/patch_remove_not_null_empty_defs2.sql b/maintenance/oracle/archives/patch_remove_not_null_empty_defs2.sql
deleted file mode 100644 (file)
index f7a38a0..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-define mw_prefix='{$wgDBprefix}';
-
-ALTER TABLE &mw_prefix.ipblocks MODIFY ipb_by_text DEFAULT NULL NULL;
diff --git a/maintenance/oracle/patch_seq_names_pre1.16.sql b/maintenance/oracle/patch_seq_names_pre1.16.sql
deleted file mode 100644 (file)
index 5346b14..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
--- script for renameing sequence names to conform with <table>_<field>_seq format
-RENAME rev_rev_id_val TO revision_rev_id_seq;
-RENAME text_old_id_val TO text_old_id_seq;
-RENAME category_id_seq TO category_cat_id_seq;
-RENAME ipblocks_ipb_id_val TO ipblocks_ipb_id_seq;
-RENAME rc_rc_id_seq TO recentchanges_rc_id_seq;
-RENAME log_log_id_seq TO logging_log_id_seq;
-RENAME pr_id_val TO page_restrictions_pr_id_seq;
\ No newline at end of file
diff --git a/maintenance/oracle/tables.sql b/maintenance/oracle/tables.sql
deleted file mode 100644 (file)
index 7a8160f..0000000
+++ /dev/null
@@ -1,1262 +0,0 @@
--- defines must comply with ^define\s*([^\s=]*)\s*=\s?'\{\$([^\}]*)\}';
-define mw_prefix='{$wgDBprefix}';
-
--- Package to help with making Oracle more like other DBs with respect to
--- auto-incrementing columns.
-/*$mw$*/
-CREATE PACKAGE &mw_prefix.lastval_pkg IS
-  lastval NUMBER;
-  PROCEDURE setLastval(val IN NUMBER, field OUT NUMBER);
-  FUNCTION getLastval RETURN NUMBER;
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE PACKAGE BODY &mw_prefix.lastval_pkg IS
-  PROCEDURE setLastval(val IN NUMBER, field OUT NUMBER) IS BEGIN
-    lastval := val;
-    field := val;
-  END;
-
-  FUNCTION getLastval RETURN NUMBER IS BEGIN
-    RETURN lastval;
-  END;
-END;
-/*$mw$*/
-
-CREATE SEQUENCE user_user_id_seq;
-CREATE TABLE &mw_prefix.mwuser ( -- replace reserved word 'user'
-  user_id                   NUMBER  NOT NULL,
-  user_name                 VARCHAR2(255)     NOT NULL,
-  user_real_name            VARCHAR2(512),
-  user_password             VARCHAR2(255),
-  user_newpassword          VARCHAR2(255),
-  user_newpass_time         TIMESTAMP(6) WITH TIME ZONE,
-  user_token                VARCHAR2(32),
-  user_email                VARCHAR2(255),
-  user_email_token          VARCHAR2(32),
-  user_email_token_expires  TIMESTAMP(6) WITH TIME ZONE,
-  user_email_authenticated  TIMESTAMP(6) WITH TIME ZONE,
-  user_options              CLOB,
-  user_touched              TIMESTAMP(6) WITH TIME ZONE,
-  user_registration         TIMESTAMP(6) WITH TIME ZONE,
-  user_editcount            NUMBER,
-  user_password_expires     TIMESTAMP(6) WITH TIME ZONE
-);
-ALTER TABLE &mw_prefix.mwuser ADD CONSTRAINT &mw_prefix.mwuser_pk PRIMARY KEY (user_id);
-CREATE UNIQUE INDEX &mw_prefix.mwuser_u01 ON &mw_prefix.mwuser (user_name);
-CREATE INDEX &mw_prefix.mwuser_i01 ON &mw_prefix.mwuser (user_email_token);
-CREATE INDEX &mw_prefix.mwuser_i02 ON &mw_prefix.mwuser (user_email, user_name);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.mwuser_seq_trg BEFORE INSERT ON &mw_prefix.mwuser
-       FOR EACH ROW WHEN (new.user_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(user_user_id_seq.nextval, :new.user_id);
-END;
-/*$mw$*/
-
--- Create a dummy user to satisfy fk contraints especially with revisions
-INSERT INTO &mw_prefix.mwuser
-  (user_id, user_name, user_options, user_touched, user_registration, user_editcount)
-  VALUES (0,'Anonymous','', current_timestamp, current_timestamp,0);
-
-CREATE SEQUENCE actor_actor_id_seq;
-CREATE TABLE &mw_prefix.actor (
-  actor_id NUMBER NOT NULL,
-  actor_user NUMBER,
-  actor_name VARCHAR2(255) NOT NULL
-);
-
-ALTER TABLE &mw_prefix.actor ADD CONSTRAINT &mw_prefix.actor_pk PRIMARY KEY (actor_id);
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.actor_seq_trg BEFORE INSERT ON &mw_prefix.actor
-       FOR EACH ROW WHEN (new.actor_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(actor_actor_id_seq.nextval, :new.actor_id);
-END;
-/*$mw$*/
-
--- Create a dummy actor to satisfy fk contraints
-INSERT INTO &mw_prefix.actor (actor_id, actor_name) VALUES (0,'##Anonymous##');
-
-CREATE TABLE &mw_prefix.user_groups (
-  ug_user   NUMBER      DEFAULT 0 NOT NULL,
-  ug_group  VARCHAR2(255)     NOT NULL,
-  ug_expiry TIMESTAMP(6) WITH TIME ZONE NULL
-);
-ALTER TABLE &mw_prefix.user_groups ADD CONSTRAINT &mw_prefix.user_groups_pk PRIMARY KEY (ug_user,ug_group);
-ALTER TABLE &mw_prefix.user_groups ADD CONSTRAINT &mw_prefix.user_groups_fk1 FOREIGN KEY (ug_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE INDEX &mw_prefix.user_groups_i01 ON &mw_prefix.user_groups (ug_group);
-CREATE INDEX &mw_prefix.user_groups_i02 ON &mw_prefix.user_groups (ug_expiry);
-
-CREATE TABLE &mw_prefix.user_former_groups (
-  ufg_user   NUMBER      DEFAULT 0 NOT NULL,
-  ufg_group  VARCHAR2(255)     NOT NULL
-);
-ALTER TABLE &mw_prefix.user_former_groups ADD CONSTRAINT &mw_prefix.user_former_groups_fk1 FOREIGN KEY (ufg_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.user_former_groups_u01 ON &mw_prefix.user_former_groups (ufg_user,ufg_group);
-
-CREATE TABLE &mw_prefix.user_newtalk (
-  user_id  NUMBER DEFAULT 0 NOT NULL,
-  user_ip  VARCHAR2(40)        NULL,
-  user_last_timestamp         TIMESTAMP(6) WITH TIME ZONE
-);
-ALTER TABLE &mw_prefix.user_newtalk ADD CONSTRAINT &mw_prefix.user_newtalk_fk1 FOREIGN KEY (user_id) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE INDEX &mw_prefix.user_newtalk_i01 ON &mw_prefix.user_newtalk (user_id);
-CREATE INDEX &mw_prefix.user_newtalk_i02 ON &mw_prefix.user_newtalk (user_ip);
-
-CREATE TABLE &mw_prefix.user_properties (
-  up_user NUMBER NOT NULL,
-  up_property VARCHAR2(255) NOT NULL,
-  up_value CLOB
-);
-CREATE UNIQUE INDEX &mw_prefix.user_properties_u01 on &mw_prefix.user_properties (up_user,up_property);
-CREATE INDEX &mw_prefix.user_properties_i01 on &mw_prefix.user_properties (up_property);
-
-CREATE SEQUENCE page_page_id_seq;
-CREATE TABLE &mw_prefix.page (
-  page_id            NUMBER        NOT NULL,
-  page_namespace     NUMBER       DEFAULT 0 NOT NULL,
-  page_title         VARCHAR2(255)           NOT NULL,
-  page_restrictions  VARCHAR2(255),
-  page_is_redirect   CHAR(1)           DEFAULT '0' NOT NULL,
-  page_is_new        CHAR(1)           DEFAULT '0' NOT NULL,
-  page_random        NUMBER(15,14) NOT NULL,
-  page_touched       TIMESTAMP(6) WITH TIME ZONE,
-  page_links_updated TIMESTAMP(6) WITH TIME ZONE,
-  page_latest        NUMBER        DEFAULT 0 NOT NULL, -- FK?
-  page_len           NUMBER        DEFAULT 0 NOT NULL,
-  page_content_model VARCHAR2(32),
-  page_lang VARCHAR2(35) DEFAULT NULL
-);
-ALTER TABLE &mw_prefix.page ADD CONSTRAINT &mw_prefix.page_pk PRIMARY KEY (page_id);
-CREATE UNIQUE INDEX &mw_prefix.page_u01 ON &mw_prefix.page (page_namespace,page_title);
-CREATE INDEX &mw_prefix.page_i01 ON &mw_prefix.page (page_random);
-CREATE INDEX &mw_prefix.page_i02 ON &mw_prefix.page (page_len);
-CREATE INDEX &mw_prefix.page_i03 ON &mw_prefix.page (page_is_redirect, page_namespace, page_len);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.page_seq_trg BEFORE INSERT ON &mw_prefix.page
-       FOR EACH ROW WHEN (new.page_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(page_page_id_seq.nextval, :new.page_id);
-END;
-/*$mw$*/
-
--- Create a dummy page to satisfy fk contraints especially with revisions
-INSERT INTO &mw_prefix.page
-  VALUES (0, 0, ' ', NULL, 0, 0, 0, current_timestamp, NULL, 0, 0, NULL, NULL);
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.page_set_random BEFORE INSERT ON &mw_prefix.page
-       FOR EACH ROW WHEN (new.page_random IS NULL)
-BEGIN
-       SELECT dbms_random.value INTO :NEW.page_random FROM dual;
-END;
-/*$mw$*/
-
-CREATE SEQUENCE comment_comment_id_seq;
-CREATE TABLE &mw_prefix."COMMENT" (
-  comment_id NUMBER NOT NULL,
-  comment_hash NUMBER NOT NULL,
-  comment_text CLOB,
-  comment_data CLOB
-);
-CREATE INDEX &mw_prefix.comment_hash ON &mw_prefix."COMMENT" (comment_hash);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.comment_seq_trg BEFORE INSERT ON &mw_prefix."COMMENT"
-       FOR EACH ROW WHEN (new.comment_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(comment_comment_id_seq.nextval, :new.comment_id);
-END;
-/*$mw$*/
-
--- dummy row for FKs. Hash is intentionally wrong so CommentStore won't match it.
-INSERT INTO &mw_prefix."COMMENT" (comment_hash, comment_text) VALUES (-1, '** dummy **');
-
-CREATE SEQUENCE revision_rev_id_seq;
-CREATE TABLE &mw_prefix.revision (
-  rev_id          NUMBER      NOT NULL,
-  rev_page        NUMBER      NOT NULL,
-  rev_text_id     NUMBER          NULL,
-  rev_comment     VARCHAR2(255),
-  rev_user        NUMBER      DEFAULT 0 NOT NULL,
-  rev_user_text   VARCHAR2(255)         NOT NULL,
-  rev_timestamp   TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
-  rev_minor_edit  CHAR(1)         DEFAULT '0' NOT NULL,
-  rev_deleted     CHAR(1)         DEFAULT '0' NOT NULL,
-  rev_len         NUMBER          NULL,
-  rev_parent_id   NUMBER          DEFAULT NULL,
-  rev_sha1               VARCHAR2(32)    NULL,
-  rev_content_model VARCHAR2(32),
-  rev_content_format VARCHAR2(64)
-);
-ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_pk PRIMARY KEY (rev_id);
-ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_fk1 FOREIGN KEY (rev_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.revision ADD CONSTRAINT &mw_prefix.revision_fk2 FOREIGN KEY (rev_user) REFERENCES &mw_prefix.mwuser(user_id) DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.revision_u01 ON &mw_prefix.revision (rev_page, rev_id);
-CREATE INDEX &mw_prefix.revision_i01 ON &mw_prefix.revision (rev_timestamp);
-CREATE INDEX &mw_prefix.revision_i02 ON &mw_prefix.revision (rev_page,rev_timestamp);
-CREATE INDEX &mw_prefix.revision_i03 ON &mw_prefix.revision (rev_user,rev_timestamp);
-CREATE INDEX &mw_prefix.revision_i04 ON &mw_prefix.revision (rev_user_text,rev_timestamp);
-CREATE INDEX &mw_prefix.revision_i05 ON &mw_prefix.revision (rev_page,rev_user,rev_timestamp);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.revision_seq_trg BEFORE INSERT ON &mw_prefix.revision
-       FOR EACH ROW WHEN (new.rev_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(revision_rev_id_seq.nextval, :new.rev_id);
-END;
-/*$mw$*/
-
-CREATE TABLE &mw_prefix.revision_comment_temp (
-  revcomment_rev NUMBER NOT NULL,
-  revcomment_comment_id NUMBER NOT NULL
-);
-ALTER TABLE &mw_prefix.revision_comment_temp ADD CONSTRAINT &mw_prefix.revision_comment_temp_pk PRIMARY KEY (revcomment_rev, revcomment_comment_id);
-ALTER TABLE &mw_prefix.revision_comment_temp ADD CONSTRAINT &mw_prefix.revision_comment_temp_fk1 FOREIGN KEY (revcomment_rev) REFERENCES &mw_prefix.revision(rev_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.revision_comment_temp ADD CONSTRAINT &mw_prefix.revision_comment_temp_fk2 FOREIGN KEY (revcomment_comment_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.revcomment_rev ON &mw_prefix.revision_comment_temp (revcomment_rev);
-
-CREATE TABLE &mw_prefix.revision_actor_temp (
-  revactor_rev NUMBER NOT NULL,
-  revactor_actor NUMBER NOT NULL,
-  revactor_timestamp TIMESTAMP(6) WITH TIME ZONE NOT NULL,
-  revactor_page NUMBER NOT NULL
-);
-ALTER TABLE &mw_prefix.revision_actor_temp ADD CONSTRAINT &mw_prefix.revision_actor_temp_pk PRIMARY KEY (revactor_rev, revactor_actor);
-CREATE UNIQUE INDEX &mw_prefix.revactor_rev ON &mw_prefix.revision_actor_temp (revactor_rev);
-CREATE INDEX &mw_prefix.actor_timestamp ON &mw_prefix.revision_actor_temp (revactor_actor,revactor_timestamp);
-CREATE INDEX &mw_prefix.page_actor_timestamp ON &mw_prefix.revision_actor_temp (revactor_page,revactor_actor,revactor_timestamp);
-
-CREATE SEQUENCE text_old_id_seq;
-CREATE TABLE &mw_prefix.pagecontent ( -- replaces reserved word 'text'
-  old_id     NUMBER  NOT NULL,
-  old_text   CLOB,
-  old_flags  VARCHAR2(255)
-);
-ALTER TABLE &mw_prefix.pagecontent ADD CONSTRAINT &mw_prefix.pagecontent_pk PRIMARY KEY (old_id);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.pagecontent_seq_trg BEFORE INSERT ON &mw_prefix.pagecontent
-       FOR EACH ROW WHEN (new.old_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(text_old_id_seq.nextval, :new.old_id);
-END;
-/*$mw$*/
-
-CREATE SEQUENCE archive_ar_id_seq;
-CREATE TABLE &mw_prefix.archive (
-  ar_id          NUMBER NOT NULL,
-  ar_namespace   NUMBER    DEFAULT 0 NOT NULL,
-  ar_title       VARCHAR2(255)         NOT NULL,
-  ar_comment_id  NUMBER NOT NULL,
-  ar_user        NUMBER          DEFAULT 0 NOT NULL,
-  ar_user_text   VARCHAR2(255)         NULL,
-  ar_actor       NUMBER          DEFAULT 0 NOT NULL,
-  ar_timestamp   TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
-  ar_minor_edit  CHAR(1)         DEFAULT '0' NOT NULL,
-  ar_rev_id      NUMBER NOT NULL,
-  ar_text_id     NUMBER DEFAULT 0 NOT NULL,
-  ar_deleted     CHAR(1)      DEFAULT '0' NOT NULL,
-  ar_len         NUMBER,
-  ar_page_id     NUMBER,
-  ar_parent_id   NUMBER,
-  ar_sha1                VARCHAR2(32),
-  ar_content_model VARCHAR2(32),
-  ar_content_format VARCHAR2(64)
-);
-ALTER TABLE &mw_prefix.archive ADD CONSTRAINT &mw_prefix.archive_pk PRIMARY KEY (ar_id);
-ALTER TABLE &mw_prefix.archive ADD CONSTRAINT &mw_prefix.archive_fk1 FOREIGN KEY (ar_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.archive ADD CONSTRAINT &mw_prefix.archive_fk2 FOREIGN KEY (ar_comment_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE INDEX &mw_prefix.archive_i01 ON &mw_prefix.archive (ar_namespace,ar_title,ar_timestamp);
-CREATE INDEX &mw_prefix.archive_i02 ON &mw_prefix.archive (ar_user_text,ar_timestamp);
-CREATE INDEX &mw_prefix.ar_actor_timestamp ON &mw_prefix.archive (ar_actor,ar_timestamp);
-CREATE UNIQUE INDEX &mw_prefix.archive_i04 ON &mw_prefix.archive (ar_rev_id);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.archive_seq_trg BEFORE INSERT ON &mw_prefix.archive
-       FOR EACH ROW WHEN (new.ar_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(archive_ar_id_seq.nextval, :new.ar_id);
-END;
-/*$mw$*/
-
-
-CREATE TABLE &mw_prefix.slots (
-  slot_revision_id NUMBER NOT NULL,
-  slot_role_id NUMBER NOT NULL,
-  slot_content_id NUMBER NOT NULL,
-  slot_origin NUMBER NOT NULL
-);
-
-ALTER TABLE &mw_prefix.slots ADD CONSTRAINT &mw_prefix.slots_pk PRIMARY KEY (slot_revision_id, slot_role_id);
-
-CREATE INDEX &mw_prefix.slot_revision_origin_role ON &mw_prefix.slots (slot_revision_id, slot_origin, slot_role_id);
-
-
-CREATE SEQUENCE content_content_id_seq;
-CREATE TABLE &mw_prefix.content (
-  content_id NUMBER NOT NULL,
-  content_size NUMBER NOT NULL,
-  content_sha1 VARCHAR2(32) NOT NULL,
-  content_model NUMBER NOT NULL,
-  content_address VARCHAR2(255) NOT NULL
-);
-
-ALTER TABLE &mw_prefix.content ADD CONSTRAINT &mw_prefix.content_pk PRIMARY KEY (content_id);
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.content_seq_trg BEFORE INSERT ON &mw_prefix.content
-       FOR EACH ROW WHEN (new.content_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(content_content_id_seq.nextval, :new.content_id);
-END;
-/*$mw$*/
-
-
-CREATE SEQUENCE slot_roles_role_id_seq;
-CREATE TABLE &mw_prefix.slot_roles (
-  role_id NUMBER NOT NULL,
-  role_name VARCHAR2(64) NOT NULL
-);
-
-ALTER TABLE &mw_prefix.slot_roles ADD CONSTRAINT &mw_prefix.slot_roles_pk PRIMARY KEY (role_id);
-
-CREATE UNIQUE INDEX &mw_prefix.role_name_u01 ON &mw_prefix.slot_roles (role_name);
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.slot_roles_seq_trg BEFORE INSERT ON &mw_prefix.slot_roles
-       FOR EACH ROW WHEN (new.role_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(slot_roles_role_id_seq.nextval, :new.role_id);
-END;
-/*$mw$*/
-
-
-CREATE SEQUENCE content_models_model_id_seq;
-CREATE TABLE &mw_prefix.content_models (
-  model_id NUMBER NOT NULL,
-  model_name VARCHAR2(64) NOT NULL
-);
-
-
-ALTER TABLE &mw_prefix.content_models ADD CONSTRAINT &mw_prefix.content_models_pk PRIMARY KEY (model_id);
-
-CREATE UNIQUE INDEX &mw_prefix.model_name_u01 ON &mw_prefix.content_models (model_name);
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.content_models_seq_trg BEFORE INSERT ON &mw_prefix.content_models
-       FOR EACH ROW WHEN (new.model_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(content_models_model_id_seq.nextval, :new.model_id);
-END;
-/*$mw$*/
-
-
-CREATE TABLE &mw_prefix.pagelinks (
-  pl_from       NUMBER   NOT NULL,
-  pl_namespace  NUMBER  DEFAULT 0 NOT NULL,
-  pl_title      VARCHAR2(255)      NOT NULL
-);
-ALTER TABLE &mw_prefix.pagelinks ADD CONSTRAINT &mw_prefix.pagelinks_fk1 FOREIGN KEY (pl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.pagelinks_u01 ON &mw_prefix.pagelinks (pl_from,pl_namespace,pl_title);
-CREATE UNIQUE INDEX &mw_prefix.pagelinks_u02 ON &mw_prefix.pagelinks (pl_namespace,pl_title,pl_from);
-
-CREATE TABLE &mw_prefix.templatelinks (
-  tl_from       NUMBER  NOT NULL,
-  tl_namespace  NUMBER     DEFAULT 0 NOT NULL,
-  tl_title      VARCHAR2(255)     NOT NULL
-);
-ALTER TABLE &mw_prefix.templatelinks ADD CONSTRAINT &mw_prefix.templatelinks_fk1 FOREIGN KEY (tl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.templatelinks_u01 ON &mw_prefix.templatelinks (tl_from,tl_namespace,tl_title);
-CREATE UNIQUE INDEX &mw_prefix.templatelinks_u02 ON &mw_prefix.templatelinks (tl_namespace,tl_title,tl_from);
-
-CREATE TABLE &mw_prefix.imagelinks (
-  il_from  NUMBER  NOT NULL,
-  il_to    VARCHAR2(255)     NOT NULL
-);
-ALTER TABLE &mw_prefix.imagelinks ADD CONSTRAINT &mw_prefix.imagelinks_fk1 FOREIGN KEY (il_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.imagelinks_u01 ON &mw_prefix.imagelinks (il_from,il_to);
-CREATE UNIQUE INDEX &mw_prefix.imagelinks_u02 ON &mw_prefix.imagelinks (il_to,il_from);
-
-
-CREATE TABLE &mw_prefix.categorylinks (
-  cl_from       NUMBER      NOT NULL,
-  cl_to         VARCHAR2(255)         NOT NULL,
-  cl_sortkey    VARCHAR2(230),
-  cl_sortkey_prefix VARCHAR2(255),
-  cl_timestamp  TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
-  cl_collation VARCHAR2(32),
-  cl_type              VARCHAR2(6) DEFAULT 'page' NOT NULL
-);
-ALTER TABLE &mw_prefix.categorylinks ADD CONSTRAINT &mw_prefix.categorylinks_fk1 FOREIGN KEY (cl_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.categorylinks_u01 ON &mw_prefix.categorylinks (cl_from,cl_to);
-CREATE INDEX &mw_prefix.categorylinks_i01 ON &mw_prefix.categorylinks (cl_to,cl_type,cl_sortkey,cl_from);
-CREATE INDEX &mw_prefix.categorylinks_i02 ON &mw_prefix.categorylinks (cl_to,cl_timestamp);
-CREATE INDEX &mw_prefix.categorylinks_i03 ON &mw_prefix.categorylinks (cl_collation);
-
-CREATE SEQUENCE category_cat_id_seq;
-CREATE TABLE &mw_prefix.category (
-  cat_id NUMBER NOT NULL,
-  cat_title VARCHAR2(255) NOT NULL,
-  cat_pages NUMBER DEFAULT 0 NOT NULL,
-  cat_subcats NUMBER DEFAULT 0 NOT NULL,
-  cat_files NUMBER DEFAULT 0 NOT NULL
-);
-ALTER TABLE &mw_prefix.category ADD CONSTRAINT &mw_prefix.category_pk PRIMARY KEY (cat_id);
-CREATE UNIQUE INDEX &mw_prefix.category_u01 ON &mw_prefix.category (cat_title);
-CREATE INDEX &mw_prefix.category_i01 ON &mw_prefix.category (cat_pages);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.category_seq_trg BEFORE INSERT ON &mw_prefix.category
-       FOR EACH ROW WHEN (new.cat_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(category_cat_id_seq.nextval, :new.cat_id);
-END;
-/*$mw$*/
-
-CREATE SEQUENCE externallinks_el_id_seq;
-CREATE TABLE &mw_prefix.externallinks (
-  el_id     NUMBER  NOT NULL,
-  el_from   NUMBER  NOT NULL,
-  el_to     VARCHAR2(2048) NOT NULL,
-  el_index  VARCHAR2(2048) NOT NULL,
-  el_index_60  VARCHAR2(60)
-);
-ALTER TABLE &mw_prefix.externallinks ADD CONSTRAINT &mw_prefix.externallinks_pk PRIMARY KEY (el_id);
-ALTER TABLE &mw_prefix.externallinks ADD CONSTRAINT &mw_prefix.externallinks_fk1 FOREIGN KEY (el_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE INDEX &mw_prefix.externallinks_i01 ON &mw_prefix.externallinks (el_from, el_to);
-CREATE INDEX &mw_prefix.externallinks_i02 ON &mw_prefix.externallinks (el_to, el_from);
-CREATE INDEX &mw_prefix.externallinks_i03 ON &mw_prefix.externallinks (el_index);
-CREATE INDEX &mw_prefix.externallinks_i04 ON &mw_prefix.externallinks (el_index_60, el_id);
-CREATE INDEX &mw_prefix.externallinks_i05 ON &mw_prefix.externallinks (el_from, el_index_60, el_id);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.externallinks_seq_trg BEFORE INSERT ON &mw_prefix.externallinks
-       FOR EACH ROW WHEN (new.el_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(externallinks_el_id_seq.nextval, :new.el_id);
-END;
-/*$mw$*/
-
--- Table defining tag names for IDs. Also stores hit counts to avoid expensive queries on change_tag
-CREATE SEQUENCE change_tag_def_ctd_id_seq;
-CREATE TABLE &mw_prefix.change_tag_def (
-    -- Numerical ID of the tag (ct_tag_id refers to this)
-    ctd_id NUMBER  NOT NULL,
-    -- Symbolic name of the tag (what would previously be put in ct_tag)
-    ctd_name VARCHAR2(255) NOT NULL,
-    -- Whether this tag was defined manually by a privileged user using Special:Tags
-    ctd_user_defined CHAR(1) DEFAULT '0' NOT NULL,
-    -- Number of times this tag was used
-    ctd_count NUMBER NOT NULL DEFAULT 0
-);
-
-ALTER TABLE &mw_prefix.change_tag_def ADD CONSTRAINT &mw_prefix.change_tag_def_pk PRIMARY KEY (ctd_id);
-CREATE UNIQUE INDEX &mw_prefix.ctd_name ON &mw_prefix.change_tag_def (ctd_name);
-CREATE INDEX &mw_prefix.ctd_count ON &mw_prefix.change_tag_def (ctd_count);
-CREATE INDEX &mw_prefix.ctd_user_defined ON &mw_prefix.change_tag_def (ctd_user_defined);
-
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.change_tag_def_seq_trg BEFORE INSERT ON &mw_prefix.change_tag_def
-    FOR EACH ROW WHEN (new.ctd_id IS NULL)
-BEGIN
-    &mw_prefix.lastval_pkg.setLastval(change_tag_def_ctd_id_seq.nextval, :new.ctd_id);
-END;
-/*$mw$*/
-
-CREATE TABLE &mw_prefix.langlinks (
-  ll_from    NUMBER  NOT NULL,
-  ll_lang    VARCHAR2(20),
-  ll_title   VARCHAR2(255)
-);
-ALTER TABLE &mw_prefix.langlinks ADD CONSTRAINT &mw_prefix.langlinks_fk1 FOREIGN KEY (ll_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.langlinks_u01 ON &mw_prefix.langlinks (ll_from, ll_lang);
-CREATE INDEX &mw_prefix.langlinks_i01 ON &mw_prefix.langlinks (ll_lang, ll_title);
-
-CREATE TABLE &mw_prefix.iwlinks (
-  iwl_from NUMBER DEFAULT 0 NOT NULL,
-  iwl_prefix VARCHAR2(20),
-  iwl_title VARCHAR2(255)
-);
-CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui01 ON &mw_prefix.iwlinks (iwl_from, iwl_prefix, iwl_title);
-CREATE UNIQUE INDEX &mw_prefix.iwlinks_ui02 ON &mw_prefix.iwlinks (iwl_prefix, iwl_title, iwl_from);
-
-CREATE TABLE &mw_prefix.site_stats (
-  ss_row_id         NUMBER  NOT NULL PRIMARY KEY,
-  ss_total_edits    NUMBER            DEFAULT NULL,
-  ss_good_articles  NUMBER            DEFAULT NULL,
-  ss_total_pages    NUMBER            DEFAULT NULL,
-  ss_users          NUMBER            DEFAULT NULL,
-  ss_active_users   NUMBER            DEFAULT NULL,
-  ss_images         NUMBER            DEFAULT NULL
-);
-
-CREATE SEQUENCE ipblocks_ipb_id_seq;
-CREATE TABLE &mw_prefix.ipblocks (
-  ipb_id                NUMBER      NOT NULL,
-  ipb_address           VARCHAR2(255)     NULL,
-  ipb_user              NUMBER      DEFAULT 0 NOT  NULL,
-  ipb_by                NUMBER      DEFAULT 0 NOT NULL,
-  ipb_by_text           VARCHAR2(255)      NULL,
-  ipb_by_actor          NUMBER      DEFAULT 0 NOT NULL,
-  ipb_reason_id         NUMBER NOT NULL,
-  ipb_timestamp         TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
-  ipb_auto              CHAR(1)         DEFAULT '0' NOT NULL,
-  ipb_anon_only         CHAR(1)         DEFAULT '0' NOT NULL,
-  ipb_create_account    CHAR(1)         DEFAULT '1' NOT NULL,
-  ipb_enable_autoblock  CHAR(1)         DEFAULT '1' NOT NULL,
-  ipb_expiry            TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
-  ipb_range_start       VARCHAR2(255),
-  ipb_range_end         VARCHAR2(255),
-  ipb_deleted           CHAR(1)      DEFAULT '0' NOT NULL,
-  ipb_block_email       CHAR(1)      DEFAULT '0' NOT NULL,
-  ipb_allow_usertalk    CHAR(1)      DEFAULT '0' NOT NULL,
-  ipb_parent_block_id   NUMBER       DEFAULT NULL,
-  ipb_sitewide          CHAR(1)      DEFAULT '1' NOT NULL
-);
-ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_pk PRIMARY KEY (ipb_id);
-ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_fk1 FOREIGN KEY (ipb_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_fk2 FOREIGN KEY (ipb_by) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.ipblocks ADD CONSTRAINT &mw_prefix.ipblocks_fk3 FOREIGN KEY (ipb_reason_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.ipblocks_u01 ON &mw_prefix.ipblocks (ipb_address, ipb_user, ipb_auto, ipb_anon_only);
-CREATE INDEX &mw_prefix.ipblocks_i01 ON &mw_prefix.ipblocks (ipb_user);
-CREATE INDEX &mw_prefix.ipblocks_i02 ON &mw_prefix.ipblocks (ipb_range_start, ipb_range_end);
-CREATE INDEX &mw_prefix.ipblocks_i03 ON &mw_prefix.ipblocks (ipb_timestamp);
-CREATE INDEX &mw_prefix.ipblocks_i04 ON &mw_prefix.ipblocks (ipb_expiry);
-CREATE INDEX &mw_prefix.ipblocks_i05 ON &mw_prefix.ipblocks (ipb_parent_block_id);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.ipblocks_seq_trg BEFORE INSERT ON &mw_prefix.ipblocks
-       FOR EACH ROW WHEN (new.ipb_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(ipblocks_ipb_id_seq.nextval, :new.ipb_id);
-END;
-/*$mw$*/
-
-CREATE TABLE &mw_prefix.ipblocks_restrictions (
-  ir_ipb_id NUMBER NOT NULL,
-  ir_type NUMBER NOT NULL,
-  ir_value NUMBER NOT NULL
-);
-ALTER TABLE &mw_prefix.ipblocks_restrictions ADD CONSTRAINT ipblocks_restrictions_pk PRIMARY KEY (ir_ipb_id, ir_type, ir_value);
-CREATE INDEX &mw_prefix.ir_type_value ON &mw_prefix.ipblocks_restrictions (ir_type, ir_value);
-
-CREATE TABLE &mw_prefix.image (
-  img_name         VARCHAR2(255)      NOT NULL,
-  img_size         NUMBER   DEFAULT 0 NOT NULL,
-  img_width        NUMBER   DEFAULT 0 NOT NULL,
-  img_height       NUMBER   DEFAULT 0 NOT NULL,
-  img_metadata     CLOB,
-  img_bits         NUMBER   DEFAULT 0 NOT NULL,
-  img_media_type   VARCHAR2(32),
-  img_major_mime   VARCHAR2(32) DEFAULT 'unknown',
-  img_minor_mime   VARCHAR2(100) DEFAULT 'unknown',
-  img_description_id  NUMBER NOT NULL,
-  img_user         NUMBER       DEFAULT 0 NOT NULL,
-  img_user_text    VARCHAR2(255)      NULL,
-  img_actor        NUMBER       DEFAULT 0 NOT NULL,
-  img_timestamp    TIMESTAMP(6) WITH TIME ZONE,
-  img_sha1         VARCHAR2(32)
-);
-ALTER TABLE &mw_prefix.image ADD CONSTRAINT &mw_prefix.image_pk PRIMARY KEY (img_name);
-ALTER TABLE &mw_prefix.image ADD CONSTRAINT &mw_prefix.image_fk1 FOREIGN KEY (img_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.image ADD CONSTRAINT &mw_prefix.image_fk2 FOREIGN KEY (img_description_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE INDEX &mw_prefix.image_i01 ON &mw_prefix.image (img_user_text,img_timestamp);
-CREATE INDEX &mw_prefix.image_i02 ON &mw_prefix.image (img_size);
-CREATE INDEX &mw_prefix.image_i03 ON &mw_prefix.image (img_timestamp);
-CREATE INDEX &mw_prefix.image_i04 ON &mw_prefix.image (img_sha1);
-CREATE INDEX &mw_prefix.img_actor_timestamp ON &mw_prefix.image (img_actor, img_timestamp);
-
-
-CREATE TABLE &mw_prefix.oldimage (
-  oi_name          VARCHAR2(255)         DEFAULT 0 NOT NULL,
-  oi_archive_name  VARCHAR2(255),
-  oi_size          NUMBER      DEFAULT 0 NOT NULL,
-  oi_width         NUMBER      DEFAULT 0 NOT NULL,
-  oi_height        NUMBER      DEFAULT 0 NOT NULL,
-  oi_bits          NUMBER      DEFAULT 0 NOT NULL,
-  oi_description_id  NUMBER NOT NULL,
-  oi_user          NUMBER          DEFAULT 0 NOT NULL,
-  oi_user_text     VARCHAR2(255)         NULL,
-  oi_actor         NUMBER          DEFAULT 0 NOT NULL,
-  oi_timestamp     TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
-  oi_metadata      CLOB,
-  oi_media_type    VARCHAR2(32) DEFAULT NULL,
-  oi_major_mime    VARCHAR2(32) DEFAULT 'unknown',
-  oi_minor_mime    VARCHAR2(100) DEFAULT 'unknown',
-  oi_deleted       NUMBER DEFAULT 0 NOT NULL,
-  oi_sha1          VARCHAR2(32)
-);
-ALTER TABLE &mw_prefix.oldimage ADD CONSTRAINT &mw_prefix.oldimage_fk1 FOREIGN KEY (oi_name) REFERENCES &mw_prefix.image(img_name) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.oldimage ADD CONSTRAINT &mw_prefix.oldimage_fk2 FOREIGN KEY (oi_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.oldimage ADD CONSTRAINT &mw_prefix.oldimage_fk3 FOREIGN KEY (oi_description_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE INDEX &mw_prefix.oldimage_i01 ON &mw_prefix.oldimage (oi_user_text,oi_timestamp);
-CREATE INDEX &mw_prefix.oi_actor_timestamp ON &mw_prefix.oldimage (oi_actor,oi_timestamp);
-CREATE INDEX &mw_prefix.oldimage_i02 ON &mw_prefix.oldimage (oi_name,oi_timestamp);
-CREATE INDEX &mw_prefix.oldimage_i03 ON &mw_prefix.oldimage (oi_name,oi_archive_name);
-CREATE INDEX &mw_prefix.oldimage_i04 ON &mw_prefix.oldimage (oi_sha1);
-
-
-CREATE SEQUENCE filearchive_fa_id_seq;
-CREATE TABLE &mw_prefix.filearchive (
-  fa_id                 NUMBER       NOT NULL,
-  fa_name               VARCHAR2(255)         NOT NULL,
-  fa_archive_name       VARCHAR2(255),
-  fa_storage_group      VARCHAR2(16),
-  fa_storage_key        VARCHAR2(64),
-  fa_deleted_user       NUMBER          DEFAULT 0 NOT NULL,
-  fa_deleted_timestamp  TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
-  fa_deleted_reason_id  NUMBER NOT NULL,
-  fa_size               NUMBER     DEFAULT 0 NOT NULL,
-  fa_width              NUMBER     DEFAULT 0 NOT NULL,
-  fa_height             NUMBER     DEFAULT 0 NOT NULL,
-  fa_metadata           CLOB,
-  fa_bits               NUMBER     DEFAULT 0 NOT NULL,
-  fa_media_type         VARCHAR2(32) DEFAULT NULL,
-  fa_major_mime         VARCHAR2(32) DEFAULT 'unknown',
-  fa_minor_mime         VARCHAR2(100) DEFAULT 'unknown',
-  fa_description_id     NUMBER NOT NULL,
-  fa_user               NUMBER          DEFAULT 0 NOT NULL,
-  fa_user_text          VARCHAR2(255)         NULL,
-  fa_actor              NUMBER          DEFAULT 0 NOT NULL,
-  fa_timestamp          TIMESTAMP(6) WITH TIME ZONE,
-  fa_deleted            NUMBER      DEFAULT 0 NOT NULL,
-  fa_sha1              VARCHAR2(32)
-);
-ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_pk PRIMARY KEY (fa_id);
-ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk1 FOREIGN KEY (fa_deleted_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk2 FOREIGN KEY (fa_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk3 FOREIGN KEY (fa_deleted_reason_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.filearchive ADD CONSTRAINT &mw_prefix.filearchive_fk4 FOREIGN KEY (fa_description_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE INDEX &mw_prefix.filearchive_i01 ON &mw_prefix.filearchive (fa_name, fa_timestamp);
-CREATE INDEX &mw_prefix.filearchive_i02 ON &mw_prefix.filearchive (fa_storage_group, fa_storage_key);
-CREATE INDEX &mw_prefix.filearchive_i03 ON &mw_prefix.filearchive (fa_deleted_timestamp);
-CREATE INDEX &mw_prefix.filearchive_i04 ON &mw_prefix.filearchive (fa_user_text,fa_timestamp);
-CREATE INDEX &mw_prefix.fa_actor_timestamp ON &mw_prefix.filearchive (fa_actor,fa_timestamp);
-CREATE INDEX &mw_prefix.filearchive_i05 ON &mw_prefix.filearchive (fa_sha1);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.filearchive_seq_trg BEFORE INSERT ON &mw_prefix.filearchive
-       FOR EACH ROW WHEN (new.fa_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(filearchive_fa_id_seq.nextval, :new.fa_id);
-END;
-/*$mw$*/
-
-CREATE SEQUENCE uploadstash_us_id_seq;
-CREATE TABLE &mw_prefix.uploadstash (
-       us_id                 NUMBER       NOT NULL,
-  us_user               NUMBER          DEFAULT 0 NOT NULL,
-       us_key                                                          VARCHAR2(255) NOT NULL,
-       us_orig_path                                    VARCHAR2(255) NOT NULL,
-       us_path                                                         VARCHAR2(255) NOT NULL,
-       us_source_type                          VARCHAR2(50),
-  us_timestamp          TIMESTAMP(6) WITH TIME ZONE,
-       us_status                                                       VARCHAR2(50) NOT NULL,
-       us_chunk_inx                                            NUMBER,
-       us_size                                                         NUMBER NOT NULL,
-       us_sha1                                                         VARCHAR2(32) NOT NULL,
-       us_mime                                                         VARCHAR2(255),
-  us_media_type         VARCHAR2(32) DEFAULT NULL,
-       us_image_width                          NUMBER,
-       us_image_height                         NUMBER,
-       us_image_bits                                   NUMBER,
-  us_props BLOB
-);
-ALTER TABLE &mw_prefix.uploadstash ADD CONSTRAINT &mw_prefix.uploadstash_pk PRIMARY KEY (us_id);
-ALTER TABLE &mw_prefix.uploadstash ADD CONSTRAINT &mw_prefix.uploadstash_fk1 FOREIGN KEY (us_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-CREATE INDEX &mw_prefix.uploadstash_i01 ON &mw_prefix.uploadstash (us_user);
-CREATE INDEX &mw_prefix.uploadstash_i02 ON &mw_prefix.uploadstash (us_timestamp);
-CREATE UNIQUE INDEX &mw_prefix.uploadstash_u01 ON &mw_prefix.uploadstash (us_key);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.uploadstash_seq_trg BEFORE INSERT ON &mw_prefix.uploadstash
-       FOR EACH ROW WHEN (new.us_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(uploadstash_us_id_seq.nextval, :new.us_id);
-END;
-/*$mw$*/
-
-CREATE SEQUENCE recentchanges_rc_id_seq;
-CREATE TABLE &mw_prefix.recentchanges (
-  rc_id              NUMBER      NOT NULL,
-  rc_timestamp       TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
-  rc_cur_time        TIMESTAMP(6) WITH TIME ZONE,
-  rc_user            NUMBER          DEFAULT 0 NOT NULL,
-  rc_user_text       VARCHAR2(255)         NULL,
-  rc_actor           NUMBER          DEFAULT 0 NOT NULL,
-  rc_namespace       NUMBER     DEFAULT 0 NOT NULL,
-  rc_title           VARCHAR2(255)         NOT NULL,
-  rc_comment_id      NUMBER NOT NULL,
-  rc_minor           CHAR(1)         DEFAULT '0' NOT NULL,
-  rc_bot             CHAR(1)         DEFAULT '0' NOT NULL,
-  rc_new             CHAR(1)         DEFAULT '0' NOT NULL,
-  rc_cur_id          NUMBER          DEFAULT 0 NOT NULL,
-  rc_this_oldid      NUMBER      DEFAULT 0 NOT NULL,
-  rc_last_oldid      NUMBER      DEFAULT 0 NOT NULL,
-  rc_type            CHAR(1)         DEFAULT '0' NOT NULL,
-  rc_source                                     VARCHAR2(16),
-  rc_patrolled       CHAR(1)         DEFAULT '0' NOT NULL,
-  rc_ip              VARCHAR2(15),
-  rc_old_len         NUMBER,
-  rc_new_len         NUMBER,
-  rc_deleted         CHAR(1)      DEFAULT '0' NOT NULL,
-  rc_logid           NUMBER      DEFAULT 0 NOT NULL,
-  rc_log_type        VARCHAR2(255),
-  rc_log_action      VARCHAR2(255),
-  rc_params          CLOB
-);
-ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_pk PRIMARY KEY (rc_id);
-ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk1 FOREIGN KEY (rc_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk2 FOREIGN KEY (rc_cur_id) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.recentchanges ADD CONSTRAINT &mw_prefix.recentchanges_fk3 FOREIGN KEY (rc_comment_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE INDEX &mw_prefix.recentchanges_i01 ON &mw_prefix.recentchanges (rc_timestamp);
-CREATE INDEX &mw_prefix.recentchanges_i09 ON &mw_prefix.recentchanges (rc_namespace, rc_title, rc_timestamp);
-CREATE INDEX &mw_prefix.recentchanges_i03 ON &mw_prefix.recentchanges (rc_cur_id);
-CREATE INDEX &mw_prefix.recentchanges_i04 ON &mw_prefix.recentchanges (rc_new,rc_namespace,rc_timestamp);
-CREATE INDEX &mw_prefix.recentchanges_i05 ON &mw_prefix.recentchanges (rc_ip);
-CREATE INDEX &mw_prefix.recentchanges_i06 ON &mw_prefix.recentchanges (rc_namespace, rc_user_text);
-CREATE INDEX &mw_prefix.recentchanges_i07 ON &mw_prefix.recentchanges (rc_user_text, rc_timestamp);
-CREATE INDEX &mw_prefix.rc_ns_actor ON &mw_prefix.recentchanges (rc_namespace, rc_actor);
-CREATE INDEX &mw_prefix.rc_actor ON &mw_prefix.recentchanges (rc_actor, rc_timestamp);
-CREATE INDEX &mw_prefix.recentchanges_i08 ON &mw_prefix.recentchanges (rc_namespace, rc_type, rc_patrolled, rc_timestamp);
-CREATE INDEX &mw_prefix.recentchanges_i10 ON &mw_prefix.recentchanges (rc_this_oldid);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.recentchanges_seq_trg BEFORE INSERT ON &mw_prefix.recentchanges
-       FOR EACH ROW WHEN (new.rc_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(recentchanges_rc_id_seq.nextval, :new.rc_id);
-END;
-/*$mw$*/
-
-CREATE TABLE &mw_prefix.watchlist (
-  wl_id                     NUMBER     NOT NULL,
-  wl_user                   NUMBER     NOT NULL,
-  wl_namespace              NUMBER    DEFAULT 0 NOT NULL,
-  wl_title                  VARCHAR2(255)        NOT NULL,
-  wl_notificationtimestamp  TIMESTAMP(6) WITH TIME ZONE
-);
-ALTER TABLE &mw_prefix.watchlist ADD CONSTRAINT &mw_prefix.watchlist_pk PRIMARY KEY (wl_id);
-ALTER TABLE &mw_prefix.watchlist ADD CONSTRAINT &mw_prefix.watchlist_fk1 FOREIGN KEY (wl_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.watchlist_u01 ON &mw_prefix.watchlist (wl_user, wl_namespace, wl_title);
-CREATE INDEX &mw_prefix.watchlist_i01 ON &mw_prefix.watchlist (wl_namespace, wl_title);
-
-
-CREATE TABLE &mw_prefix.searchindex (
-  si_page      NUMBER NOT NULL,
-  si_title     VARCHAR2(255),
-  si_text      CLOB NOT NULL
-);
-CREATE UNIQUE INDEX &mw_prefix.searchindex_u01 ON &mw_prefix.searchindex (si_page);
-
-CREATE TABLE &mw_prefix.interwiki (
-  iw_prefix  VARCHAR2(32)   NOT NULL,
-  iw_url     VARCHAR2(127)  NOT NULL,
-  iw_api       BLOB NOT NULL,
-  iw_wikiid VARCHAR2(64),
-  iw_local   CHAR(1)  NOT NULL,
-  iw_trans   CHAR(1)  DEFAULT '0' NOT NULL
-);
-CREATE UNIQUE INDEX &mw_prefix.interwiki_u01 ON &mw_prefix.interwiki (iw_prefix);
-
-CREATE TABLE &mw_prefix.querycache (
-  qc_type       VARCHAR2(32)      NOT NULL,
-  qc_value      NUMBER  DEFAULT 0 NOT NULL,
-  qc_namespace  NUMBER  DEFAULT 0 NOT NULL,
-  qc_title      VARCHAR2(255)      NOT NULL
-);
-CREATE INDEX &mw_prefix.querycache_u01 ON &mw_prefix.querycache (qc_type,qc_value);
-
-CREATE TABLE &mw_prefix.objectcache (
-  keyname  VARCHAR2(255)              ,
-  value    BLOB,
-  exptime  TIMESTAMP(6) WITH TIME ZONE  NOT NULL
-);
-CREATE INDEX &mw_prefix.objectcache_i01 ON &mw_prefix.objectcache (exptime);
-
-
-CREATE SEQUENCE logging_log_id_seq;
-CREATE TABLE &mw_prefix.logging (
-  log_id          NUMBER      NOT NULL,
-  log_type        VARCHAR2(10)         NOT NULL,
-  log_action      VARCHAR2(10)         NOT NULL,
-  log_timestamp   TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
-  log_user        NUMBER                DEFAULT 0 NOT NULL,
-  log_user_text        VARCHAR2(255),
-  log_actor       NUMBER                DEFAULT 0 NOT NULL,
-  log_namespace   NUMBER     DEFAULT 0 NOT NULL,
-  log_title       VARCHAR2(255)         NOT NULL,
-  log_page                             NUMBER,
-  log_comment_id  NUMBER NOT NULL,
-  log_params      CLOB,
-  log_deleted     CHAR(1)      DEFAULT '0' NOT NULL
-);
-ALTER TABLE &mw_prefix.logging ADD CONSTRAINT &mw_prefix.logging_pk PRIMARY KEY (log_id);
-ALTER TABLE &mw_prefix.logging ADD CONSTRAINT &mw_prefix.logging_fk1 FOREIGN KEY (log_user) REFERENCES &mw_prefix.mwuser(user_id) ON DELETE SET NULL DEFERRABLE INITIALLY DEFERRED;
-ALTER TABLE &mw_prefix.logging ADD CONSTRAINT &mw_prefix.logging_fk2 FOREIGN KEY (log_comment_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE INDEX &mw_prefix.logging_i01 ON &mw_prefix.logging (log_type, log_timestamp);
-CREATE INDEX &mw_prefix.logging_i02 ON &mw_prefix.logging (log_user, log_timestamp);
-CREATE INDEX &mw_prefix.logging_i03 ON &mw_prefix.logging (log_namespace, log_title, log_timestamp);
-CREATE INDEX &mw_prefix.logging_i04 ON &mw_prefix.logging (log_timestamp);
-CREATE INDEX &mw_prefix.logging_i05 ON &mw_prefix.logging (log_type, log_action, log_timestamp);
-CREATE INDEX &mw_prefix.logging_i06 ON &mw_prefix.logging (log_user_text, log_type, log_timestamp);
-CREATE INDEX &mw_prefix.logging_i07 ON &mw_prefix.logging (log_user_text, log_timestamp);
-CREATE INDEX &mw_prefix.actor_time ON &mw_prefix.logging (log_actor, log_timestamp);
-CREATE INDEX &mw_prefix.log_actor_type_time ON &mw_prefix.logging (log_actor, log_type, log_timestamp);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.logging_seq_trg BEFORE INSERT ON &mw_prefix.logging
-       FOR EACH ROW WHEN (new.log_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(logging_log_id_seq.nextval, :new.log_id);
-END;
-/*$mw$*/
-
-CREATE TABLE &mw_prefix.log_search (
-  ls_field VARCHAR2(32) NOT NULL,
-  ls_value VARCHAR2(255) NOT NULL,
-  ls_log_id NuMBER DEFAULT 0 NOT NULL
-);
-ALTER TABLE &mw_prefix.log_search ADD CONSTRAINT log_search_pk PRIMARY KEY (ls_field,ls_value,ls_log_id);
-CREATE INDEX &mw_prefix.log_search_i01 ON &mw_prefix.log_search (ls_log_id);
-
-
-CREATE SEQUENCE job_job_id_seq;
-CREATE TABLE &mw_prefix.job (
-  job_id         NUMBER   NOT NULL,
-  job_cmd        VARCHAR2(60)      NOT NULL,
-  job_namespace  NUMBER  DEFAULT 0 NOT NULL,
-  job_title      VARCHAR2(255)      NOT NULL,
-  job_timestamp         TIMESTAMP(6) WITH TIME ZONE NULL,
-  job_params     CLOB      NOT NULL,
-  job_random NUMBER DEFAULT 0 NOT NULL,
-  job_token VARCHAR2(32),
-  job_token_timestamp TIMESTAMP(6) WITH TIME ZONE,
-  job_sha1 VARCHAR2(32),
-  job_attempts NUMBER DEFAULT 0 NOT NULL
-);
-ALTER TABLE &mw_prefix.job ADD CONSTRAINT &mw_prefix.job_pk PRIMARY KEY (job_id);
-CREATE INDEX &mw_prefix.job_i01 ON &mw_prefix.job (job_cmd, job_namespace, job_title);
-CREATE INDEX &mw_prefix.job_i02 ON &mw_prefix.job (job_timestamp);
-CREATE INDEX &mw_prefix.job_i03 ON &mw_prefix.job (job_sha1);
-CREATE INDEX &mw_prefix.job_i04 ON &mw_prefix.job (job_cmd,job_token,job_random);
-CREATE INDEX &mw_prefix.job_i05 ON &mw_prefix.job (job_attempts);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.job_seq_trg BEFORE INSERT ON &mw_prefix.job
-       FOR EACH ROW WHEN (new.job_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(job_job_id_seq.nextval, :new.job_id);
-END;
-/*$mw$*/
-
-CREATE TABLE &mw_prefix.querycache_info (
-  qci_type       VARCHAR2(32) NOT NULL,
-  qci_timestamp  TIMESTAMP(6) WITH TIME ZONE NULL
-);
-CREATE UNIQUE INDEX &mw_prefix.querycache_info_u01 ON &mw_prefix.querycache_info (qci_type);
-
-CREATE TABLE &mw_prefix.redirect (
-  rd_from       NUMBER  NOT NULL,
-  rd_namespace  NUMBER DEFAULT 0 NOT NULL,
-  rd_title      VARCHAR2(255)     NOT NULL,
-  rd_interwiki  VARCHAR2(32),
-  rd_fragment   VARCHAR2(255)
-);
-ALTER TABLE &mw_prefix.redirect ADD CONSTRAINT &mw_prefix.redirect_fk1 FOREIGN KEY (rd_from) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE INDEX &mw_prefix.redirect_i01 ON &mw_prefix.redirect (rd_namespace,rd_title,rd_from);
-
-CREATE TABLE &mw_prefix.querycachetwo (
-  qcc_type          VARCHAR2(32)     NOT NULL,
-  qcc_value         NUMBER  DEFAULT 0 NOT NULL,
-  qcc_namespace     NUMBER  DEFAULT 0 NOT NULL,
-  qcc_title         VARCHAR2(255),
-  qcc_namespacetwo  NUMBER  DEFAULT 0 NOT NULL,
-  qcc_titletwo      VARCHAR2(255)
-);
-CREATE INDEX &mw_prefix.querycachetwo_i01 ON &mw_prefix.querycachetwo (qcc_type,qcc_value);
-CREATE INDEX &mw_prefix.querycachetwo_i02 ON &mw_prefix.querycachetwo (qcc_type,qcc_namespace,qcc_title);
-CREATE INDEX &mw_prefix.querycachetwo_i03 ON &mw_prefix.querycachetwo (qcc_type,qcc_namespacetwo,qcc_titletwo);
-
-CREATE SEQUENCE page_restrictions_pr_id_seq;
-CREATE TABLE &mw_prefix.page_restrictions (
-  pr_id      NUMBER      NOT NULL,
-  pr_page    NUMBER      NOT NULL,
-  pr_type    VARCHAR2(255)         NOT NULL,
-  pr_level   VARCHAR2(255)         NOT NULL,
-  pr_cascade NUMBER     NOT NULL,
-  pr_user    NUMBER          NULL,
-  pr_expiry  TIMESTAMP(6) WITH TIME ZONE      NULL
-);
-ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_pk PRIMARY KEY (pr_id);
-ALTER TABLE &mw_prefix.page_restrictions ADD CONSTRAINT &mw_prefix.page_restrictions_fk1 FOREIGN KEY (pr_page) REFERENCES &mw_prefix.page(page_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.page_restrictions_u01 ON &mw_prefix.page_restrictions (pr_page,pr_type);
-CREATE INDEX &mw_prefix.page_restrictions_i01 ON &mw_prefix.page_restrictions (pr_type,pr_level);
-CREATE INDEX &mw_prefix.page_restrictions_i02 ON &mw_prefix.page_restrictions (pr_level);
-CREATE INDEX &mw_prefix.page_restrictions_i03 ON &mw_prefix.page_restrictions (pr_cascade);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.page_restrictions_seq_trg BEFORE INSERT ON &mw_prefix.page_restrictions
-       FOR EACH ROW WHEN (new.pr_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(page_restrictions_pr_id_seq.nextval, :new.pr_id);
-END;
-/*$mw$*/
-
-CREATE TABLE &mw_prefix.protected_titles (
-  pt_namespace   NUMBER           DEFAULT 0 NOT NULL,
-  pt_title       VARCHAR2(255)    NOT NULL,
-  pt_user        NUMBER                  NOT NULL,
-  pt_reason_id   NUMBER NOT NULL,
-  pt_timestamp   TIMESTAMP(6) WITH TIME ZONE  NOT NULL,
-  pt_expiry      VARCHAR2(14) NOT NULL,
-  pt_create_perm VARCHAR2(60) NOT NULL
-);
-ALTER TABLE &mw_prefix.protected_titles ADD CONSTRAINT &mw_prefix.protected_titles_fk1 FOREIGN KEY (pt_reason_id) REFERENCES &mw_prefix."COMMENT"(comment_id) ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED;
-CREATE UNIQUE INDEX &mw_prefix.protected_titles_u01 ON &mw_prefix.protected_titles (pt_namespace,pt_title);
-CREATE INDEX &mw_prefix.protected_titles_i01 ON &mw_prefix.protected_titles (pt_timestamp);
-
-CREATE TABLE &mw_prefix.page_props (
-  pp_page NUMBER NOT NULL,
-  pp_propname VARCHAR2(60) NOT NULL,
-  pp_value BLOB NOT NULL
-);
-CREATE UNIQUE INDEX &mw_prefix.page_props_u01 ON &mw_prefix.page_props (pp_page,pp_propname);
-
-
-CREATE TABLE &mw_prefix.updatelog (
-  ul_key VARCHAR2(255) NOT NULL,
-  ul_value BLOB
-);
-ALTER TABLE &mw_prefix.updatelog ADD CONSTRAINT &mw_prefix.updatelog_pk PRIMARY KEY (ul_key);
-
-CREATE TABLE &mw_prefix.change_tag (
-  ct_id NUMBER NOT NULL,
-  ct_rc_id NUMBER NULL,
-  ct_log_id NUMBER NULL,
-  ct_rev_id NUMBER NULL,
-  ct_params BLOB NULL,
-  ct_tag_id NUMBER NOT NULL
-);
-ALTER TABLE &mw_prefix.change_tag ADD CONSTRAINT &mw_prefix.change_tag_pk PRIMARY KEY (ct_id);
-
-CREATE UNIQUE INDEX &mw_prefix.change_tag_u04 ON &mw_prefix.change_tag (ct_rc_id,ct_tag_id);
-CREATE UNIQUE INDEX &mw_prefix.change_tag_u05 ON &mw_prefix.change_tag (ct_log_id,ct_tag_id);
-CREATE UNIQUE INDEX &mw_prefix.change_tag_u06 ON &mw_prefix.change_tag (ct_rev_id,ct_tag_id);
-
-CREATE INDEX &mw_prefix.change_tag_i02 ON &mw_prefix.change_tag (ct_tag_id,ct_rc_id,ct_rev_id,ct_log_id);
-
--- This table is not used unless profiling is turned on
---CREATE TABLE &mw_prefix.profiling (
---  pf_count   NUMBER          DEFAULT 0 NOT NULL,
---  pf_time    NUMBER(18,10)   DEFAULT 0 NOT NULL,
---  pf_memory  NUMBER(18,10)   DEFAULT 0 NOT NULL,
---  pf_name    VARCHAR2(255),
---  pf_server  VARCHAR2(30)
---);
---CREATE UNIQUE INDEX &mw_prefix.profiling_u01 ON &mw_prefix.profiling (pf_name, pf_server);
-
-CREATE INDEX &mw_prefix.si_title_idx ON &mw_prefix.searchindex(si_title) INDEXTYPE IS ctxsys.context;
-CREATE INDEX &mw_prefix.si_text_idx ON &mw_prefix.searchindex(si_text) INDEXTYPE IS ctxsys.context;
-
-CREATE TABLE &mw_prefix.l10n_cache (
-  lc_lang varchar2(32) NOT NULL,
-  lc_key varchar2(255) NOT NULL,
-  lc_value clob NOT NULL
-);
-CREATE INDEX &mw_prefix.l10n_cache_u01 ON &mw_prefix.l10n_cache (lc_lang, lc_key);
-
-CREATE TABLE &mw_prefix.module_deps (
-  md_module VARCHAR2(255) NOT NULL,
-  md_skin VARCHAR2(32) NOT NULL,
-  md_deps BLOB NOT NULL
-);
-CREATE UNIQUE INDEX &mw_prefix.module_deps_u01 ON &mw_prefix.module_deps (md_module, md_skin);
-
-CREATE SEQUENCE sites_site_id_seq MINVALUE 0 START WITH 0;
-CREATE TABLE &mw_prefix.sites (
-  site_id NUMBER NOT NULL,
-  site_global_key VARCHAR2(32) NOT NULL,
-  site_type VARCHAR2(32) NOT NULL,
-  site_group VARCHAR2(32) NOT NULL,
-  site_source VARCHAR2(32) NOT NULL,
-  site_language VARCHAR2(32) NOT NULL,
-  site_protocol VARCHAR2(32) NOT NULL,
-  site_domain VARCHAR2(255) NOT NULL,
-  site_data BLOB NOT NULL,
-  site_forward NUMBER(1) NOT NULL,
-  site_config BLOB NOT NULL
-);
-ALTER TABLE &mw_prefix.sites ADD CONSTRAINT &mw_prefix.sites_pk PRIMARY KEY (site_id);
-CREATE UNIQUE INDEX &mw_prefix.sites_u01 ON &mw_prefix.sites (site_global_key);
-CREATE INDEX &mw_prefix.sites_i01 ON &mw_prefix.sites (site_type);
-CREATE INDEX &mw_prefix.sites_i02 ON &mw_prefix.sites (site_group);
-CREATE INDEX &mw_prefix.sites_i03 ON &mw_prefix.sites (site_source);
-CREATE INDEX &mw_prefix.sites_i04 ON &mw_prefix.sites (site_language);
-CREATE INDEX &mw_prefix.sites_i05 ON &mw_prefix.sites (site_protocol);
-CREATE INDEX &mw_prefix.sites_i06 ON &mw_prefix.sites (site_domain);
-CREATE INDEX &mw_prefix.sites_i07 ON &mw_prefix.sites (site_forward);
-/*$mw$*/
-CREATE TRIGGER &mw_prefix.sites_seq_trg BEFORE INSERT ON &mw_prefix.sites
-       FOR EACH ROW WHEN (new.site_id IS NULL)
-BEGIN
-       &mw_prefix.lastval_pkg.setLastval(sites_site_id_seq.nextval, :new.site_id);
-END;
-/*$mw$*/
-
-CREATE TABLE &mw_prefix.site_identifiers (
-  si_site NUMBER NOT NULL,
-  si_type VARCHAR2(32) NOT NULL,
-  si_key VARCHAR2(32) NOT NULL
-);
-CREATE UNIQUE INDEX &mw_prefix.site_identifiers_u01 ON &mw_prefix.site_identifiers (si_type, si_key);
-CREATE INDEX &mw_prefix.site_identifiers_i01 ON &mw_prefix.site_identifiers (si_site);
-CREATE INDEX &mw_prefix.site_identifiers_i02 ON &mw_prefix.site_identifiers (si_key);
-
--- do not prefix this table as it breaks parserTests
-CREATE TABLE wiki_field_info_full (
-table_name VARCHAR2(35) NOT NULL,
-column_name VARCHAR2(35) NOT NULL,
-data_default VARCHAR2(4000),
-data_length NUMBER NOT NULL,
-data_type VARCHAR2(106),
-not_null CHAR(1) NOT NULL,
-prim NUMBER(1),
-uniq NUMBER(1),
-nonuniq NUMBER(1)
-);
-ALTER TABLE wiki_field_info_full ADD CONSTRAINT wiki_field_info_full_pk PRIMARY KEY (table_name, column_name);
-
-/*$mw$*/
-CREATE PROCEDURE fill_wiki_info IS
-       BEGIN
-               DELETE      wiki_field_info_full;
-
-               FOR x_rec IN (SELECT t.table_name table_name, t.column_name,
-                                                                                               t.data_default, t.data_length, t.data_type,
-                                                                                               DECODE (t.nullable, 'Y', '1', 'N', '0') not_null,
-                                                                                               (SELECT 1
-                                                                                                               FROM user_cons_columns ucc,
-                                                                                                                               user_constraints uc
-                                                                                                       WHERE ucc.table_name = t.table_name
-                                                                                                               AND ucc.column_name = t.column_name
-                                                                                                               AND uc.constraint_name = ucc.constraint_name
-                                                                                                               AND uc.constraint_type = 'P'
-                                                                                                               AND ROWNUM < 2) prim,
-                                                                                               (SELECT 1
-                                                                                                               FROM user_ind_columns uic,
-                                                                                                                               user_indexes ui
-                                                                                                       WHERE uic.table_name = t.table_name
-                                                                                                               AND uic.column_name = t.column_name
-                                                                                                               AND ui.index_name = uic.index_name
-                                                                                                               AND ui.uniqueness = 'UNIQUE'
-                                                                                                               AND ROWNUM < 2) uniq,
-                                                                                               (SELECT 1
-                                                                                                               FROM user_ind_columns uic,
-                                                                                                                               user_indexes ui
-                                                                                                       WHERE uic.table_name = t.table_name
-                                                                                                               AND uic.column_name = t.column_name
-                                                                                                               AND ui.index_name = uic.index_name
-                                                                                                               AND ui.uniqueness = 'NONUNIQUE'
-                                                                                                               AND ROWNUM < 2) nonuniq
-                                                                               FROM user_tab_columns t, user_tables ut
-                                                                       WHERE ut.table_name = t.table_name)
-               LOOP
-                       INSERT INTO wiki_field_info_full
-                                                                       (table_name, column_name,
-                                                                               data_default, data_length,
-                                                                               data_type, not_null, prim,
-                                                                               uniq, nonuniq
-                                                                       )
-                                               VALUES (x_rec.table_name, x_rec.column_name,
-                                                                               x_rec.data_default, x_rec.data_length,
-                                                                               x_rec.data_type, x_rec.not_null, x_rec.prim,
-                                                                               x_rec.uniq, x_rec.nonuniq
-                                                                       );
-               END LOOP;
-               COMMIT;
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE OR REPLACE PROCEDURE duplicate_table(p_tabname   IN VARCHAR2,
-                                            p_oldprefix IN VARCHAR2,
-                                            p_newprefix IN VARCHAR2,
-                                            p_temporary IN BOOLEAN) IS
-  e_table_not_exist EXCEPTION;
-  PRAGMA EXCEPTION_INIT(e_table_not_exist, -00942);
-  l_temp_ei_sql VARCHAR2(2000);
-  l_temporary   BOOLEAN := p_temporary;
-BEGIN
-  BEGIN
-    EXECUTE IMMEDIATE 'DROP TABLE ' || p_newprefix || p_tabname ||
-                      ' CASCADE CONSTRAINTS PURGE';
-  EXCEPTION
-    WHEN e_table_not_exist THEN
-      NULL;
-  END;
-  IF (p_tabname = 'SEARCHINDEX') THEN
-    l_temporary := FALSE;
-  END IF;
-  IF (l_temporary) THEN
-    EXECUTE IMMEDIATE 'CREATE GLOBAL TEMPORARY TABLE ' || p_newprefix ||
-                      p_tabname ||
-                      ' ON COMMIT PRESERVE ROWS AS SELECT * FROM ' ||
-                      p_oldprefix || p_tabname || ' WHERE ROWNUM = 0';
-  ELSE
-    EXECUTE IMMEDIATE 'CREATE TABLE ' || p_newprefix || p_tabname ||
-                      ' AS SELECT * FROM ' || p_oldprefix || p_tabname ||
-                      ' WHERE ROWNUM = 0';
-  END IF;
-  FOR rc IN (SELECT column_name, data_default
-               FROM user_tab_columns
-              WHERE table_name = p_oldprefix || p_tabname
-                AND data_default IS NOT NULL) LOOP
-    EXECUTE IMMEDIATE 'ALTER TABLE ' || p_newprefix || p_tabname ||
-                      ' MODIFY ' || rc.column_name || ' DEFAULT ' ||
-                      SUBSTR(rc.data_default, 1, 2000);
-  END LOOP;
-  FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('CONSTRAINT',
-                                                                          constraint_name),
-                                                    32767,
-                                                    1),
-                                    USER || '"."' || p_oldprefix,
-                                    USER || '"."' || p_newprefix),
-                            '"' || constraint_name || '"',
-                            '"' || p_newprefix || constraint_name || '"') DDLVC2,
-                    constraint_name
-               FROM user_constraints uc
-              WHERE table_name = p_oldprefix || p_tabname
-                AND constraint_type = 'P') LOOP
-    l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
-    l_temp_ei_sql := SUBSTR(l_temp_ei_sql,
-                            1,
-                            INSTR(l_temp_ei_sql,
-                                  ')',
-                                  INSTR(l_temp_ei_sql, 'PRIMARY KEY') + 1) + 1);
-    IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
-      EXECUTE IMMEDIATE l_temp_ei_sql;
-    END IF;
-  END LOOP;
-  IF (NOT l_temporary) THEN
-    FOR rc IN (SELECT REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('REF_CONSTRAINT',
-                                                                    constraint_name),
-                                              32767,
-                                              1),
-                              USER || '"."' || p_oldprefix,
-                              USER || '"."' || p_newprefix) DDLVC2,
-                      constraint_name
-                 FROM user_constraints uc
-                WHERE table_name = p_oldprefix || p_tabname
-                  AND constraint_type = 'R') LOOP
-      IF nvl(length(l_temp_ei_sql), 0) > 0 AND
-         INSTR(l_temp_ei_sql, 'PRIMARY KEY') = 0 THEN
-        EXECUTE IMMEDIATE l_temp_ei_sql;
-      END IF;
-    END LOOP;
-  END IF;
-  FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('INDEX',
-                                                                          index_name),
-                                                    32767,
-                                                    1),
-                                    USER || '"."' || p_oldprefix,
-                                    USER || '"."' || p_newprefix),
-                            '"' || index_name || '"',
-                            '"' || p_newprefix || index_name || '"') DDLVC2,
-                    index_name,
-                    index_type
-               FROM user_indexes ui
-              WHERE table_name = p_oldprefix || p_tabname
-                AND index_type NOT IN ('LOB', 'DOMAIN')
-                AND NOT EXISTS
-              (SELECT NULL
-                       FROM user_constraints
-                      WHERE table_name = ui.table_name
-                        AND constraint_name = ui.index_name)) LOOP
-    l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'PCTFREE') - 1);
-    l_temp_ei_sql := SUBSTR(l_temp_ei_sql,
-                            1,
-                            INSTR(l_temp_ei_sql,
-                                  ')',
-                                  INSTR(l_temp_ei_sql,
-                                        '"' || USER || '"."' || p_newprefix || '"') + 1) + 1);
-    IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
-      EXECUTE IMMEDIATE l_temp_ei_sql;
-    END IF;
-  END LOOP;
-  FOR rc IN (SELECT REPLACE(REPLACE(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('INDEX',
-                                                                          index_name),
-                                                    32767,
-                                                    1),
-                                    USER || '"."' || p_oldprefix,
-                                    USER || '"."' || p_newprefix),
-                            '"' || index_name || '"',
-                            '"' || p_newprefix || index_name || '"') DDLVC2,
-                    index_name,
-                    index_type
-               FROM user_indexes ui
-              WHERE table_name = p_oldprefix || p_tabname
-                AND index_type = 'DOMAIN'
-                AND NOT EXISTS
-              (SELECT NULL
-                       FROM user_constraints
-                      WHERE table_name = ui.table_name
-                        AND constraint_name = ui.index_name)) LOOP
-    l_temp_ei_sql := rc.ddlvc2;
-    IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
-      EXECUTE IMMEDIATE l_temp_ei_sql;
-    END IF;
-  END LOOP;
-  FOR rc IN (SELECT REPLACE(REPLACE(UPPER(DBMS_LOB.SUBSTR(DBMS_METADATA.get_ddl('TRIGGER',
-                                                                                trigger_name),
-                                                          32767,
-                                                          1)),
-                                    USER || '"."' || p_oldprefix,
-                                    USER || '"."' || p_newprefix),
-                            ' ON ' || p_oldprefix || p_tabname,
-                            ' ON ' || p_newprefix || p_tabname) DDLVC2,
-                    trigger_name
-               FROM user_triggers
-              WHERE table_name = p_oldprefix || p_tabname) LOOP
-    l_temp_ei_sql := SUBSTR(rc.ddlvc2, 1, INSTR(rc.ddlvc2, 'ALTER ') - 1);
-    IF nvl(length(l_temp_ei_sql), 0) > 0 THEN
-      EXECUTE IMMEDIATE l_temp_ei_sql;
-    END IF;
-  END LOOP;
-END;
-
-/*$mw$*/
-
-/*$mw$*/
-CREATE OR REPLACE FUNCTION BITOR (x IN NUMBER, y IN NUMBER) RETURN NUMBER AS
-BEGIN
-  RETURN (x + y - BITAND(x, y));
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE OR REPLACE FUNCTION BITNOT (x IN NUMBER) RETURN NUMBER AS
-BEGIN
-  RETURN (4294967295 - x);
-END;
-/*$mw$*/
-
-CREATE OR REPLACE TYPE GET_OUTPUT_TYPE IS TABLE OF VARCHAR2(255);
-
-/*$mw$*/
-CREATE OR REPLACE FUNCTION GET_OUTPUT_LINES RETURN GET_OUTPUT_TYPE PIPELINED AS
-  v_line VARCHAR2(255);
-  v_status INTEGER := 0;
-BEGIN
-
-  LOOP
-    DBMS_OUTPUT.GET_LINE(v_line, v_status);
-    IF (v_status = 0) THEN RETURN; END IF;
-    PIPE ROW (v_line);
-  END LOOP;
-  RETURN;
-EXCEPTION
-  WHEN OTHERS THEN
-    RETURN;
-END;
-/*$mw$*/
-
-/*$mw$*/
-CREATE OR REPLACE FUNCTION GET_SEQUENCE_VALUE(seq IN VARCHAR2) RETURN NUMBER AS
-       v_value NUMBER;
-BEGIN
-       EXECUTE IMMEDIATE 'SELECT '||seq||'.NEXTVAL INTO :outVar FROM DUAL' INTO v_value;
-       RETURN v_value;
-END;
-/*$mw$*/
diff --git a/maintenance/oracle/update-keys.sql b/maintenance/oracle/update-keys.sql
deleted file mode 100644 (file)
index 7761d0c..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
--- SQL to insert update keys into the initial tables after a
--- fresh installation of MediaWiki's database.
--- This is read and executed by the install script; you should
--- not have to run it by itself unless doing a manual install.
--- Insert keys here if either the unnecessary would cause heavy
--- processing or could potentially cause trouble by lowering field
--- sizes, adding constraints, etc.
--- When adjusting field sizes, it is recommended removing old
--- patches but to play safe, update keys should also inserted here.
-
--- The /*_*/ comments in this and other files are
--- replaced with the defined table prefix by the installer
--- and updater scripts. If you are installing or running
--- updates manually, you will need to manually insert the
--- table prefix if any when running these scripts.
---
-
-INSERT INTO /*_*/updatelog (ul_key, ul_value)
-       VALUES( 'filearchive-fa_major_mime-patch-fa_major_mime-chemical.sql', null );
-INSERT INTO /*_*/updatelog (ul_key, ul_value)
-       VALUES( 'image-img_major_mime-patch-img_major_mime-chemical.sql', null );
-INSERT INTO /*_*/updatelog (ul_key, ul_value)
-       VALUES( 'oldimage-oi_major_mime-patch-oi_major_mime-chemical.sql', null );
-INSERT INTO /*_*/updatelog (ul_key, ul_value)
-       VALUES( 'user_groups-ug_group-patch-ug_group-length-increase-255.sql', null );
-INSERT INTO /*_*/updatelog (ul_key, ul_value)
-       VALUES( 'user_former_groups-ufg_group-patch-ufg_group-length-increase-255.sql', null );
-INSERT INTO /*_*/updatelog (ul_key, ul_value)
-       VALUES( 'user_properties-up_property-patch-up_property.sql', null );
diff --git a/maintenance/oracle/user.sql b/maintenance/oracle/user.sql
deleted file mode 100644 (file)
index 0a36ac4..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
--- defines must comply with ^define\s*([^\s=]*)\s*=\s?'\{\$([^\}]*)\}';
-define wiki_user='{$wgDBuser}';
-define wiki_pass='{$wgDBpassword}';
-define def_ts='{$_OracleDefTS}';
-define temp_ts='{$_OracleTempTS}';
-
-create user &wiki_user. identified by &wiki_pass. default tablespace &def_ts. temporary tablespace &temp_ts. quota unlimited on &def_ts.;
-grant connect, resource to &wiki_user.;
-grant alter session to &wiki_user.;
-grant ctxapp to &wiki_user.;
-grant execute on ctx_ddl to &wiki_user.;
-grant create view to &wiki_user.;
-grant create synonym to &wiki_user.;
-grant create table to &wiki_user.;
-grant create sequence to &wiki_user.;
-grant create trigger to &wiki_user.;
-grant create type to &wiki_user.;
-grant create procedure to &wiki_user.;
index 6c46597..2be690b 100644 (file)
@@ -74,12 +74,15 @@ class PopulateChangeTagDef extends LoggedUpdateMaintenance {
        private function setUserDefinedTags() {
                $dbr = $this->lbFactory->getMainLB()->getConnection( DB_REPLICA );
 
-               $userTags = $dbr->selectFieldValues(
-                       'valid_tag',
-                       'vt_tag',
-                       [],
-                       __METHOD__
-               );
+               $userTags = null;
+               if ( $dbr->tableExists( 'valid_tag' ) ) {
+                       $userTags = $dbr->selectFieldValues(
+                               'valid_tag',
+                               'vt_tag',
+                               [],
+                               __METHOD__
+                       );
+               }
 
                if ( empty( $userTags ) ) {
                        $this->output( "No user defined tags to set, moving on...\n" );
index 133ba0f..c9a1660 100644 (file)
@@ -139,16 +139,16 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.base' => [
-               'scripts' => [
-                       // This MUST be kept in sync with maintenance/jsduck/eg-iframe.html
-                       'resources/src/mediawiki.base/mediawiki.errorLogger.js',
-                       'resources/src/mediawiki.base/mediawiki.base.js',
-               ],
-               'dependencies' => 'jquery',
-               'targets' => [ 'desktop', 'mobile' ],
-       ],
-       'mediawiki.legacy.wikibits' => [
-               'scripts' => 'resources/src/mediawiki.legacy/wikibits.js',
+               'scripts' => array_merge(
+                       [
+                               // This MUST be kept in sync with maintenance/jsduck/eg-iframe.html
+                               'resources/src/mediawiki.base/mediawiki.errorLogger.js',
+                               'resources/src/mediawiki.base/mediawiki.base.js',
+                       ],
+                       $GLOBALS['wgIncludeLegacyJavaScript']
+                               ? [ 'resources/src/mediawiki.base/legacy.wikibits.js' ]
+                               : []
+               ),
                'dependencies' => 'jquery',
                'targets' => [ 'desktop', 'mobile' ],
        ],
@@ -2820,13 +2820,6 @@ return [
                ],
        ],
 
-       // @todo FIXME: Remove 7 days after Ib0020b6bd0156 is deployed to all wikis.
-       'html5shiv' => [
-               'scripts' => [
-                       'resources/lib/html5shiv/html5shiv.js'
-               ],
-       ],
-
        /* EasyDeflate */
 
        'easy-deflate.core' => [
diff --git a/resources/src/mediawiki.base/legacy.wikibits.js b/resources/src/mediawiki.base/legacy.wikibits.js
new file mode 100644 (file)
index 0000000..1e1c303
--- /dev/null
@@ -0,0 +1,107 @@
+/**
+ * MediaWiki legacy wikibits
+ */
+( function () {
+       var msg,
+               loadedScripts = {};
+
+       function wikiUrlencode( page ) {
+               return encodeURIComponent( String( page ) )
+                       .replace( /'/g, '%27' )
+                       .replace( /%20/g, '_' )
+                       // wfUrlencode replacements
+                       .replace( /%3B/g, ';' )
+                       .replace( /%40/g, '@' )
+                       .replace( /%24/g, '$' )
+                       .replace( /%21/g, '!' )
+                       .replace( /%2A/g, '*' )
+                       .replace( /%28/g, '(' )
+                       .replace( /%29/g, ')' )
+                       .replace( /%2C/g, ',' )
+                       .replace( /%2F/g, '/' )
+                       .replace( /%7E/g, '~' )
+                       .replace( /%3A/g, ':' );
+       }
+
+       /**
+        * @deprecated since 1.17 Use jQuery instead
+        */
+       mw.log.deprecate( window, 'addOnloadHook', function ( fn ) {
+               $( function () {
+                       fn();
+               } );
+       }, 'Use jQuery instead.' );
+
+       /**
+        * Wikipage import methods
+        *
+        * See https://www.mediawiki.org/wiki/ResourceLoader/Legacy_JavaScript#wikibits.js
+        */
+
+       /**
+        * @deprecated since 1.17 Use mw.loader instead. Warnings added in 1.25.
+        * @param {string} url
+        * @return {HTMLElement} Script tag
+        */
+       function importScriptURI( url ) {
+               var s;
+               if ( loadedScripts[ url ] ) {
+                       return null;
+               }
+               loadedScripts[ url ] = true;
+               s = document.createElement( 'script' );
+               s.setAttribute( 'src', url );
+               document.head.appendChild( s );
+               return s;
+       }
+
+       function importScript( page ) {
+               var uri = mw.config.get( 'wgScript' ) + '?title=' + wikiUrlencode( page ) +
+                       '&action=raw&ctype=text/javascript';
+               return importScriptURI( uri );
+       }
+
+       /**
+        * @deprecated since 1.17 Use mw.loader instead. Warnings added in 1.25.
+        * @param {string} url
+        * @param {string} media
+        * @return {HTMLElement} Link tag
+        */
+       function importStylesheetURI( url, media ) {
+               var l = document.createElement( 'link' );
+               l.rel = 'stylesheet';
+               l.href = url;
+               if ( media ) {
+                       l.media = media;
+               }
+               document.head.appendChild( l );
+               return l;
+       }
+
+       function importStylesheet( page ) {
+               var uri = mw.config.get( 'wgScript' ) + '?title=' + wikiUrlencode( page ) +
+                       '&action=raw&ctype=text/css';
+               return importStylesheetURI( uri );
+       }
+
+       msg = 'Use mw.loader instead.';
+       mw.log.deprecate( window, 'loadedScripts', loadedScripts, msg );
+       mw.log.deprecate( window, 'importScriptURI', importScriptURI, msg );
+       mw.log.deprecate( window, 'importStylesheetURI', importStylesheetURI, msg );
+       // Not quite deprecated yet.
+       window.importScript = importScript;
+       window.importStylesheet = importStylesheet;
+
+       /**
+        * Replace document.write/writeln with basic html parsing that appends
+        * to the <body> to avoid blanking pages. Added JavaScript will not run.
+        *
+        * @deprecated since 1.26
+        */
+       [ 'write', 'writeln' ].forEach( function ( method ) {
+               mw.log.deprecate( document, method, function () {
+                       $( 'body' ).append( $.parseHTML( Array.prototype.join.call( arguments, '' ) ) );
+               }, 'Use jQuery or mw.loader.load instead.', 'document.' + method );
+       } );
+
+}() );
index 00a74fe..4c8880c 100644 (file)
         * @singleton
         */
 
+       /**
+        * Empty object for third-party libraries, for cases where you don't
+        * want to add a new global, or the global is bad and needs containment
+        * or wrapping.
+        *
+        * @property
+        */
+       mw.libs = {};
+
+       // OOUI widgets specific to MediaWiki
+       mw.widgets = {};
+
        /**
         * @inheritdoc mw.inspect#runReports
         * @method
diff --git a/resources/src/mediawiki.legacy/wikibits.js b/resources/src/mediawiki.legacy/wikibits.js
deleted file mode 100644 (file)
index 1e1c303..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-/**
- * MediaWiki legacy wikibits
- */
-( function () {
-       var msg,
-               loadedScripts = {};
-
-       function wikiUrlencode( page ) {
-               return encodeURIComponent( String( page ) )
-                       .replace( /'/g, '%27' )
-                       .replace( /%20/g, '_' )
-                       // wfUrlencode replacements
-                       .replace( /%3B/g, ';' )
-                       .replace( /%40/g, '@' )
-                       .replace( /%24/g, '$' )
-                       .replace( /%21/g, '!' )
-                       .replace( /%2A/g, '*' )
-                       .replace( /%28/g, '(' )
-                       .replace( /%29/g, ')' )
-                       .replace( /%2C/g, ',' )
-                       .replace( /%2F/g, '/' )
-                       .replace( /%7E/g, '~' )
-                       .replace( /%3A/g, ':' );
-       }
-
-       /**
-        * @deprecated since 1.17 Use jQuery instead
-        */
-       mw.log.deprecate( window, 'addOnloadHook', function ( fn ) {
-               $( function () {
-                       fn();
-               } );
-       }, 'Use jQuery instead.' );
-
-       /**
-        * Wikipage import methods
-        *
-        * See https://www.mediawiki.org/wiki/ResourceLoader/Legacy_JavaScript#wikibits.js
-        */
-
-       /**
-        * @deprecated since 1.17 Use mw.loader instead. Warnings added in 1.25.
-        * @param {string} url
-        * @return {HTMLElement} Script tag
-        */
-       function importScriptURI( url ) {
-               var s;
-               if ( loadedScripts[ url ] ) {
-                       return null;
-               }
-               loadedScripts[ url ] = true;
-               s = document.createElement( 'script' );
-               s.setAttribute( 'src', url );
-               document.head.appendChild( s );
-               return s;
-       }
-
-       function importScript( page ) {
-               var uri = mw.config.get( 'wgScript' ) + '?title=' + wikiUrlencode( page ) +
-                       '&action=raw&ctype=text/javascript';
-               return importScriptURI( uri );
-       }
-
-       /**
-        * @deprecated since 1.17 Use mw.loader instead. Warnings added in 1.25.
-        * @param {string} url
-        * @param {string} media
-        * @return {HTMLElement} Link tag
-        */
-       function importStylesheetURI( url, media ) {
-               var l = document.createElement( 'link' );
-               l.rel = 'stylesheet';
-               l.href = url;
-               if ( media ) {
-                       l.media = media;
-               }
-               document.head.appendChild( l );
-               return l;
-       }
-
-       function importStylesheet( page ) {
-               var uri = mw.config.get( 'wgScript' ) + '?title=' + wikiUrlencode( page ) +
-                       '&action=raw&ctype=text/css';
-               return importStylesheetURI( uri );
-       }
-
-       msg = 'Use mw.loader instead.';
-       mw.log.deprecate( window, 'loadedScripts', loadedScripts, msg );
-       mw.log.deprecate( window, 'importScriptURI', importScriptURI, msg );
-       mw.log.deprecate( window, 'importStylesheetURI', importStylesheetURI, msg );
-       // Not quite deprecated yet.
-       window.importScript = importScript;
-       window.importStylesheet = importStylesheet;
-
-       /**
-        * Replace document.write/writeln with basic html parsing that appends
-        * to the <body> to avoid blanking pages. Added JavaScript will not run.
-        *
-        * @deprecated since 1.26
-        */
-       [ 'write', 'writeln' ].forEach( function ( method ) {
-               mw.log.deprecate( document, method, function () {
-                       $( 'body' ).append( $.parseHTML( Array.prototype.join.call( arguments, '' ) ) );
-               }, 'Use jQuery or mw.loader.load instead.', 'document.' + method );
-       } );
-
-}() );
index 4ea1999..667c2ba 100644 (file)
 
                // Make the image smaller in case the current image
                // size is larger than the original file size.
-               this.getImageInfo( this.$thumbnail ).done( function ( info ) {
+               this.getImageInfo( this.$thumbnail ).then( function ( info ) {
                        // NOTE: There will be a jump when resizing the window
                        // because the cache is cleared and this a new network request.
                        if (
         *  element once the image has loaded.
         */
        mw.GallerySlideshow.prototype.loadImage = function ( $img ) {
-               var img, d = $.Deferred();
-
-               this.getImageInfo( $img ).done( function ( info ) {
+               return this.getImageInfo( $img ).then( function ( info ) {
+                       var img, d = $.Deferred();
                        img = new Image();
                        img.src = info.thumburl;
                        img.onload = function () {
                        img.onerror = function () {
                                d.reject();
                        };
-               } ).fail( function () {
-                       d.reject();
+                       return d.promise();
                } );
-
-               return d.promise();
        };
 
        /**
index 4eba81d..0e59da6 100644 (file)
 
                // Turn logout to a POST action
                $( '#pt-logout a' ).on( 'click', function ( e ) {
-                       var api = new mw.Api(), returnUrl;
-                       returnUrl = $( '#pt-logout a' ).attr( 'href' );
+                       var api = new mw.Api(),
+                               returnUrl = $( '#pt-logout a' ).attr( 'href' );
                        mw.notify(
                                mw.message( 'logging-out-notify' ),
                                { tag: 'logout', autoHide: false }
                        );
                        api.postWithToken( 'csrf', {
                                action: 'logout'
-                       } ).done( function () {
-                               window.location = returnUrl;
-                       } ).fail( function ( e ) {
-                               mw.notify(
-                                       mw.message( 'logout-failed', e ),
-                                       { type: 'error', tag: 'logout', autoHide: false }
-                               );
-                       } );
+                       } ).then(
+                               function () {
+                                       location.href = returnUrl;
+                               },
+                               function ( e ) {
+                                       mw.notify(
+                                               mw.message( 'logout-failed', e ),
+                                               { type: 'error', tag: 'logout', autoHide: false }
+                                       );
+                               }
+                       );
                        e.preventDefault();
                } );
        } );
index d67739d..e5240a4 100644 (file)
                }
 
                &.oo-ui-tagMultiselectWidget-outlined {
+                       // per T177206#4271707 we avoid keeping the collapsed element to take the whole width of the screen
+                       // we are providing enough cues (keeping the labels) for it to be clear that the panel gets compacted
+                       // to the left and the user not to feel lost with the transition.
                        width: unset;
                        max-width: 100%;
                }
 
                // Hide inner elements
                .mw-rcfilters-ui-filterTagMultiselectWidget-wrapper-filters,
-               .mw-rcfilters-ui-filterTagMultiselectWidget-views {
+               .mw-rcfilters-ui-filterTagMultiselectWidget-views,
+               .mw-rcfilters-ui-filterTagMultiselectWidget-views-input {
                        display: none;
                }
        }
                }
 
                &-select {
-                       width: 1em;
-
                        &-widget.oo-ui-widget {
                                display: block;
                                .box-sizing( border-box );
index 4e7d02d..46c5441 100644 (file)
@@ -1,5 +1,11 @@
 @import 'mediawiki.mixins';
 
+.mw-rcfilters-collapsed {
+       .mw-rcfilters-ui-filterWrapperWidget-bottom {
+               display: none;
+       }
+}
+
 .mw-rcfilters-ui-filterWrapperWidget {
        width: 100%;
        // Make sure this uses the interface direction, not the content direction
index 8e30937..19b64b2 100644 (file)
@@ -1,3 +1,5 @@
+@import 'mediawiki.ui/variables';
+
 .mw-rcfilters-ui-rcTopSectionWidget {
        &-topLinks {
                &-table {
                padding-left: 1em;
        }
 }
+
+@media screen and ( max-width: @width-breakpoint-tablet ) {
+       .mw-rcfilters-ui-rcTopSectionWidget {
+               & > .mw-rcfilters-ui-table > .mw-rcfilters-ui-row {
+                       display: flex;
+                       flex-wrap: wrap;
+               }
+
+               &-savedLinks {
+                       padding-left: 0;
+               }
+
+               &-topLinks-table {
+                       width: auto;
+                       flex-grow: 1;
+               }
+
+               .mw-rcfilters-ui-table-placeholder {
+                       width: auto;
+               }
+       }
+}
index a50cd0e..7c8a2f5 100644 (file)
@@ -384,6 +384,9 @@ FilterTagMultiselectWidget.prototype.onSavedQueriesItemUpdate = function ( item
  * @param {boolean} isVisible Menu is visible
  */
 FilterTagMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {
+
+       var scrollToElement = this.isMobile ? this.input.$input : this.$element;
+
        // Parent
        FilterTagMultiselectWidget.parent.prototype.onMenuToggle.call( this );
 
@@ -404,6 +407,13 @@ FilterTagMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {
                                }.bind( this )
                        );
                }
+
+               // Only scroll to top of the viewport if:
+               // - The widget is more than 20px from the top
+               // - The widget is not above the top of the viewport (do not scroll downwards)
+               //   (This isn't represented because >20 is, anyways and always, bigger than 0)
+               this.scrollToTop( scrollToElement, 0, { min: 20, max: Infinity } );
+
        } else {
                // Clear selection
                this.selectTag( null );
@@ -428,7 +438,6 @@ FilterTagMultiselectWidget.prototype.onMenuToggle = function ( isVisible ) {
  * @inheritdoc
  */
 FilterTagMultiselectWidget.prototype.onInputFocus = function () {
-       var scrollToElement = this.isMobile ? this.input.$input : this.$element;
 
        // treat the input as a menu toggle rather than a text field on mobile
        if ( this.isMobile ) {
@@ -438,12 +447,6 @@ FilterTagMultiselectWidget.prototype.onInputFocus = function () {
                // Parent
                FilterTagMultiselectWidget.parent.prototype.onInputFocus.call( this );
        }
-
-       // Only scroll to top of the viewport if:
-       // - The widget is more than 20px from the top
-       // - The widget is not above the top of the viewport (do not scroll downwards)
-       //   (This isn't represented because >20 is, anyways and always, bigger than 0)
-       this.scrollToTop( scrollToElement, 0, { min: 20, max: Infinity } );
 };
 
 /**
index ace92f0..ad05c6f 100644 (file)
         * @class mw
         */
        mw = {
-               redefineFallbacksForTest: function () {
-                       if ( !window.QUnit ) {
-                               throw new Error( 'Not allowed' );
-                       }
-                       defineFallbacks();
-               },
+               redefineFallbacksForTest: window.QUnit && defineFallbacks,
 
                /**
                 * Get the current time, measured in milliseconds since January 1, 1970 (UTC).
                 */
                config: new Map( $VARS.wgLegacyJavaScriptGlobals ),
 
-               /**
-                * Empty object for third-party libraries, for cases where you don't
-                * want to add a new global, or the global is bad and needs containment
-                * or wrapping.
-                *
-                * @property
-                */
-               libs: {},
-
                /**
                 * Store for messages.
                 *
                                        }
 
                                        if ( !hasOwn.call( scriptFiles, fileName ) ) {
-                                               throw new Error( 'Cannot require() undefined file ' + fileName );
+                                               throw new Error( 'Cannot require undefined file ' + fileName );
                                        }
                                        if ( hasOwn.call( moduleObj.packageExports, fileName ) ) {
                                                // File has already been executed, return the cached result
                                        cssPending = 0;
 
                                if ( registry[ module ].state !== 'loaded' ) {
-                                       throw new Error( 'Module in state "' + registry[ module ].state + '" may not be executed: ' + module );
+                                       throw new Error( 'Module in state "' + registry[ module ].state + '" may not execute: ' + module );
                                }
 
                                registry[ module ].state = 'executing';
                                                        } else {
                                                                mainScript = script.files[ script.main ];
                                                                if ( typeof mainScript !== 'function' ) {
-                                                                       throw new Error( 'Main file ' + script.main + ' in module ' + module +
-                                                                               ' must be of type function, found ' + typeof mainScript );
+                                                                       throw new Error( 'Main file in module ' + module + ' must be a function' );
                                                                }
                                                                // jQuery parameters are not passed for multi-file modules
                                                                mainScript(
                                 * @param {string} [type='text/javascript'] MIME type to use if calling with a URL of an
                                 *  external script or style; acceptable values are "text/css" and
                                 *  "text/javascript"; if no type is provided, text/javascript is assumed.
+                                * @throws {Error} If type is invalid
                                 */
                                load: function ( modules, type ) {
                                        if ( typeof modules === 'string' && /^(https?:)?\/?\//.test( modules ) ) {
                                                        addScript( modules );
                                                } else {
                                                        // Unknown type
-                                                       throw new Error( 'type must be text/css or text/javascript, found ' + type );
+                                                       throw new Error( 'Invalid type ' + type );
                                                }
                                        } else {
                                                // One or more modules
                         * @property {mw.Map}
                         */
                        tokens: new Map()
-               },
-
-               // OOUI widgets specific to MediaWiki
-               widgets: {}
+               }
 
        };
 
index e3c20a2..2945308 100644 (file)
@@ -1265,7 +1265,7 @@ class ParserTestRunner {
                        $tables[] = 'revision_actor_temp';
                }
 
-               if ( in_array( $this->db->getType(), [ 'mysql', 'sqlite', 'oracle' ] ) ) {
+               if ( in_array( $this->db->getType(), [ 'mysql', 'sqlite' ] ) ) {
                        array_push( $tables, 'searchindex' );
                }
 
@@ -1305,11 +1305,7 @@ class ParserTestRunner {
                $this->db = MediaWikiServices::getInstance()->getDBLoadBalancer()->getConnection( DB_MASTER );
                $dbType = $this->db->getType();
 
-               if ( $dbType == 'oracle' ) {
-                       $suspiciousPrefixes = [ 'pt_', MediaWikiTestCase::ORA_DB_PREFIX ];
-               } else {
-                       $suspiciousPrefixes = [ 'parsertest_', MediaWikiTestCase::DB_PREFIX ];
-               }
+               $suspiciousPrefixes = [ 'parsertest_', MediaWikiTestCase::DB_PREFIX ];
                if ( in_array( $wgDBprefix, $suspiciousPrefixes ) ) {
                        throw new MWException( "\$wgDBprefix=$wgDBprefix suggests DB setup is already done" );
                }
@@ -1324,23 +1320,13 @@ class ParserTestRunner {
                }
 
                $temporary = $this->useTemporaryTables || $dbType == 'postgres';
-               $prefix = $dbType != 'oracle' ? 'parsertest_' : 'pt_';
+               $prefix = 'parsertest_';
 
                $this->dbClone = new CloneDatabase( $this->db, $this->listTables(), $prefix );
                $this->dbClone->useTemporaryTables( $temporary );
                $this->dbClone->cloneTableStructure();
                CloneDatabase::changePrefix( $prefix );
 
-               if ( $dbType == 'oracle' ) {
-                       $this->db->query( 'BEGIN FILL_WIKI_INFO; END;' );
-                       # Insert 0 user to prevent FK violations
-
-                       # Anonymous user
-                       $this->db->insert( 'user', [
-                               'user_id' => 0,
-                               'user_name' => 'Anonymous' ] );
-               }
-
                $teardown[] = function () {
                        $this->teardownDatabase();
                };
@@ -1542,15 +1528,7 @@ class ParserTestRunner {
                $tables = $this->listTables();
 
                foreach ( $tables as $table ) {
-                       if ( $this->db->getType() == 'oracle' ) {
-                               $this->db->query( "DROP TABLE pt_$table DROP CONSTRAINTS" );
-                       } else {
-                               $this->db->query( "DROP TABLE `parsertest_$table`" );
-                       }
-               }
-
-               if ( $this->db->getType() == 'oracle' ) {
-                       $this->db->query( 'BEGIN FILL_WIKI_INFO; END;' );
+                       $this->db->query( "DROP TABLE `parsertest_$table`" );
                }
        }
 
index 7046a7f..6599041 100644 (file)
@@ -15817,7 +15817,7 @@ parsoid=wt2html,wt2wt,html2html
 ###################
 
 !! test
-Link to image page- image page normally doesn't exists, hence edit link
+Link to image page- image page normally doesn't exist, hence edit link
 Add test with existing image page
 #<p><a href="/wiki/File:Test" title="Image:Test">Image:test</a>
 !! wikitext
index 07d135d..2f00132 100644 (file)
@@ -136,10 +136,9 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
        private $overriddenServices = [];
 
        /**
-        * Table name prefixes. Oracle likes it shorter.
+        * Table name prefix.
         */
        const DB_PREFIX = 'unittest_';
-       const ORA_DB_PREFIX = 'ut_';
 
        /**
         * @var array
@@ -149,7 +148,6 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
                'mysql',
                'sqlite',
                'postgres',
-               'oracle'
        ];
 
        public function __construct( $name = null, array $data = [], $dataName = '' ) {
@@ -635,6 +633,9 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
                        }
                }
 
+               // Clear any cached test users so they don't retain references to old services
+               TestUserRegistry::clear();
+
                // Re-enable any disabled deprecation warnings
                MWDebug::clearLog();
                // Restore mw globals
@@ -1318,7 +1319,7 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
         * @since 1.32
         */
        public static function getTestPrefixFor( IDatabase $db ) {
-               return $db->getType() == 'oracle' ? self::ORA_DB_PREFIX : self::DB_PREFIX;
+               return self::DB_PREFIX;
        }
 
        /**
@@ -1411,32 +1412,6 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
         * @since 1.32
         */
        protected function addCoreDBData() {
-               if ( $this->db->getType() == 'oracle' ) {
-                       # Insert 0 user to prevent FK violations
-                       # Anonymous user
-                       if ( !$this->db->selectField( 'user', '1', [ 'user_id' => 0 ] ) ) {
-                               $this->db->insert( 'user', [
-                                       'user_id' => 0,
-                                       'user_name' => 'Anonymous' ], __METHOD__, [ 'IGNORE' ] );
-                       }
-
-                       # Insert 0 page to prevent FK violations
-                       # Blank page
-                       if ( !$this->db->selectField( 'page', '1', [ 'page_id' => 0 ] ) ) {
-                               $this->db->insert( 'page', [
-                                       'page_id' => 0,
-                                       'page_namespace' => 0,
-                                       'page_title' => ' ',
-                                       'page_restrictions' => null,
-                                       'page_is_redirect' => 0,
-                                       'page_is_new' => 0,
-                                       'page_random' => 0,
-                                       'page_touched' => $this->db->timestamp(),
-                                       'page_latest' => 0,
-                                       'page_len' => 0 ], __METHOD__, [ 'IGNORE' ] );
-                       }
-               }
-
                SiteStatsInit::doPlaceholderInit();
 
                User::resetIdByNameCache();
@@ -1520,7 +1495,7 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
                        $prefix = self::getTestPrefixFor( $db );
                }
 
-               if ( ( $db->getType() == 'oracle' || !self::$useTemporaryTables ) && self::$reuseDB ) {
+               if ( !self::$useTemporaryTables && self::$reuseDB ) {
                        $db->tablePrefix( $prefix );
                        return false;
                }
@@ -1609,12 +1584,6 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
                        return;
                }
 
-               // Assuming this isn't needed for External Store database, and not sure if the procedure
-               // would be available there.
-               if ( $db->getType() == 'oracle' ) {
-                       $db->query( 'BEGIN FILL_WIKI_INFO; END;', __METHOD__ );
-               }
-
                Hooks::run( 'UnitTestsAfterDatabaseSetup', [ $db, $prefix ] );
        }
 
@@ -1928,7 +1897,7 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
                                $tablesUsed = array_unique( array_merge( $tablesUsed, $pageTables ) );
                        }
 
-                       // Postgres, Oracle, and MSSQL all use mwuser/pagecontent
+                       // Postgres uses mwuser/pagecontent
                        // instead of user/text. But Postgres does not remap the
                        // table name in tableExists(), so we mark the real table
                        // names as being used.
@@ -1971,7 +1940,7 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
                        return;
                }
 
-               $truncate = in_array( $db->getType(), [ 'oracle', 'mysql' ] );
+               $truncate = in_array( $db->getType(), [ 'mysql' ] );
 
                if ( $truncate ) {
                        $db->query( 'TRUNCATE TABLE ' . $db->tableName( $tableName ), __METHOD__ );
index 4400475..f227ae1 100644 (file)
@@ -49,10 +49,9 @@ function wfRequireOnceInGlobalScope( $fileName ) {
 define( 'MEDIAWIKI', true );
 define( 'MW_PHPUNIT_TEST', true );
 
-// We don't use a settings file here but some code still assumes that one exists
-define( 'MW_CONFIG_FILE', 'LocalSettings.php' );
-
 $IP = realpath( __DIR__ . '/../../' );
+// We don't use a settings file here but some code still assumes that one exists
+define( 'MW_CONFIG_FILE', "$IP/LocalSettings.php" );
 
 // these variables must be defined before setup runs
 $GLOBALS['IP'] = $IP;
index 4544e9b..f546dc2 100644 (file)
@@ -27,7 +27,6 @@ class MergeHistoryTest extends MediaWikiTestCase {
         * @param string|bool $error Expected error for test (or true for no error)
         */
        public function testIsValidMerge( $source, $dest, $timestamp, $error ) {
-               $this->setMwGlobals( 'wgContentHandlerUseDB', false );
                if ( $timestamp === true ) {
                        // Although this timestamp is after the latest timestamp of both pages,
                        // MergeHistory should select the latest source timestamp up to this which should
index 9166666..31a0e79 100644 (file)
@@ -18,7 +18,11 @@ class MovePageTest extends MediaWikiTestCase {
         * @covers MovePage::isValidFileMove
         */
        public function testIsValidMove( $old, $new, $error ) {
-               $this->setMwGlobals( 'wgContentHandlerUseDB', false );
+               global $wgMultiContentRevisionSchemaMigrationStage;
+               if ( $wgMultiContentRevisionSchemaMigrationStage === SCHEMA_COMPAT_OLD ) {
+                       // We can only set this to false with the old schema
+                       $this->setMwGlobals( 'wgContentHandlerUseDB', false );
+               }
                $mp = new MovePage(
                        Title::newFromText( $old ),
                        Title::newFromText( $new )
@@ -35,16 +39,23 @@ class MovePageTest extends MediaWikiTestCase {
         * This should be kept in sync with TitleTest::provideTestIsValidMoveOperation
         */
        public static function provideIsValidMove() {
-               return [
+               global $wgMultiContentRevisionSchemaMigrationStage;
+               $ret = [
                        // for MovePage::isValidMove
                        [ 'Test', 'Test', 'selfmove' ],
                        [ 'Special:FooBar', 'Test', 'immobile-source-namespace' ],
                        [ 'Test', 'Special:FooBar', 'immobile-target-namespace' ],
-                       [ 'MediaWiki:Common.js', 'Help:Some wikitext page', 'bad-target-model' ],
                        [ 'Page', 'File:Test.jpg', 'nonfile-cannot-move-to-file' ],
                        // for MovePage::isValidFileMove
                        [ 'File:Test.jpg', 'Page', 'imagenocrossnamespace' ],
                ];
+               if ( $wgMultiContentRevisionSchemaMigrationStage === SCHEMA_COMPAT_OLD ) {
+                       // The error can only occur if $wgContentHandlerUseDB is false, which doesn't work with
+                       // the new schema, so omit the test in that case
+                       array_push( $ret,
+                               [ 'MediaWiki:Common.js', 'Help:Some wikitext page', 'bad-target-model' ] );
+               }
+               return $ret;
        }
 
        /**
index 913f56d..e8f0873 100644 (file)
@@ -296,9 +296,15 @@ class TitleTest extends MediaWikiTestCase {
         * @covers Title::isValidMoveOperation
         */
        public function testIsValidMoveOperation( $source, $target, $expected ) {
+               global $wgMultiContentRevisionSchemaMigrationStage;
+
                $this->hideDeprecated( 'Title::isValidMoveOperation' );
 
-               $this->setMwGlobals( 'wgContentHandlerUseDB', false );
+               if ( $wgMultiContentRevisionSchemaMigrationStage === SCHEMA_COMPAT_OLD ) {
+                       // We can only set this to false with the old schema
+                       $this->setMwGlobals( 'wgContentHandlerUseDB', false );
+               }
+
                $title = Title::newFromText( $source );
                $nt = Title::newFromText( $target );
                $errors = $title->isValidMoveOperation( $nt, false );
@@ -313,16 +319,24 @@ class TitleTest extends MediaWikiTestCase {
        }
 
        public static function provideTestIsValidMoveOperation() {
-               return [
+               global $wgMultiContentRevisionSchemaMigrationStage;
+               $ret = [
                        // for Title::isValidMoveOperation
                        [ 'Some page', '', 'badtitletext' ],
                        [ 'Test', 'Test', 'selfmove' ],
                        [ 'Special:FooBar', 'Test', 'immobile-source-namespace' ],
                        [ 'Test', 'Special:FooBar', 'immobile-target-namespace' ],
-                       [ 'MediaWiki:Common.js', 'Help:Some wikitext page', 'bad-target-model' ],
                        [ 'Page', 'File:Test.jpg', 'nonfile-cannot-move-to-file' ],
                        [ 'File:Test.jpg', 'Page', 'imagenocrossnamespace' ],
                ];
+               if ( $wgMultiContentRevisionSchemaMigrationStage === SCHEMA_COMPAT_OLD ) {
+                       // The error can only occur if $wgContentHandlerUseDB is false, which doesn't work with
+                       // the new schema, so omit the test in that case
+                       array_push( $ret,
+                               [ 'MediaWiki:Common.js', 'Help:Some wikitext page', 'bad-target-model' ]
+                       );
+               }
+               return $ret;
        }
 
        /**
@@ -810,7 +824,7 @@ class TitleTest extends MediaWikiTestCase {
                // Tell Title it doesn't know whether it exists
                $title->mArticleID = -1;
 
-               // Tell the link cache it doesn't exists when it really does
+               // Tell the link cache it doesn't exist when it really does
                $linkCache->clearLink( $title );
                $linkCache->addBadLinkObj( $title );
 
diff --git a/tests/phpunit/includes/api/ApiFeedContributionsTest.php b/tests/phpunit/includes/api/ApiFeedContributionsTest.php
new file mode 100644 (file)
index 0000000..f3ec565
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+
+/**
+ * @group API
+ * @group medium
+ *
+ * @covers ApiFeedContributions
+ */
+class ApiFeedContributionsTest extends ApiTestCase {
+
+       public function testInvalidExternalUser() {
+               $this->setExpectedException( ApiUsageException::class,
+                       'Invalid value ">" for user parameter "user"' );
+               $this->doApiRequest( [
+                       'action' => 'feedcontributions',
+                       'user' => '>'
+               ] );
+       }
+}
index e49e1d8..c935c2d 100644 (file)
@@ -34,7 +34,7 @@ class ApiQueryBasicTest extends ApiQueryTestBase {
        /**
         * Create a set of pages. These must not change, otherwise the tests might give wrong results.
         *
-*@see MediaWikiTestCase::addDBDataOnce()
+        * @see MediaWikiTestCase::addDBDataOnce()
         */
        function addDBDataOnce() {
                try {
index 334fd5d..a1aeb66 100644 (file)
@@ -30,7 +30,7 @@ class ApiQueryContinue2Test extends ApiQueryContinueTestBase {
        /**
         * Create a set of pages. These must not change, otherwise the tests might give wrong results.
         *
-*@see MediaWikiTestCase::addDBDataOnce()
+        * @see MediaWikiTestCase::addDBDataOnce()
         */
        function addDBDataOnce() {
                try {
index 7259bb8..a12d9b0 100644 (file)
@@ -34,7 +34,7 @@ class ApiQueryContinueTest extends ApiQueryContinueTestBase {
        /**
         * Create a set of pages. These must not change, otherwise the tests might give wrong results.
         *
-*@see MediaWikiTestCase::addDBDataOnce()
+        * @see MediaWikiTestCase::addDBDataOnce()
         */
        function addDBDataOnce() {
                try {
index 1405680..71870e1 100644 (file)
@@ -23,7 +23,7 @@ class ChangeTagsTest extends MediaWikiTestCase {
                $this->tablesUsed[] = 'archive';
        }
 
-       // TODO only modifyDisplayQuery and getSoftwareTags are tested, nothing else is
+       // TODO most methods are not tested
 
        /** @dataProvider provideModifyDisplayQuery */
        public function testModifyDisplayQuery( $origQuery, $filter_tag, $useTags, $modifiedQuery ) {
@@ -555,6 +555,48 @@ class ChangeTagsTest extends MediaWikiTestCase {
                $this->assertEquals( $expected2, iterator_to_array( $res2, false ) );
        }
 
+       public function provideTags() {
+               $tags = [ 'tag 1', 'tag 2', 'tag 3' ];
+               $rcId = 123;
+               $revId = 456;
+               $logId = 789;
+
+               yield [ $tags, $rcId, null, null ];
+               yield [ $tags, null, $revId, null ];
+               yield [ $tags, null, null, $logId ];
+               yield [ $tags, $rcId, $revId, null ];
+               yield [ $tags, $rcId, null, $logId ];
+               yield [ $tags, $rcId, $revId, $logId ];
+       }
+
+       /**
+        * @dataProvider provideTags
+        */
+       public function testGetTags( array $tags, $rcId, $revId, $logId ) {
+               ChangeTags::addTags( $tags, $rcId, $revId, $logId );
+
+               $actualTags = ChangeTags::getTags( $this->db, $rcId, $revId, $logId );
+
+               $this->assertSame( $tags, $actualTags );
+       }
+
+       public function testGetTags_multiple_arguments() {
+               $rcId = 123;
+               $revId = 456;
+               $logId = 789;
+
+               ChangeTags::addTags( [ 'tag 1' ], $rcId );
+               ChangeTags::addTags( [ 'tag 2' ], $rcId, $revId );
+               ChangeTags::addTags( [ 'tag 3' ], $rcId, $revId, $logId );
+
+               $tags3 = [ 'tag 3' ];
+               $tags2 = array_merge( $tags3, [ 'tag 2' ] );
+               $tags1 = array_merge( $tags2, [ 'tag 1' ] );
+               $this->assertArrayEquals( $tags3, ChangeTags::getTags( $this->db, $rcId, $revId, $logId ) );
+               $this->assertArrayEquals( $tags2, ChangeTags::getTags( $this->db, $rcId, $revId ) );
+               $this->assertArrayEquals( $tags1, ChangeTags::getTags( $this->db, $rcId ) );
+       }
+
        public function testTagUsageStatistics() {
                $dbw = wfGetDB( DB_MASTER );
                $dbw->delete( 'change_tag', '*' );
index 424c64b..1016f28 100644 (file)
@@ -451,8 +451,6 @@ class LBFactoryTest extends MediaWikiTestCase {
         * @covers \Wikimedia\Rdbms\LoadBalancer::getConnection
         * @covers \Wikimedia\Rdbms\DatabaseMysqlBase::doSelectDomain
         * @covers \Wikimedia\Rdbms\DatabaseMysqlBase::selectDB
-        * @covers \Wikimedia\Rdbms\DatabaseMssql::selectDB
-        * @covers DatabaseOracle::selectDB
         */
        public function testNiceDomains() {
                global $wgDBname;
@@ -538,8 +536,6 @@ class LBFactoryTest extends MediaWikiTestCase {
         * @covers \Wikimedia\Rdbms\LoadBalancer::getConnection
         * @covers \Wikimedia\Rdbms\DatabaseMysqlBase::doSelectDomain
         * @covers \Wikimedia\Rdbms\DatabaseMysqlBase::selectDB
-        * @covers \Wikimedia\Rdbms\DatabaseMssql::selectDB
-        * @covers DatabaseOracle::selectDB
         */
        public function testTrickyDomain() {
                global $wgDBname;
@@ -611,8 +607,6 @@ class LBFactoryTest extends MediaWikiTestCase {
         * @covers \Wikimedia\Rdbms\LoadBalancer::getConnection
         * @covers \Wikimedia\Rdbms\DatabaseMysqlBase::doSelectDomain
         * @covers \Wikimedia\Rdbms\DatabaseMysqlBase::selectDB
-        * @covers \Wikimedia\Rdbms\DatabaseMssql::selectDB
-        * @covers DatabaseOracle::selectDB
         */
        public function testInvalidSelectDB() {
                if ( wfGetDB( DB_MASTER )->databasesAreIndependent() ) {
@@ -645,17 +639,18 @@ class LBFactoryTest extends MediaWikiTestCase {
         * @covers \Wikimedia\Rdbms\DatabasePostgres::selectDB
         * @expectedException \Wikimedia\Rdbms\DBConnectionError
         */
-       public function testInvalidSelectDBIndependant() {
+       public function testInvalidSelectDBIndependent() {
                $dbname = 'unittest-domain'; // explodes if DB is selected
                $factory = $this->newLBFactoryMulti(
                        [ 'localDomain' => ( new DatabaseDomain( $dbname, null, '' ) )->getId() ],
                        [
-                               'dbname' => 'do_not_select_me' // explodes if DB is selected
+                               // Explodes with SQLite and Postgres during open/USE
+                               'dbname' => 'bad_dir/do_not_select_me'
                        ]
                );
                $lb = $factory->getMainLB();
 
-               if ( !wfGetDB( DB_MASTER )->databasesAreIndependent() ) {
+               if ( !$lb->getConnection( DB_MASTER )->databasesAreIndependent() ) {
                        $this->markTestSkipped( "Not applicable per databasesAreIndependent()" );
                }
 
@@ -666,34 +661,31 @@ class LBFactoryTest extends MediaWikiTestCase {
        /**
         * @covers \Wikimedia\Rdbms\DatabaseSqlite::selectDB
         * @covers \Wikimedia\Rdbms\DatabasePostgres::selectDB
-        * @expectedException \Wikimedia\Rdbms\DBConnectionError
+        * @expectedException \Wikimedia\Rdbms\DBExpectedError
         */
-       public function testInvalidSelectDBIndependant2() {
+       public function testInvalidSelectDBIndependent2() {
                $dbname = 'unittest-domain'; // explodes if DB is selected
                $factory = $this->newLBFactoryMulti(
                        [ 'localDomain' => ( new DatabaseDomain( $dbname, null, '' ) )->getId() ],
                        [
-                               'dbname' => 'do_not_select_me' // explodes if DB is selected
+                               // Explodes with SQLite and Postgres during open/USE
+                               'dbname' => 'bad_dir/do_not_select_me'
                        ]
                );
                $lb = $factory->getMainLB();
 
-               if ( !wfGetDB( DB_MASTER )->databasesAreIndependent() ) {
+               if ( !$lb->getConnection( DB_MASTER )->databasesAreIndependent() ) {
                        $this->markTestSkipped( "Not applicable per databasesAreIndependent()" );
                }
 
                $db = $lb->getConnection( DB_MASTER );
-               \Wikimedia\suppressWarnings();
                $db->selectDB( 'garbage-db' );
-               \Wikimedia\restoreWarnings();
        }
 
        /**
         * @covers \Wikimedia\Rdbms\LoadBalancer::getConnection
         * @covers \Wikimedia\Rdbms\LoadBalancer::redefineLocalDomain
         * @covers \Wikimedia\Rdbms\DatabaseMysqlBase::selectDB
-        * @covers \Wikimedia\Rdbms\DatabaseMssql::selectDB
-        * @covers DatabaseOracle::selectDB
         */
        public function testRedefineLocalDomain() {
                global $wgDBname;
index bf5326a..588fe67 100644 (file)
@@ -341,9 +341,9 @@ class LoadBalancerTest extends MediaWikiTestCase {
        private function assertWriteAllowed( Database $db ) {
                $table = $db->tableName( 'some_table' );
                // Trigger a transaction so that rollback() will remove all the tables.
-               // Don't do this for MySQL/Oracle as they auto-commit transactions for DDL
+               // Don't do this for MySQL as they auto-commit transactions for DDL
                // statements such as CREATE TABLE.
-               $useAtomicSection = in_array( $db->getType(), [ 'sqlite', 'postgres', 'mssql' ], true );
+               $useAtomicSection = in_array( $db->getType(), [ 'sqlite', 'postgres' ], true );
                try {
                        $db->dropTable( 'some_table' ); // clear for sanity
                        $this->assertNotEquals( $db::STATUS_TRX_ERROR, $db->trxStatus() );
index 4c93789..34837c7 100644 (file)
@@ -333,7 +333,7 @@ class CSSMinTest extends MediaWikiTestCase {
         * Cases with empty url() for CSSMin::remap.
         *
         * Regression test for T191237.
-   *
+        *
         * @dataProvider provideRemapEmptyUrl
         * @covers CSSMin
         */
index ccad4a4..25b4291 100644 (file)
@@ -55,7 +55,7 @@ class XhprofTest extends PHPUnit\Framework\TestCase {
 
        /**
         * Data provider for testCallAny().
-       */
+        */
        public function provideCallAny() {
                return [
                        [
index 4a56fc5..9ec86bc 100644 (file)
@@ -112,21 +112,48 @@ class BagOStuffTest extends MediaWikiTestCase {
        /**
         * @covers MediumSpecificBagOStuff::changeTTL
         */
-       public function testChangeTTL() {
-               $now = 1563892142;
+       public function testChangeTTLRenew() {
+               $now = microtime( true ); // need real time
                $this->cache->setMockTime( $now );
 
                $key = $this->cache->makeKey( self::TEST_KEY );
                $value = 'meow';
 
-               $this->cache->add( $key, $value, 5 );
+               $this->cache->add( $key, $value, 60 );
                $this->assertEquals( $value, $this->cache->get( $key ) );
-               $this->assertTrue( $this->cache->changeTTL( $key, 10 ) );
-               $this->assertTrue( $this->cache->changeTTL( $key, 10 ) );
+               $this->assertTrue( $this->cache->changeTTL( $key, 120 ) );
+               $this->assertTrue( $this->cache->changeTTL( $key, 120 ) );
                $this->assertTrue( $this->cache->changeTTL( $key, 0 ) );
                $this->assertEquals( $this->cache->get( $key ), $value );
+
                $this->cache->delete( $key );
                $this->assertFalse( $this->cache->changeTTL( $key, 15 ) );
+       }
+
+       /**
+        * @covers MediumSpecificBagOStuff::changeTTL
+        */
+       public function testChangeTTLExpireRel() {
+               $now = microtime( true ); // need real time
+               $this->cache->setMockTime( $now );
+
+               $key = $this->cache->makeKey( self::TEST_KEY );
+               $value = 'meow';
+
+               $this->cache->add( $key, $value, 5 );
+               $this->assertTrue( $this->cache->changeTTL( $key, -3600 ) );
+               $this->assertFalse( $this->cache->get( $key ) );
+       }
+
+       /**
+        * @covers MediumSpecificBagOStuff::changeTTL
+        */
+       public function testChangeTTLExpireAbs() {
+               $now = microtime( true ); // need real time
+               $this->cache->setMockTime( $now );
+
+               $key = $this->cache->makeKey( self::TEST_KEY );
+               $value = 'meow';
 
                $this->cache->add( $key, $value, 5 );
                $this->assertTrue( $this->cache->changeTTL( $key, $now - 3600 ) );
@@ -146,10 +173,7 @@ class BagOStuffTest extends MediaWikiTestCase {
                $key4 = $this->cache->makeKey( 'test-key4' );
 
                // cleanup
-               $this->cache->delete( $key1 );
-               $this->cache->delete( $key2 );
-               $this->cache->delete( $key3 );
-               $this->cache->delete( $key4 );
+               $this->cache->deleteMulti( [ $key1, $key2, $key3, $key4 ] );
 
                $ok = $this->cache->changeTTLMulti( [ $key1, $key2, $key3 ], 30 );
                $this->assertFalse( $ok, "No keys found" );
@@ -158,7 +182,6 @@ class BagOStuffTest extends MediaWikiTestCase {
                $this->assertFalse( $this->cache->get( $key3 ) );
 
                $ok = $this->cache->setMulti( [ $key1 => 1, $key2 => 2, $key3 => 3 ] );
-
                $this->assertTrue( $ok, "setMulti() succeeded" );
                $this->assertEquals(
                        3,
@@ -172,21 +195,24 @@ class BagOStuffTest extends MediaWikiTestCase {
                $this->assertEquals( 2, $this->cache->get( $key2 ) );
                $this->assertEquals( 3, $this->cache->get( $key3 ) );
 
-               $ok = $this->cache->changeTTLMulti( [ $key1, $key2, $key3 ], $now + 86400 );
-               $this->assertTrue( $ok, "Expiry set for all keys" );
-
                $ok = $this->cache->changeTTLMulti( [ $key1, $key2, $key3, $key4 ], 300 );
                $this->assertFalse( $ok, "One key missing" );
+               $this->assertEquals( 1, $this->cache->get( $key1 ), "Key still live" );
+
+               $now = microtime( true ); // real time
+               $ok = $this->cache->setMulti( [ $key1 => 1, $key2 => 2, $key3 => 3 ] );
+               $this->assertTrue( $ok, "setMulti() succeeded" );
+
+               $ok = $this->cache->changeTTLMulti( [ $key1, $key2, $key3 ], $now + 86400 );
+               $this->assertTrue( $ok, "Expiry set for all keys" );
+               $this->assertEquals( 1, $this->cache->get( $key1 ), "Key still live" );
 
                $this->assertEquals( 2, $this->cache->incr( $key1 ) );
                $this->assertEquals( 3, $this->cache->incr( $key2 ) );
                $this->assertEquals( 4, $this->cache->incr( $key3 ) );
 
                // cleanup
-               $this->cache->delete( $key1 );
-               $this->cache->delete( $key2 );
-               $this->cache->delete( $key3 );
-               $this->cache->delete( $key4 );
+               $this->cache->deleteMulti( [ $key1, $key2, $key3, $key4 ] );
        }
 
        /**
@@ -217,12 +243,13 @@ class BagOStuffTest extends MediaWikiTestCase {
         */
        public function testGetWithSetCallback() {
                $now = 1563892142;
-               $this->cache->setMockTime( $now );
-               $key = $this->cache->makeKey( self::TEST_KEY );
+               $cache = new HashBagOStuff( [] );
+               $cache->setMockTime( $now );
+               $key = $cache->makeKey( self::TEST_KEY );
 
-               $this->assertFalse( $this->cache->get( $key ), "No value" );
+               $this->assertFalse( $cache->get( $key ), "No value" );
 
-               $value = $this->cache->getWithSetCallback(
+               $value = $cache->getWithSetCallback(
                        $key,
                        30,
                        function ( &$ttl ) {
@@ -233,11 +260,11 @@ class BagOStuffTest extends MediaWikiTestCase {
                );
 
                $this->assertEquals( 'hello kitty', $value );
-               $this->assertEquals( $value, $this->cache->get( $key ), "Value set" );
+               $this->assertEquals( $value, $cache->get( $key ), "Value set" );
 
                $now += 11;
 
-               $this->assertFalse( $this->cache->get( $key ), "Value expired" );
+               $this->assertFalse( $cache->get( $key ), "Value expired" );
        }
 
        /**
diff --git a/tests/phpunit/includes/libs/rdbms/database/DatabaseMssqlTest.php b/tests/phpunit/includes/libs/rdbms/database/DatabaseMssqlTest.php
deleted file mode 100644 (file)
index 414042d..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-
-use Wikimedia\Rdbms\Database;
-use Wikimedia\Rdbms\DatabaseMssql;
-
-class DatabaseMssqlTest extends PHPUnit\Framework\TestCase {
-
-       use MediaWikiCoversValidator;
-       use PHPUnit4And6Compat;
-
-       /**
-        * @return PHPUnit_Framework_MockObject_MockObject|DatabaseMssql
-        */
-       private function getMockDb() {
-               return $this->getMockBuilder( DatabaseMssql::class )
-                       ->disableOriginalConstructor()
-                       ->setMethods( null )
-                       ->getMock();
-       }
-
-       public function provideBuildSubstring() {
-               yield [ 'someField', 1, 2, 'SUBSTRING(someField,1,2)' ];
-               yield [ 'someField', 1, null, 'SUBSTRING(someField,1,2147483647)' ];
-               yield [ 'someField', 1, 3333333333, 'SUBSTRING(someField,1,3333333333)' ];
-       }
-
-       /**
-        * @covers Wikimedia\Rdbms\DatabaseMssql::buildSubstring
-        * @dataProvider provideBuildSubstring
-        */
-       public function testBuildSubstring( $input, $start, $length, $expected ) {
-               $mockDb = $this->getMockDb();
-               $output = $mockDb->buildSubstring( $input, $start, $length );
-               $this->assertSame( $expected, $output );
-       }
-
-       public function provideBuildSubstring_invalidParams() {
-               yield [ -1, 1 ];
-               yield [ 1, -1 ];
-               yield [ 1, 'foo' ];
-               yield [ 'foo', 1 ];
-               yield [ null, 1 ];
-               yield [ 0, 1 ];
-       }
-
-       /**
-        * @covers Wikimedia\Rdbms\DatabaseMssql::buildSubstring
-        * @dataProvider provideBuildSubstring_invalidParams
-        */
-       public function testBuildSubstring_invalidParams( $start, $length ) {
-               $mockDb = $this->getMockDb();
-               $this->setExpectedException( InvalidArgumentException::class );
-               $mockDb->buildSubstring( 'foo', $start, $length );
-       }
-
-       /**
-        * @covers \Wikimedia\Rdbms\DatabaseMssql::getAttributes
-        */
-       public function testAttributes() {
-               $this->assertTrue( DatabaseMssql::getAttributes()[Database::ATTR_SCHEMAS_AS_TABLE_GROUPS] );
-       }
-}
index a775dd7..93b1bf8 100644 (file)
@@ -9,7 +9,6 @@ use Wikimedia\Rdbms\TransactionProfiler;
 use Wikimedia\TestingAccessWrapper;
 use Wikimedia\Rdbms\DatabaseSqlite;
 use Wikimedia\Rdbms\DatabasePostgres;
-use Wikimedia\Rdbms\DatabaseMssql;
 use Wikimedia\Rdbms\DBUnexpectedError;
 
 class DatabaseTest extends PHPUnit\Framework\TestCase {
@@ -37,7 +36,6 @@ class DatabaseTest extends PHPUnit\Framework\TestCase {
                $this->assertInstanceOf( DatabasePostgres::class, Database::factory( 'Postgres', $p, $m ) );
 
                $x = $p + [ 'port' => 10000, 'UseWindowsAuth' => false ];
-               $this->assertInstanceOf( DatabaseMssql::class, Database::factory( 'mssql', $x, $m ) );
 
                $x = $p + [ 'dbFilePath' => 'some/file.sqlite' ];
                $this->assertInstanceOf( DatabaseSqlite::class, Database::factory( 'sqlite', $x, $m ) );
index ee6c227..cbafbe9 100644 (file)
@@ -1593,9 +1593,9 @@ more stuff
 
        public function provideUpdateRedirectOn() {
                yield [ '#REDIRECT [[Foo]]', true, null, true, true, 0 ];
-               yield [ '#REDIRECT [[Foo]]', true, 'Foo', true, false, 1 ];
+               yield [ '#REDIRECT [[Foo]]', true, 'Foo', true, true, 1 ];
                yield [ 'SomeText', false, null, false, true, 0 ];
-               yield [ 'SomeText', false, 'Foo', false, false, 1 ];
+               yield [ 'SomeText', false, 'Foo', false, true, 1 ];
        }
 
        /**
index 871ea91..59fe401 100644 (file)
@@ -17,7 +17,7 @@ class RCFeedIntegrationTest extends MediaWikiTestCase {
                        'wgServerName' => 'example.org',
                        'wgScriptPath' => '/w',
                        'wgDBname' => 'example',
-                       'wgDBprefix' => '',
+                       'wgDBprefix' => $this->dbPrefix(),
                        'wgRCFeeds' => [],
                        'wgRCEngines' => [],
                ] );
@@ -57,7 +57,7 @@ class RCFeedIntegrationTest extends MediaWikiTestCase {
                                                'server_url' => 'https://example.org',
                                                'server_name' => 'example.org',
                                                'server_script_path' => '/w',
-                                               'wiki' => 'example',
+                                               'wiki' => 'example-' . $this->dbPrefix(),
                                        ] ),
                                        $line
                                );
index 968db42..dff18ca 100644 (file)
@@ -169,6 +169,19 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                );
        }
 
+       public function testRcNsFilterAssociatedSpecial() {
+               $this->assertConditions(
+                       [ # expected
+                         "rc_namespace IN ('-1','0','1')",
+                       ],
+                       [
+                               'namespace' => '1;-1',
+                               'associated' => 1,
+                       ],
+                       "rc conditions with associated and special namespace"
+               );
+       }
+
        public function testRcNsFilterMultipleAssociatedInvert() {
                $this->assertConditions(
                        [ # expected
index 8da7602..d0aeb8e 100644 (file)
@@ -240,7 +240,7 @@ class LanguageSrTest extends LanguageClassesTestCase {
        # #### HELPERS #####################################################
 
        /**
-        *Wrapper to verify text stay the same after applying conversion
+        * Wrapper to verify text stay the same after applying conversion
         * @param string $text Text to convert
         * @param string $variant Language variant 'sr-ec' or 'sr-el'
         * @param string $msg Optional message
@@ -291,7 +291,7 @@ class LanguageSrTest extends LanguageClassesTestCase {
                $this->assertConverted( $text, 'sr-ec', $msg );
        }
 
-       /** Wrapper for converter::convertTo() method*/
+       /** Wrapper for converter::convertTo() method */
        protected function convertTo( $text, $variant ) {
                return $this->getLang()
                        ->mConverter
index abc63ee..09054da 100644 (file)
@@ -113,7 +113,7 @@ class LanguageUzTest extends LanguageClassesTestCase {
                $this->assertConverted( $text, 'uz-cyrl', $msg );
        }
 
-       /** Wrapper for converter::convertTo() method*/
+       /** Wrapper for converter::convertTo() method */
        protected function convertTo( $text, $variant ) {
                return $this->getLang()->mConverter->convertTo( $text, $variant );
        }
index 521705e..8925b1f 100644 (file)
@@ -4,7 +4,7 @@ use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Tests for CategoryChangesAsRdf recent changes exporter.
- *  @covers CategoryChangesAsRdf
+ * @covers CategoryChangesAsRdf
  */
 class CategoryChangesAsRdfTest extends MediaWikiLangTestCase {
 
index f318df1..0e8b775 100644 (file)
@@ -141,8 +141,7 @@ class ParserTestTopLevelSuite extends PHPUnit_Framework_TestSuite {
                $lb = MediaWikiServices::getInstance()->getDBLoadBalancer();
                $db = $lb->getConnection( DB_MASTER );
                $type = $db->getType();
-               $prefix = $type === 'oracle' ?
-                       MediaWikiTestCase::ORA_DB_PREFIX : MediaWikiTestCase::DB_PREFIX;
+               $prefix = MediaWikiTestCase::DB_PREFIX;
                $this->oldTablePrefix = $db->tablePrefix();
                MediaWikiTestCase::setupTestDB( $db, $prefix );
                CloneDatabase::changePrefix( $prefix );
diff --git a/tests/phpunit/unit/includes/db/DatabaseOracleTest.php b/tests/phpunit/unit/includes/db/DatabaseOracleTest.php
deleted file mode 100644 (file)
index ff1c3ca..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-
-class DatabaseOracleTest extends MediaWikiUnitTestCase {
-
-       /**
-        * @return PHPUnit_Framework_MockObject_MockObject|DatabaseOracle
-        */
-       private function getMockDb() {
-               return $this->getMockBuilder( DatabaseOracle::class )
-                       ->disableOriginalConstructor()
-                       ->setMethods( null )
-                       ->getMock();
-       }
-
-       public function provideBuildSubstring() {
-               yield [ 'someField', 1, 2, 'SUBSTR(someField,1,2)' ];
-               yield [ 'someField', 1, null, 'SUBSTR(someField,1)' ];
-       }
-
-       /**
-        * @covers DatabaseOracle::buildSubstring
-        * @dataProvider provideBuildSubstring
-        */
-       public function testBuildSubstring( $input, $start, $length, $expected ) {
-               $mockDb = $this->getMockDb();
-               $output = $mockDb->buildSubstring( $input, $start, $length );
-               $this->assertSame( $expected, $output );
-       }
-
-       public function provideBuildSubstring_invalidParams() {
-               yield [ -1, 1 ];
-               yield [ 1, -1 ];
-               yield [ 1, 'foo' ];
-               yield [ 'foo', 1 ];
-               yield [ null, 1 ];
-               yield [ 0, 1 ];
-       }
-
-       /**
-        * @covers DatabaseOracle::buildSubstring
-        * @dataProvider provideBuildSubstring_invalidParams
-        */
-       public function testBuildSubstring_invalidParams( $start, $length ) {
-               $mockDb = $this->getMockDb();
-               $this->setExpectedException( InvalidArgumentException::class );
-               $mockDb->buildSubstring( 'foo', $start, $length );
-       }
-
-}
diff --git a/tests/phpunit/unit/includes/installer/OracleInstallerTest.php b/tests/phpunit/unit/includes/installer/OracleInstallerTest.php
deleted file mode 100644 (file)
index 69b5552..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-/**
- * @group Installer
- */
-class OracleInstallerTest extends \MediaWikiUnitTestCase {
-
-       /**
-        * @dataProvider provideOracleConnectStrings
-        * @covers OracleInstaller::checkConnectStringFormat
-        */
-       public function testCheckConnectStringFormat( $expected, $connectString, $msg = '' ) {
-               $validity = $expected ? 'should be valid' : 'should NOT be valid';
-               $msg = "'$connectString' ($msg) $validity.";
-               $this->assertEquals( $expected,
-                       OracleInstaller::checkConnectStringFormat( $connectString ),
-                       $msg
-               );
-       }
-
-       /**
-        * Provider to test OracleInstaller::checkConnectStringFormat()
-        */
-       function provideOracleConnectStrings() {
-               // expected result, connectString[, message]
-               return [
-                       [ true, 'simple_01', 'Simple TNS name' ],
-                       [ true, 'simple_01.world', 'TNS name with domain' ],
-                       [ true, 'simple_01.domain.net', 'TNS name with domain' ],
-                       [ true, 'host123', 'Host only' ],
-                       [ true, 'host123.domain.net', 'FQDN only' ],
-                       [ true, '//host123.domain.net', 'FQDN URL only' ],
-                       [ true, '123.223.213.132', 'Host IP only' ],
-                       [ true, 'host:1521', 'Host and port' ],
-                       [ true, 'host:1521/service', 'Host, port and service' ],
-                       [ true, 'host:1521/service:shared', 'Host, port, service and shared server type' ],
-                       [ true, 'host:1521/service:dedicated', 'Host, port, service and dedicated server type' ],
-                       [ true, 'host:1521/service:pooled', 'Host, port, service and pooled server type' ],
-                       [
-                               true,
-                               'host:1521/service:shared/instance1',
-                               'Host, port, service, server type and instance'
-                       ],
-                       [ true, 'host:1521//instance1', 'Host, port and instance' ],
-               ];
-       }
-
-}
index cd67a93..b95efdf 100644 (file)
@@ -31,6 +31,8 @@ class TitleValueTest extends \MediaWikiUnitTestCase {
                        [ NS_MAIN, '', 'fragment', '', true, false ],
                        [ NS_USER, 'TestThis', 'stuff', '', true, false ],
                        [ NS_USER, 'TestThis', '', 'baz', false, true ],
+                       [ NS_MAIN, 'foo bar', '', '', false, false ],
+                       [ NS_MAIN, 'foo_bar', '', '', false, false ],
                ];
        }
 
@@ -44,7 +46,8 @@ class TitleValueTest extends \MediaWikiUnitTestCase {
 
                $this->assertEquals( $ns, $title->getNamespace() );
                $this->assertTrue( $title->inNamespace( $ns ) );
-               $this->assertEquals( $text, $title->getText() );
+               $this->assertEquals( strtr( $text, ' ', '_' ), $title->getDbKey() );
+               $this->assertEquals( strtr( $text, '_', ' ' ), $title->getText() );
                $this->assertEquals( $fragment, $title->getFragment() );
                $this->assertEquals( $hasFragment, $title->hasFragment() );
                $this->assertEquals( $interwiki, $title->getInterwiki() );
@@ -60,7 +63,6 @@ class TitleValueTest extends \MediaWikiUnitTestCase {
                        [ NS_MAIN, 5, 'fragment', '' ],
                        [ NS_MAIN, null, 'fragment', '' ],
                        [ NS_USER, '', 'fragment', '' ],
-                       [ NS_MAIN, 'foo bar', '', '' ],
                        [ NS_MAIN, 'bar_', '', '' ],
                        [ NS_MAIN, '_foo', '', '' ],
                        [ NS_MAIN, ' eek ', '', '' ],
index 214c25a..662224c 100644 (file)
@@ -52,23 +52,10 @@ exports.config = {
 
        // ==================
        // Test Files
-       // FIXME: The non-core patterns to be removed once T199116 is fixed.
        // ==================
        specs: [
                relPath( './tests/selenium/wdio-mediawiki/specs/*.js' ),
-               relPath( './tests/selenium/specs/**/*.js' ),
-               relPath( './extensions/*/tests/selenium/specs/**/*.js' ),
-               relPath( './extensions/VisualEditor/modules/ve-mw/tests/selenium/specs/**/*.js' ),
-               relPath( './extensions/Wikibase/repo/tests/selenium/specs/**/*.js' ),
-               relPath( './skins/*/tests/selenium/specs/**/*.js' )
-       ],
-       // Patterns to exclude
-       exclude: [
-               relPath( './extensions/CirrusSearch/tests/selenium/specs/**/*.js' ),
-               // Disabled because these tests modify LocalSettings.php, see T199116 for the long-term fix.
-               relPath( './extensions/FileImporter/tests/selenium/specs/**/*.js' ),
-               // Disabled per T222517
-               relPath( './skins/MinervaNeue/tests/selenium/specs/**/*.js' )
+               relPath( './tests/selenium/specs/**/*.js' )
        ],
 
        // ============