Merge "Add instrumentation to Special:Mute"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 20 Aug 2019 17:34:29 +0000 (17:34 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 20 Aug 2019 17:34:29 +0000 (17:34 +0000)
545 files changed:
HISTORY
INSTALL
RELEASE-NOTES-1.34
autoload.php
docs/hooks.txt
docs/pageupdater.txt
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/MediaWikiServices.php
includes/MovePage.php
includes/OutputPage.php
includes/Permissions/PermissionManager.php
includes/Revision/RevisionRecord.php
includes/Revision/RevisionStore.php
includes/Revision/RevisionStoreCacheRecord.php
includes/ServiceWiring.php
includes/Setup.php
includes/Storage/DerivedPageDataUpdater.php
includes/Title.php
includes/api/ApiBase.php
includes/api/ApiFeedContributions.php
includes/api/ApiMove.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryRevisionsBase.php
includes/api/ApiResult.php
includes/api/i18n/ja.json
includes/api/i18n/mk.json
includes/api/i18n/ru.json
includes/auth/AuthManager.php
includes/auth/AuthenticationRequest.php
includes/block/BlockManager.php
includes/cache/GenderCache.php
includes/cache/MessageCache.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/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/af.json
includes/installer/i18n/ar.json
includes/installer/i18n/ast.json
includes/installer/i18n/ba.json
includes/installer/i18n/be-tarask.json
includes/installer/i18n/bg.json
includes/installer/i18n/bn.json
includes/installer/i18n/br.json
includes/installer/i18n/bs.json
includes/installer/i18n/bto.json
includes/installer/i18n/ca.json
includes/installer/i18n/ce.json
includes/installer/i18n/cs.json
includes/installer/i18n/da.json
includes/installer/i18n/de.json
includes/installer/i18n/diq.json
includes/installer/i18n/el.json
includes/installer/i18n/en.json
includes/installer/i18n/eo.json
includes/installer/i18n/es.json
includes/installer/i18n/et.json
includes/installer/i18n/eu.json
includes/installer/i18n/fa.json
includes/installer/i18n/fi.json
includes/installer/i18n/fr.json
includes/installer/i18n/frc.json
includes/installer/i18n/frp.json
includes/installer/i18n/gl.json
includes/installer/i18n/he.json
includes/installer/i18n/hi.json
includes/installer/i18n/hrx.json
includes/installer/i18n/hsb.json
includes/installer/i18n/hu.json
includes/installer/i18n/ia.json
includes/installer/i18n/id.json
includes/installer/i18n/io.json
includes/installer/i18n/is.json
includes/installer/i18n/it.json
includes/installer/i18n/ja.json
includes/installer/i18n/ka.json
includes/installer/i18n/ko.json
includes/installer/i18n/ksh.json
includes/installer/i18n/ku-latn.json
includes/installer/i18n/lb.json
includes/installer/i18n/li.json
includes/installer/i18n/lij.json
includes/installer/i18n/lki.json
includes/installer/i18n/lt.json
includes/installer/i18n/lv.json
includes/installer/i18n/mg.json
includes/installer/i18n/mk.json
includes/installer/i18n/ml.json
includes/installer/i18n/mr.json
includes/installer/i18n/ms.json
includes/installer/i18n/mzn.json
includes/installer/i18n/nap.json
includes/installer/i18n/nb.json
includes/installer/i18n/ne.json
includes/installer/i18n/nl-informal.json
includes/installer/i18n/nl.json
includes/installer/i18n/oc.json
includes/installer/i18n/olo.json
includes/installer/i18n/pl.json
includes/installer/i18n/pms.json
includes/installer/i18n/ps.json
includes/installer/i18n/pt-br.json
includes/installer/i18n/pt.json
includes/installer/i18n/qqq.json
includes/installer/i18n/ro.json
includes/installer/i18n/roa-tara.json
includes/installer/i18n/ru.json
includes/installer/i18n/sco.json
includes/installer/i18n/sh.json
includes/installer/i18n/si.json
includes/installer/i18n/sk.json
includes/installer/i18n/sl.json
includes/installer/i18n/sr-ec.json
includes/installer/i18n/sr-el.json
includes/installer/i18n/sv.json
includes/installer/i18n/tcy.json
includes/installer/i18n/te.json
includes/installer/i18n/th.json
includes/installer/i18n/tl.json
includes/installer/i18n/tr.json
includes/installer/i18n/tt-cyrl.json
includes/installer/i18n/uk.json
includes/installer/i18n/vi.json
includes/installer/i18n/war.json
includes/installer/i18n/yi.json
includes/installer/i18n/yue.json
includes/installer/i18n/zh-hans.json
includes/installer/i18n/zh-hant.json
includes/jobqueue/JobQueueDB.php
includes/jobqueue/jobs/ActivityUpdateJob.php
includes/jobqueue/jobs/RecentChangesUpdateJob.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/APCBagOStuff.php
includes/libs/objectcache/APCUBagOStuff.php
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/CachedBagOStuff.php
includes/libs/objectcache/EmptyBagOStuff.php
includes/libs/objectcache/HashBagOStuff.php
includes/libs/objectcache/MediumSpecificBagOStuff.php
includes/libs/objectcache/MemcachedBagOStuff.php
includes/libs/objectcache/MemcachedPeclBagOStuff.php
includes/libs/objectcache/MemcachedPhpBagOStuff.php
includes/libs/objectcache/RESTBagOStuff.php
includes/libs/objectcache/RedisBagOStuff.php
includes/libs/objectcache/WinCacheBagOStuff.php
includes/libs/rdbms/database/DBConnRef.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/loadbalancer/ILoadBalancer.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/libs/services/ServiceContainer.php
includes/logging/LogEntry.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/MovePageFactory.php [new file with mode: 0644]
includes/page/WikiPage.php
includes/parser/Parser.php
includes/parser/Sanitizer.php
includes/registration/ExtensionRegistry.php
includes/resourceloader/ResourceLoaderClientHtml.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderFilePath.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/search/SearchEngineFactory.php
includes/search/SearchHighlighter.php
includes/search/SearchMssql.php [deleted file]
includes/search/SearchOracle.php [deleted file]
includes/search/SearchSqlite.php
includes/session/Session.php
includes/session/SessionManager.php
includes/session/Token.php
includes/skins/BaseTemplate.php
includes/skins/QuickTemplate.php
includes/skins/SkinTemplate.php
includes/specialpage/AuthManagerSpecialPage.php
includes/specialpage/ChangesListSpecialPage.php
includes/specialpage/LoginSignupSpecialPage.php
includes/specialpage/RedirectSpecialArticle.php
includes/specialpage/SpecialPageFactory.php
includes/specials/SpecialApiSandbox.php
includes/specials/SpecialBlock.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialBotPasswords.php
includes/specials/SpecialCategories.php
includes/specials/SpecialChangeContentModel.php
includes/specials/SpecialConfirmemail.php
includes/specials/SpecialContributions.php
includes/specials/SpecialCreateAccount.php
includes/specials/SpecialJavaScriptTest.php
includes/specials/SpecialListDuplicatedFiles.php
includes/specials/SpecialListFiles.php
includes/specials/SpecialMIMEsearch.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialNewSection.php [new file with mode: 0644]
includes/specials/SpecialNewpages.php
includes/specials/SpecialRedirect.php
includes/specials/SpecialTrackingCategories.php
includes/specials/SpecialUnwatchedpages.php
includes/specials/SpecialUpload.php
includes/specials/SpecialVersion.php
includes/specials/formfields/Licenses.php
includes/specials/pagers/ActiveUsersPager.php
includes/specials/pagers/NewPagesPager.php
includes/title/MediaWikiTitleCodec.php
includes/title/NamespaceInfo.php
includes/title/TitleParser.php
includes/title/TitleValue.php
includes/watcheditem/WatchedItemStore.php
jsduck.json
languages/i18n/ar.json
languages/i18n/awa.json
languages/i18n/az.json
languages/i18n/bcc.json
languages/i18n/bcl.json
languages/i18n/bg.json
languages/i18n/bho.json
languages/i18n/bjn.json
languages/i18n/bn.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/cs.json
languages/i18n/da.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/fa.json
languages/i18n/fr.json
languages/i18n/gcr.json
languages/i18n/gom-latn.json
languages/i18n/grc.json
languages/i18n/hak.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/hy.json
languages/i18n/hyw.json
languages/i18n/id.json
languages/i18n/ig.json
languages/i18n/io.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.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/lt.json
languages/i18n/lv.json
languages/i18n/min.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mni.json
languages/i18n/my.json
languages/i18n/nap.json
languages/i18n/nb.json
languages/i18n/nds-nl.json
languages/i18n/nds.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/nqo.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/ro.json
languages/i18n/roa-tara.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/th.json
languages/i18n/tl.json
languages/i18n/tt-cyrl.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/vec.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/cleanupCaps.php
maintenance/convertLinks.php
maintenance/createAndPromote.php
maintenance/mctest.php
maintenance/minify.php
maintenance/moveBatch.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.interface.helpers.styles.less
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/Controller.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/mediawiki.widgets/mw.widgets.TitleOptionWidget.js
resources/src/startup/mediawiki.js
tests/common/TestsAutoLoader.php
tests/parser/ParserTestRunner.php
tests/parser/parserTests.txt
tests/phpunit/MediaWikiIntegrationTestCase.php
tests/phpunit/bootstrap.php
tests/phpunit/includes/MergeHistoryTest.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/MovePageTest.php
tests/phpunit/includes/Storage/DerivedPageDataUpdaterTest.php
tests/phpunit/includes/TestUser.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/block/BlockManagerTest.php
tests/phpunit/includes/cache/MessageCacheTest.php
tests/phpunit/includes/changetags/ChangeTagsTest.php
tests/phpunit/includes/config/LoggedServiceOptions.php [new file with mode: 0644]
tests/phpunit/includes/config/TestAllServiceOptionsUsed.php [new file with mode: 0644]
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/filebackend/fsfile/TempFSFileIntegrationTest.php [new file with mode: 0644]
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/libs/services/ServiceContainerTest.php [deleted file]
tests/phpunit/includes/libs/services/TestWiring1.php [deleted file]
tests/phpunit/includes/libs/services/TestWiring2.php [deleted file]
tests/phpunit/includes/page/WikiPageDbTestBase.php
tests/phpunit/includes/parser/ParserFactoryIntegrationTest.php [new file with mode: 0644]
tests/phpunit/includes/parser/ParserFactoryTest.php [deleted file]
tests/phpunit/includes/password/Argon2PasswordTest.php
tests/phpunit/includes/preferences/DefaultPreferencesFactoryTest.php
tests/phpunit/includes/rcfeed/RCFeedIntegrationTest.php
tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php
tests/phpunit/includes/title/MediaWikiTitleCodecTest.php
tests/phpunit/includes/title/NamespaceInfoTest.php
tests/phpunit/integration/includes/db/DatabaseSqliteTest.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/FactoryArgTestTrait.php [new file with mode: 0644]
tests/phpunit/unit/includes/db/DatabaseOracleTest.php [deleted file]
tests/phpunit/unit/includes/installer/OracleInstallerTest.php [deleted file]
tests/phpunit/unit/includes/libs/filebackend/fsfile/TempFSFileTestTrait.php [new file with mode: 0644]
tests/phpunit/unit/includes/libs/services/ServiceContainerTest.php [new file with mode: 0644]
tests/phpunit/unit/includes/libs/services/TestWiring1.php [new file with mode: 0644]
tests/phpunit/unit/includes/libs/services/TestWiring2.php [new file with mode: 0644]
tests/phpunit/unit/includes/page/MovePageFactoryTest.php [new file with mode: 0644]
tests/phpunit/unit/includes/parser/ParserFactoryTest.php [new file with mode: 0644]
tests/phpunit/unit/includes/title/TitleValueTest.php

diff --git a/HISTORY b/HISTORY
index ff4007e..4c5e344 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
@@ -2229,7 +2234,7 @@ This is a security and maintenance release of the MediaWiki 1.29 branch.
 * (T194605, CVE-2018-0505) SECURITY: BotPasswords can bypass CentralAuth's
   account lock.
 * (T180551) Fix LanguageSrTest for language converter
-* (T180552) Fix langauge converter parser test with self-close tags
+* (T180552) Fix language converter parser test with self-close tags
 * (T180537) Remove $wgAuth usage from wrapOldPasswords.php
 * (T180485) InputBox: Have inputbox langconvert certain attributes
 * (T161732, T181547) Upgraded Moment.js from v2.15.0 to v2.19.3.
diff --git a/INSTALL b/INSTALL
index f31f753..bf64ab7 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -11,8 +11,6 @@ Required software:
 ** MySQL 5.5.8 or higher
 ** PostgreSQL 9.2 or higher
 ** SQLite 3.8.0 or higher
-** Oracle 9.0.1 or higher
-** Microsoft SQL Server 2005 (9.00.1399)
 
 MediaWiki is developed and tested mainly on Unix/Linux platforms, but should
 work on Windows as well.
index 8ecc469..9a4aeb3 100644 (file)
@@ -39,6 +39,7 @@ For notes on 1.33.x and older releases, see HISTORY.
 * editmyuserjsredirect user right – users without this right now cannot edit JS
   redirects in their userspace unless the target of the redirect is also in
   their userspace. By default, this right is given to everyone.
+* (T226733) Add rate limiter to Special:ConfirmEmail.
 
 ==== Changed configuration ====
 * $wgUseCdn, $wgCdnServers, $wgCdnServersNoPurge, and $wgCdnMaxAge – These four
@@ -82,6 +83,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
@@ -335,7 +341,10 @@ because of Phabricator reports.
 * Database::getProperty(), deprecated in 1.28, has been removed.
 * IDatabase::getWikiId(), deprecated in 1.30, has been removed.
   Use IDatabase::getDomainID() instead.
-* …
+* (T191231) Support for using Oracle or MSSQL as database backends has been
+  dropped.
+* MessageCache::destroyInstance() has been removed. Instead, call
+  MediaWikiTestCase::resetServices().
 
 === Deprecations in 1.34 ===
 * The MWNamespace class is deprecated. Use NamespaceInfo.
@@ -413,6 +422,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
@@ -435,6 +446,10 @@ because of Phabricator reports.
 * SearchEngine::textAlreadyUpdatedForIndex() is deprecated, given the
   deprecation above this method is no longer needed/called and should not be
   implemented by SearchEngine implementation.
+* IDatabase::bufferResults() has been deprecated. Use query batching instead.
+* MessageCache::singleton() is deprecated. Use
+  MediaWikiServices::getMessageCache().
+* Constructing MovePage directly is deprecated. Use MovePageFactory.
 
 === Other changes in 1.34 ===
 * …
@@ -445,16 +460,13 @@ supported, it is generally advised to use PHP 7.0.13 or later for long term
 support.
 
 MySQL/MariaDB is the recommended DBMS. PostgreSQL or SQLite can also be used,
-but support for them is somewhat less mature. There is experimental support for
-Oracle and Microsoft SQL Server.
+but support for them is somewhat less mature.
 
 The supported versions are:
 
 * MySQL 5.5.8 or later
 * PostgreSQL 9.2 or later
 * SQLite 3.8.0 or later
-* Oracle 9.0.1 or later
-* Microsoft SQL Server 2005 (9.00.1399)
 
 == Online documentation ==
 Documentation for both end-users and site administrators is available on
index 0208a6d..acdf8dd 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',
@@ -916,6 +913,7 @@ $wgAutoloadLocalClasses = [
        'MediaWiki\\MediaWikiServices' => __DIR__ . '/includes/MediaWikiServices.php',
        'MediaWiki\\Navigation\\PrevNextNavigationRenderer' => __DIR__ . '/includes/Navigation/PrevNextNavigationRenderer.php',
        'MediaWiki\\OutputHandler' => __DIR__ . '/includes/OutputHandler.php',
+       'MediaWiki\\Page\\MovePageFactory' => __DIR__ . '/includes/page/MovePageFactory.php',
        'MediaWiki\\ProcOpenError' => __DIR__ . '/includes/exception/ProcOpenError.php',
        'MediaWiki\\Search\\ParserOutputSearchDataExtractor' => __DIR__ . '/includes/search/ParserOutputSearchDataExtractor.php',
        'MediaWiki\\Services\\CannotReplaceActiveServiceException' => __DIR__ . '/includes/libs/services/CannotReplaceActiveServiceException.php',
@@ -1011,8 +1009,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 +1048,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',
@@ -1315,11 +1309,9 @@ $wgAutoloadLocalClasses = [
        'SearchHighlighter' => __DIR__ . '/includes/search/SearchHighlighter.php',
        'SearchIndexField' => __DIR__ . '/includes/search/SearchIndexField.php',
        'SearchIndexFieldDefinition' => __DIR__ . '/includes/search/SearchIndexFieldDefinition.php',
-       'SearchMssql' => __DIR__ . '/includes/search/SearchMssql.php',
        'SearchMySQL' => __DIR__ . '/includes/search/SearchMySQL.php',
        'SearchNearMatchResultSet' => __DIR__ . '/includes/search/SearchNearMatchResultSet.php',
        'SearchNearMatcher' => __DIR__ . '/includes/search/SearchNearMatcher.php',
-       'SearchOracle' => __DIR__ . '/includes/search/SearchOracle.php',
        'SearchPostgres' => __DIR__ . '/includes/search/SearchPostgres.php',
        'SearchResult' => __DIR__ . '/includes/search/SearchResult.php',
        'SearchResultSet' => __DIR__ . '/includes/search/SearchResultSet.php',
@@ -1404,6 +1396,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 +1656,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 5de2dc7..09b2c97 100644 (file)
@@ -91,23 +91,29 @@ title-reversing if-blocks spread all over the codebase in showAnArticle,
 deleteAnArticle, exportArticle, etc., we can concentrate it all in an extension
 file:
 
-       function reverseArticleTitle( $article ) {
+       function onArticleShow( &$article ) {
                # ...
        }
 
-       function reverseForExport( $article ) {
+       function onArticleDelete( &$article ) {
                # ...
        }
 
-The setup function for the extension just has to add its hook functions to the
-appropriate events:
-
-       setupTitleReversingExtension() {
-               global $wgHooks;
+       function onArticleExport( &$article ) {
+               # ...
+       }
 
-               $wgHooks['ArticleShow'][] = 'reverseArticleTitle';
-               $wgHooks['ArticleDelete'][] = 'reverseArticleTitle';
-               $wgHooks['ArticleExport'][] = 'reverseForExport';
+General practice is to have a dedicated file for functions activated by hooks,
+which functions named 'onHookName'. In the example above, the file
+'ReverseHooks.php' includes the functions that should be activated by the
+'ArticleShow', 'ArticleDelete', and 'ArticleExport' hooks. The 'extension.json'
+file with the extension's registration just has to add its hook functions
+to the appropriate events:
+
+       "Hooks": {
+               "ArticleShow": "ReverseHooks:onArticleShow",
+               "ArticleDelete": "ReverseHooks::onArticleDelete",
+               "ArticleExport": "ReverseHooks::onArticleExport"
        }
 
 Having all this code related to the title-reversion option in one place means
index fd084c0..3d113f6 100644 (file)
@@ -148,7 +148,7 @@ parent of $revision parameter passed to prepareUpdate().
 transformation (PST) and allow subsequent access to the canonical ParserOutput of the
 revision. getSlots() and getCanonicalParserOutput() as well as getSecondaryDataUpdates()
 may be used after prepareContent() was called. Calling prepareContent() with the same
-parameters again has no effect. Calling it again with mismatching paramters, or calling
+parameters again has no effect. Calling it again with mismatching parameters, or calling
 it after prepareUpdate() was called, triggers a LogicException.
 
 - prepareUpdate() is called after the new revision has been created. This may happen
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 a3772b9..f2446da 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
@@ -5704,6 +5711,11 @@ $wgRateLimits = [
                'ip-all' => [ 10, 3600 ],
                'user' => [ 4, 86400 ]
        ],
+       // since 1.33 - rate limit email confirmations
+       'confirmemail' => [
+               'ip-all' => [ 10, 3600 ],
+               'user' => [ 4, 86400 ]
+       ],
        // Purging pages
        'purge' => [
                'ip' => [ 30, 60 ],
@@ -5796,6 +5808,7 @@ $wgGrantPermissions = [];
 // @TODO: clean up grants
 // @TODO: auto-include read/editsemiprotected rights?
 
+$wgGrantPermissions['basic']['autocreateaccount'] = true;
 $wgGrantPermissions['basic']['autoconfirmed'] = true;
 $wgGrantPermissions['basic']['autopatrol'] = true;
 $wgGrantPermissions['basic']['editsemiprotected'] = true;
@@ -5847,6 +5860,7 @@ $wgGrantPermissions['createeditmovepage']['move'] = true;
 $wgGrantPermissions['createeditmovepage']['move-rootuserpages'] = true;
 $wgGrantPermissions['createeditmovepage']['move-subpages'] = true;
 $wgGrantPermissions['createeditmovepage']['move-categorypages'] = true;
+$wgGrantPermissions['createeditmovepage']['suppressredirect'] = true;
 
 $wgGrantPermissions['uploadfile']['upload'] = true;
 $wgGrantPermissions['uploadfile']['reupload-own'] = true;
@@ -8941,7 +8955,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 7fda452..bb9c05f 100644 (file)
@@ -17,11 +17,12 @@ use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
 use MediaWiki\Block\BlockManager;
 use MediaWiki\Block\BlockRestrictionStore;
 use MediaWiki\Http\HttpRequestFactory;
+use MediaWiki\Page\MovePageFactory;
 use MediaWiki\Permissions\PermissionManager;
 use MediaWiki\Preferences\PreferencesFactory;
-use MediaWiki\Shell\CommandFactory;
 use MediaWiki\Revision\RevisionRenderer;
 use MediaWiki\Revision\SlotRoleRegistry;
+use MediaWiki\Shell\CommandFactory;
 use MediaWiki\Special\SpecialPageFactory;
 use MediaWiki\Storage\BlobStore;
 use MediaWiki\Storage\BlobStoreFactory;
@@ -40,6 +41,7 @@ use MediaWiki\Config\ConfigRepository;
 use MediaWiki\Linker\LinkRenderer;
 use MediaWiki\Linker\LinkRendererFactory;
 use MWException;
+use MessageCache;
 use MimeAnalyzer;
 use NamespaceInfo;
 use ObjectCache;
@@ -689,6 +691,14 @@ class MediaWikiServices extends ServiceContainer {
                return $this->getService( 'MediaHandlerFactory' );
        }
 
+       /**
+        * @since 1.34
+        * @return MessageCache
+        */
+       public function getMessageCache() : MessageCache {
+               return $this->getService( 'MessageCache' );
+       }
+
        /**
         * @since 1.28
         * @return MimeAnalyzer
@@ -697,6 +707,14 @@ class MediaWikiServices extends ServiceContainer {
                return $this->getService( 'MimeAnalyzer' );
        }
 
+       /**
+        * @since 1.34
+        * @return MovePageFactory
+        */
+       public function getMovePageFactory() : MovePageFactory {
+               return $this->getService( 'MovePageFactory' );
+       }
+
        /**
         * @since 1.34
         * @return NamespaceInfo
index 832e24a..a63eeae 100644 (file)
  * @file
  */
 
+use MediaWiki\Config\ServiceOptions;
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Page\MovePageFactory;
+use MediaWiki\Permissions\PermissionManager;
 use MediaWiki\Revision\SlotRecord;
 use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\LoadBalancer;
 
 /**
  * Handles the backend logic of moving a page from one title
@@ -41,9 +45,69 @@ class MovePage {
         */
        protected $newTitle;
 
-       public function __construct( Title $oldTitle, Title $newTitle ) {
+       /**
+        * @var ServiceOptions
+        */
+       protected $options;
+
+       /**
+        * @var LoadBalancer
+        */
+       protected $loadBalancer;
+
+       /**
+        * @var NamespaceInfo
+        */
+       protected $nsInfo;
+
+       /**
+        * @var WatchedItemStore
+        */
+       protected $watchedItems;
+
+       /**
+        * @var PermissionManager
+        */
+       protected $permMgr;
+
+       /**
+        * @var RepoGroup
+        */
+       protected $repoGroup;
+
+       /**
+        * Calling this directly is deprecated in 1.34. Use MovePageFactory instead.
+        *
+        * @param Title $oldTitle
+        * @param Title $newTitle
+        * @param ServiceOptions|null $options
+        * @param LoadBalancer|null $loadBalancer
+        * @param NamespaceInfo|null $nsInfo
+        * @param WatchedItemStore|null $watchedItems
+        * @param PermissionManager|null $permMgr
+        */
+       public function __construct(
+               Title $oldTitle,
+               Title $newTitle,
+               ServiceOptions $options = null,
+               LoadBalancer $loadBalancer = null,
+               NamespaceInfo $nsInfo = null,
+               WatchedItemStore $watchedItems = null,
+               PermissionManager $permMgr = null,
+               RepoGroup $repoGroup = null
+       ) {
                $this->oldTitle = $oldTitle;
                $this->newTitle = $newTitle;
+               $this->options = $options ??
+                       new ServiceOptions( MovePageFactory::$constructorOptions,
+                               MediaWikiServices::getInstance()->getMainConfig() );
+               $this->loadBalancer =
+                       $loadBalancer ?? MediaWikiServices::getInstance()->getDBLoadBalancer();
+               $this->nsInfo = $nsInfo ?? MediaWikiServices::getInstance()->getNamespaceInfo();
+               $this->watchedItems =
+                       $watchedItems ?? MediaWikiServices::getInstance()->getWatchedItemStore();
+               $this->permMgr = $permMgr ?? MediaWikiServices::getInstance()->getPermissionManager();
+               $this->repoGroup = $repoGroup ?? MediaWikiServices::getInstance()->getRepoGroup();
        }
 
        /**
@@ -58,10 +122,10 @@ class MovePage {
                $status = new Status();
 
                $errors = wfMergeErrorArrays(
-                       $this->oldTitle->getUserPermissionsErrors( 'move', $user ),
-                       $this->oldTitle->getUserPermissionsErrors( 'edit', $user ),
-                       $this->newTitle->getUserPermissionsErrors( 'move-target', $user ),
-                       $this->newTitle->getUserPermissionsErrors( 'edit', $user )
+                       $this->permMgr->getPermissionErrors( 'move', $user, $this->oldTitle ),
+                       $this->permMgr->getPermissionErrors( 'edit', $user, $this->oldTitle ),
+                       $this->permMgr->getPermissionErrors( 'move-target', $user, $this->newTitle ),
+                       $this->permMgr->getPermissionErrors( 'edit', $user, $this->newTitle )
                );
 
                // Convert into a Status object
@@ -96,44 +160,41 @@ class MovePage {
         * @return Status
         */
        public function isValidMove() {
-               global $wgContentHandlerUseDB;
                $status = new Status();
 
                if ( $this->oldTitle->equals( $this->newTitle ) ) {
                        $status->fatal( 'selfmove' );
+               } elseif ( $this->newTitle->getArticleID() && !$this->isValidMoveTarget() ) {
+                       // The move is allowed only if (1) the target doesn't exist, or (2) the target is a
+                       // redirect to the source, and has no history (so we can undo bad moves right after
+                       // they're done).
+                       $status->fatal( 'articleexists' );
                }
-               if ( !$this->oldTitle->isMovable() ) {
+
+               // @todo If the old title is invalid, maybe we should check if it somehow exists in the
+               // database and allow moving it to a valid name? Why prohibit the move from an empty name
+               // without checking in the database?
+               if ( $this->oldTitle->getDBkey() == '' ) {
+                       $status->fatal( 'badarticleerror' );
+               } elseif ( $this->oldTitle->isExternal() ) {
+                       $status->fatal( 'immobile-source-namespace-iw' );
+               } elseif ( !$this->oldTitle->isMovable() ) {
                        $status->fatal( 'immobile-source-namespace', $this->oldTitle->getNsText() );
+               } elseif ( !$this->oldTitle->exists() ) {
+                       $status->fatal( 'movepage-source-doesnt-exist' );
                }
+
                if ( $this->newTitle->isExternal() ) {
                        $status->fatal( 'immobile-target-namespace-iw' );
-               }
-               if ( !$this->newTitle->isMovable() ) {
+               } elseif ( !$this->newTitle->isMovable() ) {
                        $status->fatal( 'immobile-target-namespace', $this->newTitle->getNsText() );
                }
-
-               $oldid = $this->oldTitle->getArticleID();
-
-               if ( $this->newTitle->getDBkey() === '' ) {
-                       $status->fatal( 'articleexists' );
-               }
-               if (
-                       ( $this->oldTitle->getDBkey() == '' ) ||
-                       ( !$oldid ) ||
-                       ( $this->newTitle->getDBkey() == '' )
-               ) {
-                       $status->fatal( 'badarticleerror' );
-               }
-
-               # The move is allowed only if (1) the target doesn't exist, or
-               # (2) the target is a redirect to the source, and has no history
-               # (so we can undo bad moves right after they're done).
-               if ( $this->newTitle->getArticleID() && !$this->isValidMoveTarget() ) {
-                       $status->fatal( 'articleexists' );
+               if ( !$this->newTitle->isValid() ) {
+                       $status->fatal( 'movepage-invalid-target-title' );
                }
 
                // Content model checks
-               if ( !$wgContentHandlerUseDB &&
+               if ( !$this->options->get( 'ContentHandlerUseDB' ) &&
                        $this->oldTitle->getContentModel() !== $this->newTitle->getContentModel() ) {
                        // can't move a page if that would change the page's content model
                        $status->fatal(
@@ -174,7 +235,14 @@ class MovePage {
         */
        protected function isValidFileMove() {
                $status = new Status();
-               $file = wfLocalFile( $this->oldTitle );
+
+               if ( !$this->newTitle->inNamespace( NS_FILE ) ) {
+                       $status->fatal( 'imagenocrossnamespace' );
+                       // No need for further errors about the target filename being wrong
+                       return $status;
+               }
+
+               $file = $this->repoGroup->getLocalRepo()->newFile( $this->oldTitle );
                $file->load( File::READ_LATEST );
                if ( $file->exists() ) {
                        if ( $this->newTitle->getText() != wfStripIllegalFilenameChars( $this->newTitle->getText() ) ) {
@@ -185,10 +253,6 @@ class MovePage {
                        }
                }
 
-               if ( !$this->newTitle->inNamespace( NS_FILE ) ) {
-                       $status->fatal( 'imagenocrossnamespace' );
-               }
-
                return $status;
        }
 
@@ -202,7 +266,7 @@ class MovePage {
        protected function isValidMoveTarget() {
                # Is it an existing file?
                if ( $this->newTitle->inNamespace( NS_FILE ) ) {
-                       $file = wfLocalFile( $this->newTitle );
+                       $file = $this->repoGroup->getLocalRepo()->newFile( $this->newTitle );
                        $file->load( File::READ_LATEST );
                        if ( $file->exists() ) {
                                wfDebug( __METHOD__ . ": file exists\n" );
@@ -430,8 +494,6 @@ class MovePage {
         * @return Status
         */
        private function moveUnsafe( User $user, $reason, $createRedirect, array $changeTags ) {
-               global $wgCategoryCollation;
-
                $status = Status::newGood();
                Hooks::run( 'TitleMove', [ $this->oldTitle, $this->newTitle, $user, $reason, &$status ] );
                if ( !$status->isOK() ) {
@@ -439,7 +501,7 @@ class MovePage {
                        return $status;
                }
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->loadBalancer->getConnection( DB_MASTER );
                $dbw->startAtomic( __METHOD__, IDatabase::ATOMIC_CANCELABLE );
 
                Hooks::run( 'TitleMoveStarting', [ $this->oldTitle, $this->newTitle, $user ] );
@@ -461,9 +523,7 @@ class MovePage {
                        [ 'cl_from' => $pageid ],
                        __METHOD__
                );
-               $services = MediaWikiServices::getInstance();
-               $type = $services->getNamespaceInfo()->
-                       getCategoryLinkType( $this->newTitle->getNamespace() );
+               $type = $this->nsInfo->getCategoryLinkType( $this->newTitle->getNamespace() );
                foreach ( $prefixes as $prefixRow ) {
                        $prefix = $prefixRow->cl_sortkey_prefix;
                        $catTo = $prefixRow->cl_to;
@@ -471,7 +531,7 @@ class MovePage {
                                [
                                        'cl_sortkey' => Collation::singleton()->getSortKey(
                                                        $this->newTitle->getCategorySortkey( $prefix ) ),
-                                       'cl_collation' => $wgCategoryCollation,
+                                       'cl_collation' => $this->options->get( 'CategoryCollation' ),
                                        'cl_type' => $type,
                                        'cl_timestamp=cl_timestamp' ],
                                [
@@ -563,13 +623,10 @@ class MovePage {
                # Update watchlists
                $oldtitle = $this->oldTitle->getDBkey();
                $newtitle = $this->newTitle->getDBkey();
-               $oldsnamespace = $services->getNamespaceInfo()->
-                       getSubject( $this->oldTitle->getNamespace() );
-               $newsnamespace = $services->getNamespaceInfo()->
-                       getSubject( $this->newTitle->getNamespace() );
+               $oldsnamespace = $this->nsInfo->getSubject( $this->oldTitle->getNamespace() );
+               $newsnamespace = $this->nsInfo->getSubject( $this->newTitle->getNamespace() );
                if ( $oldsnamespace != $newsnamespace || $oldtitle != $newtitle ) {
-                       $services->getWatchedItemStore()->duplicateAllAssociatedEntries(
-                               $this->oldTitle, $this->newTitle );
+                       $this->watchedItems->duplicateAllAssociatedEntries( $this->oldTitle, $this->newTitle );
                }
 
                // If it is a file then move it last.
@@ -630,15 +687,15 @@ class MovePage {
                        $oldTitle->getPrefixedText()
                );
 
-               $file = wfLocalFile( $oldTitle );
+               $file = $this->repoGroup->getLocalRepo()->newFile( $oldTitle );
                $file->load( File::READ_LATEST );
                if ( $file->exists() ) {
                        $status = $file->move( $newTitle );
                }
 
                // Clear RepoGroup process cache
-               RepoGroup::singleton()->clearCache( $oldTitle );
-               RepoGroup::singleton()->clearCache( $newTitle ); # clear false negative cache
+               $this->repoGroup->clearCache( $oldTitle );
+               $this->repoGroup->clearCache( $newTitle ); # clear false negative cache
                return $status;
        }
 
@@ -739,7 +796,7 @@ class MovePage {
                        $comment .= wfMessage( 'colon-separator' )->inContentLanguage()->text() . $reason;
                }
 
-               $dbw = wfGetDB( DB_MASTER );
+               $dbw = $this->loadBalancer->getConnection( DB_MASTER );
 
                $oldpage = WikiPage::factory( $this->oldTitle );
                $oldcountable = $oldpage->isCountable();
index 2c7292c..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 = '';
 
        /**
index a04b29c..d256e9b 100644 (file)
@@ -301,17 +301,17 @@ class PermissionManager {
                $blocked = $user->isHidden();
 
                // TODO: remove upon further migration to LinkTarget
-               $page = Title::newFromLinkTarget( $page );
+               $title = Title::newFromLinkTarget( $page );
 
                if ( !$blocked ) {
                        $block = $user->getBlock( $fromReplica );
                        if ( $block ) {
                                // Special handling for a user's own talk page. The block is not aware
                                // of the user, so this must be done here.
-                               if ( $page->equals( $user->getTalkPage() ) ) {
-                                       $blocked = $block->appliesToUsertalk( $page );
+                               if ( $title->equals( $user->getTalkPage() ) ) {
+                                       $blocked = $block->appliesToUsertalk( $title );
                                } else {
-                                       $blocked = $block->appliesToTitle( $page );
+                                       $blocked = $block->appliesToTitle( $title );
                                }
                        }
                }
@@ -319,7 +319,7 @@ class PermissionManager {
                // only for the purpose of the hook. We really don't need this here.
                $allowUsertalk = $user->isAllowUsertalk();
 
-               Hooks::run( 'UserIsBlockedFrom', [ $user, $page, &$blocked, &$allowUsertalk ] );
+               Hooks::run( 'UserIsBlockedFrom', [ $user, $title, &$blocked, &$allowUsertalk ] );
 
                return $blocked;
        }
@@ -423,21 +423,21 @@ class PermissionManager {
                LinkTarget $page
        ) {
                // TODO: remove when LinkTarget usage will expand further
-               $page = Title::newFromLinkTarget( $page );
+               $title = Title::newFromLinkTarget( $page );
                // Use getUserPermissionsErrors instead
                $result = '';
-               if ( !Hooks::run( 'userCan', [ &$page, &$user, $action, &$result ] ) ) {
+               if ( !Hooks::run( 'userCan', [ &$title, &$user, $action, &$result ] ) ) {
                        return $result ? [] : [ [ 'badaccess-group0' ] ];
                }
                // Check getUserPermissionsErrors hook
-               if ( !Hooks::run( 'getUserPermissionsErrors', [ &$page, &$user, $action, &$result ] ) ) {
+               if ( !Hooks::run( 'getUserPermissionsErrors', [ &$title, &$user, $action, &$result ] ) ) {
                        $errors = $this->resultToError( $errors, $result );
                }
                // Check getUserPermissionsErrorsExpensive hook
                if (
                        $rigor !== self::RIGOR_QUICK
                        && !( $short && count( $errors ) > 0 )
-                       && !Hooks::run( 'getUserPermissionsErrorsExpensive', [ &$page, &$user, $action, &$result ] )
+                       && !Hooks::run( 'getUserPermissionsErrorsExpensive', [ &$title, &$user, $action, &$result ] )
                ) {
                        $errors = $this->resultToError( $errors, $result );
                }
@@ -498,7 +498,7 @@ class PermissionManager {
                LinkTarget $page
        ) {
                // TODO: remove when LinkTarget usage will expand further
-               $page = Title::newFromLinkTarget( $page );
+               $title = Title::newFromLinkTarget( $page );
 
                $whitelisted = false;
                if ( User::isEveryoneAllowed( 'read' ) ) {
@@ -507,9 +507,9 @@ class PermissionManager {
                } elseif ( $user->isAllowed( 'read' ) ) {
                        # If the user is allowed to read pages, he is allowed to read all pages
                        $whitelisted = true;
-               } elseif ( $this->isSameSpecialPage( 'Userlogin', $page )
-                                  || $this->isSameSpecialPage( 'PasswordReset', $page )
-                                  || $this->isSameSpecialPage( 'Userlogout', $page )
+               } elseif ( $this->isSameSpecialPage( 'Userlogin', $title )
+                                  || $this->isSameSpecialPage( 'PasswordReset', $title )
+                                  || $this->isSameSpecialPage( 'Userlogout', $title )
                ) {
                        # Always grant access to the login page.
                        # Even anons need to be able to log in.
@@ -517,22 +517,22 @@ class PermissionManager {
                } elseif ( is_array( $this->whitelistRead ) && count( $this->whitelistRead ) ) {
                        # Time to check the whitelist
                        # Only do these checks is there's something to check against
-                       $name = $page->getPrefixedText();
-                       $dbName = $page->getPrefixedDBkey();
+                       $name = $title->getPrefixedText();
+                       $dbName = $title->getPrefixedDBkey();
 
                        // Check for explicit whitelisting with and without underscores
                        if ( in_array( $name, $this->whitelistRead, true )
                                 || in_array( $dbName, $this->whitelistRead, true ) ) {
                                $whitelisted = true;
-                       } elseif ( $page->getNamespace() == NS_MAIN ) {
+                       } elseif ( $title->getNamespace() == NS_MAIN ) {
                                # Old settings might have the title prefixed with
                                # a colon for main-namespace pages
                                if ( in_array( ':' . $name, $this->whitelistRead ) ) {
                                        $whitelisted = true;
                                }
-                       } elseif ( $page->isSpecialPage() ) {
+                       } elseif ( $title->isSpecialPage() ) {
                                # If it's a special page, ditch the subpage bit and check again
-                               $name = $page->getDBkey();
+                               $name = $title->getDBkey();
                                list( $name, /* $subpage */ ) =
                                        $this->specialPageFactory->resolveAlias( $name );
                                if ( $name ) {
@@ -546,7 +546,7 @@ class PermissionManager {
 
                if ( !$whitelisted && is_array( $this->whitelistReadRegexp )
                         && !empty( $this->whitelistReadRegexp ) ) {
-                       $name = $page->getPrefixedText();
+                       $name = $title->getPrefixedText();
                        // Check for regex whitelisting
                        foreach ( $this->whitelistReadRegexp as $listItem ) {
                                if ( preg_match( $listItem, $name ) ) {
@@ -558,7 +558,7 @@ class PermissionManager {
 
                if ( !$whitelisted ) {
                        # If the title is not whitelisted, give extensions a chance to do so...
-                       Hooks::run( 'TitleReadWhitelist', [ $page, $user, &$whitelisted ] );
+                       Hooks::run( 'TitleReadWhitelist', [ $title, $user, &$whitelisted ] );
                        if ( !$whitelisted ) {
                                $errors[] = $this->missingPermissionError( $action, $short );
                        }
@@ -715,40 +715,40 @@ class PermissionManager {
                LinkTarget $page
        ) {
                // TODO: remove when LinkTarget usage will expand further
-               $page = Title::newFromLinkTarget( $page );
+               $title = Title::newFromLinkTarget( $page );
 
                if ( !Hooks::run( 'TitleQuickPermissions',
-                       [ $page, $user, $action, &$errors, ( $rigor !== self::RIGOR_QUICK ), $short ] )
+                       [ $title, $user, $action, &$errors, ( $rigor !== self::RIGOR_QUICK ), $short ] )
                ) {
                        return $errors;
                }
 
-               $isSubPage = $this->nsInfo->hasSubpages( $page->getNamespace() ) ?
-                       strpos( $page->getText(), '/' ) !== false : false;
+               $isSubPage = $this->nsInfo->hasSubpages( $title->getNamespace() ) ?
+                       strpos( $title->getText(), '/' ) !== false : false;
 
                if ( $action == 'create' ) {
                        if (
-                               ( $this->nsInfo->isTalk( $page->getNamespace() ) &&
+                               ( $this->nsInfo->isTalk( $title->getNamespace() ) &&
                                        !$user->isAllowed( 'createtalk' ) ) ||
-                               ( !$this->nsInfo->isTalk( $page->getNamespace() ) &&
+                               ( !$this->nsInfo->isTalk( $title->getNamespace() ) &&
                                        !$user->isAllowed( 'createpage' ) )
                        ) {
                                $errors[] = $user->isAnon() ? [ 'nocreatetext' ] : [ 'nocreate-loggedin' ];
                        }
                } elseif ( $action == 'move' ) {
                        if ( !$user->isAllowed( 'move-rootuserpages' )
-                                && $page->getNamespace() == NS_USER && !$isSubPage ) {
+                                && $title->getNamespace() == NS_USER && !$isSubPage ) {
                                // Show user page-specific message only if the user can move other pages
                                $errors[] = [ 'cant-move-user-page' ];
                        }
 
                        // Check if user is allowed to move files if it's a file
-                       if ( $page->getNamespace() == NS_FILE && !$user->isAllowed( 'movefile' ) ) {
+                       if ( $title->getNamespace() == NS_FILE && !$user->isAllowed( 'movefile' ) ) {
                                $errors[] = [ 'movenotallowedfile' ];
                        }
 
                        // Check if user is allowed to move category pages if it's a category page
-                       if ( $page->getNamespace() == NS_CATEGORY && !$user->isAllowed( 'move-categorypages' ) ) {
+                       if ( $title->getNamespace() == NS_CATEGORY && !$user->isAllowed( 'move-categorypages' ) ) {
                                $errors[] = [ 'cant-move-category-page' ];
                        }
 
@@ -768,11 +768,11 @@ class PermissionManager {
                                // User can't move anything
                                $errors[] = [ 'movenotallowed' ];
                        } elseif ( !$user->isAllowed( 'move-rootuserpages' )
-                                          && $page->getNamespace() == NS_USER && !$isSubPage ) {
+                                          && $title->getNamespace() == NS_USER && !$isSubPage ) {
                                // Show user page-specific message only if the user can move other pages
                                $errors[] = [ 'cant-move-to-user-page' ];
                        } elseif ( !$user->isAllowed( 'move-categorypages' )
-                                          && $page->getNamespace() == NS_CATEGORY ) {
+                                          && $title->getNamespace() == NS_CATEGORY ) {
                                // Show category page-specific message only if the user can move other pages
                                $errors[] = [ 'cant-move-to-category-page' ];
                        }
@@ -810,8 +810,8 @@ class PermissionManager {
                LinkTarget $page
        ) {
                // TODO: remove & rework upon further use of LinkTarget
-               $page = Title::newFromLinkTarget( $page );
-               foreach ( $page->getRestrictions( $action ) as $right ) {
+               $title = Title::newFromLinkTarget( $page );
+               foreach ( $title->getRestrictions( $action ) as $right ) {
                        // Backwards compatibility, rewrite sysop -> editprotected
                        if ( $right == 'sysop' ) {
                                $right = 'editprotected';
@@ -825,7 +825,7 @@ class PermissionManager {
                        }
                        if ( !$user->isAllowed( $right ) ) {
                                $errors[] = [ 'protectedpagetext', $right, $action ];
-                       } elseif ( $page->areRestrictionsCascading() && !$user->isAllowed( 'protect' ) ) {
+                       } elseif ( $title->areRestrictionsCascading() && !$user->isAllowed( 'protect' ) ) {
                                $errors[] = [ 'protectedpagetext', 'protect', $action ];
                        }
                }
@@ -858,14 +858,14 @@ class PermissionManager {
                LinkTarget $page
        ) {
                // TODO: remove & rework upon further use of LinkTarget
-               $page = Title::newFromLinkTarget( $page );
-               if ( $rigor !== self::RIGOR_QUICK && !$page->isUserConfigPage() ) {
+               $title = Title::newFromLinkTarget( $page );
+               if ( $rigor !== self::RIGOR_QUICK && !$title->isUserConfigPage() ) {
                        # We /could/ use the protection level on the source page, but it's
                        # fairly ugly as we have to establish a precedence hierarchy for pages
                        # included by multiple cascade-protected pages. So just restrict
                        # it to people with 'protect' permission, as they could remove the
                        # protection anyway.
-                       list( $cascadingSources, $restrictions ) = $page->getCascadeProtectionSources();
+                       list( $cascadingSources, $restrictions ) = $title->getCascadeProtectionSources();
                        # Cascading protection depends on more than this page...
                        # Several cascading protected pages may include this page...
                        # Check each cascading level
@@ -922,15 +922,15 @@ class PermissionManager {
                global $wgDeleteRevisionsLimit, $wgLang;
 
                // TODO: remove & rework upon further use of LinkTarget
-               $page = Title::newFromLinkTarget( $page );
+               $title = Title::newFromLinkTarget( $page );
 
                if ( $action == 'protect' ) {
-                       if ( count( $this->getPermissionErrorsInternal( 'edit', $user, $page, $rigor, true ) ) ) {
+                       if ( count( $this->getPermissionErrorsInternal( 'edit', $user, $title, $rigor, true ) ) ) {
                                // If they can't edit, they shouldn't protect.
                                $errors[] = [ 'protect-cantedit' ];
                        }
                } elseif ( $action == 'create' ) {
-                       $title_protection = $page->getTitleProtection();
+                       $title_protection = $title->getTitleProtection();
                        if ( $title_protection ) {
                                if ( $title_protection['permission'] == ''
                                         || !$user->isAllowed( $title_protection['permission'] )
@@ -945,41 +945,41 @@ class PermissionManager {
                        }
                } elseif ( $action == 'move' ) {
                        // Check for immobile pages
-                       if ( !$this->nsInfo->isMovable( $page->getNamespace() ) ) {
+                       if ( !$this->nsInfo->isMovable( $title->getNamespace() ) ) {
                                // Specific message for this case
-                               $errors[] = [ 'immobile-source-namespace', $page->getNsText() ];
-                       } elseif ( !$page->isMovable() ) {
+                               $errors[] = [ 'immobile-source-namespace', $title->getNsText() ];
+                       } elseif ( !$title->isMovable() ) {
                                // Less specific message for rarer cases
                                $errors[] = [ 'immobile-source-page' ];
                        }
                } elseif ( $action == 'move-target' ) {
-                       if ( !$this->nsInfo->isMovable( $page->getNamespace() ) ) {
-                               $errors[] = [ 'immobile-target-namespace', $page->getNsText() ];
-                       } elseif ( !$page->isMovable() ) {
+                       if ( !$this->nsInfo->isMovable( $title->getNamespace() ) ) {
+                               $errors[] = [ 'immobile-target-namespace', $title->getNsText() ];
+                       } elseif ( !$title->isMovable() ) {
                                $errors[] = [ 'immobile-target-page' ];
                        }
                } elseif ( $action == 'delete' ) {
-                       $tempErrors = $this->checkPageRestrictions( 'edit', $user, [], $rigor, true, $page );
+                       $tempErrors = $this->checkPageRestrictions( 'edit', $user, [], $rigor, true, $title );
                        if ( !$tempErrors ) {
                                $tempErrors = $this->checkCascadingSourcesRestrictions( 'edit',
-                                       $user, $tempErrors, $rigor, true, $page );
+                                       $user, $tempErrors, $rigor, true, $title );
                        }
                        if ( $tempErrors ) {
                                // If protection keeps them from editing, they shouldn't be able to delete.
                                $errors[] = [ 'deleteprotected' ];
                        }
                        if ( $rigor !== self::RIGOR_QUICK && $wgDeleteRevisionsLimit
-                                && !$this->userCan( 'bigdelete', $user, $page ) && $page->isBigDeletion()
+                                && !$this->userCan( 'bigdelete', $user, $title ) && $title->isBigDeletion()
                        ) {
                                $errors[] = [ 'delete-toobig', $wgLang->formatNum( $wgDeleteRevisionsLimit ) ];
                        }
                } elseif ( $action === 'undelete' ) {
-                       if ( count( $this->getPermissionErrorsInternal( 'edit', $user, $page, $rigor, true ) ) ) {
+                       if ( count( $this->getPermissionErrorsInternal( 'edit', $user, $title, $rigor, true ) ) ) {
                                // Undeleting implies editing
                                $errors[] = [ 'undelete-cantedit' ];
                        }
-                       if ( !$page->exists()
-                                && count( $this->getPermissionErrorsInternal( 'create', $user, $page, $rigor, true ) )
+                       if ( !$title->exists()
+                                && count( $this->getPermissionErrorsInternal( 'create', $user, $title, $rigor, true ) )
                        ) {
                                // Undeleting where nothing currently exists implies creating
                                $errors[] = [ 'undelete-cantcreate' ];
@@ -1013,19 +1013,19 @@ class PermissionManager {
                LinkTarget $page
        ) {
                // TODO: remove & rework upon further use of LinkTarget
-               $page = Title::newFromLinkTarget( $page );
+               $title = Title::newFromLinkTarget( $page );
 
                # Only 'createaccount' can be performed on special pages,
                # which don't actually exist in the DB.
-               if ( $page->getNamespace() == NS_SPECIAL && $action !== 'createaccount' ) {
+               if ( $title->getNamespace() == NS_SPECIAL && $action !== 'createaccount' ) {
                        $errors[] = [ 'ns-specialprotected' ];
                }
 
                # Check $wgNamespaceProtection for restricted namespaces
-               if ( $page->isNamespaceProtected( $user ) ) {
-                       $ns = $page->getNamespace() == NS_MAIN ?
-                               wfMessage( 'nstab-main' )->text() : $page->getNsText();
-                       $errors[] = $page->getNamespace() == NS_MEDIAWIKI ?
+               if ( $title->isNamespaceProtected( $user ) ) {
+                       $ns = $title->getNamespace() == NS_MAIN ?
+                               wfMessage( 'nstab-main' )->text() : $title->getNsText();
+                       $errors[] = $title->getNamespace() == NS_MEDIAWIKI ?
                                [ 'protectedinterface', $action ] : [ 'namespaceprotected', $ns, $action ];
                }
 
@@ -1057,19 +1057,19 @@ class PermissionManager {
                LinkTarget $page
        ) {
                // TODO: remove & rework upon further use of LinkTarget
-               $page = Title::newFromLinkTarget( $page );
+               $title = Title::newFromLinkTarget( $page );
 
                if ( $action != 'patrol' ) {
                        $error = null;
                        // Sitewide CSS/JSON/JS changes, like all NS_MEDIAWIKI changes, also require the
                        // editinterface right. That's implemented as a restriction so no check needed here.
-                       if ( $page->isSiteCssConfigPage() && !$user->isAllowed( 'editsitecss' ) ) {
+                       if ( $title->isSiteCssConfigPage() && !$user->isAllowed( 'editsitecss' ) ) {
                                $error = [ 'sitecssprotected', $action ];
-                       } elseif ( $page->isSiteJsonConfigPage() && !$user->isAllowed( 'editsitejson' ) ) {
+                       } elseif ( $title->isSiteJsonConfigPage() && !$user->isAllowed( 'editsitejson' ) ) {
                                $error = [ 'sitejsonprotected', $action ];
-                       } elseif ( $page->isSiteJsConfigPage() && !$user->isAllowed( 'editsitejs' ) ) {
+                       } elseif ( $title->isSiteJsConfigPage() && !$user->isAllowed( 'editsitejs' ) ) {
                                $error = [ 'sitejsprotected', $action ];
-                       } elseif ( $page->isRawHtmlMessage() ) {
+                       } elseif ( $title->isRawHtmlMessage() ) {
                                // Raw HTML can be used to deploy CSS or JS so require rights for both.
                                if ( !$user->isAllowed( 'editsitejs' ) ) {
                                        $error = [ 'sitejsprotected', $action ];
@@ -1117,7 +1117,7 @@ class PermissionManager {
                LinkTarget $page
        ) {
                // TODO: remove & rework upon further use of LinkTarget
-               $page = Title::newFromLinkTarget( $page );
+               $title = Title::newFromLinkTarget( $page );
 
                # Protect css/json/js subpages of user pages
                # XXX: this might be better using restrictions
@@ -1126,29 +1126,29 @@ class PermissionManager {
                        return $errors;
                }
 
-               if ( preg_match( '/^' . preg_quote( $user->getName(), '/' ) . '\//', $page->getText() ) ) {
+               if ( preg_match( '/^' . preg_quote( $user->getName(), '/' ) . '\//', $title->getText() ) ) {
                        // Users need editmyuser* to edit their own CSS/JSON/JS subpages.
                        if (
-                               $page->isUserCssConfigPage()
+                               $title->isUserCssConfigPage()
                                && !$user->isAllowedAny( 'editmyusercss', 'editusercss' )
                        ) {
                                $errors[] = [ 'mycustomcssprotected', $action ];
                        } elseif (
-                               $page->isUserJsonConfigPage()
+                               $title->isUserJsonConfigPage()
                                && !$user->isAllowedAny( 'editmyuserjson', 'edituserjson' )
                        ) {
                                $errors[] = [ 'mycustomjsonprotected', $action ];
                        } elseif (
-                               $page->isUserJsConfigPage()
+                               $title->isUserJsConfigPage()
                                && !$user->isAllowedAny( 'editmyuserjs', 'edituserjs' )
                        ) {
                                $errors[] = [ 'mycustomjsprotected', $action ];
                        } elseif (
-                               $page->isUserJsConfigPage()
+                               $title->isUserJsConfigPage()
                                && !$user->isAllowedAny( 'edituserjs', 'editmyuserjsredirect' )
                        ) {
                                // T207750 - do not allow users to edit a redirect if they couldn't edit the target
-                               $rev = $this->revisionLookup->getRevisionByTitle( $page );
+                               $rev = $this->revisionLookup->getRevisionByTitle( $title );
                                $content = $rev ? $rev->getContent( 'main', RevisionRecord::RAW ) : null;
                                $target = $content ? $content->getUltimateRedirectTarget() : null;
                                if ( $target && (
@@ -1165,17 +1165,17 @@ class PermissionManager {
                        // and only very highly privileged users could remove it.
                        if ( !in_array( $action, [ 'delete', 'deleterevision', 'suppressrevision' ], true ) ) {
                                if (
-                                       $page->isUserCssConfigPage()
+                                       $title->isUserCssConfigPage()
                                        && !$user->isAllowed( 'editusercss' )
                                ) {
                                        $errors[] = [ 'customcssprotected', $action ];
                                } elseif (
-                                       $page->isUserJsonConfigPage()
+                                       $title->isUserJsonConfigPage()
                                        && !$user->isAllowed( 'edituserjson' )
                                ) {
                                        $errors[] = [ 'customjsonprotected', $action ];
                                } elseif (
-                                       $page->isUserJsConfigPage()
+                                       $title->isUserJsConfigPage()
                                        && !$user->isAllowed( 'edituserjs' )
                                ) {
                                        $errors[] = [ 'customjsprotected', $action ];
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..0b4ce4a 100644 (file)
@@ -50,6 +50,7 @@ use MediaWiki\Linker\LinkRenderer;
 use MediaWiki\Linker\LinkRendererFactory;
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Page\MovePageFactory;
 use MediaWiki\Permissions\PermissionManager;
 use MediaWiki\Preferences\PreferencesFactory;
 use MediaWiki\Preferences\DefaultPreferencesFactory;
@@ -215,7 +216,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' =>
@@ -262,9 +268,10 @@ return [
        },
 
        'LocalServerObjectCache' => function ( MediaWikiServices $services ) : BagOStuff {
+               $config = $services->getMainConfig();
                $cacheId = \ObjectCache::detectLocalServerCache();
 
-               return \ObjectCache::newFromId( $cacheId );
+               return \ObjectCache::newFromParams( $config->get( 'ObjectCaches' )[$cacheId] );
        },
 
        'MagicWordFactory' => function ( MediaWikiServices $services ) : MagicWordFactory {
@@ -314,6 +321,20 @@ return [
                );
        },
 
+       'MessageCache' => function ( MediaWikiServices $services ) : MessageCache {
+               $mainConfig = $services->getMainConfig();
+               return new MessageCache(
+                       $services->getMainWANObjectCache(),
+                       ObjectCache::getInstance( $mainConfig->get( 'MessageCacheType' ) ),
+                       $mainConfig->get( 'UseLocalMessageCache' )
+                               ? $services->getLocalServerObjectCache()
+                               : new EmptyBagOStuff(),
+                       $mainConfig->get( 'UseDatabaseMessages' ),
+                       $mainConfig->get( 'MsgCacheExpiry' ),
+                       $services->getContentLanguage()
+               );
+       },
+
        'MimeAnalyzer' => function ( MediaWikiServices $services ) : MimeAnalyzer {
                $logger = LoggerFactory::getInstance( 'Mime' );
                $mainConfig = $services->getMainConfig();
@@ -372,6 +393,17 @@ return [
                return new MimeAnalyzer( $params );
        },
 
+       'MovePageFactory' => function ( MediaWikiServices $services ) : MovePageFactory {
+               return new MovePageFactory(
+                       new ServiceOptions( MovePageFactory::$constructorOptions, $services->getMainConfig() ),
+                       $services->getDBLoadBalancer(),
+                       $services->getNamespaceInfo(),
+                       $services->getWatchedItemStore(),
+                       $services->getPermissionManager(),
+                       $services->getRepoGroup()
+               );
+       },
+
        'NamespaceInfo' => function ( MediaWikiServices $services ) : NamespaceInfo {
                return new NamespaceInfo( new ServiceOptions( NamespaceInfo::$constructorOptions,
                        $services->getMainConfig() ) );
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 68814ef..4903cf0 100644 (file)
@@ -659,7 +659,7 @@ class DerivedPageDataUpdater implements IDBAccessObject, LoggerAwareInterface {
                        $hasLinks = (bool)count( $this->getCanonicalParserOutput()->getLinks() );
                }
 
-               foreach ( $this->getModifiedSlotRoles() as $role ) {
+               foreach ( $this->getSlots()->getSlotRoles() as $role ) {
                        $roleHandler = $this->slotRoleRegistry->getRoleHandler( $role );
                        if ( $roleHandler->supportsArticleCount() ) {
                                $content = $this->getRawContent( $role );
@@ -1208,7 +1208,8 @@ class DerivedPageDataUpdater implements IDBAccessObject, LoggerAwareInterface {
                }
 
                // "created" is forced here
-               $this->options['created'] = ( $this->pageState['oldId'] === 0 );
+               $this->options['created'] = ( $this->options['created'] ||
+                                               ( $this->pageState['oldId'] === 0 ) );
 
                $this->revision = $revision;
 
index 12d6641..f681852 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 */
@@ -3460,7 +3461,7 @@ class Title implements LinkTarget, IDBAccessObject {
                        return [ [ 'badtitletext' ] ];
                }
 
-               $mp = new MovePage( $this, $nt );
+               $mp = MediaWikiServices::getInstance()->getMovePageFactory()->newMovePage( $this, $nt );
                $errors = $mp->isValidMove()->getErrorsArray();
                if ( $auth ) {
                        $errors = wfMergeErrorArrays(
@@ -3492,7 +3493,7 @@ class Title implements LinkTarget, IDBAccessObject {
 
                global $wgUser;
 
-               $mp = new MovePage( $this, $nt );
+               $mp = MediaWikiServices::getInstance()->getMovePageFactory()->newMovePage( $this, $nt );
                $method = $auth ? 'moveIfAllowed' : 'move';
                $status = $mp->$method( $wgUser, $reason, $createRedirect, $changeTags );
                if ( $status->isOK() ) {
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 540860b..0a788d4 100644 (file)
@@ -172,7 +172,7 @@ class ApiMove extends ApiBase {
         * @return Status
         */
        protected function movePage( Title $from, Title $to, $reason, $createRedirect, $changeTags ) {
-               $mp = new MovePage( $from, $to );
+               $mp = MediaWikiServices::getInstance()->getMovePageFactory()->newMovePage( $from, $to );
                $valid = $mp->isValidMove();
                if ( !$valid->isOK() ) {
                        return $valid;
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 8ae1b66..f5952e3 100644 (file)
@@ -312,12 +312,6 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
 
                        /* Add fields to our query if they are specified as a needed parameter. */
                        $this->addFieldsIf( [ 'rc_this_oldid', 'rc_last_oldid' ], $this->fld_ids );
-                       if ( $this->fld_user || $this->fld_userid ) {
-                               $actorQuery = ActorMigration::newMigration()->getJoin( 'rc_user' );
-                               $this->addTables( $actorQuery['tables'] );
-                               $this->addFields( $actorQuery['fields'] );
-                               $this->addJoinConds( $actorQuery['joins'] );
-                       }
                        $this->addFieldsIf( [ 'rc_minor', 'rc_type', 'rc_bot' ], $this->fld_flags );
                        $this->addFieldsIf( [ 'rc_old_len', 'rc_new_len' ], $this->fld_sizes );
                        $this->addFieldsIf( [ 'rc_patrolled', 'rc_log_type' ], $this->fld_patrolled );
@@ -405,6 +399,14 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        $this->addJoinConds( $commentQuery['joins'] );
                }
 
+               if ( $this->fld_user || $this->fld_userid || !is_null( $this->token ) ) {
+                       // Token needs rc_user for RecentChange::newFromRow/User::newFromAnyId (T228425)
+                       $actorQuery = ActorMigration::newMigration()->getJoin( 'rc_user' );
+                       $this->addTables( $actorQuery['tables'] );
+                       $this->addFields( $actorQuery['fields'] );
+                       $this->addJoinConds( $actorQuery['joins'] );
+               }
+
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
 
                $hookData = [];
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 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 599cbb8..c91976f 100644 (file)
@@ -94,9 +94,9 @@
        "apihelp-compare-param-fromid": "Идентификатор первой сравниваемой страницы.",
        "apihelp-compare-param-fromrev": "Первая сравниваемая версия.",
        "apihelp-compare-param-frompst": "Выполнить преобразование перед записью правки (PST) над <var>fromtext-&#x7B;slot}</var>.",
-       "apihelp-compare-param-fromtext": "Ð\98Ñ\81полÑ\8cзÑ\83йÑ\82е Ñ\8dÑ\82оÑ\82 Ñ\82екÑ\81Ñ\82 Ð²Ð¼ÐµÑ\81Ñ\82о Ñ\81одеÑ\80жимого Ð²ÐµÑ\80Ñ\81ии, Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹ <var>fromtitle</var>, <var>fromid</var> Ð¸Ð»Ð¸ <var>fromrev</var>.",
-       "apihelp-compare-param-fromcontentmodel": "Ð\9cоделÑ\8c Ñ\81одеÑ\80жимого <var>fromtext</var>. Ð\95Ñ\81ли Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ð°, Ð±Ñ\83деÑ\82 Ñ\83гадана Ð¿Ð¾ Ð´Ñ\80Ñ\83гим Ð¿Ð°Ñ\80амеÑ\82Ñ\80ам.",
-       "apihelp-compare-param-fromcontentformat": "ФоÑ\80маÑ\82 Ñ\81еÑ\80иализаÑ\86ии Ñ\81одеÑ\80жимого <var>fromtext</var>.",
+       "apihelp-compare-param-fromtext": "УкажиÑ\82е <kbd>fromslots=main</kbd> Ð¸ Ð¸Ñ\81полÑ\8cзÑ\83йÑ\82е <var>fromtext-main</var>.",
+       "apihelp-compare-param-fromcontentmodel": "УкажиÑ\82е <kbd>fromslots=main</kbd> Ð¸ Ð¸Ñ\81полÑ\8cзÑ\83йÑ\82е <var>fromcontentmodel-main</var>.",
+       "apihelp-compare-param-fromcontentformat": "УкажиÑ\82е <kbd>fromslots=main</kbd> Ð¸ Ð¸Ñ\81полÑ\8cзÑ\83йÑ\82е <var>fromcontentformat-main</var>.",
        "apihelp-compare-param-fromsection": "Использовать только указанную секцию из содержимого «from».",
        "apihelp-compare-param-totitle": "Заголовок второй сравниваемой страницы.",
        "apihelp-compare-param-toid": "Идентификатор второй сравниваемой страницы.",
        "apihelp-compare-param-torelative": "Использовать версию, относящуюся к определённой <var>fromtitle</var>, <var>fromid</var> или <var>fromrev</var>. Все другие опции 'to' будут проигнорированы.",
        "apihelp-compare-param-topst": "Выполнить преобразование перед записью правки (PST) над <var>totext</var>.",
        "apihelp-compare-param-tocontentmodel-{slot}": "Модель содержимого <var>totext-&#x7B;slot}</var>. Если не задана, будет угадана по другим параметрам.",
-       "apihelp-compare-param-totext": "Ð\98Ñ\81полÑ\8cзÑ\83йÑ\82е Ñ\8dÑ\82оÑ\82 Ñ\82екÑ\81Ñ\82 Ð²Ð¼ÐµÑ\81Ñ\82о Ñ\81одеÑ\80жимого Ð²ÐµÑ\80Ñ\81ии, Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð¹ <var>totitle</var>, <var>toid</var> Ð¸Ð»Ð¸ <var>torev</var>.",
-       "apihelp-compare-param-tocontentmodel": "Ð\9cоделÑ\8c Ñ\81одеÑ\80жимого <var>totext</var>. Ð\95Ñ\81ли Ð½Ðµ Ð·Ð°Ð´Ð°Ð½Ð°, Ð±Ñ\83деÑ\82 Ñ\83гадана Ð¿Ð¾ Ð´Ñ\80Ñ\83гим Ð¿Ð°Ñ\80амеÑ\82Ñ\80ам.",
-       "apihelp-compare-param-tocontentformat": "ФоÑ\80маÑ\82 Ñ\81еÑ\80иализаÑ\86ии Ñ\81одеÑ\80жимого <var>totext</var>.",
+       "apihelp-compare-param-totext": "УкажиÑ\82е <kbd>toslots=main</kbd> Ð¸ Ð¸Ñ\81полÑ\8cзÑ\83йÑ\82е <var>totext-main</var>.",
+       "apihelp-compare-param-tocontentmodel": "УкажиÑ\82е <kbd>toslots=main</kbd> Ð¸ Ð¸Ñ\81полÑ\8cзÑ\83йÑ\82е <var>tocontentmodel-main</var>.",
+       "apihelp-compare-param-tocontentformat": "УкажиÑ\82е <kbd>toslots=main</kbd> Ð¸ Ð¸Ñ\81полÑ\8cзÑ\83йÑ\82е <var>tocontentformat-main</var>.",
        "apihelp-compare-param-tosection": "Использовать только указанную секцию из содержимого «to».",
        "apihelp-compare-param-prop": "Какую информацию получить.",
        "apihelp-compare-paramvalue-prop-diff": "HTML-код разницы.",
        "apihelp-parse-paramvalue-prop-revid": "Добавляет идентификатор версии распарсенной страницы.",
        "apihelp-parse-paramvalue-prop-displaytitle": "Добавляет название проанализированного вики-текста.",
        "apihelp-parse-paramvalue-prop-headitems": "Возвращает элементы, которые следует поместить в <code>&lt;head&gt;</code> страницы.",
-       "apihelp-parse-paramvalue-prop-headhtml": "Возвращает распарсенный <code>&lt;head&gt;</code> страницы.",
+       "apihelp-parse-paramvalue-prop-headhtml": "Возвращает распарсенный тип документа, начальный  <code>&lt;html&gt;</code>, элемент <code>&lt;head&gt;</code> и открывающий <code>&lt;body&gt;</code>.",
        "apihelp-parse-paramvalue-prop-modules": "Возвращает использованные на странице модули ResourceLoader. Для загрузки, используйте <code>mw.loader.using()</code>. Одновременно с <kbd>modules</kbd> должно быть запрошено либо <kbd>jsconfigvars</kbd>, либо <kbd>encodedjsconfigvars</kbd>.",
        "apihelp-parse-paramvalue-prop-jsconfigvars": "Возвращает переменные JavaScript с данными настроек для этой страницы. Для их применения используйте <code>mw.config.set()</code>.",
        "apihelp-parse-paramvalue-prop-encodedjsconfigvars": "Возвращает переменные JavaScript с данными настроек для этой страницы в виде JSON-строки.",
        "apihelp-query+revisions+base-paramvalue-prop-userid": "Идентификатор создателя версии.",
        "apihelp-query+revisions+base-paramvalue-prop-size": "Длина версии (в байтах).",
        "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1-хэш (base 16) версии.",
-       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "Идентификатор модели содержимого версии.",
+       "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "Ð\98денÑ\82иÑ\84икаÑ\82оÑ\80 Ð¼Ð¾Ð´ÐµÐ»Ð¸ Ñ\81одеÑ\80жимого ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñ\81лоÑ\82а Ð²ÐµÑ\80Ñ\81ии.",
        "apihelp-query+revisions+base-paramvalue-prop-comment": "Описание правки.",
        "apihelp-query+revisions+base-paramvalue-prop-parsedcomment": "Распарсенное описание правки.",
-       "apihelp-query+revisions+base-paramvalue-prop-content": "ТекÑ\81Ñ\82 версии.",
+       "apihelp-query+revisions+base-paramvalue-prop-content": "СодеÑ\80жание ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ Ñ\81лоÑ\82а версии.",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "Метки версии.",
        "apihelp-query+revisions+base-paramvalue-prop-parsetree": "Используйте <kbd>[[Special:ApiHelp/expandtemplates|action=expandtemplates]]</kbd> или <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>. Дерево парсинга XML-содержимого версии (требуется модель содержимого <code>$1</code>).",
        "apihelp-query+revisions+base-param-limit": "Сколько версий вернуть.",
        "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;логический\n:Логические параметры работают как флажки (checkboxes) в HTML: если параметр задан, независимо от его значения, он воспринимается за истину. Для передачи ложного значения просто опустите параметр.\n;временные метки\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:* Формат ctime языка программирования C: <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Количество секунд, прошедших с 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 (Unit Separator) в качестве разделителя ''и'' добавьте в начало значения U+001F, например, <kbd>param=%1Fvalue1%1Fvalue2</kbd>.",
+       "api-help-datatypes": "Ввод в MediaWiki должен быть NFC-нормализованным UTF-8. MediaWiki может попытаться преобразовать другой ввод, но это приведёт к провалу некоторых операций (таких, как [[Special:ApiHelp/edit|редактирование]] со сверкой MD5).\n\nНекоторые типы параметров в запросах API требуют дополнительных пояснений:\n;логический\n:Логические параметры работают как флажки (checkboxes) в HTML: если параметр задан, независимо от его значения, он воспринимается за истину. Для передачи ложного значения просто опустите параметр.\n;временные метки\n:Временные метки могут быть заданы в нескольких форматах (детальнее см. [[mw:Special:MyLanguage/Timestamp|Timestamp library input formats on mediawiki.org]]). Рекомендуемым является дата и время ISO 8601.\n<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 (Unit Separator) в качестве разделителя ''и'' добавьте в начало значения U+001F, например, <kbd>param=%1Fvalue1%1Fvalue2</kbd>.",
        "api-help-templatedparams-header": "Шаблонные параметры",
        "api-help-templatedparams": "Шаблонные параметры используются в случаях, когда модулю API нужно получить по параметру со значением на каждое значение другого параметра. Например, если бы был модуль API, запрашивающий фрукты, у него мог бы быть параметр <var>фрукты</var>, указывающий, какие фрукты запрашиваются, и шаблонный параметр <var>{фрукт}-в-количестве</var>, указывающий, сколько фруктов каждого вида запросить. Клиент API, который хочет запросить 1 яблоко, 5 бананов и 20 апельсинов, мог бы тогда сделать запрос наподобие <kbd>фрукты=яблоки|бананы|апельсины&яблоки-в-количестве=1&бананы-в-количестве=5&апельсины-в-количестве=20</kbd>.",
        "api-help-param-type-limit": "Тип: целое число или <kbd>max</kbd>",
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..4a5df8e 100644 (file)
@@ -21,6 +21,7 @@
 namespace MediaWiki\Block;
 
 use DateTime;
+use DateTimeZone;
 use DeferredUpdates;
 use IP;
 use MediaWiki\Config\ServiceOptions;
@@ -50,7 +51,7 @@ class BlockManager {
         *
         * @var array
         * @since 1.34
-        * */
+        */
        public static $constructorOptions = [
                'ApplyIpBlocksToXff',
                'CookieSetOnAutoblock',
@@ -435,7 +436,11 @@ class BlockManager {
                }
 
                // Set the cookie. Reformat the MediaWiki datetime as a Unix timestamp for the cookie.
-               $expiryValue = DateTime::createFromFormat( 'YmdHis', $expiryTime )->format( 'U' );
+               $expiryValue = DateTime::createFromFormat(
+                       'YmdHis',
+                       $expiryTime,
+                       new DateTimeZone( 'UTC' )
+               )->format( 'U' );
                $cookieOptions = [ 'httpOnly' => false ];
                $cookieValue = $this->getCookieValue( $block );
                $response->setCookie( 'BlockID', $cookieValue, $expiryValue, $cookieOptions );
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 5745451..93fdb16 100644 (file)
@@ -105,44 +105,14 @@ class MessageCache {
        private $loadedLanguages = [];
 
        /**
-        * Singleton instance
-        *
-        * @var MessageCache $instance
-        */
-       private static $instance;
-
-       /**
-        * Get the signleton instance of this class
+        * Get the singleton instance of this class
         *
+        * @deprecated in 1.34 inject an instance of this class instead of using global state
         * @since 1.18
         * @return MessageCache
         */
        public static function singleton() {
-               if ( self::$instance === null ) {
-                       global $wgUseDatabaseMessages, $wgMsgCacheExpiry, $wgUseLocalMessageCache;
-                       $services = MediaWikiServices::getInstance();
-                       self::$instance = new self(
-                               $services->getMainWANObjectCache(),
-                               wfGetMessageCacheStorage(),
-                               $wgUseLocalMessageCache
-                                       ? $services->getLocalServerObjectCache()
-                                       : new EmptyBagOStuff(),
-                               $wgUseDatabaseMessages,
-                               $wgMsgCacheExpiry,
-                               $services->getContentLanguage()
-                       );
-               }
-
-               return self::$instance;
-       }
-
-       /**
-        * Destroy the singleton instance
-        *
-        * @since 1.18
-        */
-       public static function destroyInstance() {
-               self::$instance = null;
+               return MediaWikiServices::getInstance()->getMessageCache();
        }
 
        /**
index 31b4443..7807877 100644 (file)
@@ -232,6 +232,13 @@ class ChangesList extends ContextSource {
                $classes[] = Sanitizer::escapeClass( self::CSS_CLASS_PREFIX . 'ns-' .
                        $rc->mAttribs['rc_namespace'] );
 
+               $nsInfo = MediaWikiServices::getInstance()->getNamespaceInfo();
+               $classes[] = Sanitizer::escapeClass(
+                       self::CSS_CLASS_PREFIX .
+                       'ns-' .
+                       ( $nsInfo->isTalk( $rc->mAttribs['rc_namespace'] ) ? 'talk' : 'subject' )
+               );
+
                if ( $this->filterGroups !== null ) {
                        foreach ( $this->filterGroups as $filterGroup ) {
                                foreach ( $filterGroup->getFilters() as $filter ) {
@@ -451,9 +458,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 +612,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 +714,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..0f6e232 100644 (file)
@@ -24,6 +24,7 @@
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Storage\NameTableAccessException;
 use Wikimedia\Rdbms\Database;
+use Wikimedia\Rdbms\IDatabase;
 
 class ChangeTags {
        /**
@@ -125,7 +126,7 @@ class ChangeTags {
 
                $markers = $context->msg( 'tag-list-wrapper' )
                        ->numParams( count( $displayTags ) )
-                       ->rawParams( $context->getLanguage()->commaList( $displayTags ) )
+                       ->rawParams( implode( ' ',  $displayTags ) )
                        ->parse();
                $markers = Xml::tags( 'span', [ 'class' => 'mw-tag-markers' ], $markers );
 
@@ -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 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 04aba37..b3d25a9 100644 (file)
        "config-diff3-bad": "GNU diff3 nie gevind nie.",
        "config-db-type": "Databasistipe:",
        "config-db-host": "Databasisbediener:",
-       "config-db-host-oracle": "Databasis-TNS:",
        "config-db-wiki-settings": "Identifiseer hierdie wiki",
        "config-db-name": "Databasisnaam:",
-       "config-db-name-oracle": "Databasis-skema:",
        "config-db-install-account": "Gebruiker vir die installasie",
        "config-db-username": "Databasis gebruikersnaam:",
        "config-db-password": "Databasis wagwoord:",
        "config-db-port": "Databasispoort:",
        "config-db-schema": "Skema vir MediaWiki",
        "config-sqlite-dir": "Gids vir SQLite se data:",
-       "config-oracle-def-ts": "Standaard tabelruimte:",
-       "config-oracle-temp-ts": "Tydelike tabelruimte:",
        "config-header-mysql": "MySQL-instellings",
        "config-header-postgres": "PostgreSQL-instellings",
        "config-header-sqlite": "SQLite-instellings",
-       "config-header-oracle": "Oracle-instellings",
        "config-invalid-db-type": "Ongeldige databasistipe",
        "config-missing-db-name": "U moet 'n waarde vir \"Databasnaam\" verskaf",
        "config-sqlite-readonly": "Die lêer <code>$1</code> kan nie geskryf word nie.",
index 46b9c21..834c129 100644 (file)
        "config-db-type": "نوع قاعدة البيانات:",
        "config-db-host": "مضيف قاعدة البيانات:",
        "config-db-host-help": "إذا كان خادم قاعدة البيانات موجودا في خادم مختلف، فأدخل اسم المضيف أو عنوان الآيبي هنا. \n\nإذا كنت تستخدم استضافة ويب مشتركة، فيجب أن يمنحك موفر الاستضافة اسم المضيف الصحيح في وثائقه. \n\nإذا كنت تستخدم MySQL، فإن استخدام \"localhost\" قد لا يعمل لاسم الخادم، إذا لم يتم ذلك، فجرب \"127.0.0.1\" لعنوان الآيبي المحلي. \n\nإذا كنت تستخدم PostgreSQL، فاترك هذا الحقل فارغا للاتصال عبر مقبس Unix.",
-       "config-db-host-oracle": "قاعدة بيانات TNS:",
-       "config-db-host-oracle-help": "أدخل [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm اسم اتصال محلي] صالحا، يجب أن يكون ملف tnsnames.ora مرئيا لهذا التثبيت.<br />إذا كنت تستخدم مكتبات العملاء 10g أو أحدث، فيمكنك أيضا استخدام طريقة التسمية [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.اتصال htm السهل].",
        "config-db-wiki-settings": "حدِّد هذا الويكي",
        "config-db-name": "اسم قاعدة البيانات (لا شرط):",
        "config-db-name-help": "اختر الاسم الذي يعرف الويكي الخاص بك. لا يجب أن يحتوي على مسافات. إذا كنت تستخدم استضافة المواقع المشتركة، مزود الاستضافة إما سيعطيك اسم قاعدة بيانات محددة لاستخدامها أو سيتيح لك إنشاء قواعد بيانات عن طريق لوحة التحكم.",
-       "config-db-name-oracle": "سكيما قاعدة البيانات:",
-       "config-db-account-oracle-warn": "هناك ثلاثة سيناريوهات مدعومة لتثبيت Oracle كقاعدة بيانات خلفية: \n\nإذا كنت ترغب في إنشاء حساب قاعدة بيانات كجزء من عملية التثبيت، فيُرجَى تقديم حساب بدور SYSDBA كحساب قاعدة بيانات للتثبيت وتحديد بيانات الاعتماد المطلوبة لحساب الوصول إلى الإنترنت، وإلا يمكنك إما إنشاء حساب الوصول إلى الويب يدويا وتزويد الحساب فقط (إذا كان يتطلب صلاحيات لإنشاء كائنات المخطط) أو توفير حسابين مختلفين، أحدهما له امتيازات إنشاء وامتياز مقيد للدخول إلى الويب. \n\nيمكن العثور على البرنامج النصي لإنشاء حساب له امتيازات مطلوبة في دليل \"maintenance/oracle/\" لهذا التثبيت، ضع في اعتبارك أن استخدام حساب مقيد سيؤدي إلى تعطيل جميع إمكانات الصيانة باستخدام الحساب الافتراضي.",
        "config-db-install-account": "حساب المستخدم للتنصيب",
        "config-db-username": "اسم مستخدم قاعدة البيانات:",
        "config-db-password": "كلمة سر قاعدة البيانات:",
        "config-pg-test-error": "لا يمكن الاتصال بقاعدة البيانات <strong>$1</strong>: $2",
        "config-sqlite-dir": "دليل بيانات SQLite:",
        "config-sqlite-dir-help": "يخزن SQLite جميع البيانات في ملف واحد. \n\nيجب أن يكون الدليل الذي توفره قابلا للكتابة بواسطة خادم الويب أثناء التثبيت. \n\nيجب أن يكون <strong>غير</strong> متاحا عبر الويب؛ هذا هو سبب عدم وضعه في مكان ملفات PHP الخاصة بك. \n\nسيقوم المثبت بكتابة ملف <code>.htaccess</code> معه، ولكن إذا فشل ذلك، يمكن لشخص ما الوصول إلى قاعدة بياناتك الأولية، \nيتضمن ذلك بيانات المستخدم الأولية (عناوين البريد الإلكتروني وكلمات المرور المجزأة) بالإضافة إلى المراجعات المحذوفة والبيانات المحظورة الأخرى على الويكي. \n\nفكر في وضع قاعدة البيانات في مكان آخر تماما، على سبيل المثال في <code>/var/lib/mediawiki/yourwiki</code.",
-       "config-oracle-def-ts": "جدولية افتراضية:",
-       "config-oracle-temp-ts": "جدولية مؤقتة:",
        "config-type-mysql": "MariaDB أو MySQL أو متوافق",
        "config-type-postgres": "بوستجر إس كيو إل",
        "config-type-sqlite": "إس كيو لايت",
-       "config-type-oracle": "أوراكل",
-       "config-type-mssql": "خادم SQL لميكروسوفت",
        "config-support-info": "ميدياويكي يدعم نظم قواعد البيانات التالية: $1 إذا كنت لا ترى نظام قاعدة البيانات الذي تحاول استخدامه مدرجًا أدناه، اتبع الإرشادات المرتبطة فوق لتمكين الدعم.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] هو الهدف الأساسي لميدياويكي وأفضل دعم له، يعمل ميدياويكي أيضا مع [{{int:version-db-mariadb-url}} MariaDB] و[{{int:version-db-percona-url}} Percona Server]، وهما متوافقان مع MySQL، ([https://www.php.net/manual/en/mysqli.installation.php كيفية تجميع PHP مع دعم MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] هو نظام قاعدة بيانات مفتوح المصدر مشهور كبديل لـMySQL ([https://www.php.net/manual/en/pgsql.installation.php كيفية تجميع PHP مع دعم PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] هو نظام قاعدة بيانات خفيف مدعوم بشكل جيد. ([https://www.php.net/manual/en/pdo.installation.php كيفية ترجمة PHP باستخدام دعم SQLite]، يستخدم PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] هي قاعدة بيانات مؤسسة تجارية. ([https://www.php.net/manual/en/oci8.installation.php كيفية تجميع PHP مع دعم OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] هي قاعدة بيانات مؤسسة تجارية لويندوز. ([https://www.php.net/manual/en/sqlsrv.installation.php كيفية تجميع PHP مع دعم SQLSRV])",
        "config-header-mysql": "إعدادات MariaDB/MySQL",
        "config-header-postgres": "إعدادات PostgreSQL",
        "config-header-sqlite": "إعدادات SQLite",
-       "config-header-oracle": "إعدادات أوراكل",
-       "config-header-mssql": "إعدادات خادم Microsoft SQL",
        "config-invalid-db-type": "نوع قاعدة بيانات غير صحيح",
        "config-missing-db-name": "يجب عليك إدخال قيمة ل\"{{int:config-db-name}}\".",
        "config-missing-db-host": "يجب إدخال قيمة لـ\"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "يجب عليك إدخال قيمة ل\"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "TNS قاعدة بيانات غير صالحة \"$1\";\nاستخدم إما \"اسم TNS\" أو سلسلة \"الاتصال السهل\" \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm طرقلتسمية في أوراكل]).",
        "config-invalid-db-name": "اسم قاعدة بيانات غير صالح \"$1\". \nاستخدم فقط أحرف أسكي (az، AZ) وأرقاما (0-9) وشرطات سفلية (_).",
        "config-invalid-db-prefix": "بادئة قاعدة بيانات غير صالحة \"$1\". \nاستخدم فقط أحرف أسكي (az، AZ) وأرقاما (0-9) وشرطات سفلية (_).",
        "config-connection-error": "$1.\n\nتحقق من المضيف، واسم المستخدم وكلمة المرور وحاول مرة أخرى، إذا كنت تستخدم \"المضيف المحلي\" كمضيف قاعدة بيانات، فحاول استخدام \"127.0.0.1\" بدلا من ذلك (أو العكس).",
        "config-invalid-schema": "مخطط غير صالح لميدياويكي \"$1\". \nاستخدم فقط أحرف أسكي (az، AZ) وأرقاما (0-9) وشرطات سفلية (_).",
-       "config-db-sys-create-oracle": "المثبت يعتمد باستخدام حساب SYSDBA فقط لإنشاء حساب جديد.",
-       "config-db-sys-user-exists-oracle": "حساب المستخدم \"$1\" موجود بالفعل; يمكن استخدام SYSDBA لإنشاء حساب جديد فقط!",
        "config-postgres-old": "PostgreSQL $1 أو لاحق مطلوب. لديك $2.",
-       "config-mssql-old": "خادم Microsoft SQL $1 أو لاحق مطلوب. لديك $2.",
        "config-sqlite-name-help": "اختر اسمًا يعرف الويكي الخاص بك، \nلا تستخدم مسافات أو شرطات، \nسيتم استخدام هذا لاسم ملف البيانات SQLite.",
        "config-sqlite-parent-unwritable-group": "لا يمكن إنشاء دليل البيانات <code><nowiki>$1</nowiki></code>; لأن الدليل الأصلي <code><nowiki>$2</nowiki></code> غير قابل للكتابة بواسطة خادم الويب، \nحدد المثبت المستخدم الذي يعمل عليه خادم الويب الخاص بك،\nاجعل الدليل <code><nowiki>$3</nowiki></code> قابلا للكتابة بواسطته للمتابعة، \nفي نظام يونكس/لينوكس قم بـ: \n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "لا يمكن إنشاء دليل البيانات <code><nowiki>$1</nowiki></code>; لأن الدليل الأصلي <code><nowiki>$2</nowiki></code> غير قابل للكتابة بواسطة خادم الويب، \nتعذر على المثبت تحديد المستخدم الذي يعمل عليه خادم الويب الخاص بك،\nاجعل الدليل <code><nowiki>$3</nowiki></code> قابلا للكتابة بواسطته للمتابعة، \nفي نظام يونكس/لينوكس قم بـ: \n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "محرك التخزين",
        "config-mysql-innodb": "InnoDB (مستحسن)",
        "config-mysql-engine-help": "<strong>InnoDB</strong> هو دائما الخيار الأفضل; لأنه يحتوي على دعم تزامن جيد.\n\nقد يكون <strong>MyISAM</strong> أسرع في تثبيت المستخدم الفردي أو للقراءة فقط،\nتميل قواعد بيانات MyISAM للتلف أكثر من قواعد بيانات InnoDB.",
-       "config-mssql-auth": "نوع الاستيثاق:",
-       "config-mssql-install-auth": "حدد نوع المصادقة الذي سيتم استخدامه للاتصال بقاعدة البيانات أثناء عملية التثبيت. \nإذا حددت \"{{int:config-mssql-windowsauth}}\"، فسيتم استخدام بيانات اعتماد أي مستخدم يعمل عليه خادم الويب.",
-       "config-mssql-web-auth": "حدد نوع المصادقة الذي سيستخدمه خادم الويب للاتصال بخادم قاعدة البيانات، أثناء التشغيل العادي للويكي. \nإذا حددت \"{{int:config-mssql-windowsauth}}\"، فسيتم استخدام بيانات اعتماد أي مستخدم يعمل عليه خادم الويب.",
-       "config-mssql-sqlauth": "مصادقة خادم SQL",
-       "config-mssql-windowsauth": "مصادقة ويندوز",
        "config-site-name": "اسم الويكي:",
        "config-site-name-help": "سيظهر هذا في شريط عنوان المتصفح وفي أماكن أخرى مختلفة.",
        "config-site-name-blank": "أدخل اسم موقع.",
index 26d2ea7..55a1606 100644 (file)
        "config-db-type": "Tipu de base de datos:",
        "config-db-host": "Servidor de la base de datos:",
        "config-db-host-help": "Si'l sirvidor de bases de datos ta nun sirvidor diferente, introduz equí la IP o'l nome del agospiu.\n\nSi tas usando un agospiu web compartíu, el so fornidor debió especificar el nome del agospiu na so documentación.\n\nSi tas usando MySQL, usar «localhost» pue nun funcionar pal nome del sirvidor. Si non, prueba «120.0.0.1» pa la direición IP llocal.\n\nSi tas usando PostgreSQL, dexa esti campu baleru pa coneutate per una ralura d'Unix.",
-       "config-db-host-oracle": "TNS de la base de datos:",
-       "config-db-host-oracle-help": "Escribe un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nome de conexón local] válidu; un archivu tnsnames.ora ten de ser visible pa esta instalación.<br />Si tas utilizando biblioteques de veceru 10g o más recién tamién puedes utilizar el métodu de asignación de nomes [http://download.oracle.com/docs/cd/Y11882_01/network.112/y10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifica esta wiki",
        "config-db-name": "Nome de la base de datos (ensin guiones):",
        "config-db-name-help": "Escueye un nome qu'identifique la to wiki. Nun tien de contener espacios. \nSi tas utilizando agospiamientu web compartíu, el to provisor va date un nome específicu de base de datos por que lu utilices, o bien va dexate crear bases de datos al traviés d'un panel de control.",
-       "config-db-name-oracle": "Esquema de la base de datos:",
-       "config-db-account-oracle-warn": "Hai tres escenarios compatibles pa la instalación de Oracle como motor de base de datos:\n\nSi desees crear una cuenta de base de datos como parte del procesu d'instalación, por favor apurre una cuenta con rol SYSDBA como cuenta de base de datos pa la instalación y especifica les credenciales que quies tener pal accesu a la web a la cuenta; d'otra miente, puedes crear manualmente la cuenta d'accesu a la web y suministrar namái esa cuenta (si tien los permisos necesarios pa crear los oxetos d'esquema) o dar dos cuentes distintos, una con privilexos de creación y otra con accesu acutáu a la web\n\nLa secuencia de comandos (script) pa crear una cuenta colos privilexos necesarios puede atopase nel direutoriu \"maintenance/oracle/\" d'esta instalación. Ten en cuenta qu'utilizar una cuenta acutada va desactivar toles capacidaes de caltenimientu cola cuenta predeterminada.",
        "config-db-install-account": "Cuenta d'usuariu pa la instalación",
        "config-db-username": "Nome d'usuariu de base de datos:",
        "config-db-password": "Contraseña de base de datos:",
        "config-pg-test-error": "Nun puede coneutase cola base de datos <strong>$1</strong>: $2",
        "config-sqlite-dir": "Direutoriu de datos SQLite:",
        "config-sqlite-dir-help": "SQLite almacena tolos datos nun ficheru únicu.\n\nEl direutoriu que proporciones tien de poder escribise pol servidor web mientres la instalación.\n\n<strong>Nun</strong> tendría de tener accesu pela web, por eso nun se pon nel sitiu onde tán los ficheros PHP.\n\nL'instalador escribirá un ficheru <code>.htaccess</code> xunto con él, pero si esto falla dalguién podría tener accesu a la base de datos completa.\nEso incluye los datos d'usuariu completos (direcciones de corréu electrónicu, contraseñes con hash) lo mesmo que les revisiones desaniciaes y otros datos acutaos de la wiki.\n\nConsidera poner la base de datos en dalgún otru sitiu, por casu en <code>/var/lib/mediawiki/miowiki</code>.",
-       "config-oracle-def-ts": "Espaciu de tables predetermináu:",
-       "config-oracle-temp-ts": "Espaciu de tables temporal:",
        "config-type-mysql": "MariaDB, MySQL o compatible",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki 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-header-sqlite": "Axustes de SQLite",
-       "config-header-oracle": "Axustes d'Oracle",
-       "config-header-mssql": "Axustes de Microsoft SQL Server",
        "config-invalid-db-type": "Triba non válida de base de datos.",
        "config-missing-db-name": "Has introducir un valor pa «{{int:config-db-name}}».",
        "config-missing-db-host": "Has introducir un valor pa «{{int:config-db-host}}».",
-       "config-missing-db-server-oracle": "Has introducir un valor pa «{{int:config-db-host-oracle}}».",
-       "config-invalid-db-server-oracle": "TNS inválidu pa la base de datos «$1».\nUsa una cadena «TNS Name» o «Easy Connect» ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Métodos de nomenclatura d'Oracle]).",
        "config-invalid-db-name": "Nome inválidu de la base de datos «$1».\nUsa sólo lletres ASCII (a-z, A-Z), númberos (0-9), guiones baxos (_) y guiones (-).",
        "config-invalid-db-prefix": "Prefixu inválidu pa la base de datos «$1».\nUsa sólo lletres ASCII (a-z, A-Z), númberos (0-9), guiones baxos (_) y guiones (-).",
        "config-connection-error": "$1.\n\nComprueba'l sirvidor, el nome d'usuariu y la contraseña, y tenta nuevamente.Si uses \"localhost\" como sirvidor de base de datos, tenta usando \"127.0.0.1\" nel so llugar (o viceversa).",
        "config-invalid-schema": "Esquema inválidu «$1» pa MediaWiki.\nUsa sólo lletres ASCII (a-z, A-Z), númberos (0-9) y guiones baxos (_).",
-       "config-db-sys-create-oracle": "L'instalador namái sofita l'usu d'una cuenta SYSDBA pa la creación d'otra cuenta nueva.",
-       "config-db-sys-user-exists-oracle": "La cuenta d'usuariu «$1» yá esiste. ¡SYSDBA sólo puede utilizase pa crear una nueva cuenta!",
        "config-postgres-old": "Ríquese PostgreSQL $1 o posterior. Tienes la versión $2.",
-       "config-mssql-old": "Ríquese Microsoft SQL Server $1 o posterior. Tienes la versión $2.",
        "config-sqlite-name-help": "Escueye'l nome qu'identifica la to wiki.\nNun uses espacios o guiones.\nEsti va usase como nome del ficheru de datos pa SQLite.",
        "config-sqlite-parent-unwritable-group": "Nun puede crease el direutoriu de datos <code><nowiki>$1</nowiki></code> porque'l servidor web nun tien permisu d'escritura nel direutoriu padre <code><nowiki>$2</nowiki></code>.\n\nL'instalador determinó l'usuariu col que s'executa'l sirvidor web.\nDa-y permisos d'escritura nel direutoriu <code><nowiki>$3</nowiki></code> pa siguir.\nNun sistema Unix/Linux fai:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Nun puede crease'l direutoriu de datos <code><nowiki>$1</nowiki></code>, porque'l sirvidor web nun tien permisu d'escritura nel direutoriu padre <code><nowiki>$2</nowiki></code>.\n\nL'instalador nun pudo determinar l'usuariu col que s'executa'l sirvidor web.\nDa permisos d'escritura universal pa él (¡y pa otros!) nel direutoriu <code><nowiki>$3</nowiki></code> pa siguir.\nNun sistema Unix/Linux fai:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-db-web-no-create-privs": "La cuenta qu'especificasti pa la instalación nun tien permisos abondo pa crear una cuenta.\nLa cuenta qu'especifiques equí yá tien d'esistir.",
        "config-mysql-engine": "Motor d'almacenamientu:",
        "config-mysql-innodb": "InnoDB (aconséyase)",
-       "config-mssql-auth": "Triba d'autenticación:",
-       "config-mssql-sqlauth": "Autenticación de SQL Server",
-       "config-mssql-windowsauth": "Autenticación de Windows",
        "config-site-name": "Nome de la wiki:",
        "config-site-name-help": "Esto apaecerá na barra de títulos del navegador y en dellos sitios más.",
        "config-site-name-blank": "Escriba un nome pal sitiu.",
index 23e5388..65bfc4f 100644 (file)
        "config-db-type": "Мәғлүмәт базаһы төрө:",
        "config-db-host": "Мәғлүмәт базаһы хосты:",
        "config-db-host-help": "Әгәр ҙә серверҙың база мәғлүмәттәре икенсе серверҙа урынлашһа, бында уның исемен йәки IP-адресын индерегеҙ.\nӘгәр ҙә һеҙ виртуаль хостингты ҡулланһағыҙ, һеҙҙең провайдерығыҙ  хостың дөрөҫ исемен үҙенең документацияһында күрһәтергә тейеш.\nӘгәр ҙә һеҙ системаны Windows аҫтына ҡуяһығыҙ һәм MySQL - ды ҡулланаһығыҙ икән, «localhost» исемле сервер эшләй алмаясаҡ. Был осраҡта 127.0.0.1 локаль  IP-адресығыҙҙы күрһәтергә тырышығыҙ.\nӘгәр ҙә һеҙ  PostgreSQL-ды  ҡулланаһығыҙ икән, был шаҡмаҡты сокет Unix аша инеү өсөн буш ҡалдырығыҙ.",
-       "config-db-host-oracle": "TNS мәғлүмәт базаһы:",
-       "config-db-host-oracle-help": "Ғәмәлдәге [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] индерегеҙ;  tnsnames.ora файлы был инсталляция өсөн күренергә тейеш. <br /> Клиенттарҙың 10g версияһындағы һәм юғарыраҡ китапханаһын ҡулланғанда шулай уҡ атама биреү ысулын файҙаланыу мөмкинлеге бар   [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Был викиҙың идентификацияһы",
        "config-db-name": "Мәғлүмәт базаһы исеме:",
        "config-db-name-help": "Үҙегеҙҙең вики өсөн исем - идентификатор һайлағыҙ.\nИсемдә тултырылмаған урын булмаҫҡа тейеш.\nӘгәр һеҙ виртуаль хостингты ҡулланаһығыҙ икән, провайдер һеҙгә мәғлүмәттәр базаһының конкрет исемен бирер йәки идара итеү панеле ярҙамы менән мәғлүмәттәр базаһын булдырырға мөмкинлек бирер.",
-       "config-db-name-oracle": "Мәғлүмәт базаһы схемаһы",
-       "config-db-account-oracle-warn": "Oracle мәғлүмәттәр базаһы итеп ҡуйыуҙың өс юлы бар:\nӘгәр иҫәп яҙмаһын ҡуйыу процесында булдырырға теләһәгеҙ, зинһар, SYSDBA ҡуйыу өсөн иҫәп алыу ролен һәм веб-күҙәтеү мөмкинлеге булған иҫәп алыуҙың  теләгән вәкәләттәрен  күрһәтегеҙ. Шулай уҡ веб-күҙәтеү мөмкинлеге булған иҫәпте ҡулдан эшләргә һәм уны (әгәр схема объекттарын төҙөүгә кәрәкле рөхсәте бар икән) йәки ике иҫәп яҙмаһын, береһен - объекттар төҙөү хоҡуғы менән, икенсеһен веб-күҙәтеүҙе сикләүсе, күрһәтәһегеҙ. \nТейешле өҫтөнлөктәр менән иҫәп яҙмаһын булдырыу сценарийын ошо ҡоролма программаһының  «maintenance/oracle/» папкаһында табырға мөмкин. Сикләнгән иҫәп яҙмаһын файҫаланыу килешеү буйынса иҫәп яҙмаларының барлыҡ мөмкинлектәрен һүндереүгә килтереү ихтималлығын күҙ уңында тотоғоҙ.",
        "config-db-install-account": "Көйләү өсөн иҫәп яҙмаһы",
        "config-db-username": "Мәғлүмәт базаһын ҡулланыусы исеме",
        "config-db-password": "Мәғлүмәт базаһының серһүҙе",
        "config-pg-test-error": "Мәғлүмәт базаһына инеп булманы<strong>$1</strong>: $2",
        "config-sqlite-dir": "SQLite мәғлүмәттәре директориһы:",
        "config-sqlite-dir-help": "SQLite бөтә мәғлүмәттәрҙе бер файлда һаҡлай. \nҠуйған ваҡытта веб-сервер һеҙ күрһәткән директорияны уҡый алырға тейеш. \n\nУға Интернет аша инеү '''мөмкин түгел''', шуға ул PHP файлдар һаҡланған файл менән тап килмәҫкә тейеш.\nҠуйыусы бал директорияны <code>.htaccess</code> файлына яҙасаҡ, әгәр ул эшләмәһә, кемдер бөтөн мәғлүмәт базаһына инә аласаҡ. Был базала шулай уҡ ҡулланыусылар тураһында мәғлүмәт тә (электрон почта адрестары, серһүҙ хештары), шулай уҡ юйылған биттәр һәм вики тураһында башҡа йәшерен мәғлүмәттәр һаҡлана. \n\nБыл базаны, мөмкин булһа, ситтәрәк, мәҫәлән, <code>/var/lib/mediawiki/yourwiki</code> һаҡлағыҙ.",
-       "config-oracle-def-ts": "Килешеү буйынса таблица арауығы:",
-       "config-oracle-temp-ts": "Таблицаларҙың ваҡытлы киңлеге:",
        "config-type-mysql": "MySQL (йәки тура килгән)",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki -ла түбәндәге СУБД бар:\n\n$1\n\nӘгәр мәғлүмәт һаҡлау системаһын исемлектә күрмәһәгеҙ, рөхсәт алыу өсөн өҫтәге һылтанмалағы инструкция буйынса эш итегеҙ.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] — MediaWiki-ҙың иҫ яҡшы эшләгән төп мәғлүмәттәр базаһы.  MediaWiki шулай уҡ MySQL-тап килгән [{{int:version-db-mariadb-url}} MariaDB] һәм [{{int:version-db-percona-url}} Percona Server] менән эшләй. ([https://www.php.net/manual/ru/mysql.installation.php MySQL-ярҙамында PHP туплау инструкцияһы])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] —  СУБД-ның популяр открыткаһы, MySQL өсөн альтернатива.\nТөҙәтелмәгән хаталар булыуы мөмкин, эш схемаһында ҡулланыу тәҡдим ителмәй. ([https://www.php.net/manual/en/pgsql.installation.php  PostgreSQL рөхсәт ителгән РНР йыйыу инструкцияһы]).",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] — яҡшы һәм еңел мәғлүмәт базаһы системаһы. ([http://www.php.net/manual/ru/pdo.installation.php  собрать PHP  SQLite]  PDO менән эшләй торған инструкция)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] — предприятие масштабындаға коммерция базыһы. ([http://www.php.net/manual/ru/oci8.installation.php OCI8 ярҙамындағы РНР нисек йыйырға])",
-       "config-dbsupport-mssql": "* [{{int:version-db-oracle-url}} Oracle] — предприятие масштабындаға Windows өсөн коммерция базыһы. ([https://www.php.net/manual/en/sqlsrv.installation.php OCI8 ярҙамындағы РНР нисек йыйырға])",
        "config-header-mysql": "MySQL көйләү",
        "config-header-postgres": "PostgreSQL көйләү",
        "config-header-sqlite": "SQLite көйләү",
-       "config-header-oracle": "Оракул көйләү",
-       "config-header-mssql": "Microsoft SQL Серверенең билдәле дәүмәлдәре",
        "config-invalid-db-type": "Нигеҙ тибтарының дөрөҫ булмаған күрһәткестәре",
        "config-missing-db-name": "Һеҙ мәғәнәне индерергә тейешһегеҙ «{{int:config-db-name}}».",
        "config-missing-db-host": "Параметр мәғәнәһен индереү мотлаҡ «{{int:config-db-host}}».",
-       "config-missing-db-server-oracle": "Һеҙ бында мәғәнәне индерергә тейешһегеҙ «{{int:config-db-host-oracle}}».",
-       "config-invalid-db-server-oracle": "«$1» мәғлүмәттәр базаһының дөрөҫ булмаған TNS.\nЙә «TNS Name», йә «Easy Connect» ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm  Oracle атамалары ысулы]) ҡулланығыҙ.",
        "config-invalid-db-name": "«$1» мәғлүмәттәр базаһының дөрөҫ булмаған префиксы. Тик ASCII  символдарын: (a-z, A-Z) хәрефтәрен, (0-9) һандарын, (_) аҫтына һыҙыу билдәһен һәм (-)дефисты ҡулланығыҙ.",
        "config-invalid-db-prefix": "«$1» мәғлүмәттәр базаһының дөрөҫ булмаған префиксы. Тик ASCII (a-z, A-Z) хәрефтәрен, (0-9) һандарын, (_) аҫтына һыҙыу билдәһен һәм (-)дефисты ҡулланығыҙ.",
        "config-connection-error": "$1.\n\nХостығыҙҙы, ҡулланыусы исемен һәм паролде тикшерегеҙ ҙә яңынан инеп ҡарағыҙ.",
        "config-invalid-schema": "MediaWiki «$1» өсөн схема дөрөҫ түгел.\nБары тик ASCII символдарын (a-z, A-Z), цифрҙарҙы (0-9) һәм аҫҡы һыҙыҡты (_) ғына ҡулланығыҙ.",
-       "config-db-sys-create-oracle": "Яңы иҫәп-хисап яҙмаһын булдырыу өсөн урынлаштырыу программаһы тик SYSDBA ҡулланыу хуплана",
-       "config-db-sys-user-exists-oracle": "Иҫәп яҙмаһы \"$1\". SYSDBA яңы иҫәп-хисап яҙмаһын булдырыу өсөн генә ҡулланыла",
        "config-postgres-old": "PostgreSQL $1 йәки тағы ла һуңыраҡ булған версия кәрәк. Һеҙҙә PostgreSQL $2 ҡуйылған.",
-       "config-mssql-old": "$1 йә һуңыраҡ версиянан Microsoft SQL Server кәрәк. Һеҙҙә $2 версияһы ҡуйылған.",
        "config-sqlite-name-help": "Үҙегеҙҙең вики өсөн исем-идентификатор һайлағыҙ.\nДефисы һәм буш урын ҡалдырмағыҙ.\nЬыл юл SQLite файлының исемендә ҡулланыласаҡ.",
        "config-sqlite-parent-unwritable-group": "<nowiki><code>$1</code></nowiki> мәғлүмәт директорияһын эшләп булманы, веб-серверҙың төп директорияны яҙырға хоҡуғы юҡ <nowiki><code>$2</code></nowiki>.\n\nУрынлаштырыусы ҡатнашыусының веб-серверын билдәләне.\n<nowiki><code>$3</code></nowiki> яҙма мөмкин булған директория эшләгеҙ һәм дауам итегеҙ.\nUnix/Linux системаһында түбәндәгене башҡарығыҙ:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "<nowiki><code>$1</code></nowiki> мәғлүмәт директорияһын эшләп булманы, веб-серверҙың төп директорияны яҙырға хоҡуғы юҡ <nowiki><code>$2</code></nowiki>.\n\nУрынлаштырыусы ҡатнашыусының веб-серверын билдәләй алманы.\n<nowiki><code>$3</code></nowiki> яҙма мөмкин булған директория эшләгеҙ һәм дауам итегеҙ.\nUnix/Linux системаһында түбәндәгене башҡарығыҙ:\n\n<pre>cd $2 mkdir $3 chmod a+w $3</pre>",
        "config-mysql-engine": "Мәғлүмәт базаһы шыуҙырмаһы",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-engine-help": "Параллель рәүештә яҡшыраҡ эшләгәне өсөн '''InnoDB''' өҫтөнлөрәк.\n\nБер ҡулланыусы йәки төҙәтеүҙәр әҙ булғанда вики өсөн '''MyISAM'''тың тиҙлеге  шәберәк, әммә унда мәғлүмәт базаһы InnoDB-ҡа ҡарағанда йышыраҡ сафтан сыға.",
-       "config-mssql-auth": "Аутентификация төрө :",
-       "config-mssql-install-auth": "Ҡуйыу процесында мәғлүмәт базаһына инеү өсөн файҙаланылған төп нөсхәне тикшереү тибын һайлағыҙ. \n\nӘгәр «{{int:config-mssql-windowsauth}}» һайлаһығыҙ, ҡулланыусының веб-сервер эшләгән иҫәп яҙмаһы файҙаланыласаҡ.",
-       "config-mssql-web-auth": "Викиҙың ғәҙәттәге эше ваҡытында мәғлүмәттәр базаһы серверына инеү өсөн веб-сервер файҙаланған  төп нөсхәне тикшереү тибын һайлағыҙ. \n\nӘгәр «{{int:config-mssql-windowsauth}}» һайлаһығыҙ, ҡулланыусының веб-сервер эшләгән иҫәп яҙмаһы файҙаланыласаҡ.",
-       "config-mssql-sqlauth": "SQL Server ысынлығын тикшереү",
-       "config-mssql-windowsauth": "Windows нөсхәһен тикшереү",
        "config-site-name": "Вики атамаһы:",
        "config-site-name-help": "Исеме браузерҙың баш һүҙендә  һәм башҡа урындарҙа күрәнәсәк.",
        "config-site-name-blank": "Сайт исемен яҙығыҙ",
index c29f5f7..168c937 100644 (file)
        "config-db-type": "Тып базы зьвестак:",
        "config-db-host": "Хост базы зьвестак:",
        "config-db-host-help": "Калі сэрвэр вашай базы зьвестак знаходзіцца на іншым сэрвэры, увядзіце тут імя хоста ці IP-адрас.\n\nКалі вы карыстаецеся shared-хостынгам, ваш хостынг-правайдэр мусіць даць вам слушнае імя хоста базы зьвестак у сваёй дакумэнтацыі.\n\nКалі вы ўжываеце MySQL, выкарыстаньне «localhost» можа не працаваць для назвы сэрвэра. У гэтым выпадку паспрабуйце пазначыць «127.0.0.1» для лякальнага IP-адрасу.\n\nКалі вы выкарыстоўваеце PostgreSQL, пакіньце поле пустым, каб далучыцца праз Unix-сокет.",
-       "config-db-host-oracle": "TNS базы зьвестак:",
-       "config-db-host-oracle-help": "Увядзіце слушнае [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm лякальнае імя злучэньня]; файл tnsnames.ora павінен быць бачным для гэтага ўсталяваньня.<br />Калі Вы выкарыстоўваеце кліенцкія бібліятэкі 10g ці больш новыя, Вы можаце таксама выкарыстоўваць мэтад наданьня назваў [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm лёгкае злучэньне].",
        "config-db-wiki-settings": "Ідэнтыфікацыя гэтай вікі",
        "config-db-name": "Назва базы зьвестак:",
        "config-db-name-help": "Выберыце імя для вызначэньня Вашай вікі.\nЯно ня мусіць зьмяшчаць прагалаў.\n\nКалі Вы набываеце shared-хостынг, Ваш хостынг-правайдэр мусіць надаць Вам ці пэўнае імя базы зьвестак для выкарыстаньня, ці магчымасьць ствараць базы зьвестак праз кантрольную панэль.",
-       "config-db-name-oracle": "Схема базы зьвестак:",
-       "config-db-account-oracle-warn": "Існуюць тры сцэнары ўсталяваньня Oracle як базы зьвестак для MediaWiki:\n\nКалі Вы жадаеце стварыць рахунак базы зьвестак як частку працэсу ўсталяваньня, калі ласка, падайце рахунак з роляй SYSDBA як рахунак базы зьвестак для ўсталяваньня і пазначце пажаданыя правы рахунку з доступам да Інтэрнэту, у адваротным выпадку Вы можаце таксама стварыць рахунак з доступам да Інтэрнэту ўручную і падаць толькі гэты рахунак (калі патрабуюцца правы для стварэньня схемы аб’ектаў) ці падайце два розных рахункі, адзін з правамі на стварэньне і адзін з абмежаваньнямі для доступу да Інтэрнэту.\n\nСкрыпт для стварэньня рахунку з патрабуемымі правамі можна знайсьці ў дырэкторыі гэтага ўсталяваньня «maintenance/oracle/». Памятайце, што выкарыстаньне рахунку з абмежаваньнямі адключыць усе падтрымліваемыя магчымасьці даступныя па змоўчваньні.",
        "config-db-install-account": "Імя карыстальніка для ўсталяваньня",
        "config-db-username": "Імя карыстальніка базы зьвестак:",
        "config-db-password": "Пароль базы зьвестак:",
        "config-pg-test-error": "Немагчыма далучыцца да базы зьвестак '''$1''': $2",
        "config-sqlite-dir": "Дырэкторыя зьвестак SQLite:",
        "config-sqlite-dir-help": "SQLite захоўвае ўсе зьвесткі ў адзіным файле.\n\nПададзеная Вамі дырэкторыя павінна быць даступнай да запісу вэб-сэрвэрам падчас усталяваньня.\n\nЯна '''ня''' мусіць быць даступнай праз Сеціва, вось чаму мы не захоўваем яе ў адным месцы з файламі PHP.\n\nПраграма ўсталяваньня дадаткова створыць файл <code>.htaccess</code>, але калі ён не выкарыстоўваецца, хто заўгодна зможа атрымаць зьвесткі з базы зьвестак.\nГэта ўключае як прыватныя зьвесткі ўдзельнікаў (адрасы электроннай пошты, хэшы пароляў), гэтак і выдаленыя вэрсіі старонак і іншыя зьвесткі, доступ да якіх маецца абмежаваны.\n\nПадумайце над тым, каб зьмяшчаць базу зьвестак у іншым месцы, напрыклад у <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Прастора табліцаў па змоўчваньні:",
-       "config-oracle-temp-ts": "Часовая прастора табліцаў:",
        "config-type-mysql": "MariaDB, MySQL, або сумяшчальная",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki падтрымлівае наступныя сыстэмы базаў зьвестак:\n\n$1\n\nКалі Вы ня бачыце сыстэму базаў зьвестак, якую Вы спрабуеце выкарыстоўваць ў сьпісе ніжэй, перайдзіце па спасылцы інструкцыі, якая знаходзіцца ніжэй, каб уключыць падтрымку.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] зьяўляецца галоўнай мэтай MediaWiki і падтрымліваецца найлепш. MediaWiki таксама працуе з [{{int:version-db-mysql-url}} MySQL] і [{{int:version-db-percona-url}} Percona Server], якія сумяшчальныя з MariaDB. ([https://www.php.net/manual/en/mysqli.installation.php Як скампіляваць PHP з падтрымкай MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] — папулярная сыстэма базы зьвестак з адкрытым кодам, якая зьяўляецца альтэрнатывай MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Як кампіляваць PHP з падтрымкай PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] — невялікая сыстэма базы зьвестак, якая мае вельмі добрую падтрымку. ([https://www.php.net/manual/en/pdo.installation.php Як кампіляваць PHP з падтрымкай SQLite], выкарыстоўвае PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] зьяўляецца камэрцыйнай прафэсійнай базай зьвестак. ([https://www.php.net/manual/en/oci8.installation.php Як скампіляваць PHP з падтрымкай OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] — камэрцыйная база зьвестак для Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Як скампіляваць PHP з падтрымкай SQLSRV])",
        "config-header-mysql": "Налады MariaDB/MySQL",
        "config-header-postgres": "Налады PostgreSQL",
        "config-header-sqlite": "Налады SQLite",
-       "config-header-oracle": "Налады Oracle",
-       "config-header-mssql": "Налады Microsoft SQL Server",
        "config-invalid-db-type": "Няслушны тып базы зьвестак",
        "config-missing-db-name": "Вы мусіце ўвесьці значэньне парамэтру «{{int:config-db-name}}».",
        "config-missing-db-host": "Вы мусіце ўвесьці значэньне парамэтру «{{int:config-db-host}}».",
-       "config-missing-db-server-oracle": "Вы мусіце ўвесьці значэньне парамэтру «{{int:config-db-host-oracle}}».",
-       "config-invalid-db-server-oracle": "Няслушнае TNS базы зьвестак «$1».\nВыкарыстоўвайце або «TNS Name», або радок «Easy Connect» ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Мэтады найменьня Oracle])",
        "config-invalid-db-name": "Няслушная назва базы зьвестак «$1».\nНазва можа ўтрымліваць толькі ASCII-літары (a-z, A-Z), лічбы (0-9), сымбалі падкрэсьліваньня(_) і працяжнікі (-).",
        "config-invalid-db-prefix": "Няслушны прэфікс базы зьвестак «$1».\nЁн можа зьмяшчаць толькі ASCII-літары (a-z, A-Z), лічбы (0-9), сымбалі падкрэсьліваньня (_) і працяжнікі (-).",
        "config-connection-error": "$1.\n\nПраверце хост, імя карыстальніка і пароль і паспрабуйце зноў. Калі вы ўжываеце «localhost» у якасьці хосту базы зьвестак, паспрабуйце «127.0.0.1» замест (ці наадварот).",
        "config-invalid-schema": "Няслушная схема для MediaWiki «$1».\nВыкарыстоўвайце толькі ASCII-літары (a-z, A-Z), лічбы (0-9) і сымбалі падкрэсьліваньня (_).",
-       "config-db-sys-create-oracle": "Праграма ўсталяваньня падтрымлівае толькі выкарыстаньне рахунку SYSDBA для стварэньня новага рахунку.",
-       "config-db-sys-user-exists-oracle": "Рахунак карыстальніка «$1» ужо існуе. SYSDBA можа выкарыстоўвацца толькі для стварэньня новых рахункаў!",
        "config-postgres-old": "Патрабуецца PostgreSQL $1 ці навейшая, усталяваная вэрсія $2.",
-       "config-mssql-old": "Патрабуецца Microsoft SQL Server вэрсіі $1 ці больш позьняй. У вас усталяваная вэрсія $2.",
        "config-sqlite-name-help": "Выберыце назву, якая будзе ідэнтыфікаваць Вашую вікі.\nНе выкарыстоўвайце прагалы ці злучкі.\nНазва будзе выкарыстоўвацца ў назьве файла зьвестак SQLite.",
        "config-sqlite-parent-unwritable-group": "Немагчыма стварыць дырэкторыю зьвестак <code><nowiki>$1</nowiki></code>, таму што бацькоўская дырэкторыя <code><nowiki>$2</nowiki></code> абароненая ад запісаў вэб-сэрвэра.\n\nПраграма ўсталяваньня вызначыла карыстальніка, які запусьціў вэб-сэрвэр.\nДазвольце запісы ў дырэкторыю <code><nowiki>$3</nowiki></code> для працягу.\nУ сыстэме Unix/Linux зрабіце:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Немагчыма стварыць дырэкторыю зьвестак <code><nowiki>$1</nowiki></code>, таму што бацькоўская дырэкторыя <code><nowiki>$2</nowiki></code> абароненая ад запісаў вэб-сэрвэра.\n\nПраграма ўсталяваньня вызначыла карыстальніка, які запусьціў вэб-сэрвэр.\nДазвольце яму (і іншым) запісы ў дырэкторыю <code><nowiki>$3</nowiki></code> для працягу.\nУ сыстэме Unix/Linux зрабіце:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Рухавік сховішча:",
        "config-mysql-innodb": "InnoDB (рэкамэндавана)",
        "config-mysql-engine-help": "'''InnoDB''' — звычайна найбольш слушны варыянт, таму што добра падтрымлівае паралелізм.\n\n'''MyISAM''' можа быць хутчэйшай у вікі з адным удзельнікам, ці толькі для чытаньня.\nБазы зьвестак на MyISAM вядомыя тым, што ў іх зьвесткі шкодзяцца нашмат часьцей за InnoDB.",
-       "config-mssql-auth": "Тып аўтэнтыфікацыі:",
-       "config-mssql-install-auth": "Абярыце тып аўтэнтыфікацыі, які будзе выкарыстаны для злучэньня з базай зьвестак падчас працэсу ўсталяваньня.\nКалі вы абярэце «{{int:config-mssql-windowsauth}}», будуць выкарыстаныя ўліковыя зьвесткі карыстальніка, пад якім працуе вэб-сэрвэр.",
-       "config-mssql-web-auth": "Абярыце тып аўтэнтыфікацыі, які вэб-сэрвэр будзе выкарыстоўваць для злучэньня з базай зьвестак падчас звычайнага функцыянаваньня вікі.\nКалі вы абярэце «{{int:config-mssql-windowsauth}}», будуць выкарыстаныя ўліковыя зьвесткі карыстальніка, пад якім працуе вэб-сэрвэр.",
-       "config-mssql-sqlauth": "Аўтэнтыфікацыя SQL-сэрвэра",
-       "config-mssql-windowsauth": "Windows-аўтэнтыфікацыя",
        "config-site-name": "Назва вікі:",
        "config-site-name-help": "Назва будзе паказвацца ў загалоўку браўзэра і ў некаторых іншых месцах.",
        "config-site-name-blank": "Увядзіце назву сайта.",
index de2f0cb..ffc534c 100644 (file)
        "config-db-type": "Тип на базата от данни:",
        "config-db-host": "Сървър на базата от данни:",
        "config-db-host-help": "Ако базата от данни е на друг сървър, в кутията се въвежда името на хоста или IP адреса.\n\nАко се използва споделен уеб хостинг, доставчикът на услугата би трябвало да е предоставил в документацията си коректния хост.\n\nАко се използва MySQL, използването на „localhost“ може да е неприемливо. В такива случаи се използва „127.0.0.1“ за локален IP адрес.\n\nПри използване на PostgreSQL, това поле се оставя празно, за свързване чрез Unix socket.",
-       "config-db-host-oracle": "TNS на базата от данни:",
-       "config-db-host-oracle-help": "Въведете валидно [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]. Файлът tnsnames.ora трябва да бъде видим за инсталацията.<br />Ако използвате клиентска библиотека версия 10g или по-нова можете да използвате метода [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Идентифициране на това уики",
        "config-db-name": "Име на базата от данни (без тирета):",
        "config-db-name-help": "Избира се име, което да идентифицира уикито.\nТо не трябва да съдържа интервали.\n\nАко се използва споделен хостинг, доставчикът на услугата би трябвало да е предоставил или име на базата от данни, която да бъде използвана, или да позволява създаването на бази от данни чрез контролния панел.",
-       "config-db-name-oracle": "Схема на базата от данни:",
-       "config-db-account-oracle-warn": "Има три поддържани сценария за инсталиране на Oracle като бекенд база данни:\n\nАко искате да създадете профил в базата данни като част от процеса на инсталиране, моля, посочете профил със SYSDBA като профил в базата данни за инсталиране и посочете желаните данни за влизане (име и парола) за профил с уеб достъп; в противен случай можете да създадете профил с уеб достъп ръчно и предоставите само него (ако той има необходимите права за създаване на схематични обекти), или да предоставите два различни профила - един с привилегии за създаване на обекти, и друг - с ограничения за уеб достъп.\n\nСкрипт за създаването на профил с необходимите привилегии може да се намери в папката „maintenance/oracle/“ на тази инсталация. Имайте в предвид, че използването на ограничен профил ще деактивира всички възможности за обслужване на профила по подразбиране.",
        "config-db-install-account": "Потребителска сметка за инсталацията",
        "config-db-username": "Потребителско име за базата от данни:",
        "config-db-password": "Парола за базата от данни:",
        "config-pg-test-error": "Невъзможно свързване с базата данни <strong>$1</strong>: $2",
        "config-sqlite-dir": "Директория за данни на SQLite:",
        "config-sqlite-dir-help": "SQLite съхранява всички данни в един файл.\n\nПо време на инсталацията уеб сървърът трябва да има права за писане в посочената директория.\n\nТя <strong>не трябва</strong> да е достъпна през уеб, затова не е там, където са PHP файловете.\n\nИнсталаторът ще съхрани заедно с нея файл <code>.htaccess</code>, но ако този метод пропадне, някой може да придобие достъп до суровите данни от базата от данни.\nТова включва сурови данни за потребителите (адреси за е-поща, хеширани пароли), както и изтрити версии на страници и друга чувствителна и с ограничен достъп информация от и за уикито.\n\nБазата от данни е препоръчително да се разположи на друго място, например в <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Таблично пространство по подразбиране:",
-       "config-oracle-temp-ts": "Временно таблично пространство:",
        "config-type-mysql": "MariaDB, MySQL (или съвместима)",
-       "config-type-mssql": "Microsoft SQL сървър",
        "config-support-info": "МедияУики поддържа следните системи за бази от данни:\n\n$1\n\nАко не виждате желаната за използване система в списъка по-долу, следвайте инструкциите за активиране на поддръжка по-горе.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] е най-важна за МедияУики и се поддържа най-добре. МедияУики работи също така с [{{int:version-db-mysql-url}} MySQL] и [{{int:version-db-percona-url}} Percona Server], които са съвместими с MariaDB.\n([https://www.php.net/manual/en/mysqli.installation.php Как се компилира PHP с поддръжка на MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] е популярна система за управление на бази от данни, алтернатива на MySQL. ([https://www.php.net/manual/bg/pgsql.installation.php Как се компилира PHP с поддръжка на PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] е олекотена система за бази от данни, която е много добре поддържана. ([https://www.php.net/manual/en/pdo.installation.php Как се компилира PHP с поддръжка на SQLite], използва PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] е комерсиална корпоративна база от данни. ([https://www.php.net/manual/en/oci8.installation.php Как се компилира PHP с поддръжка на OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] е комерсиална корпоративна база от данни за Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Как да се компилира PHP с поддръжка на SQLSRV])",
        "config-header-mysql": "Настройки на MariaDB/MySQL",
        "config-header-postgres": "Настройки за PostgreSQL",
        "config-header-sqlite": "Настройки за SQLite",
-       "config-header-oracle": "Настройки за Oracle",
-       "config-header-mssql": "Настройки за Microsoft SQL сървър",
        "config-invalid-db-type": "Невалиден тип база от данни",
        "config-missing-db-name": "Необходимо е да се въведе стойност за „{{int:config-db-name}}“.",
        "config-missing-db-host": "Необходимо е да се въведе стойност за „{{int:config-db-host}}“.",
-       "config-missing-db-server-oracle": "Необходимо е да се въведе стойност за „{{int:config-db-host-oracle}}“.",
-       "config-invalid-db-server-oracle": "Невалиден TNS на базата от данни „$1“.\nИзползвайте „TNS Name“ или „Easy Connect“ ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Методи за именуване на Oracle])",
        "config-invalid-db-name": "Невалидно име на базата от данни „$1“.\nИзползват се само ASCII букви (a-z, A-Z), цифри (0-9), долни черти (_) и тирета (-).",
        "config-invalid-db-prefix": "Невалидна представка за базата от данни „$1“.\nПозволени са само ASCII букви (a-z, A-Z), цифри (0-9), долни черти (_) и тирета (-).",
        "config-connection-error": "$1.\n\nНеобходимо е да се проверят хостът, потребителското име и паролата, след което да се опита отново. Ако използвате „localhost“ като хост на базата от данни, опитайте с „127.0.0.1“ вместо него (и обратно).",
        "config-invalid-schema": "Невалидна схема за МедияУики „$1“.\nДопустими са само ASCII букви (a-z, A-Z), цифри (0-9) и долни черти (_).",
-       "config-db-sys-create-oracle": "Инсталаторът поддържа само сметка SYSDBA за създаване на нова сметка.",
-       "config-db-sys-user-exists-oracle": "Потребителската сметка „$1“ вече съществува. SYSDBA може да се използва само за създаване на нова сметка!",
        "config-postgres-old": "Изисква се PostgreSQL $1 или по-нова версия, наличната версия е $2.",
-       "config-mssql-old": "Изисква се Microsoft SQL Server версия $1 или по-нова. Вашата версия е $2.",
        "config-sqlite-name-help": "Избира се име, което да идентифицира уикито.\nНе се използват интервали или тирета.\nТова име ще се използва за име на файла за данни на SQLite.",
        "config-sqlite-parent-unwritable-group": "Директорията за данни <code><nowiki>$1</nowiki></code> не може да бъде създадена, тъй като уеб сървърът няма права за писане в родителската директория <code><nowiki>$2</nowiki></code>.\n\nИнсталаторът разпознава потребителското име, с което работи уеб сървърът.\nУверете се, че той притежава права за писане в директорията <code><nowiki>$3</nowiki></code> преди да продължите.\nВ Unix/Линукс системи можете да използвате:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Директорията за данни <code><nowiki>$1</nowiki></code> не може да бъде създадена, тъй като уеб сървърът няма права за писане в родителската директория <code><nowiki>$2</nowiki></code>.\n\nИнсталаторът не може да определи потребителското име, с което работи уеб сървърът.\nУверете се, че в директория <code><nowiki>$3</nowiki></code> може да бъде писано от уеб сървъра (или от други потребители!) преди да продължите.\nНа Unix/Линукс системи можете да използвате:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Хранилище на данни:",
        "config-mysql-innodb": "InnoDB (препоръчително)",
        "config-mysql-engine-help": "<strong>InnoDB</strong> почти винаги е най-добрата възможност заради навременната си поддръжка.\n\n<strong>MyISAM</strong> може да е по-бърза при инсталации с един потребител или само за четене.\nБазите от данни MyISAM се повреждат по-често от InnoDB.",
-       "config-mssql-auth": "Тип на удостоверяването:",
-       "config-mssql-install-auth": "Изберете начин за удостоверяване, който ще бъде използван за връзка с базата от данни по време на инсталацията.\nАко изберете \"{{int:config-mssql-windowsauth}}\", ще се използват идентификационните данни на потребителя под който работи уеб сървъра.",
-       "config-mssql-web-auth": "Изберете начина за удостоверяване, който ще се използва от уеб сървъра за връзка със сървъра за бази от данни по време на нормалните операции на уикито.\nАко изберете \"{{int:config-mssql-windowsauth}}\", ще се използват идентификационните данни на потребителя под който работи уеб сървъра.",
-       "config-mssql-sqlauth": "Удостоверяване чрез SQL Server",
-       "config-mssql-windowsauth": "Удостоверяване чрез Windows",
        "config-site-name": "Име на уикито:",
        "config-site-name-help": "Това име ще се показва в заглавната лента на браузъра и на различни други места.",
        "config-site-name-blank": "Необходимо е да се въведе име на уикито.",
index 0debe4a..b8a467c 100644 (file)
        "config-db-schema": "মিডিয়াউইকির জন্য স্কিমা (হাইফেন ছাড়া):",
        "config-pg-test-error": "উপাত্তশালা $1-এর সাথে সংযোগ দেয়া সম্ভব হয়নি। কারন:$2",
        "config-sqlite-dir": "SQLite উপাত্ত ডিরেক্টরি:",
-       "config-oracle-def-ts": "পূর্বনির্ধারিত টেবিলস্পেস",
-       "config-oracle-temp-ts": "সাময়কি টেবিলস্পেস:",
        "config-type-mysql": "MariaDB, MySQL, বা উপযুক্তগুলি",
-       "config-type-mssql": "মাইক্রোসফট SQL সার্ভার",
        "config-dbsupport-postgres": "* MySQL-এর বিকল্প হিসেবে [{{int:version-db-postgres-url}} PostgreSQL] হচ্ছে একটি জনপ্রিয় মুক্ত উৎসের ডাটাবেস ব্যবস্থা। ([https://www.php.net/manual/en/pgsql.installation.php PostgreSQL সমর্থনসহ কিভাবে PHP সঙ্কলন করবেন])",
        "config-header-mysql": "MariaDB/MySQL সেটিং",
        "config-header-postgres": "PostgreSQL সেটিংস",
        "config-header-sqlite": "SQLite সেটিংস",
-       "config-header-oracle": "ওরাকল সেটিংস",
        "config-invalid-db-type": "ডেটাবেজের ধরন অগ্রহযোগ্য",
        "config-missing-db-name": "আপনাকে অবশ্যই \"{{int:config-db-name}}\"-এর জন্য একটি মান প্রবেশ করাতে হবে।",
        "config-missing-db-host": "আপনাকে অবশ্যই \"{{int:config-db-host}}\"-এর জন্য একটি মান প্রবেশ করাতে হবে।",
-       "config-missing-db-server-oracle": "আপনাকে অবশ্যই \"{{int:config-db-host-oracle}}\"-এর জন্য একটি মান প্রবেশ করাতে হবে।",
        "config-connection-error": "$1।\n\n\nদয়া করে প্রস্তাবকারী, ব্যবহারকারী নাম ও পাসওয়ার্ড দেখুন এবং পুনরায় চেষ্টা করুন।",
        "config-sqlite-readonly": "ফাইল <code>$1</code> লিখনযোগ্য নয়।",
        "config-sqlite-cant-create-db": "ডাটাবেজ ফাইল <code>$1</code> তৈরি করা যায়নি।",
        "config-regenerate": "LocalSettings.php পুনরূত্পাদিত করুন →",
        "config-mysql-engine": "সংগ্রহস্থল ইঞ্জিন:",
        "config-mysql-innodb": "InnoDB (সুপারিশকৃত)",
-       "config-mssql-windowsauth": "উইন্ডোজ প্রমাণীকরণ",
        "config-site-name": "উইকির নাম:",
        "config-site-name-blank": "একটি সাইটের নাম প্রবেশ করান।",
        "config-project-namespace": "প্রকল্প নামস্থান:",
index de6655b..b9fb7b8 100644 (file)
        "config-db-type": "Doare an diaz roadennoù :",
        "config-db-host": "Anv implijer an diaz roadennoù :",
        "config-db-host-help": "M'emañ ho servijer roadennoù war ur servijer disheñvel, merkit amañ anv an ostiz pe ar chomlec'h IP.\n\nMa rit gant un herberc'hiañ kenrannet, e tlefe ho herberc'hier bezañ pourchaset deoc'h an anv ostiz reizh en teulioù titouriñ.\n\nM'emaoc'h o staliañ ur servijer Windows ha ma rit gant MySQL, marteze ne'z aio ket en-dro \"localhost\" evel anv servijer. Ma ne dro ket, klaskit ober gant \"127.0.0.1\" da chomlec'h IP lechel.",
-       "config-db-host-oracle": "TNS an diaz roadennoù :",
-       "config-db-host-oracle-help": "Merkit un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm anv kevreañ lec'hel] reizh; dleout a ra ur restr tnsnames.ora bezañ hewel e-pad ar staliadur.<br /> Ma rit gant al levraouegoù arval 10g pe nevesoc'h e c'hallit ivez ober gant an hentenn envel [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Anavezout ar wiki-mañ",
        "config-db-name": "Anv an diaz roadennoù :",
        "config-db-name-help": "Dibabit un anv evit ho wiki.\nNa lakait ket a esaouennoù ennañ.\n\nMa ri gant un herberc'hiañ kenrannet e vo pourchaset deoc'h un anv diaz roadennoù dibar da vezañ graet gantañ gant ho herberc'hier pe e lezo ac'hanoc'h da grouiñ diazoù roadennoù dre ur banell gontrolliñ.",
-       "config-db-name-oracle": "Brastres diaz roadennoù :",
-       "config-db-account-oracle-warn": "Skoret ez eus tri doare evit staliañ Oracle da v/backend diaz roadennoù :\n\nMar fell deoc'h krouiñ ur gont diaz roadennoù e-ser an argerzh staliañ eo rekis pourchas ur gont gant ur roll SYSDBA evel kont diaz roadennoù evit ar staliañ, ha spisaat an titouroù anaout a fell deoc'h evit ar gont moned ouzh ar web. A-hend-all, e c'hallit krouiñ ar gont moned ouzh ar web gant an dorn ha pourchas hepken ar gont-se (ma'z eus bet ranket diskouez aotreoù ret evit krouiñ traezoù ar brastres) pe pourveziñ div gont disheñvel, unan gant dreistwirioù krouiñ hag eben, gant gwirioù strishaet, evit moned ouzh ar web.\n\nGallout a reer kaout ar skript evit kouiñ ur gont a zo rekis dreistwirioù eviti e kavlec'h \"trezalc'h/oracle/\" ar staliadur-mañ. Na zisoñjit ket e vo diweredekaet holl varregezhioù trezalc'h ar gont dre ziouer ma rit gant ur gont strishaet he gwirioù.",
        "config-db-install-account": "Kont implijer evit ar staliadur",
        "config-db-username": "Anv implijer an diaz roadennoù :",
        "config-db-password": "Ger-tremen an diaz roadennoù :",
        "config-pg-test-error": "N'haller ket kevreañ ouzh an diaz-titouroù '''$1''' : $2",
        "config-sqlite-dir": "Kavlec'h roadennoù SQLite :",
        "config-sqlite-dir-help": "Stokañ a ra SQLite an holl roadennoù en ur restr nemetken.\n\nE-pad ar staliañ, rankout a ra ar servijer web gallout skrivañ er c'havlec'h pourchaset ganeoc'h.\n\nNe zlefe <strong>ket</strong> bezañ tizhadus dre ar web; setu perak ne lakaomp ket anezhañ el lec'h m'emañ ho restroù PHP.\n\nSkivañ a raio ar stalier ur restr <code>.htaccess</code> war un dro gantañ met ma c'hoarvez ur fazi e c'hallfe unan bennak tapout krog en ho roadennoù.\nKement-se a sell ouzh ar roadennoù implijer (chomlec'hioù postel, gerioù-tremen hachet) hag ouzh an adweladennoù diverket ha takadoù gwarzeet all eus ar wiki.\n\nEn em soñjit ha ne vefe ket gwelloc'h lakaat an diaz roadennoù en un tu bennak all, da skouer e <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Esaouenn stokañ (\"tablespace\") dre ziouer :",
-       "config-oracle-temp-ts": "Esaouenn stokañ (''tablespace'') da c'hortoz :",
        "config-type-mysql": "MySQL (pe kenglotus)",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "Skoret eo ar reizhiadoù diaz titouroù da-heul gant MediaWiki :\n\n$1\n\nMa ne welit ket amañ dindan ar reizhiad diaz titouroù a fell deoc'h ober ganti, heuilhit an titouroù a-us (s.o. al liammoù) evit gweredekaat ar skorañ.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] eo an dibab kentañ evit MediaWiki hag an hini skoret ar gwellañ. Mont a ra MediaWiki en-dro gant [{{int:version-db-mariadb-url}} MariaDB] ha [{{int:version-db-percona-url}} Percona Server] ivez, kenglotus o-daou gant MySQL. ([https://www.php.net/manual/en/mysqli.installation.php Penaos kempunañ PHP gant skor MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] zo anezhi ur reizhiad diaz roadennoù frank a wirioù brudet-mat a c'haller ober gantañ e plas MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Penaos kempunañ PHP gant skor PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] zo anezhi ur reizhiad diaz roadennoù skañv skoret eus ar c'hentañ. ([http://www.php.net/manual/en/pdo.installation.php Penaos kempunañ PHP gant skor SQLite], implijout a ra PDO)",
-       "config-dbsupport-oracle": "* Un embregerezh kenwerzhel diaz roadennoù eo [{{int:version-db-oracle-url}} Oracle]. ([http://www.php.net/manual/en/oci8.installation.php Penaos kempunañ PHP gant skor OCI8])",
-       "config-dbsupport-mssql": "* Un embregerezh kenwerzhel diaz roadennoù evit Windows eo [{{int:version-db-mssql-url}} Microsoft SQL Server]. ([https://www.php.net/manual/en/sqlsrv.installation.php Penaos kempunañ PHP gant skor SQLSRV])",
        "config-header-mysql": "Arventennoù MySQL",
        "config-header-postgres": "Arventennoù PostgreSQL",
        "config-header-sqlite": "Arventennoù SQLite",
-       "config-header-oracle": "Arventennoù Oracle",
-       "config-header-mssql": "Arventennoù Microsoft SQL Server",
        "config-invalid-db-type": "Direizh eo ar seurt diaz roadennoù",
        "config-missing-db-name": "Ret eo deoc'h merkañ un dalvoudenn evit \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Ret eo deoc'h merkañ un dalvoudenn evit \"{{int:config-db-host}}\"",
-       "config-missing-db-server-oracle": "Ret eo deoc'h merkañ un dalvoudenn evit \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "Direizh eo anv TNS an diaz roadennoù \"$1\".\nOber gant an neudennad \"TNS Name\" pe c'hoazh gant \"Easy Connect ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Hentennoù envel Oracle]).",
        "config-invalid-db-name": "Direizh eo anv an diaz titouroù \"$1\".\nOber hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha tiredoù (-).",
        "config-invalid-db-prefix": "Direizh eo rakger an diaz titouroù \"$1\".\nOber hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha tiredoù (-).",
        "config-connection-error": "$1.\n\nGwiriit anv an ostiz, an anv implijer, ar ger-tremen ha klaskit en-dro.",
        "config-invalid-schema": "Chema direizh evit MediaWiki \"$1\".\nGrit hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9) hag arouezennoù islinennañ (_).",
-       "config-db-sys-create-oracle": "N'anavez ar stalier nemet ar c'hontoù SYSDBA evit krouiñ kontoù nevez.",
-       "config-db-sys-user-exists-oracle": "Bez' ez eus eus ar gont \"$1\" c'hoazh. N'haller ober gant SYSDBA nemet evit krouiñ kontoù nevez !",
        "config-postgres-old": "Rekis eo PostgreSQL $1 pe ur stumm nevesoc'h; ober a rit gant $2.",
-       "config-mssql-old": "Stumm $1 Microsoft SQL Server, pe unan nevesoc'h, zo rekis. Ganeoc'h emañ ar stumm $2.",
        "config-sqlite-name-help": "Dibabit un anv dibar d'ho wiki.\nArabat ober gant esaouennoù pe barrennigoù-stagañ.\nImplijet e vo evit ar restr roadennoù SQLite.",
        "config-sqlite-parent-unwritable-group": "N'haller ket krouiñ ar c'havlec'h roadennoù <code><nowiki>$1</nowiki></code> peogwir n'hall ket ar servijer Web skrivañ war ar c'havlec'h kar <code><nowiki>$2</nowiki></code>.\n\nKavet eo bet gant ar stalier an anv implijer m'eo oberiant ar servijer drezañ. Evit gallout kenderc'hel, lakait ar c'havlec'h <code><nowiki>$3</nowiki></code> da vezañ tizhus evit ar skrivañ.\nWar ur reizhiad Unix/Linux system ober :\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "N'haller ket krouiñ ar c'havlec'h roadennoù <code><nowiki>$1</nowiki></code> peogwir n'hall ket ar servijer Web skrivañ war ar c'havlec'h kar <code><nowiki>$2</nowiki></code>.\n\nN'eo ket bet ar servijer evit kavout anv an implijer ma tro ar servijer. Evit kenderc'hel, lakaat ar c'havlec'h <code><nowiki>$3</nowiki></code> da vezañ tizhus evit ar skrivañ dre vras.\nWar ur reizhiad Unix/Linux merkañ :\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Lusker stokañ :",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-engine-help": "<strong>InnoDB</strong> eo an dibab gwellañ koulz lavaret atav, kemer a ra e kont ar monedoù kevezus.\n\n<strong>MyISAM</strong> a c'hall bezañ fonnusoc'h evit ar staliadurioù unpost pe ar re lenn hepken.\nDiazoù roadennoù MyISAM zo techet da vezañ gwastet aliesoc'h eget re InnoDB.",
-       "config-mssql-auth": "Seut anaoudadur :",
-       "config-mssql-install-auth": "Diuzañ ar seurt dilesa a vo implijet evit kevreañ ouzh an diaz roadennoù e-pad ar staliañ.\nMa tibabit \"{{int:config-mssql-windowsauth}}\", e vo implijet titouroù anaout an implijer a laka ar servijer da dreiñ.",
-       "config-mssql-web-auth": "Diuzañ ar seurt dilesa a vo implijet gant ar servijer web evit kevreañ ouzh diaz roadennoù ar servijer e-pad oberiadennoù boas ar wiki.\nMa tibabit \"{{int:config-mssql-windowsauth}}\", e vo implijet titouroù anaout an implijer a laka ar servijer da dreiñ.",
-       "config-mssql-sqlauth": "Anaoudadur SQL Server",
-       "config-mssql-windowsauth": "Anaoudadur Windows",
        "config-site-name": "Anv ar wiki :",
        "config-site-name-help": "Dont a raio war wel e barrenn ditl ar merdeer hag e meur a lec'h all c'hoazh.",
        "config-site-name-blank": "Lakait anv ul lec'hienn .",
index 50421ab..5228e59 100644 (file)
@@ -64,7 +64,6 @@
        "config-db-host": "Domaćin baze podataka:",
        "config-db-wiki-settings": "Identificiraj ovu wiki",
        "config-db-name": "Naziv baze podataka:",
-       "config-db-name-oracle": "Šema baze podataka:",
        "config-db-install-account": "Korisnički račun za instalaciju",
        "config-db-username": "Korisničko ime baze podataka:",
        "config-db-password": "Lozinka baze podataka:",
        "config-db-schema": "Šema za MediaWiki:",
        "config-pg-test-error": "Ne mogu se povezati na bazu podataka <strong>$1</strong>: $2",
        "config-sqlite-dir": "Folder za SQLite-podatke:",
-       "config-oracle-def-ts": "Predodređeni tabelarni prostor:",
-       "config-oracle-temp-ts": "Privremeni tabelarni prostor:",
        "config-type-mysql": "MySQL (ili kompaktibilan)",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "Postavke MySQL-a",
        "config-header-postgres": "Postavke PostgreSQL-a",
        "config-header-sqlite": "Postavke SQLite-a",
-       "config-header-oracle": "Postavke Oraclea",
-       "config-header-mssql": "Postavke Microsoft SQL Servera",
        "config-invalid-db-type": "Nevažeća vrsta baze podataka.",
        "config-missing-db-name": "Morate unijeti vrijednost za \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Morate unijeti vrijednost za \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "Morate unijeti vrijednost za \"{{int:config-db-host-oracle}}\".",
-       "config-db-sys-create-oracle": "Program za instalaciju podržava samo upotrebu SYSDBA-računa za pravljenje novih računa.",
        "config-postgres-old": "Zahtijeva se PostgreSQL $1 ili noviji. Vi imate $2.",
-       "config-mssql-old": "Zahtijeva se Microsoft SQL Server $1 ili noviji. Vi imate $2.",
        "config-sqlite-name-help": "Izaberite ime koje će predstavljati Vaš wiki.\nNemojte koristiti razmake i crte.\nOvo će se koristiti za ime datoteke SQLite-podataka.",
        "config-sqlite-readonly": "Datoteka <code>$1</code> nije zapisiva.",
        "config-sqlite-cant-create-db": "Ne mogu napraviti datoteku <code>$1</code> za bazu podataka.",
        "config-db-web-create": "Napravi račun ako već ne postoji",
        "config-mysql-engine": "Skladišni pogon:",
        "config-mysql-innodb": "InnoDB",
-       "config-mssql-auth": "Vrsta autentifikacije:",
        "config-site-name": "Ime wikija:",
        "config-site-name-blank": "Upišite ime sajta.",
        "config-project-namespace": "Imenski prostor projekta:",
index 19d6e45..50a6040 100644 (file)
        "config-diff3-bad": "Diri nataurakan a GNU diff3.",
        "config-db-type": "Klase ka database:",
        "config-db-host": "Host ka database:",
-       "config-db-host-oracle": "Database ka TNS:",
        "config-db-wiki-settings": "Mibdiron adin wiki",
        "config-db-name": "Ngaran ka database:",
        "config-db-port": "Port ka database:",
        "config-db-schema": "Skema para sa MediaWiki:",
        "config-sqlite-dir": "Direktoryo ka data sa SQLite:",
-       "config-oracle-def-ts": "Dating tablescape:",
-       "config-oracle-temp-ts": "Temporaryong tablescape:",
        "config-type-mysql": "MySQL (o compatible)",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "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-mysql-innodb": "InnoDB",
        "config-site-name": "Ngaran ka wiki",
        "config-site-name-blank": "Ibutang a ngaran ka site.",
index d56295b..04d9935 100644 (file)
        "config-db-type": "Tipus de base de dades:",
        "config-db-host": "Servidor de la base de dades:",
        "config-db-host-help": "Si el servidor de base de dades és en un servidor diferent, introduïu el nom del servidor o l'adreça IP a continuació.\n\nSi feu servir un hostatge web compartit, el vostre proveïdor us hauria de proporcionar el nom del servidor a la documentació.\n\nSi feu servir MySQL, «localhost» podria no funcionar com a nom de servidor. Si no funciona, proveu «127.0.0.1» com a adreça IP local.\n\nSi feu servir PostgreSQL, deixeu aquest camp en blanc per a connectar-vos a través d'un sòcol Unix.",
-       "config-db-host-oracle": "TNS de la base de dades:",
        "config-db-wiki-settings": "Identifica aquest wiki",
        "config-db-name": "Nom de la base de dades (sense guionets):",
        "config-db-name-help": "Trieu un nom que identifiqui el wiki.\nNo ha de contenir espais.\n\nSi esteu fent servir un hostatge web compartit, el vostre proveïdor us proporcionarà un nom específic per a la base de dades o us permetrà crear base de dades des d'un tauler de control.",
-       "config-db-name-oracle": "Esquema de la base de dades:",
        "config-db-install-account": "Compte d'usuari per a la instal·lació",
        "config-db-username": "Nom d'usuari de la base de dades:",
        "config-db-password": "Contrasenya de la base de dades:",
        "config-pg-test-error": "No es pot connectar a la base de dades '''$1''': $2",
        "config-sqlite-dir": "Directori de dades de l'SQLite",
        "config-sqlite-dir-help": "L'SQLite emmagatzema totes les dades en un únic fitxer.\n\nEl directori que proporcioneu ha de ser escrivible pel servidor durant la instal·lació.\n\n<strong>No</strong> hauria de ser accessible des del web. Aquest és el motiu perquè no el posem on són els fitxers PHP.\n\nL'instal·lador escriurà un fitxer <code>.htaccess</code> al mateix temps, però si això fallés, seria possible que s'accedís a la base de dades crua.\nAixò inclou dades d'usuari crues (adreces electròniques, contrasenyes en resum) així com revisions eliminades i altres dades restringida en el wiki.\n\nConsidereu posar la base de dades en algun altre lloc tot plegat, per exemple a <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Espai de taules per defecte:",
-       "config-oracle-temp-ts": "Espai de taules temporal:",
        "config-type-mysql": "MariaDB, MySQL o compatible",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki és compatible amb els següents sistemes de bases de dades:\n$1\nSi el sistema de bases de dades que intenteu utilitzar no apareix a la llista, seguiu les instruccions enllaçades més amunt per habilitar el suport.",
        "config-header-mysql": "Paràmetres de MariaDB/MySQL",
        "config-header-postgres": "Paràmetres del PostgreSQL",
        "config-header-sqlite": "Paràmetres de l'SQLite",
-       "config-header-oracle": "Paràmetres de l'Oracle",
-       "config-header-mssql": "Paràmetres del Microsoft SQL Server",
        "config-invalid-db-type": "Tipus de base de dades no vàlid",
        "config-missing-db-name": "Heu d'introduir un valor per a «{{int:config-db-name}}».",
        "config-missing-db-host": "Heu d'introduir un valor per a «{{int:config-db-host}}».",
-       "config-missing-db-server-oracle": "Heu d’introduir un valor per a «{{int:config-db-host-oracle}}».",
        "config-invalid-db-name": "El nom de la base de dades, «$1», no és vàlid.\nUtilitzeu només lletres de l’ASCII (a-z, A-Z), xifres (0-9), guions baixos (_) i guionets (-).",
        "config-invalid-db-prefix": "El prefix de la base de dades, «$1», no és vàlid.\nUtilitzeu només lletres de l’ASCII (a-z, A-Z), xifres (0-9), guions baixos (_) i guionets (-).",
        "config-connection-error": "$1.\n\nComproveu el servidor central, el nom d'usuari i la contrasenya i torneu-ho a provar. Si feu servir «localhost» com a servidor de base de dades, proveu llavors d'utilitzar «127.0.0.1» (o a l'inrevés).",
        "config-invalid-schema": "L’esquema «$1» no és vàlid per al MediaWiki.\nUtilitzeu només lletres de l’ASCII (a-z, A-Z), xifres (0-9), guions baixos (_) i guionets (-).",
-       "config-db-sys-create-oracle": "L'instal·lador només accepta emprar un compte SYSDBA per a la creació d'un nou compte.",
-       "config-db-sys-user-exists-oracle": "El compte d’usuari «$1» ja existeix. SYSDBA només es pot fer servir per crear comptes nous.",
        "config-postgres-old": "Cal el PostgreSQL $1 o posterior. Teniu el $2.",
-       "config-mssql-old": "Cal utilitzar el Microsoft SQL Server $1 o posterior. Teniu la versió $2.",
        "config-sqlite-name-help": "Trieu un nom per identificar el wiki.\nNo feu servir espais ni guionets.\nAquest nom s’utilitzarà per a denominar el fitxer de les dades de l’SQLite.",
        "config-sqlite-parent-unwritable-group": "No es pot crear el directori de dades <code><nowiki>$1</nowiki></code>, perquè el directori pare <code><nowiki>$2</nowiki></code> no el pot escriure el servidor web.\n\nL'instal·lador no pot determinar l'usuari amb què s'executa el servidor web.\nFeu el directori <code><nowiki>$3</nowiki></code> escrivible globalment per l'usuari del servidor web (i altres) per continuar.\nEn un sistema Unix/Linux feu:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "No es pot crear el directori de dades <code><nowiki>$1</nowiki></code>, perquè el directori pare <code><nowiki>$2</nowiki></code> no el pot escriure el servidor web.\n\nL'instal·lador no pot determinar l'usuari amb què s'executa el servidor web.\nFeu el directori <code><nowiki>$3</nowiki></code> escrivible globalment per l'usuari del servidor web (i altres) per continuar.\nEn un sistema Unix/Linux feu:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Motor d'emmagatzemament:",
        "config-mysql-innodb": "InnoDB (recomanat)",
        "config-mysql-engine-help": "<strong>InnoDB</strong> és gairebé sempre la millor opció perquè té una bona implementació de concurrència.\n\n<strong>MyISAM</strong> pot ser més ràpid en instal·lacions d'un únic usuari o de només lectura.\nLes bases de dades MyISAM tendeixen a corrompre's més sovint que les InnoDB.",
-       "config-mssql-auth": "Tipus d'autenticació:",
-       "config-mssql-install-auth": "Seleccioneu el tipus d'autenticació que s'utilitzarà per connectar-se amb el servidor de base de dades durant el procés d'instal·lació.\nSi seleccioneu «{{int:config-mssql-windowsauth}}», s'utilitzaran les credencials de l'usuari amb què s'executa el servidor web.",
-       "config-mssql-web-auth": "Seleccioneu el tipus d'autenticació que utilitzarà el servidor web per connectar-se amb el servidor de base de dades durant les operacions rutinàries del wiki.\nSi seleccioneu «{{int:config-mssql-windowsauth}}», s'utilitzaran les credencials de l'usuari amb què s'executa el servidor web.",
-       "config-mssql-sqlauth": "Autenticació de l’SQL Server",
-       "config-mssql-windowsauth": "Autenticació del Windows",
        "config-site-name": "Nom del wiki:",
        "config-site-name-help": "Això apareixerà en la barra de títol del navegador i en altres llocs diferents.",
        "config-site-name-blank": "Introduïu un nom per al lloc.",
index baba3e2..5e778fa 100644 (file)
        "config-no-fts3": "'''Тергам бе''': SQLite гулйина хуттург йоцуш [//sqlite.org/fts3.html FTS3] — лахар болхбеш хир дац оцу бухца.",
        "config-no-cli-uri": "'''ДӀахьедар''': <code>--scriptpath</code> параметр язйина яц, иза Ӏадйитаран кепаца лелош ю: <code>$1</code> .",
        "config-db-name": "Хаамийн базан цӀе:",
-       "config-type-mssql": "Microsoft SQL Server",
-       "config-header-mssql": "Microsoft SQL Server параметраш",
        "config-invalid-db-type": "Хаамийн базан нийса йоцу тайп",
        "config-missing-db-name": "Ахьа «{{int:config-db-name}}» маьӀна даздан дезаш ду.",
        "config-missing-db-host": "Ахьа «{{int:config-db-host}}» параметран маьӀна даздан дезаш ду.",
-       "config-missing-db-server-oracle": "Ахьа тӀеюза езаш ю «{{int:config-db-host-oracle}}»",
-       "config-invalid-db-server-oracle": "Хаамийн базан «$1» нийса йоцу TNS.\nЛелае «TNS Name», я могӀа «Easy Connect» ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm ЦӀерш техкаран кеп Oracle])",
        "config-sqlite-fts3-downgrade": "PHPн  гӀо до FTS3 яц — кхуссу таблицаш",
-       "config-mssql-auth": "Аутентификацин тайп:",
        "config-site-name": "Викин цӀе:",
        "config-site-name-blank": "Язъе сайтан цӀе.",
        "config-project-namespace": "Проектан цӀерийн меттиг:",
index aef912c..e13c506 100644 (file)
        "config-db-type": "Typ databáze:",
        "config-db-host": "Databázový server:",
        "config-db-host-help": "Pokud je váš databázový server na jiném počítači, zadejte zde jméno stroje nebo IP adresu.\n\nPokud používáte sdílený webový hosting, váš poskytovatel by vám měl v dokumentaci sdělit správné jméno stroje.\n\nPokud používáte MySQL, jméno „localhost“ nemusí fungovat. V takovém případě zkuste jako místní IP adresu zadat „127.0.0.1“.\n\nPokud používáte PostgreSQL, můžete se připojit Unixovými sockety tak, že toto pole necháte prázdné.",
-       "config-db-host-oracle": "Databázové TNS:",
-       "config-db-host-oracle-help": "Zadejte platné [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; tato instalace musí vidět soubor tnsnames.ora.<br />Pokud používáte klientské knihovny verze 10g nebo novější, můžete také používat názvy [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifikace této wiki",
        "config-db-name": "Jméno databáze (bez spojovníků):",
        "config-db-name-help": "Zvolte jméno, které označuje vaši wiki.\nNemělo by obsahovat mezery.\n\nPokud používáte sdílený webový hosting, váš poskytovatel vám buď sdělí konkrétní jméno databáze, nebo vás nechá vytvářet databáze pomocí nějakého ovládacího panelu.",
-       "config-db-name-oracle": "Databázové schéma:",
-       "config-db-account-oracle-warn": "Existují tři podporované možnosti pro instalaci s použitím databáze Oracle.\n\nPokud chcete v rámci instalace založit databázový účet, zadejte jako databázový účet pro instalaci účet s rolí SYSDBA a uveďte požadované údaje pro účet pro webový přístup, jinak můžete vytvořit účet pro webový přístup ručně a zadat pouze tento účet (pokud má dostatečná oprávnění k zakládání objektů schématu) nebo poskytnout dva různé účty, jeden s oprávněními k zakládání, druhý omezený pro webový přístup.\n\nSkript pro založení účtu s potřebnými privilegii můžete v této instalaci nalézt v adresáři „maintenance/oracle/“. Nezapomeňte, že použití omezeného účtu znepřístupní veškeré možnosti údržby přes implicitní účet.",
        "config-db-install-account": "Uživatelský účet pro instalaci",
        "config-db-username": "Databázové uživatelské jméno:",
        "config-db-password": "Databázové heslo:",
        "config-pg-test-error": "Nelze se připojit k databázi '''$1''': $2",
        "config-sqlite-dir": "Adresář pro data SQLite:",
        "config-sqlite-dir-help": "SQLite ukládá veškerá data v jediném souboru.\n\nZadaný adresář musí být v průběhu instalace být přístupný pro zápis.\n\n'''Neměl by''' být dostupný z webu, proto ho nedáváme tam, kde jsou vaše PHP soubory.\n\nInstalátor do adresáře přidá soubor <code>.htaccess</code>, ale pokud to selže, mohl by někdo získat přístup k vaší holé databázi.\nTo zahrnuje syrová uživatelská data (e-mailové adresy, hašovaná hesla), jako i smazané revize a další data s omezeným přístupem z vaší wiki.\n\nZvažte umístění databáze někam zcela jinam, například do <code>/var/lib/mediawiki/mojewiki</code>.",
-       "config-oracle-def-ts": "Implicitní tabulkový prostor:",
-       "config-oracle-temp-ts": "Dočasný tabulkový prostor:",
        "config-type-mysql": "MariaDB, MySQL nebo kompatibilní",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki podporuje následující databázové systémy:\n\n$1\n\nPokud v nabídce níže nevidíte databázový systém, který chcete použít, musíte pro zapnutí podpory následovat instrukce odkázané výše.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] je pro MediaWiki hlavní platformou a je podporováno nejlépe. MediaWiki pracuje také s [{{int:version-db-mysql-url}} MySQL] a [{{int:version-db-percona-url}} Percona Server], které jsou s MariaDB kompatibilní. ([https://www.php.net/manual/en/mysqli.installation.php Jak zkompilovat PHP s podporou MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] je populární otevřený databázový systém používaný jako alternativa k MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Jak přeložit PHP s podporou PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] je velmi dobře podporovaný odlehčený databázový systém. ([https://www.php.net/manual/en/pdo.installation.php Jak přeložit PHP s podporou SQLite], používá PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] je komerční podniková databáze. ([https://www.php.net/manual/en/oci8.installation.php Jak přeložit PHP s podporou OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] je komerční podniková databáze pro Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Jak přeložit PHP s podporou SQLSRV])",
        "config-header-mysql": "Nastavení MariaDB/MySQL",
        "config-header-postgres": "Nastavení PostgreSQL",
        "config-header-sqlite": "Nastavení SQLite",
-       "config-header-oracle": "Nastavení Oracle",
-       "config-header-mssql": "Nastavení Microsoft SQL Serveru",
        "config-invalid-db-type": "Chybný typ databáze",
        "config-missing-db-name": "Musíte zadat hodnotu pro „{{int:config-db-name}}“.",
        "config-missing-db-host": "Musíte zadat hodnotu pro „{{int:config-db-host}}“.",
-       "config-missing-db-server-oracle": "Musíte zadat hodnotu pro „{{int:config-db-host-oracle}}“.",
-       "config-invalid-db-server-oracle": "Chybné databázové TNS „$1“.\nPoužívejte buď „TNS Name“ nebo „Easy Connect“ (vizte [http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]).",
        "config-invalid-db-name": "Chybné jméno databáze „$1“.\nPoužívejte pouze ASCII písmena (a-z, A-Z), čísla (0-9), podtržítko (_) a spojovník (-).",
        "config-invalid-db-prefix": "Chybný databázový prefix „$1“.\nPoužívejte pouze ASCII písmena (a-z, A-Z), čísla (0-9), podtržítko (_) a spojovník (-).",
        "config-connection-error": "$1.\n\nZkontrolujte server, uživatelské jméno a heslo a zkuste to znovu. Pokud jako adresu databázového serveru používáte „localhost“, zkuste použít „127.0.0.1“ (a naopak).",
        "config-invalid-schema": "Neplatné schéma pro MediaWiki „$1“.\nPoužívejte pouze ASCII písmena (a-z, A-Z), čísla (0-9) a podtržítko (_).",
-       "config-db-sys-create-oracle": "Instalátor podporuje zakládání nového účtu pouze prostřednictvím účtu SYSDBA.",
-       "config-db-sys-user-exists-oracle": "Uživatelský účet „$1“ již existuje. SYSDBA lze použít pouze pro založení nového účtu!",
        "config-postgres-old": "Je vyžadován PostgreSQL $1 nebo novější, vy máte $2.",
-       "config-mssql-old": "Je vyžadován Microsoft SQL Server $1 nebo novější. Vy máte $2.",
        "config-sqlite-name-help": "Zvolte jméno, které označuje vaši wiki.\nNepoužívejte mezery a spojovníky.\nPoužije se jako název souboru s daty SQLite.",
        "config-sqlite-parent-unwritable-group": "Nelze vytvořit datový adresář <code><nowiki>$1</nowiki></code>, protože do nadřazeného adresáře <code><nowiki>$2</nowiki></code> nemá webový server právo zapisovat.\n\nInstalátor zjistil uživatele, pod kterým váš webový server běží.\nAbyste mohli pokračovat, umožněte mu zapisovat do adresáře <code><nowiki>$3</nowiki></code>.\nNa systémech Unix/Linux proveďte:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Nelze vytvořit datový adresář <code><nowiki>$1</nowiki></code>, protože do nadřazeného adresáře <code><nowiki>$2</nowiki></code> nemá webový server právo zapisovat.\n\nInstalátoru se nepodařilo zjistit uživatele, pod kterým váš webový server běží.\nAbyste mohli pokračovat, umožněte zápis do <code><nowiki>$3</nowiki></code> všem uživatelům.\nNa systémech Unix/Linux proveďte:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Typ úložiště:",
        "config-mysql-innodb": "InnoDB (doporučeno)",
        "config-mysql-engine-help": "'''InnoDB''' je téměř vždy nejlepší volba, neboť má dobrou podporu současného přístupu.\n\n'''MyISAM''' může být rychlejší u instalací pro jednoho uživatele nebo jen pro čtení.\nDatabáze MyISAM bývají poškozeny častěji než databáze InnoDB.",
-       "config-mssql-auth": "Typ autentizace:",
-       "config-mssql-install-auth": "Zvolte si typ autentizace, který se bude používat pro připojení k databázi v průběhu instalace.\nPokud zvolíte možnost „{{int:config-mssql-windowsauth}}“, použijí se přihlašovací údaje uživatele, pod kterým běží webový server.",
-       "config-mssql-web-auth": "Zvolte si typ autentizace, který se bude používat pro připojení k databázi za běžného provozu wiki.\nPokud zvolíte možnost „{{int:config-mssql-windowsauth}}“, použijí se přihlašovací údaje uživatele, pod kterým běží webový server.",
-       "config-mssql-sqlauth": "Autentizace SQL serveru",
-       "config-mssql-windowsauth": "Windows autentizace",
        "config-site-name": "Název wiki:",
        "config-site-name-help": "Bude se zobrazovat v titulku prohlížeče a na dalších místech.",
        "config-site-name-blank": "Zadejte název serveru.",
index 8924964..42d7bf0 100644 (file)
        "config-mysql-old": "MySQL $1 eller nyere kræves. Du har $2.",
        "config-db-port": "Databaseport:",
        "config-type-mysql": "MariaDB, MySQL eller kompatibel",
-       "config-type-mssql": "Microsoft SQL-server",
        "config-header-mysql": "MariaDB/MySQL-indstillinger",
        "config-header-postgres": "PostgreSQL-indstillinger",
        "config-header-sqlite": "SQLite-indstillinger",
-       "config-header-oracle": "Oracle-indstillinger",
        "config-invalid-db-type": "Ugyldig databasetype",
        "config-sqlite-readonly": "Filen <code>$1</code> er ikke skrivbar.",
        "config-sqlite-cant-create-db": "Kunne ikke oprette databasefilen <code>$1</code>.",
        "config-db-web-create": "Opret kontoen hvis den ikke allerede findes",
        "config-mysql-innodb": "InnoDB (anbefalet)",
-       "config-mssql-windowsauth": "Windows-godkendelse",
        "config-site-name": "Navn på wiki:",
        "config-site-name-blank": "Indtast et hjemmesidenavn.",
        "config-project-namespace": "Projektnavnerum:",
index bdf1c6f..649f841 100644 (file)
        "config-db-type": "Datenbanksystem:",
        "config-db-host": "Datenbankserver:",
        "config-db-host-help": "Sofern sich die Datenbank auf einem anderen Server befindet, ist hier der Servername oder die entsprechende IP-Adresse anzugeben.\n\nSofern ein gemeinschaftlich genutzter Server verwendet wird, sollte der Hoster den zutreffenden Servernamen in seiner Dokumentation angegeben haben.\n\nSofern MySQL genutzt wird, funktioniert der Servername „localhost“ voraussichtlich nicht. Wenn nicht, sollte „127.0.0.1“ oder die lokale IP-Adresse angegeben werden.\n\nSofern PostgresQL genutzt wird, muss dieses Feld leer gelassen werden, um über ein Unix-Socket zu verbinden.",
-       "config-db-host-oracle": "Datenbank-TNS:",
-       "config-db-host-oracle-help": "Einen gültigen [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm „Local Connect“-Namen] angeben. Die „tnsnames.ora“-Datei muss von dieser Installation erkannt werden können.<br />Sofern die Client-Bibliotheken für Version 10g oder neuer verwendet werden, kann auch [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm „Easy Connect“] zur Namensgebung genutzt werden.",
        "config-db-wiki-settings": "Bitte Daten zur eindeutigen Identifikation dieses Wikis angeben",
        "config-db-name": "Name der Datenbank (ohne Bindestriche):",
        "config-db-name-help": "Bitte einen Namen angeben, mit dem das Wiki identifiziert werden kann.\nDabei sollten keine Leerzeichen verwendet werden.\n\nSofern ein gemeinschaftlich genutzter Server verwendet wird, sollte der Hoster den Datenbanknamen angegeben oder aber die Erstellung einer Datenbank über ein entsprechendes Interface gestattet haben.",
-       "config-db-name-oracle": "Datenbankschema:",
-       "config-db-account-oracle-warn": "Es gibt drei von MediaWiki unterstützte Möglichkeiten, Oracle als Datenbank einzurichten:\n\nSofern das Datenbankbenutzerkonto während des Installationsvorgangs erstellt werden soll, muss ein Datenbankbenutzerkonto mit der SYSDBA-Berechtigung zusammen mit den entsprechenden Anmeldeinformationen angegeben werden, mit dem dann über das Web auf die Datenbank zugegriffen werden kann. Alternativ kann man auch lediglich ein einzelnes manuell angelegtes Datenbankbenutzerkonto angeben, mit dem über das Web auf die Datenbank zugegriffen werden kann, sofern dieses über die Berechtigung zur Erstellung von Datenbankschemen verfügt. Zudem ist es möglich, zwei Datenbankbenutzerkonten anzugeben, von denen eines die Berechtigung zur Erstellung von Datenbankschemen hat und das andere, um mit ihm über das Web auf die Datenbank zuzugreifen.\n\nEin Skript zum Anlegen eines Datenbankbenutzerkontos mit den notwendigen Berechtigungen findet man unter dem Pfad „…/maintenance/oracle/“ dieser MediaWiki-Installation. Es ist dabei zu bedenken, dass die Verwendung eines Datenbankbenutzerkontos mit beschränkten Berechtigungen die Nutzung der Wartungsfunktionen für das Standarddatenbankbenutzerkonto deaktiviert.",
        "config-db-install-account": "Benutzerkonto für die Installation",
        "config-db-username": "Name des Datenbankbenutzers:",
        "config-db-password": "Passwort des Datenbankbenutzers:",
        "config-pg-test-error": "Es kann keine Verbindung zur Datenbank '''$1''' hergestellt werden: $2",
        "config-sqlite-dir": "SQLite-Datenverzeichnis:",
        "config-sqlite-dir-help": "SQLite speichert alle Daten in einer einzigen Datei.\n\nDas für sie vorgesehene Verzeichnis muss während des Installationsvorgangs beschreibbar sein.\n\nEs sollte '''nicht''' über das Web zugänglich sein, was der Grund ist, warum die Datei nicht dort abgelegt wird, wo sich die PHP-Dateien befinden.\n\nDas Installationsprogramm wird mit der Datei zusammen eine zusätzliche <code>.htaccess</code>-Datei erstellen. Sofern dies scheitert, können Dritte auf die Datendatei zugreifen.\nDies umfasst die Nutzerdaten (E-Mail-Adressen, Passwörter, etc.) wie auch gelöschte Seitenversionen und andere vertrauliche Daten, die im Wiki gespeichert sind.\n\nEs ist daher zu erwägen, die Datendatei an gänzlich anderer Stelle abzulegen, beispielsweise im Verzeichnis <code>./var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Standardtabellenraum:",
-       "config-oracle-temp-ts": "Temporärer Tabellenraum:",
        "config-type-mysql": "MariaDB, MySQL (oder kompatible Datenbanksysteme)",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki unterstützt die folgenden Datenbanksysteme:\n\n$1\n\nSofern unterhalb nicht das Datenbanksystem angezeigt wird, das verwendet werden soll, muss dieses noch verfügbar gemacht werden. Oben ist zu jedem unterstützten Datenbanksystem ein Link zur entsprechenden Anleitung vorhanden.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] ist das von MediaWiki primär unterstützte Datenbanksystem. MediaWiki funktioniert auch mit [{{int:version-db-mysql-url}} MySQL] und [{{int:version-db-percona-url}} Percona Server], die MariaDB-kompatibel sind. ([https://www.php.net/manual/en/mysqli.installation.php Anleitung zur Kompilierung von PHP mit MySQL-Unterstützung])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] ist ein beliebtes Open-Source-Datenbanksystem und eine Alternative zu MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Anleitung zur Kompilierung von PHP mit PostgreSQL-Unterstützung])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] ist ein verschlanktes Datenbanksystem, das auch gut unterstützt wird ([https://www.php.net/manual/de/pdo.installation.php Anleitung zur Kompilierung von PHP mit SQLite-Unterstützung], verwendet PHP Data Objects (PDO))",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] ist eine kommerzielle Unternehmensdatenbank ([https://www.php.net/manual/en/oci8.installation.php Anleitung zur Kompilierung von PHP mit OCI8-Unterstützung])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] ist eine gewerbliche Unternehmensdatenbank für Windows. ([https://www.php.net/manual/de/sqlsrv.installation.php Anleitung zur Kompilierung von PHP mit SQLSRV-Unterstützung])",
        "config-header-mysql": "MariaDB/MySQL-Einstellungen",
        "config-header-postgres": "PostgreSQL-Einstellungen",
        "config-header-sqlite": "SQLite-Einstellungen",
-       "config-header-oracle": "Oracle-Einstellungen",
-       "config-header-mssql": "Einstellungen von Microsoft SQL Server",
        "config-invalid-db-type": "Unzulässiges Datenbanksystem",
        "config-missing-db-name": "Bei „{{int:config-db-name}}“ muss ein Wert angegeben werden.",
        "config-missing-db-host": "Bei „{{int:config-db-host}}“ muss ein Wert angegeben werden.",
-       "config-missing-db-server-oracle": "Für „{{int:config-db-host-oracle}}“ muss ein Wert eingegeben werden.",
-       "config-invalid-db-server-oracle": "Ungültiges Datenbank-TNS „$1“.\nEntweder „TNS Name“ oder eine „Easy Connect“-Zeichenfolge verwenden ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle-Benennungsmethoden])",
        "config-invalid-db-name": "Ungültiger Datenbankname „$1“.\nEs dürfen nur ASCII-codierte Buchstaben (a-z, A-Z), Zahlen (0-9), Unter- (_) sowie Bindestriche (-) verwendet werden.",
        "config-invalid-db-prefix": "Ungültiger Datenbanktabellenpräfix „$1“.\nEs dürfen nur ASCII-codierte Buchstaben (a-z, A-Z), Zahlen (0-9), Unter- (_) sowie Bindestriche (-) verwendet werden.",
        "config-connection-error": "$1.\n\nBitte unten angegebenen Servernamen, Benutzernamen sowie das Passwort überprüfen und es danach erneut versuchen. Falls „localhost“ als Datenbankhost verwendet wird, versuche stattdessen „127.0.0.1“ (oder umgekehrt).",
        "config-invalid-schema": "Ungültiges Datenschema für MediaWiki „$1“.\nEs dürfen nur ASCII-codierte Buchstaben (a-z, A-Z), Zahlen (0-9) und Unterstriche (_) verwendet werden.",
-       "config-db-sys-create-oracle": "Das Installationsprogramm unterstützt nur die Verwendung eines Datenbankbenutzerkontos mit SYSDBA-Berechtigung zum Anlegen eines neuen Datenbankbenutzerkontos.",
-       "config-db-sys-user-exists-oracle": "Das Datenbankbenutzerkonto „$1“ ist bereits vorhanden. Ein Datenbankbenutzerkontos mit SYSDBA-Berechtigung kann nur zum Anlegen eines neuen Datenbankbenutzerkontos genutzt werden.",
        "config-postgres-old": "PostgreSQL $1 oder höher wird benötigt. PostgreSQL $2 ist momentan vorhanden.",
-       "config-mssql-old": "Es wird Microsoft SQL Server $1 oder später benötigt. Deine Version ist $2.",
        "config-sqlite-name-help": "Bitten einen Namen angeben, mit dem das Wiki identifiziert werden kann.\nDabei bitte keine Leerzeichen oder Bindestriche verwenden.\nDieser Name wird für die SQLite-Datendateinamen genutzt.",
        "config-sqlite-parent-unwritable-group": "Das Datenverzeichnis <code><nowiki>$1</nowiki></code> kann nicht erzeugt werden, da das übergeordnete Verzeichnis <code><nowiki>$2</nowiki></code> nicht für den Webserver beschreibbar ist.\n\nDas Installationsprogramm konnte den Benutzer bestimmen, mit dem Webserver ausgeführt wird.\nSchreibzugriff auf das <code><nowiki>$3</nowiki></code>-Verzeichnis muss für diesen ermöglicht werden, um den Installationsvorgang fortsetzen zu können.\n\nAuf einem Unix- oder Linux-System:\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Das Datenverzeichnis <code><nowiki>$1</nowiki></code> kann nicht erzeugt werden, da das übergeordnete Verzeichnis <code><nowiki>$2</nowiki></code> nicht für den Webserver beschreibbar ist.\n\nDas Installationsprogramm konnte den Benutzer bestimmen, mit dem Webserver ausgeführt wird.\nSchreibzugriff auf das <code><nowiki>$3</nowiki></code>-Verzeichnis muss global für diesen und andere Benutzer ermöglicht werden, um den Installationsvorgang fortsetzen zu können.\n\nAuf einem Unix- oder Linux-System:\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Datenbanksystem:",
        "config-mysql-innodb": "InnoDB (empfohlen)",
        "config-mysql-engine-help": "<strong>InnoDB</strong> als Speichersubsystem für das Datenbanksystem MySQL ist fast immer die bessere Wahl, da es gleichzeitige Zugriffe gut unterstützt.\n\n<strong>MyISAM</strong> als Speichersubsystem für das Datenbanksystem MySQL ist hingegen in Einzelnutzerumgebungen oder bei schreibgeschützten Wikis schneller.\nDatenbanken, die MyISAM verwenden, sind indes tendenziell fehleranfälliger als solche, die InnoDB verwenden.",
-       "config-mssql-auth": "Authentifikationstyp:",
-       "config-mssql-install-auth": "Wähle den Authentifikationstyp aus, der zur Verbindung mit der Datenbank während des Installationsprozesses verwendet wird.\nFalls du „{{int:config-mssql-windowsauth}}“ auswählst, werden die Anmeldeinformationen eines beliebigen Benutzers verwendet, der den Webserver ausführt.",
-       "config-mssql-web-auth": "Wähle den Authentifikationstyp aus, der vom Webserver zur Verbindung mit dem Datenbankserver während des gewöhnlichen Betriebs des Wikis verwendet wird.\nFalls du „{{int:config-mssql-windowsauth}}“ auswählst, werden die Anmeldeinformationen eines beliebigen Benutzers verwendet, der den Webserver ausführt.",
-       "config-mssql-sqlauth": "SQL-Server-Authentifikation",
-       "config-mssql-windowsauth": "Windows-Authentifikation",
        "config-site-name": "Name des Wikis:",
        "config-site-name-help": "Er wird in der Titelleiste des Browsers, wie auch verschiedenen anderen Stellen, genutzt.",
        "config-site-name-blank": "Den Namen des Wikis angeben.",
index d596784..721a8dc 100644 (file)
        "config-env-hhvm": "HHVM $1 saz bi ya.",
        "config-db-type": "Database tipe:",
        "config-db-host": "Database host:",
-       "config-db-host-oracle": "Database TNS:",
        "config-db-wiki-settings": "Ena wikiyer akernë",
        "config-db-name": "Database name:",
-       "config-db-name-oracle": "Şemaya hardata:",
        "config-db-username": "Database nameykarberi:",
        "config-db-password": "Database parola :",
        "config-db-port": "Portê database:",
-       "config-oracle-def-ts": "Hesıbyaye caytabloy:",
-       "config-oracle-temp-ts": "İdareten caytabloy:",
        "config-type-mysql": "MySQL (yana hewlın)",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "Eyarê MySQL",
        "config-header-sqlite": "SQLite sazi",
-       "config-header-oracle": "Orqcle sazi",
-       "config-header-mssql": "Sazë Microsoft SQL Serveri",
        "config-missing-db-name": "\"{{int:config-db-name}}\"nrë jew erc dekerdış gerek keno.",
        "config-missing-db-host": "\"{{int:config-db-host}}\" rë jew erc gerek keno",
-       "config-missing-db-server-oracle": "\"{{int:config-db-host-oracle}}\" rë jew erc gerek keno",
        "config-mysql-engine": "Motorë depok kerdışi",
        "config-mysql-innodb": "InnoDB",
-       "config-mssql-sqlauth": "SQL Server araştnayış",
-       "config-mssql-windowsauth": "Windows kamiye araştnayış",
        "config-site-name": "Namey wiki:",
        "config-site-name-blank": "Yew nameyê sita cıkewe.",
        "config-project-namespace": "Wareyê nameyê proceyi:",
index 97b4fd3..d0a386f 100644 (file)
        "config-db-type": "Τύπος βάσης δεδομένων:",
        "config-db-host": "Φιλοξενία βάσης δεδομένων:",
        "config-db-host-help": "Εάν ο διακομιστής βάσης δεδομένων σας βρίσκεται σε διαφορετικό διακομιστή, εισαγάγετε εδώ το όνομα του κεντρικού υπολογιστή ή τη διεύθυνση IP.\n\nΕάν χρησιμοποιείτε μοιραζόμενη φιλοξενία του ιστοτόπου σας, ο πάροχος φιλοξενίας σας θα πρέπει να σας δίνει το σωστό όνομα κεντρικού υπολογιστή στην τεκμηρίωση του.\n\nΕάν εγκαθιστάτε σε διακομιστή Windows και χρησιμοποιείτε MySQL, το «localhost» μπορεί να μην λειτουργεί ως όνομα διακομιστή. Εάν δεν λειτουργεί, δοκιμάστε «127.0.0.1» ως τοπική διεύθυνση IP.\n\nΕάν χρησιμοποιείτε PostgreSQL, αφήστε αυτό το πεδίο κενό για να συνδεθείτε μέσω υποδοχής Unix.",
-       "config-db-host-oracle": "Βάση δεδομένων TNS:",
        "config-db-wiki-settings": "Αναγνώριση αυτού του wiki",
        "config-db-name": "Όνομα βάσης δεδομένων (χωρίς υφέν):",
        "config-db-name-help": "Επιλέξτε όνομα που να χαρακτηρίζει το wiki σας. Δεν πρέπει να περιέχει κενά διαστήματα.\n\nΕάν χρησιμοποιείτε μοιραζόμενη φιλοξενία του ιστοτόπου σας, ο πάροχος φιλοξενίας σας είτε θα σας δίνει να χρησιμοποιήσετε ένα συγκεκριμένο όνομα βάσης δεδομένων ή θα σας δίνει τη δυνατότητα να δημιουργείτε βάσεις δεδομένων μέσω κάποιου πίνακα ελέγχου.",
-       "config-db-name-oracle": "Σχήμα βάσης δεδομένων:",
        "config-db-install-account": "Λογαριασμός χρήστη για την εγκατάσταση",
        "config-db-username": "Όνομα χρήστη βάσης δεδομένων:",
        "config-db-password": "Συνθηματικό βάσης δεδομένων:",
        "config-db-schema-help": "Αυτό το σχήμα συνήθως αρκεί.\nΑλλάξτε το μόνο αν είστε βέβαιοι ότι χρειάζεται.",
        "config-pg-test-error": "Δεν μπορεί να συνδεθεί στη βάση δεδομένων <strong>$1</strong>: $2",
        "config-sqlite-dir": "SQLite κατάλογος δεδομένων:",
-       "config-oracle-temp-ts": "Προσωρινό tablespace:",
        "config-type-mysql": "MySQL (ή συμβατό)",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "To MediaWiki υποστηρίζει τα ακόλουθα συστήματα βάσεων δεδομένων:\n\n$1\n\nΑν δεν εμφανίζεται παρακάτω το σύστημα βάσης δεδομένων που θέλετε να χρησιμοποιήσετε, τότε ακολουθήστε τις οδηγίες στον παραπάνω σύνδεσμο για να ενεργοποιήσετε την υποστήριξη.",
        "config-dbsupport-mysql": "* Η [{{int:version-db-mysql-url}} MySQL] είναι ο πρωταρχικός στόχος για το MediaWiki και υποστηρίζεται καλύτερα. Το MediaWiki συνεργάζεται επίσης με τη [{{int:version-db-mariadb-url}} MariaDB] και το [{{int:version-db-percona-url}} διακομιστή Percona], που είναι όλα συμβατά με MySQL. ([https://www.php.net/manual/en/mysqli.installation.php Πώς να μεταγλωττίσετε την PHP με υποστήριξη MySQL])",
        "config-dbsupport-postgres": "* Η [{{int:version-db-postgres-url}} PostgreSQL] είναι δημοφιλές σύστημα βάσης δεδομένων ανοικτού κώδικα ως εναλλακτική της MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Πώς να μεταγλωττίσετε την PHP με υποστήριξη PostgreSQL])",
        "config-dbsupport-sqlite": "* Η [{{int:version-db-sqlite-url}} SQLite] είναι ένα ελαφρύ σύστημα βάσης δεδομένων που υποστηρίζεται πολύ καλά. ([http://www.php.net/manual/en/pdo.installation.php Πώς να μεταγλωττίσετε την PHP με υποστήριξη SQLite], χρησιμοποιεί PDO)",
-       "config-dbsupport-oracle": "* Η [{{int:version-db-oracle-url}} Oracle] είναι εμπορική βάση δεδομένων για επιχειρήσεις. ([http://www.php.net/manual/en/oci8.installation.php Πώς να μεταγλωττίσετε την PHP με υποστήριξη OCI8])",
-       "config-dbsupport-mssql": "* Ο [{{int:version-db-mssql-url}} Microsoft SQL Server] είναι εμπορική βάση δεδομένων για επιχειρήσεις που λειτουργεί σε Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Πώς να μεταγλωττίσετε την PHP με υποστήριξη SQLSRV])",
        "config-header-mysql": "Ρυθμίσεις MySQL",
        "config-header-postgres": "Ρυθμίσεις PostgreSQL",
        "config-header-sqlite": "Ρυθμίσεις SQLite",
-       "config-header-oracle": "Ρυθμίσεις Oracle",
-       "config-header-mssql": "Ρυθμίσεις του Microsoft SQL Server",
        "config-invalid-db-type": "Μη έγκυρος τύπος βάσης δεδομένων",
        "config-missing-db-name": "Πρέπει να εισαγάγετε μια τιμή για \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Πρέπει να εισαγάγετε μια τιμή για \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "Πρέπει να εισαγάγετε μια τιμή για \"{{int:config-db-host-oracle}}\".",
        "config-connection-error": "$1.\n\nΕλέγξτε τη διεύθυνση της βάσης δεδομένων, το όνομα χρήστη και το συνθηματικό και προσπαθήστε ξανά.",
-       "config-db-sys-user-exists-oracle": "Ο λογαριασμός χρήστη \"$1\" υπάρχει ήδη. Το SYSDBA μπορεί να χρησιμοποιηθεί μόνο για τη δημιουργία ενός νέου λογαριασμού!",
        "config-postgres-old": "Απαιτείται PostgreSQL $1 ή νεότερο. Εσείς έχετε $2.",
-       "config-mssql-old": "Απαιτείται Microsoft SQL Server $1 ή νεότερο. Εσείς έχετε $2.",
        "config-sqlite-readonly": "Το αρχείο <code>$1</code> δεν είναι εγγράψιμο.",
        "config-sqlite-cant-create-db": "Δεν ήταν δυνατή η δημιουργία του αρχείου βάσης δεδομένων <code>$1</code>.",
        "config-upgrade-error": "Υπήρξε σφάλμα κατά την αναβάθμιση της λίστας  MediaWiki στην βάση δεδομένων σας.\n\nΓια περισσότερες πληροφορίες δέστε την σύνδεση σας πιο πάνω και ξανακάνετε κλικ στο <strong>Continue</strong>.",
        "config-mysql-engine": "Μηχανή αποθήκευσης:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-engine-help": "Το <strong>InnoDB</strong> είναι σχεδόν πάντα η καλύτερη επιλογή, αφού έχει καλή υποστήριξη ταυτόχρονης λειτουργίας.\n\nΤο <strong>MyISAM</strong> μπορεί να είναι ταχύτερο σε εγκαταστάσεις του ενός χρήστη ή μόνο ανάγνωσης. \nΟι βάσεις δεδομένων MyISAM τείνουν να φθείρονται συχνότερα από τις βάσεις δεδομένων InnoDB.",
-       "config-mssql-auth": "Τύπος ελέγχου ταυτότητας:",
-       "config-mssql-sqlauth": "Έλεγχος ταυτότητας του SQL Server",
-       "config-mssql-windowsauth": "Έλεγχος ταυτότητας των Windows",
        "config-site-name": "Όνομα του wiki:",
        "config-site-name-help": "Αυτό θα εμφανίζεται στη γραμμή τίτλου του προγράμματος περιήγησης και σε διάφορα άλλα μέρη.",
        "config-site-name-blank": "Εισαγάγετε όνομα ιστοχώρου.",
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 3f83612..d075988 100644 (file)
        "config-db-host": "Datenbanka gastigilo:",
        "config-db-wiki-settings": "Identigu ĉi tiun vikion",
        "config-db-name": "Nomo de datumbazo:",
-       "config-db-name-oracle": "Datenbanka skemo:",
        "config-db-username": "Datenbanka uzantnomo:",
        "config-db-password": "Datenbanka pasvorto:",
        "config-db-port": "Datenbanka pordo:",
        "config-db-schema": "Skemo por MediaVikio (sen streketo):",
        "config-sqlite-dir": "Datena dosierujo por SQLite:",
-       "config-oracle-def-ts": "Implicita tabelspaco:",
-       "config-oracle-temp-ts": "Portempa tabelspaco:",
        "config-type-mysql": "MariaDB, MySQL, aŭ kongrua",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "MairaDB/MySQL-agordoj",
        "config-header-postgres": "PostgreSQL-agordoj",
        "config-header-sqlite": "SQLite-agordoj",
-       "config-header-oracle": "Oracle-agordoj",
-       "config-header-mssql": "Microsoft SQL Server-agordoj",
        "config-invalid-db-type": "Nevalida speco de datenbanko.",
        "config-sqlite-readonly": "La dosiero <code>$1</code> ne estas surskribebla.",
        "config-sqlite-cant-create-db": "Ne povis krei datenbankan dosieron <code>$1</code>.",
        "config-regenerate": "Refari dosieron LocalSettings.php →",
        "config-mysql-engine": "Konservada modulo:",
        "config-mysql-innodb": "InnoDB (rekomendata)",
-       "config-mssql-auth": "Speco de aŭtentokontrolo:",
-       "config-mssql-sqlauth": "Aŭtentokontrolo de Microsoft SQL-Servilo",
-       "config-mssql-windowsauth": "Aŭtentokontrolo de Windows",
        "config-site-name": "Nomo de vikio:",
        "config-site-name-blank": "Enigu nomon de retejo.",
        "config-project-namespace": "Projekta nomspaco:",
index 5e3d3a1..d349ff6 100644 (file)
        "config-db-type": "Tipo de base de datos:",
        "config-db-host": "Servidor de la base de datos:",
        "config-db-host-help": "Si tu servidor de base de datos está en otro servidor, escribe el nombre del equipo o su dirección IP aquí.\n\nSi estás utilizando alojamiento web compartido, tu proveedor debería darte el nombre correcto del servidor en su documentación.\n\nSi vas a instalar en un servidor Windows y a utilizar MySQL, el uso de \"localhost\" como nombre del servidor puede no funcionar. Si es así, intenta poner \"127.0.0.1\" como dirección IP local.\n\nSi utilizas PostgreSQL, deja este campo vacío para conectarse a través de un socket de Unix.",
-       "config-db-host-oracle": "TNS de la base de datos:",
-       "config-db-host-oracle-help": "Escribe un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nombre de conexión local] válido; un archivo tnsnames.ora debe ser visible para esta instalación.<br />Si estás utilizando bibliotecas de cliente 10g o más recientes también puedes utilizar el método de asignación de nombres [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifica este wiki",
        "config-db-name": "Nombre de base de datos (ningún guion):",
        "config-db-name-help": "Elige un nombre que identifique tu wiki.\nNo debe contener espacios.\n\nSi estás utilizando alojamiento web compartido, tu proveedor te dará un nombre específico de base de datos para que lo utilices, o bien te permitirá crear bases de datos a través de un panel de control.",
-       "config-db-name-oracle": "Esquema de la base de datos:",
-       "config-db-account-oracle-warn": "Hay tres escenarios compatibles para la instalación de Oracle como base de datos back-end:\n\nSi desea crear una cuenta de base de datos como parte del proceso de instalación, por favor suministre una cuenta con función SYSDBA como cuenta de base de datos para la instalación y especifique las credenciales deseadas de la cuenta de acceso al web, de lo contrario puede crear manualmente la cuenta de acceso al web y suministrar sólo esa cuenta (si tiene los permisos necesarios para crear los objetos de esquema) o suministrar dos cuentas diferentes, una con privilegios de creación y otra con acceso restringido a la web\n\nLa secuencia de comandos (script) para crear una cuenta con los privilegios necesarios puede encontrarse en el directorio \"maintenance/oracle/\" de esta instalación. Tenga en cuenta que utilizando una cuenta restringida desactivará todas las capacidades de mantenimiento con la cuenta predeterminada.",
        "config-db-install-account": "Cuenta de usuario para instalación",
        "config-db-username": "Nombre de usuario de la base de datos:",
        "config-db-password": "Contraseña de la base de datos:",
        "config-pg-test-error": "No se puede conectar con la base de datos <strong>$1</strong>: $2",
        "config-sqlite-dir": "Directorio de datos SQLite:",
        "config-sqlite-dir-help": "SQLite almacena todos los datos en un único archivo.\n\nEl directorio que proporciones debe poder escribirse por el servidor web durante la instalación.\n\n'''No''' debería ser accesible a través de Internet. Por eso no vamos a ponerlo en el sitio donde están los archivos PHP.\n\nEl instalador escribirá un archivo <code>.htaccess</code> junto con él, pero si falla alguien podría tener acceso a la base de datos en bloque.\nEso incluye los datos de usuario en bloque (direcciones de correo electrónico, las contraseñas con hash) así como revisiones eliminadas y otros datos restringidos del wiki.\n\nConsidera poner la base de datos en algún otro sitio, por ejemplo en <code>/var/lib/mediawiki/tuwiki</code> .",
-       "config-oracle-def-ts": "Espacio de tablas predeterminado:",
-       "config-oracle-temp-ts": "Espacio de tablas temporal:",
        "config-type-mysql": "MariaDB, MySQL o un sistema compatible",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki es compatible con los siguientes sistemas de bases de datos:\n\n$1\n\nSi no encuentras en el listado el sistema de base de datos que estás intentando utilizar, sigue las instrucciones enlazadas arriba para activar la compatibilidad.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] es la base de datos mayoritaria para MediaWiki y la que goza de mayor compatibilidad. MediaWiki tambié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/es/mysql.installation.php Cómo compilar PHP con compatibilidad MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] es un sistema de base de datos popular de código abierto, alternativa a MySQL. ([https://www.php.net/manual/es/pgsql.installation.php Cómo compilar PHP con compatibilidad PostgreSQL]).",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] es un sistema de base de datos ligero con gran compatibilidad con MediaWiki. ([https://www.php.net/manual/en/pdo.installation.php Cómo compilar PHP con compatibilidad SQLite], usando PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] es una base de datos comercial a nivel empresarial. ([https://www.php.net/manual/en/oci8.installation.php Cómo compilar PHP con compatibilidad con OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] es un sistema comercial de base de datos empresariales para Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Cómo compilar PHP con compatibilidad con SQLSRV])",
        "config-header-mysql": "Configuración de MariaDB/MySQL",
        "config-header-postgres": "Configuración de PostgreSQL",
        "config-header-sqlite": "Configuración de SQLite",
-       "config-header-oracle": "Configuración de Oracle",
-       "config-header-mssql": "Configuración de Microsoft SQL Server",
        "config-invalid-db-type": "El tipo de base de datos no es válido",
        "config-missing-db-name": "Debes escribir un valor para \"{{int:config-db-nombre}}\".",
        "config-missing-db-host": "Debes escribir un valor para \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "Debes escribir un valor para \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "El TNS de la base de datos «$1» es inválido.\nDebes usar un \"TNS Name\" o una cadena \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Nomenclatura de Oracle]).",
        "config-invalid-db-name": "El nombre de la base de datos \"$1\" no es válido.\nUsa sólo caracteres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_) y guiones (-).",
        "config-invalid-db-prefix": "El prefijo de la base de datos \"$1\" no es válido.\nUsa sólo caracteres ASCII: letras (a-z, A-Z), números (0-9), guiones bajos (_) y guiones (-).",
        "config-connection-error": "$1.\n\nControl el anfitrión, username y contraseña y probar otra vez. Si utilizando \"localhost\" como el anfitrión de base de datos, prueba utilizar \"127.0.0.1\" en cambio (o viceversa).",
        "config-invalid-schema": "El esquema de la base de datos \"$1\"  es inválido.\nUse sólo carateres ASCII: letras (a-z, A-Z), guarismos (0-9) y guiones bajos (_).",
-       "config-db-sys-create-oracle": "El instalador sólo admite el empleo de cuentas SYSDBA como método para crear una cuenta nueva.",
-       "config-db-sys-user-exists-oracle": "La cuenta de usuario «$1» ya existe. SYSDBA solo puede utilizarse para crear cuentas nuevas.",
        "config-postgres-old": "Se requiere PostgreSQL $1 o posterior. Tienes la versión $2.",
-       "config-mssql-old": "Se requiere Microsoft SQL Server $1 o posterior. Tienes la versión $2.",
        "config-sqlite-name-help": "Elige el nombre que identificará a tu wiki.\nNo uses espacios o guiones.\nEste nombre se usará como nombre del archivo de datos de SQLite.",
        "config-sqlite-parent-unwritable-group": "No se puede crear el directorio de datos <code><nowiki>$1</nowiki></code>, porque el servidor web no tiene permiso de escribir en el directorio padre <code><nowiki>$2</nowiki></code>.\n\nEl instalador ha determinado el usuario con el que se ejecuta tu servidor web.\nConcede permisos de escritura a él en el directorio <code><nowiki>$3</nowiki></code> para continuar.\nEn un sistema Unix/Linux haz:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "No se puede crear el directorio de datos <code><nowiki>$1</nowiki></code>, porque el servidor web no tiene permiso de escribir en el directorio padre <code><nowiki>$2</nowiki></code>.\n\nEl instalador no pudo determinar el usuario con el que se ejecuta tu servidor web.\nConcede permisos de escritura a él (¡y a otros!) en el directorio <code><nowiki>$3</nowiki></code> para continuar.\nEn un sistema Unix/Linux haz:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Motor de almacenamiento:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-engine-help": "<strong>InnoDB</strong> es casi siempre la mejor opción, dado que soporta bien los accesos simultáneos.\n\n<strong>MyISAM</strong> puede ser más rápido en instalaciones con usuario único o de sólo lectura.\nLas bases de datos MyISAM tienden a corromperse más a menudo que las bases de datos InnoDB.",
-       "config-mssql-auth": "Tipo de autenticación:",
-       "config-mssql-install-auth": "Selecciona el tipo de autenticación que se utilizará para conectarse a la base de datos durante el proceso de instalación.\nSi seleccionas \"{{int:config-mssql-windowsauth}}\", se usarán las credenciales del usuario con el que se ejecuta el servidor web.",
-       "config-mssql-web-auth": "Selecciona el tipo de autenticación que utilizará el servidor web para conectarse al servidor de base de datos, durante el funcionamiento normal de la wiki.\nSi seleccionas \"{{int:config-mssql-windowsauth}}\", se usarán las credenciales del usuario con el cual se ejecuta el servidor web.",
-       "config-mssql-sqlauth": "Autenticación de SQL Server",
-       "config-mssql-windowsauth": "Autenticación de Windows",
        "config-site-name": "Nombre del wiki:",
        "config-site-name-help": "Esto aparecerá en la barra de título del navegador y en varios otros lugares.",
        "config-site-name-blank": "Escribe un nombre de sitio.",
index 2cd5dd2..a981d20 100644 (file)
@@ -39,7 +39,6 @@
        "config-diff3-bad": "Tekstivõrdluse vahendit GNU diff3 ei leitud. Saad seda eirata, aga võid sattuda edaspidi sagedamini redigeerimiskonfliktidesse.",
        "config-db-type": "Andmebaasi tüüp:",
        "config-db-name": "Andmebaasi nimi (sidekriipsudeta):",
-       "config-db-name-oracle": "Andmebaasi skeem:",
        "config-db-username": "Andmebaasi kasutajanimi:",
        "config-db-password": "Andmebaasi parool:",
        "config-db-port": "Andmebaasi port:",
index 4e004f9..cd6c110 100644 (file)
        "config-db-type": "Datu-base mota:",
        "config-db-host": "Datu-basearen zerbitzaria:",
        "config-db-host-help": "Zure datu-basearen zerbitzaria beste zerbitzari batean badago, sartu ostalariaren izena edo IP helbidea hemen.\n\nPartekatutako web-ostatua erabiltzen ari bazara, zure ostalaritza-hornitzaileak dokumentazio-ostalariaren izen egokia eman beharko lizuke.\n\nWindows zerbitzari batean instalatzen bazara eta MySQL erabiliz, \"localhost\" agian ez du zerbitzariaren izenerako funtzionatuko. Ez badago, saiatu \"127.0.0.1\" tokiko IP helbideetarako.\n\nPostgreSQL erabiltzen ari bazara, utzi eremu hau hutsik Unix socket bidez konektatzeko.",
-       "config-db-host-oracle": "Datu-baseko TNS:",
-       "config-db-host-oracle-help": "Sartu baliozko [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Konekzio izan lokala]; instalazio honetarako tnsnames.ora fitxategia ikusgai egon behar da. <br/> Bezeroen 10g liburutegiak edo berriagoak erabiltzen ari bazara, [http://download.oracle.com/docs/cd/E11882_01/network.112 ere erabil dezakezu. /e10836/naming.htm Konektatzeko erraza] izendatzeko metodoa.",
        "config-db-wiki-settings": "Wiki hau identifikatu",
        "config-db-name": "Datu-base izena:",
        "config-db-name-help": "Aukeratu zure Wikia identifikatzen duen izena.\nEzin dira espazioak eabili.\n\nErabiltzen ari bazara web hosting partekatua, hostin-eko hornitzaileak emango dizu datu-basearen izen espezifikoa edo kontrol panel baten bitzrtez zure datu-basea sortzea utziko dizu.",
-       "config-db-name-oracle": "Datu-baseko eskema:",
-       "config-db-account-oracle-warn": "Hiru euskarri onartzen dira Oracle datu-basearen euskarri gisa instalatzeko:\n\nInstalazio-prozesuaren zati gisa datu-basearen kontua sortu nahi baduzu, hornitu kontu bat SYSDBA rol datu-baseko kontu gisa instalatzeko eta webgunerako sarbide konturako nahi dituzun kredentzialak zehazteko; bestela, web-sarbideen kontua eskuz sortu eta hornitu kontu hori bakarrik (eskemaren objektuak sortzeko baimenak behar baditu) edo bi kontu ezberdin, bi pribilegio sortu eta sarbide mugatua eskaintzen dutenak.\n\nBeharrezko baimenak dituen kontu bat sortzeko gidoia instalazio honen \"mantentze/orakulu/\" direktorioan aurki daiteke. Kontuan izan kontu mugatu bat erabiliz kontu lehenetsiarekin mantentze-gaitasun guztiak desgaituko dituela.",
        "config-db-install-account": "Instalazio prozesuan erabili erabiltzaile kontua.",
        "config-db-username": "Datu-base lankide izena:",
        "config-db-password": "Datu-base pasahitza:",
        "config-pg-test-error": "Ezin da datu-basearekin konektatu <strong>$1</strong>: $2",
        "config-sqlite-dir": "SQLite -eko informazioaren direktorioa:",
        "config-sqlite-dir-help": "SQLite-k datu guztiak fitxategi bakarrean gordetzen ditu.\n\nHornitu duzun direktorioa web zerbitzariaren bidez idatzia izateko aukera eman beharko duu instalazioan zehar.\n\n<Strong>Ez</strong> da webgunearen bidez eskuragarri egon behar; horregatik zure PHP fitxategiak non dauden ez dugu erakutsi.\n\nInstalatzaileak <code>.htaccess</code> fitxategi bat idatziko du bertan, baina horrek huts egiten badu zure datu base gordinera norbait sar daiteke.\nErabiltzaileen datu gordinak (helbide elektronikoak, pasahitzak), ezabatutako berrikusketa eta gainontzeko datu mugatuak ere barnean hartuz.\n\nDatu-basea beste nonbait jartzearen inguruan hausnartu, adibidez, <code>/var/lib/mediawiki/yourwiki</code>-n.",
-       "config-oracle-def-ts": "Taula-toki lehenetsia:",
-       "config-oracle-temp-ts": "Aldi baterako taula:",
        "config-type-mysql": "MariaDB, MySQL edo bateragarria",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki-k onartzen du hurrengo datu-base sistemak:\n\n$1\n\nListan ez baduzu ikusten erabili nahi duzun sistema, jarraitu goiko argibideak aktibatzeko.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] MediaWikiren lehenengoko helburua da eta primeran babesturik dago. MediaWikik ere [{{int:version-db-mariadb-url}} MariaDB]-rekin egiten du lan baita [{{int:version-db-percona-url}} Percona Server]-kin, MySQL-rekin balio dutenak. ([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] iturburu irekiko datu basea sistema famatua da MySQL-rako alternatiba bezala. ([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] oso ondo onartzen duen datu-basearen sistema arina da.\n ([http://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] enpresa komertzial baten datu-basea da. ([http://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] Windows-entzako enpresa komertzial baten datu-basea da.  ([https://www.php.net/manual/en/sqlsrv.installation.php How to compile PHP with SQLSRV support])",
        "config-header-mysql": "MySQL hobespenak",
        "config-header-postgres": "PostgreSQL hobespenak",
        "config-header-sqlite": "SQLite hobespenak",
-       "config-header-oracle": "Oracle hobespenak",
-       "config-header-mssql": "Microsoft SQL Server-en ezarpenak",
        "config-invalid-db-type": "Datu-base mota baliogabea.",
        "config-missing-db-name": "\"{{int:config-db-name}}\"-rentzako balioa sartu behar duzu.",
        "config-missing-db-host": "\"{{int:config-db-host}}\"-rentzako balioa sartu behar duzu.",
-       "config-missing-db-server-oracle": "\"{{int:config-db-host-oracle}}\"-rentzako balioa sartu behar duzu.",
-       "config-invalid-db-server-oracle": "\"$1\" TNS datu basea baliogabea.\nErabili \"TNS izena\" edo \"Konektagarritasun erraza\" katea ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]).",
        "config-invalid-db-name": "Datu-basearen izen okerra \"$1\"\nErabil ezazu ASCII letrak bakarrik (a-z, A-Z), zenbakiak (09), behe-gidoiak (_) eta gidoiak (-)",
        "config-invalid-db-prefix": "Datu-basearen aurrizki okerra \"$1\"\nErabil ezazu ASCII letrak bakarrik (a-z, A-Z) behe-gidoiak (_) eta gidoiak (-)",
        "config-connection-error": "$1\n\nHost-a, erabiltzaile izena eta pasahitza egiaztatu eta saiatu berriro.",
        "config-invalid-schema": "MediaWikiko eskema okerra \"$1\"\nErabil ezazu ASCII letrak bakarrik (a-z, A-Z) behe-gidoiak (_).",
-       "config-db-sys-create-oracle": "Instalatzaileak bakarrik jasaten du SYSBDA kontu bat erabiltzaile kontu berri bat sortzeko.",
-       "config-db-sys-user-exists-oracle": "$1 erabiltzaile kontua dagoeneko existitzen da. SYSDBA kontu berri bat sortzeko erabili daiteke soilik!",
        "config-postgres-old": "PostgreSQL $1 edo berriagoa behar da. Zuk $2 badaukazu.",
-       "config-mssql-old": "Microsoft SQL Server $1 edo berriagoa behar da. Zuk $2 badaukazu.",
        "config-sqlite-name-help": "Aukeratu zure wikia identifikatzen duen izen bat.\nEz erabili zuriunerik edo gidoirik.\nHau erabiliko da SQLite datuen artxiborako.",
        "config-sqlite-parent-unwritable-group": "Ezin da datu-direktorioa sortu <code><nowiki>$1</nowiki></code>, web zerbitzariak ezin baitu <code><nowiki>$2</nowiki></code> guraso direktorioan idatzi.\n\nInstalatzaileak webgunea exekutatzen ari den bitartean zure erabiltzailea zehaztu du.\nEgin <code><nowiki>$3</nowiki></code> direktorioan idazteko gai izatea jarraitzeko.\nUnix/Linux sistema batean:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Ezin da datu-direktorioa sortu <code><nowiki>$1</nowiki></code>, web zerbitzariak ezin baitu <code><nowiki>$2</nowiki></code> guraso direktorioan idatzi.\n\nInstalatzaileak webgunea exekutatzen ari den bitartean zure erabiltzailea zehaztu dezake.\nEgin <code><nowiki>$3</nowiki></code> direktorioa globalean idazteko gai izatea (horretarako eta besteentzako!) jarraitzeko.\nUnix/Linux sistema batean:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Biltegiratze motorea:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-engine-help": "<strong>InnoDB</strong> ia beti aukerarik onena da, konkurrentzia-laguntza ona duelako.\n\n<strong>MyISAM</strong> erabiltzaile bakarreko edo irakurketa bakarreko instalazioetan azkarragoa izan daiteke.\nMyISAM datu-basea gehiagokotan hondatuta ageri da InnoDB datu-baseareakin baino.",
-       "config-mssql-auth": "Autentifikazio mota:",
-       "config-mssql-install-auth": "Aukeratu instalazio prozesuan zehar datu-basera konektatzeko erabiliko den autentifikazio mota.\n\"{{Int: config-mssql-windowsauth}}\" hautatzen baduzu, web zerbitzariak duen edozein erabiltzailek erabiliko duen kredentziala erabiliko da.",
-       "config-mssql-web-auth": "Aukeratu instalazio prozesuan zehar datu-base zerbitzariari konektatzeko erabiliko den autentifikazio mota.\n\"{{Int: config-mssql-windowsauth}}\" hautatzen baduzu, web zerbitzariak duen edozein erabiltzailek erabiliko duen kredentziala erabiliko da.",
-       "config-mssql-sqlauth": "SQL Serbidorearen Autentifikazioa",
-       "config-mssql-windowsauth": "Windows-eko Autentifikazioa.",
        "config-site-name": "Wikiaren izena:",
        "config-site-name-help": "Hau nabigatzailearen tituluaren lerroan agertuko da eta pare bat leku gehiagotan.",
        "config-site-name-blank": "Aukeratu webgunearen izena.",
index 7cac681..158e43d 100644 (file)
        "config-db-type": "نوع پایگاه اطلاعات:",
        "config-db-host": "میزبان پایگاه اطلاعات:",
        "config-db-host-help": "اگر سرور پایگاه اطلاعاتی شما در سرور دیگری است، نام گروه و آدرس آی‌پی را اینجا وارد کنید.\nاگر از میزبان شبکهٔ به اشتراک گذاشته‌شده استفاده می‌کنید، تهیه‌کنندهٔ خدمات میزبانی شما باید نام میزبان صحیح در اسناد و مدارک را به شما بدهد.\nاگر از مای‌اس‌کیو‌ال استفاده می‌کنید، ممکن است استفاده از «میزبان‌محلی» برای نام سرور کار نکند.اگر کار نکرد، «۱۲۷.۰.۰.۱» را برای آدرس آی‌پی محلی امتحان کنید.\nاگر از پستگرس‌کیوال استفاده می‌کنید، برای اتصال از طریق یک سوکت یونیکس این قسمت را خالی رها کنید.",
-       "config-db-host-oracle": "پایگاه اطلاعاتی تی‌ان‌اس:",
-       "config-db-host-oracle-help": "یک [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] معتبر وارد کنید؛ پوشهٔ tnsnames.ora باید برای این نصب نمایان باشد.<br /> اگر از کتابخانه‌های پردازشگر ۱۰جی یا جدیدتر استفاده می‌کنید،همچنین می‌توانید از روش نامبردهٔ [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] استفاده کنید.",
        "config-db-wiki-settings": "این ویکی را شناسایی کنید.",
        "config-db-name": "نام پایگاه داده (بدون خط پیوند):",
        "config-db-name-help": "نامی را انتخاب کنید که ویکی شما را شناسایی کند.\nنباید شامل فاصله باشد.\nاگر از گروه شبکهٔ اشتراک‌گذاری استفاده می‌کنید، تهیه‌کنندهٔ گروهتان یا باید به شما نام یک پایگاه اطلاعاتی مشخص برای استفاده بدهد یا برای ایجاد پایگاه‌های اطلاعاتی از طریق یک کنترل پنل به شما اجازه بدهد.",
-       "config-db-name-oracle": "طرح کلی پایگاه اطلاعاتی:",
-       "config-db-account-oracle-warn": "برای نصب برنامهٔ اوراکل به عنوان پایگاه اطلاعاتی در بخش گذشته،سه سناریو پشتیبانی شده است:\nاگر مایل به ایجاد حساب پایگاه اطلاعاتی به عنوان بخشی از روند نصب هستید، لطفاً یک حساب با نقش اس‌وای‌اس‌دی‌بی‌ای به عنوان حساب پایگاه اطلاعاتی برای نصب تهیه کنید و اعتبارنامه‌های مطلوبی را برای حساب دردسترس شبکه تعیین کنید، به عبارتی دیگر یا می‌توانید حساب دردسترس شبکه را به طور دستی ایجاد کنید و تنها آن حساب را تهیه کنید (اگر مستلزم مجوزهایی برای ایجاد موضوعات طرح کلی باشد) یا دو حساب دیگر تهیه کنید،یکی با ایجاد مزایا و یک حساب محدود برای دسترسی شبکه.\nمتنی برای ایجاد یک حساب با مزایای لازم بنویسید که می‌تواند در فهرست\"نگهداری/برنامهٔ اوراکل\" این نصب یافت شود. به یاد داشته باشید که استفاده از یک حساب محدود،همهٔ قابلیت‌های نگهداری با حساب پیش‌فرض را غیرفعال خواهد کرد.",
        "config-db-install-account": "حساب کاربری برای نصب",
        "config-db-username": "نام کاربری پایگاه اطلاعات:",
        "config-db-password": "گذرواژه پایگاه‌های داده:",
        "config-pg-test-error": "نمی‌توان به پایگاه اطلاعاتی '''$1''' وصل شد: $2",
        "config-sqlite-dir": "فهرست اطلاعات اس‌کیو‌لایت:",
        "config-sqlite-dir-help": "اس‌کیولایت همهٔ اطلاعات را در یک پوشهٔ جداگانه ذخیره می‌کند.\nفهرستی را که به وجود‌ آوردید باید در طی نصب به‌ وسیلهٔ وب‌سرور قابل نوشتن باشد.\n<strong>نباید</strong> از طریق وب در دسترس باشد، به همین دلیل ما آن را در جایی که پوشه‌های پی‌اچ‌پی شما هست، قرار نمی‌دهیم.\nنصب کننده یک پوشهٔ <code>.htaccess</code> همراه آن خواهدآورد،اما اگر این کار را انجام ندهد،کسی می‌تواند به پایگاه اطلاعاتی شما دسترسی پیدا کند.\nاطلاعات خام کاربر شامل (آدرس‌های ایمیل، علامت‌‌ها با شماره‌های رمز عبور) به خوبی پاک کردن تغییرات و دیگر اطلاعات محرمانه در ویکی.\nقرار دادن پایگاه اطلاعاتی باهم را در جایی دیگر در نظر بگیرید، برای مثال در <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "جدول پیش فرض:",
-       "config-oracle-temp-ts": "جدول موقت:",
        "config-type-mysql": "MariaDB، مای‌اس‌کیو‌ال (یا سازگار)",
-       "config-type-mssql": "سرور مایکروسافت اس‌کیو‌ال",
        "config-support-info": "مدیاویکی سامانه‌های پایگاه اطلاعاتی زیر را حمایت می‌کند:\n$1\nاگر متوجه سامانه پایگاه اطلاعاتی که سعی دارید از فهرست زیر استفاده کنید، نمی‌شوید، بنابراین دستورالعمل‌های مرتبط در بالا را برای فعال کردن پشتیبانی دنبال کنید.",
        "config-dbsupport-mysql": "*[{{int:version-db-mariadb-url}} MariaDB] مهم‌ترین هدف برای مدیاویکی است و بهترین پشتیبانی. مدیاویکی همچنین کار می‌کند با [{{int:version-db-mysql-url}} MariaDB] و [{{int:version-db-percona-url}} Percona Server] که با MariaDB سازگار هستند.([https://www.php.net/manual/en/mysqli.installation.php چگونه php را با MariaDB کامپایل کنیم])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} پستگرس‌کیوال] یک سامانه پایگاه اطلاعات متن‌باز پر‌طرفدار است که جایگزینی برای مای‌اس‌کیوال است. ([https://www.php.net/manual/en/pgsql.installation.php راهنمای تنظیم کردن پی‌اچ‌پی به همراه پستگرس‌کیوال])",
        "config-dbsupport-sqlite": "*[{{int:version-db-sqlite-url}} اس‌کیولایت] یک سامانه پایگاه اطلاعاتی کم حجمی است که بسیار خوب پشتیبانی شده‌است.\n([https://www.php.net/manual/en/pdo.installation.php چگونگی کامپایل پی‌اچ‌پی با اس‌کیولایت]، از PDO استفاده می‌کند)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] یک پایگاه اطلاعاتی کار تبلیغاتی است.\n([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] یک پایگاه اطلاعاتی موسسهٔ تبلیغاتی برای وینذوز است. ([https://www.php.net/manual/en/sqlsrv.installation.php How to compile PHP with SQLSRV support])",
        "config-header-mysql": "تنظیمات MariaDB/مای‌اس‌کیو‌ال",
        "config-header-postgres": "تنظیمات پست‌گر‌اس‌کیو‌ال",
        "config-header-sqlite": "تنظیمات اس‌کیو‌لایت",
-       "config-header-oracle": "تنظیمات اوراکل",
-       "config-header-mssql": "تنظیمات سرور مایکرپسافت اس‌کیو‌ال",
        "config-invalid-db-type": "نوع پایگاه اطلاعاتی نامعتبر",
        "config-missing-db-name": "شما باید یک مقدار برای \"نام {{int:config-db-name}}\" وارد کنید",
        "config-missing-db-host": "شما باید یک مقدار برای \"گروه {{int:config-db-host}}\" وارد کنید",
-       "config-missing-db-server-oracle": "شما باید یک مقدار برای \"تی‌ان‌اس {{int:config-db-host-oracle}}\" وارد کنید",
-       "config-invalid-db-server-oracle": "تی‌ان‌اس پایگاه اطلاعاتی $1 نامعتبر.\nیا از \"نام تی‌ان‌اس\" یا یک سلسله \"ارتباط آسان\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]) استفاده کنید.",
        "config-invalid-db-name": "نام پایگاه اطلاعاتی نامعتبر \"$1\".\nفقط حروف اِی‌اس‌سی‌آی‌آی بزرگ (اِی-زدکوچک،اِی-زد بزرگ)،اعداد (۰-۹)،آندرلاین (_) و خط تیره کوتاه (-) استفاده کنید.",
        "config-invalid-db-prefix": "پیشوند پایگاه اطلاعاتی نامعتبر \"$1\".\nفقط حروف اِی‌اس‌سی‌آی‌آی بزرگ (اِی-زدکوچک،اِی-زد بزرگ)،اعداد (۰-۹)،آندرلاین (_) و خط تیره کوتاه (-) استفاده کنید.",
        "config-connection-error": "$1.\n\nمیزبان، نام کاربری و گذرواژه را بررسی کرده و دوباره امتحان کنید. اگر از «میزبان محلی» به عنوان میزبان پایگاه داده استفاده می‌کنید، استفاده از «۱۲۷.۰.۰.۱» را امتحان کنید (یا برعکس).",
        "config-invalid-schema": "طرح‌کلی برای مدیاویکی نامعتبر \"$1\".\nفقط حروف اِی‌اس‌سی‌آی‌آی بزرگ (اِی-زدکوچک،اِی-زد بزرگ)،اعداد (۰-۹)،آندرلاین (_) و خط تیره کوتاه (-) استفاده کنید.",
-       "config-db-sys-create-oracle": "نصب‌کننده تنها از استفادهٔ یک حساب اس‌وای‌اس‌دی‌بی‌اِی برای ایجاد یک حساب جدید حمایت می‌کند.",
-       "config-db-sys-user-exists-oracle": "حساب کاربری \"$1\" در‌حال‌حاضر وجود دارد.تنها اس‌وای‌اس‌دی‌بی‌اِی می‌تواند برای ایجاد یک حساب جدید استفاده شود!",
        "config-postgres-old": "پستگِرِاس‌کیو‌ال نسخهٔ $1 یا بالاتر لازم است. شما نسخهٔ $2 را دارید.",
-       "config-mssql-old": "سرور مایکروسافت اس‌کیو‌ال $1 یا اخیر آن لازم است. شما $2 را دارید.",
        "config-sqlite-name-help": "نامی را انتخاب کنید که ویکی شما را شناسایی می‌کند.\nاز فاصله‌ها یا خط‌های تیره کوتاه استفاده نکنید.\nاین برای نام پوشهٔ اطلاعات اس‌کیولایت استفاده خواهد‌شد.",
        "config-sqlite-parent-unwritable-group": "فهرست اطلاعات <code><nowiki>$1</nowiki></code> نمی‌تواند ایجاد شود، چون فهرست منشأ <code><nowiki>$2</nowiki></code> توسط سرور شبکه قابل نوشتن نیست.\nنصب کننده، کاربری را که سرور شبکه شما را اجرا می‌کند، مشخص کرده‌است.\nبرای ادامه دادن،فهرستی قابل نوشتن <code><nowiki>$3</nowiki></code> توسط آن ایجاد کنید.\nدر یک سامانه یونیکس/لینوکس انجام می‌دهد:\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "فهرست اطلاعات <code><nowiki>$1</nowiki></code> نمی‌تواند ایجاد شود، چون فهرست منشأ <code><nowiki>$2</nowiki></code> توسط کارساز شبکه قابل نوشتن نیست.\nنصب کننده، کاربری را که سرور شبکه شما را اجرا می‌کند، نتوانست مشخص کند.\nفهرست کلی قابل نوشتن <code><nowiki>$3</nowiki></code> توسط آن (و دیگران!) برای ادامه دادن،ایجاد کنید.\nدر یک سامانه یونیکس/لینوکس انجام می‌دهد:\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "موتور ذخیره سازی:",
        "config-mysql-innodb": "اینودی‌بی (پیشنهاد می‌شود)",
        "config-mysql-engine-help": "'''اینودی‌بی''' تقریباً همیشه بهترین گزینه است،زیرا پشتیبانی همزمان خوبی دارد.\n'''مای‌آی‌اس‌ای‌ام''' ممکن است در نصب‌های کاربر جداگانه یا فقط خواندنی سریع‌تر باشد.\nپایگاه‌های اطلاعاتی مای‌آی‌اس‌ای‌ام اغلب بیشتر از پایگاه‌های اطلاعاتی اینودی‌بی مستعد ازبین رفتن هستند.",
-       "config-mssql-auth": "نوع تأیید:",
-       "config-mssql-install-auth": "نوع تأییدی را که برای اتصال به پایگاه اطلاعاتی حین فرآیند نصب مورد استفاده قرار گیرد را انتخاب کنید.\nاگر \"{{int:config-mssql-windowsauth}}\" را انتخاب می‌کنید، اعتبارات هرآنچه کاربر وب سرور به عنوان آن  مورد استفاده قرار می‌دهد مورد استفاده قرار خواهد گرفت.",
-       "config-mssql-web-auth": "نوع تأییدی را که کارساز وب به‌وسیلهٔ آن برای کارهای معمولی به پایگاه اطلاعاتی متصل خواهد شد را انتخاب کنید.\nاگر «{{int:config-mssql-windowsauth}}» را انتخاب می‌کنید، اعتبارات هرآنچه کاربر وب سرور به عنوان آن  مورد استفاده قرار می‌دهد مورد استفاده قرار خواهد گرفت.",
-       "config-mssql-sqlauth": "تأیید سرور اس‌کیوال",
-       "config-mssql-windowsauth": "تأیید ویندوز",
        "config-site-name": "نام ویکی:",
        "config-site-name-help": "این در نوار عنوان مرورگر و در دیگر جاهای مختلف ظاهر خواهد‌شد.",
        "config-site-name-blank": "نام تارنما را وارد کنید.",
index 8c338f8..b9ecf98 100644 (file)
        "config-db-type": "Tietokannan tyyppi:",
        "config-db-host": "Tietokantapalvelin:",
        "config-db-host-help": "Jos tietokantapalvelimesi sijaitsee eri palvelimella, syötä palvelimen nimi tai ip-osoite tähän.\n\nJos käytössäsi on ulkoinen palveluntarjoaja, pitäisi palvelimen nimen löytyä yrityksen ohjesivuilta.\n\nJos käytät MySQL:ää, ei palvelimen nimi \"localhost\" välttämättä toimi. Tässä tapauksessa koita käyttää osoitetta 127.0.0.1.\n\nJos käytät PostgreSQL:ää jätä tämä kenttä tyhjäksi.",
-       "config-db-host-oracle": "Tietokannan TNS:",
        "config-db-wiki-settings": "Identifioi tämä wiki",
        "config-db-name": "Tietokannan nimi (ei väliviivoja):",
        "config-db-name-help": "Valitse wikiäsi kuvaava nimi.\nNimessä ei saa olla välilyöntejä.\n\nMikäli et pysty itse hallitsemaan tietokantojasi, pyydä palveluntarjoajaasi luomaan tietokanta tai tee se palveluntarjoajasi hallintapaneelissa.",
-       "config-db-name-oracle": "Tietokannan rakenne:",
        "config-db-install-account": "Asennuksessa käytettävä käyttäjätili",
        "config-db-username": "Tietokannan käyttäjätunnus:",
        "config-db-password": "Tietokannan salasana:",
        "config-pg-test-error": "Tietokantaan <strong>$1 ei voida muodostaa yhteyttä</strong>: $2",
        "config-sqlite-dir": "SQLiten datahakemisto:",
        "config-sqlite-dir-help": "SQLite tallentaa kaiken sisällön yhteen tiedostoon.\n\nPalvelimen pitää pystyä kirjoittamaan tietoa hakemistoon asennuksen aikana.\n\nHakemiston <strong>ei</strong> tulisi olla nähtävissä www-selaimella. Siksi hakemisto on eri kuin missä PHP-tiedostot sijaitsevat.\n\nAsennusohjelma luo <code>.htaccess</code>-tiedoston, mutta jos sen luomisessa ilmenee ongelmia joku voi päästä käsiksi tietokantaasi. \nTietokannassa on kaikki sähköpostiosoitteet, salasanat, poistetut versiot ja kaikki muu tieto, joka ei näy wikissä.\n\nSuosittelemme tallentamaan tietokannan eri hakemistoon, esimerkiksi <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Oletus taulukkotila:",
-       "config-oracle-temp-ts": "Väliaikainen taulukkotila:",
        "config-type-mysql": "MariaDB, MySQL tai yhteensopiva",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki tukee seuraavia tietokantajärjestelmiä:\n\n$1\n\nJos et näe tietokantajärjestelmää, jota yrität käyttää, listattuna alhaalla, seuraa yläpuolella olevia ohjeita tuen aktivoimiseksi.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] on MediaWikin ensisijainen kohde ja se on myös parhaiten tuettu. MediaWiki voi myös käyttää [{{int:version-db-mysql-url}} MySQL]- sekä [{{int:version-db-percona-url}} Percona Server]-järjestelmiä, jotka ovat MariaDB-yhteensopivia. ([https://www.php.net/manual/en/mysqli.installation.php Miten käännetään PHP MySQL-tuella])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] on suosittu avoimen lähdekoodin tietokantajärjestelmä vaihtoehtona MySQL:lle. ([https://www.php.net/manual/en/pgsql.installation.php Kuinka käännetään PHP PostgreSQL-tuella])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] on kevyt tietokantajärjestelmä, jota tuetaan hyvin. ([https://www.php.net/manual/en/pdo.installation.php Miten käännetään PHP SQLite-tuella], käyttää PDO:ta)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] on kaupallinen yritystietokanta. ([https://www.php.net/manual/en/oci8.installation.php Kuinka käännetään PHP OCI8-tuella])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] on kaupallinen yritystietokanta Windowsille. ([https://www.php.net/manual/en/sqlsrv.installation.php Miten käännetään PHP SQLSRV-tuella])",
        "config-header-mysql": "MariaDB/MySQL-asetukset",
        "config-header-postgres": "PostgreSQL-asetukset",
        "config-header-sqlite": "SQLite-asetukset",
-       "config-header-oracle": "Oracle-asetukset",
-       "config-header-mssql": "Microsoft SQL Server asetukset",
        "config-invalid-db-type": "Virheellinen tietokantatyyppi",
        "config-missing-db-name": "\"{{int:config-db-name}}\" on pakollinen.",
        "config-missing-db-host": "\"{{int:config-db-host}}\" on pakollinen.",
-       "config-missing-db-server-oracle": "\"{{int:config-db-host-oracle}}\" on pakollinen.",
-       "config-invalid-db-server-oracle": "Virheellinen tietokanta TNS \"$1\".\nKäytä joko \"TNS Name\"- tai \"Easy Connect\" -tekstiä\n([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle metodien nimeäminen]).",
        "config-invalid-db-name": "”$1” ei kelpaa tietokannan nimeksi.\nKäytä ainoastaan kirjaimia (a-z, A-Z), numeroita (0-9), alaviivoja (_) ja tavuviivoja (-).",
        "config-invalid-db-prefix": "”$1” ei kelpaa tietokannan etuliitteeksi.\nKäytä ainoastaan kirjaimia (a-z, A-Z), numeroita (0-9), alaviivoja (_) ja tavuviivoja (-).",
        "config-connection-error": "$1.\n\nTarkista isäntä, käyttäjänimi, salasana ja yritä uudestaan. Jos käytät \"localhost\" tietokannan isäntänä, kokeile käyttää \"127.0.0.1\" sen sijaan (tai toisinpäin).",
        "config-invalid-schema": "Virheellinen skeema MediaWikille \"$1\".\nKäytä pelkkiä ASCII-kirjaimia (a-z, A-Z), numeroita (0-9) ja alaviivoja (_).",
-       "config-db-sys-create-oracle": "Asennusohjelma tukee ainoastaan SYSDBA-tunnuksen käyttämistä uuden tunnuksen luonnissa.",
-       "config-db-sys-user-exists-oracle": "Käyttäjätunnus \"$1\" on jo olemassa. SYSDBA:ta voidaan käyttää vain uuden tunnuksen luontiin!",
        "config-postgres-old": "MediaWiki tarvitsee PostgreSQL:n version $1 tai uudemman. Nykyinen versio on $2.",
-       "config-mssql-old": "Vaaditaan Microsoft SQL Server $1 tai uudempi. Sinulla on käytössä $2.",
        "config-sqlite-name-help": "Valitse nimi, joka yksilöi tämän wikin.\nÄlä käytä välilyöntejä tai viivoja.\nNimeä käytetään SQLite-tietokannan tiedostonimessä.",
        "config-sqlite-mkdir-error": "Virhe luodessa datakansiota \"$1\".\nTarkista sijainti ja yritä uudelleen",
        "config-sqlite-dir-unwritable": "Hakemistoon ”$1” kirjoittaminen epäonnistui.\nMuuta hakemiston käyttöoikeuksia siten, että palvelinohjelmisto voi kirjoittaa siihen ja yritä uudelleen.",
        "config-db-web-no-create-privs": "Tilillä jota käytetään asennuksessa ei ole oikeuksia luoda uutta tiliä.\nTähän määriteltävä tili täytyy olla jo olemassa.",
        "config-mysql-engine": "Tallennusmoottori",
        "config-mysql-innodb": "InnoDB (suositeltu)",
-       "config-mssql-auth": "Varmennuksen tyyppi:",
-       "config-mssql-install-auth": "Valitse varmennuksen tyyppi, jota käytetään yhdistäessä tietokantaan asennuksen aikana.\nJos valitset \"{{int:config-mssql-windowsauth}}\", käytetään verkkopalvelimen käyttäjän kirjautumistietoja.",
-       "config-mssql-web-auth": "Valitse varmennuksen tyyppi, jota verkkopalvelin käyttää yhdistäessään tietokantapalvelimeen wikin tavallisen toiminnan aikana.\nJos valitset \"{{int:config-mssql-windowsauth}}\", käytetään verkkopalvelimen käyttäjän kirjautumistietoja.",
-       "config-mssql-sqlauth": "SQL Server varmennus",
-       "config-mssql-windowsauth": "Windows-varmennus",
        "config-site-name": "Wikin nimi:",
        "config-site-name-help": "Tämä näkyy selaimen otsikkona ja muissa kohdissa.",
        "config-site-name-blank": "Kirjoita sivuston nimi.",
index b07c83e..fddb6a2 100644 (file)
        "config-db-type": "Type de base de données :",
        "config-db-host": "Nom d’hôte de la base de données :",
        "config-db-host-help": "Si votre serveur de base de données est sur un serveur différent, saisissez ici son nom d’hôte ou son adresse IP.\n\nSi vous utilisez un hébergement mutualisé, votre hébergeur doit vous avoir fourni le nom d’hôte correct dans sa documentation.\n\nSi vous utilisez MySQL, « localhost » peut ne pas fonctionner comme nom de serveur. S’il ne fonctionne pas, essayez « 127.0.0.1 » comme adresse IP locale.\n\nSi vous utilisez PostgreSQL, laissez ce champ vide pour vous connecter via un socket Unix.",
-       "config-db-host-oracle": "Nom TNS de la base de données :",
-       "config-db-host-oracle-help": "Entrez un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nom de connexion locale] valide ; un fichier tnsnames.ora doit être visible par cette installation.<br /> Si vous utilisez les bibliothèques clientes version 10g ou plus récentes, vous pouvez également utiliser la méthode de nommage [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifier ce wiki",
        "config-db-name": "Nom de la base de données (sans tirets):",
        "config-db-name-help": "Choisissez un nom qui identifie votre wiki.\nIl ne doit pas contenir d'espaces.\n\nSi vous utilisez un hébergement web partagé, votre hébergeur vous fournira un nom spécifique de base de données à utiliser, ou bien vous permet de créer des bases de données via un panneau de contrôle.",
-       "config-db-name-oracle": "Schéma de base de données :",
-       "config-db-account-oracle-warn": "Il existe trois scénarios pris en charge pour l’installation d'Oracle comme backend de base de données:\n\nSi vous souhaitez créer un compte de base de données dans le cadre de la procédure d’installation, veuillez fournir un compte avec le rôle de SYSDBA comme compte de base de données pour l’installation et spécifier les informations d’identification souhaitées pour le compte d'accès au web, sinon vous pouvez créer le compte d’accès web manuellement et fournir uniquement ce compte (si elle a exigé des autorisations nécessaires pour créer les objets de schéma) ou fournir deux comptes différents, l’un avec les privilèges pour créer et l'autre restreint, pour l’accès web.\n\nUn script pour créer un compte avec des privilèges requis peut être trouvé dans le répertoire « entretien/oracle/ » de cette installation. N’oubliez pas que le fait de l’utilisation d’un compte limité désactive toutes les fonctionnalités d’entretien avec le compte par défaut.",
        "config-db-install-account": "Compte d'utilisateur pour l'installation",
        "config-db-username": "Nom d’utilisateur de la base de données :",
        "config-db-password": "Mot de passe de la base de données :",
        "config-pg-test-error": "Impossible de se connecter à la base de données '''$1''' : $2",
        "config-sqlite-dir": "Dossier des données SQLite :",
        "config-sqlite-dir-help": "SQLite stocke toutes les données dans un fichier unique.\n\nLe répertoire que vous fournissez doit être accessible en écriture par le serveur lors de l'installation.\n\nIl '''ne faut pas''' qu'il soit accessible via le web, c'est pourquoi il n'est pas à l'endroit où sont vos fichiers PHP.\n\nL'installateur écrira un fichier <code>.htaccess</code> en même temps, mais s'il y a échec, quelqu'un peut accéder à votre base de données.\nCela comprend les données des utilisateurs (adresses de courriel, mots de passe hachés) ainsi que des révisions supprimées et d'autres données confidentielles du wiki.\n\nEnvisagez de placer la base de données ailleurs, par exemple dans <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Espace de stockage (''tablespace'') par défaut :",
-       "config-oracle-temp-ts": "Espace de stockage (''tablespace'') temporaire :",
        "config-type-mysql": "MariaDB, MySQL , ou compatible",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki prend en charge ces systèmes de bases de données :\n\n$1\n\nSi vous ne voyez pas le système de base de données que vous essayez d’utiliser ci-dessous, alors suivez les instructions ci-dessus (voir liens) pour activer la prise en charge.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] est le premier choix pour MediaWiki et est le mieux pris en charge. MediaWiki fonctionne aussi avec [{{int:version-db-mysql-url}} MySQL] et [{{int:version-db-percona-url}} Percona Server], qui sont compatibles avec MariaDB. ([https://www.php.net/manual/en/mysqli.installation.php Comment compiler PHP avec la prise en charge de MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] est un système de base de données populaire en ''source ouverte'' qui peut être une alternative à MySQL ([https://www.php.net/manual/en/pgsql.installation.php Comment compiler PHP avec la prise en charge de PostgreSQL]).",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] est un système de base de données léger bien pris en charge ([https://www.php.net/manual/en/pdo.installation.php Comment compiler PHP avec la prise en charge de SQLite], en utilisant PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] est un système commercial de gestion de base de données d’entreprise. ([https://www.php.net/manual/en/oci8.installation.php Comment compiler PHP avec la prise en charge d’OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] est une base de données commerciale d’entreprise pour Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Comment compiler PHP avec la prise en charge de SQLSRV])",
        "config-header-mysql": "Paramètres de MariaDB/MySQL",
        "config-header-postgres": "Paramètres de PostgreSQL",
        "config-header-sqlite": "Paramètres de SQLite",
-       "config-header-oracle": "Paramètres d’Oracle",
-       "config-header-mssql": "Paramètres de Microsoft SQL Server",
        "config-invalid-db-type": "Type de base de données non valide",
        "config-missing-db-name": "Vous devez entrer une valeur pour « {{int:config-db-name}} ».",
        "config-missing-db-host": "Vous devez entrer une valeur pour « {{int:config-db-host}} ».",
-       "config-missing-db-server-oracle": "Vous devez entrer une valeur pour « {{int:config-db-host-oracle}} ».",
-       "config-invalid-db-server-oracle": "Le nom TNS de la base de données (« $1 ») est invalide.\nUtilisez uniquement la chaîne \"TNS Name\" ou \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Méthodes de nommage Oracle])",
        "config-invalid-db-name": "Nom de la base de données invalide (« $1 »).\nUtiliser seulement les lettres ASCII (a-z, A-Z), les chiffres (0-9), les caractères de soulignement (_) et les tirets (-).",
        "config-invalid-db-prefix": "Préfixe de la base de données non valide « $1 ».\nUtiliser seulement les lettres ASCII (a-z, A-Z), les chiffres (0-9), les caractères de soulignement (_) et les tirets (-).",
        "config-connection-error": "$1.\n\nVérifier le nom d’hôte, le nom d’utilisateur et le mot de passe ci-dessous puis réessayer. Si vous utilisez « localhost » comme hôte de base de données, essayez d’utiliser « 127.0.0.1 » à la place (ou inversement).",
        "config-invalid-schema": "Schéma invalide pour MediaWiki « $1 ».\nUtiliser seulement les lettres ASCII (a-z, A-Z), les chiffres (0-9) et les caractères de soulignement (_).",
-       "config-db-sys-create-oracle": "L'installateur ne reconnaît que le compte SYSDBA lors de la création d'un nouveau compte.",
-       "config-db-sys-user-exists-oracle": "Le compte « $1 » existe déjà. Seul SYSDBA peut être utilisé pour créer un nouveau compte.",
        "config-postgres-old": "PostgreSQL $1 ou version ultérieure est requis. Vous avez $2.",
-       "config-mssql-old": "Microsoft SQL Server version $1 ou supérieur est requis. Vous avez la version $2.",
        "config-sqlite-name-help": "Choisir un nom qui identifie votre wiki.\nNe pas utiliser d'espaces ni de traits d'union.\nIl sera utilisé pour le fichier de données SQLite.",
        "config-sqlite-parent-unwritable-group": "Impossible de créer le répertoire de données <nowiki><code>$1</code></nowiki>, parce que le répertoire parent <nowiki><code>$2</code></nowiki> n'est pas accessible en écriture par le serveur Web.\n\nL'installateur a détecté sous quel nom d'utilisateur, le serveur web est actif.\nRendre le répertoire <nowiki><code>$3</code></nowiki> accessible en écriture pour continuer.\nSur un système UNIX/Linux, saisir :\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Impossible de créer le répertoire de données <nowiki><code>$1</code></nowiki>, parce que le répertoire parent <nowiki><code>$2</code></nowiki> n'est pas accessible en écriture par le serveur Web.\n\nL'installateur n'a pas pu déterminer le nom de l'utilisateur sous lequel le serveur s'exécute.\nRendre le répertoire <nowiki><code>$3</code></nowiki> globalement accessible en écriture pour continuer.\nSur un système UNIX/Linux, saisir :\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Moteur de stockage :",
        "config-mysql-innodb": "InnoDB (recommandé)",
        "config-mysql-engine-help": "<strong>InnoDB</strong> est presque toujours la meilleure option, car il prend bien en charge les accès concurrents.\n\n<strong>MyISAM</strong> peut être plus rapide dans les installations monoposte ou en lecture seule.\nLes bases de données MyISAM ont tendance à se corrompre plus souvent que les bases d’InnoDB.",
-       "config-mssql-auth": "Type d’authentification :",
-       "config-mssql-install-auth": "Sélectionner le type d’authentification qui sera utilisé pour se connecter à la base de données pendant le processus d’installation.\nSi vous sélectionnez « {{int:config-mssql-windowsauth}} », les informations d’identification de l’utilisateur faisant tourner le serveur seront utilisées.",
-       "config-mssql-web-auth": "Sélectionner le type d’authentification que le serveur web utilisera pour se connecter au serveur de base de données lors des opérations habituelles du wiki.\nSi vous sélectionnez « {{int:config-mssql-windowsauth}} », les informations d’identification de l’utilisateur sous lequel tourne le serveur web seront utilisées.",
-       "config-mssql-sqlauth": "Authentification de SQL Server",
-       "config-mssql-windowsauth": "Authentification Windows",
        "config-site-name": "Nom du wiki :",
        "config-site-name-help": "Ceci apparaîtra dans la barre de titre du navigateur et en divers autres endroits.",
        "config-site-name-blank": "Entrez un nom de site.",
index 7126f90..20f30a3 100644 (file)
        "config-db-wiki-account": "Compte d'useur pour le fonctionnement normal",
        "config-db-wiki-help": "Entrez le nom d'useur et le mot de passe qui seront usés pour se connecter à la base de données pendant le fonctionnement normal du wiki.\nSi le compte existe pas, et le compte d'installation dispose de privilèges suffisants, ce compte d'useur sera créé avec les privilèges minimum requis pour faire fonctionner le wiki.",
        "config-db-prefix": "Préfixe des tables de la base de données:",
-       "config-oracle-def-ts": "Espace de stockage (''tablespace'') par défaut:",
-       "config-oracle-temp-ts": "Espace de stockage (''tablespace'') temporaire:",
        "config-type-mysql": "MySQL (ou compatible)",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "Paramètres de MySQL",
        "config-header-postgres": "Paramètres de PostgreSQL",
        "config-header-sqlite": "Paramètres de SQLite",
-       "config-header-oracle": "Paramètres d’Oracle",
-       "config-header-mssql": "Paramètres de Microsoft SQL Server",
        "config-invalid-db-type": "Type de base de données non valide",
        "config-sqlite-name-help": "Choisir un nom qui identifie ton wiki.\nFait user pas ni d'espaces ni des traits d'union\nIl va user pour fichier de données SQLite.",
        "config-mysql-innodb": "InnoDB",
index bc35fc2..3c4d602 100644 (file)
        "config-diff3-bad": "GNU diff3 entrovâblo.",
        "config-db-type": "Tipo de bâsa de balyês :",
        "config-db-host": "Hôto de la bâsa de balyês :",
-       "config-db-host-oracle": "TNS de la bâsa de balyês :",
        "config-db-wiki-settings": "Identifiar cél vouiqui",
        "config-db-name": "Nom de la bâsa de balyês :",
-       "config-db-name-oracle": "Plan de bâsa de balyês :",
        "config-db-install-account": "Compto usanciér por l’enstalacion",
        "config-db-username": "Nom d’usanciér de la bâsa de balyês :",
        "config-db-password": "Contresegno de la bâsa de balyês :",
        "config-db-schema": "Plan por MediaWiki",
        "config-pg-test-error": "Empossiblo de sè branchiér a la bâsa de donâs '''$1''' : $2",
        "config-sqlite-dir": "Dossiér de les balyês SQLite :",
-       "config-oracle-def-ts": "Èspâço de stocâjo (''tablespace'') per dèfôt :",
-       "config-oracle-temp-ts": "Èspâço de stocâjo (''tablespace'') temporèro :",
        "config-header-mysql": "Paramètres de MySQL",
        "config-header-postgres": "Paramètres de PostgreSQL",
        "config-header-sqlite": "Paramètres de SQLite",
-       "config-header-oracle": "Paramètres d’Oracle",
        "config-invalid-db-type": "Tipo de bâsa de balyês envalido",
        "config-missing-db-name": "Vos dête buchiér una valor por « Nom de la bâsa de balyês »",
        "config-missing-db-host": "Vos dête buchiér una valor por « Hôto de la bâsa de balyês »",
-       "config-missing-db-server-oracle": "Vos dête buchiér una valor por « TNS de la bâsa de balyês »",
        "config-sqlite-readonly": "Lo fichiér <code>$1</code> est pas accèssiblo en ècritura.",
        "config-regenerate": "Refâre LocalSettings.php →",
        "config-show-table-status": "Falyita de la requéta <code>SHOW TABLE STATUS</code> !",
index c75d129..4394a85 100644 (file)
        "config-db-type": "Tipo de base de datos:",
        "config-db-host": "Servidor da base de datos:",
        "config-db-host-help": "Se o servidor da súa base de datos está nun servidor diferente, escriba o nome do servidor ou o enderezo IP aquí.\n\nSe está usando un aloxamento web compartido, o seu provedor de hospedaxe debe darlle o nome de servidor correcto na súa documentación.\n\nSe está a realizar a instalación nun servidor de Windows con MySQL, o nome \"localhost\" pode non valer como servidor. Se non funcionase, inténteo con \"127.0.0.1\" como enderezo IP local.\n\nSe está usando PostgreSQL, deixe este campo en branco para facer a conexión a través do conectador Unix.",
-       "config-db-host-oracle": "TNS da base de datos:",
-       "config-db-host-oracle-help": "Insira un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nome de conexión local] válido; cómpre que haxa visible un ficheiro tnsnames.ora para esta instalación.<br />Se está a empregar bibliotecas cliente versión 10g ou máis recentes, tamén pode usar o método de atribución de nomes [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identificar o wiki",
        "config-db-name": "Nome da base de datos:",
        "config-db-name-help": "Escolla un nome que identifique o seu wiki.\nNon debe conter espazos.\n\nSe está usando un aloxamento web compartido, o seu provedor de hospedaxe daralle un nome específico para a base de datos ou deixaralle crear unha a través do panel de control.",
-       "config-db-name-oracle": "Esquema da base de datos:",
-       "config-db-account-oracle-warn": "Existen tres escenarios soportados para a instalación de Oracle como fin da base de datos:\n\nSe quere crear unha conta para a base de datos como parte do proceso de instalación, proporcione unha conta co papel SYSDBA e especifique as credenciais desexadas para a conta; senón pode crear a conta manualmente e dar só esa conta (se ten os permisos necesarios para crear os obxectos do esquema) ou fornecer dous contas diferentes, unha con privilexios de creación e outra restrinxida para o acceso á web.\n\nA escritura para crear unha conta cos privilexios necesarios atópase no directorio \"maintenance/oracle/\" desta instalación. Teña en conta que o emprego de contas restrinxidas desactivará todas as operacións de mantemento da conta predeterminada.",
        "config-db-install-account": "Conta de usuario para a instalación",
        "config-db-username": "Nome de usuario da base de datos:",
        "config-db-password": "Contrasinal da base de datos:",
        "config-pg-test-error": "Non se pode conectar coa base de datos <strong>$1</strong>: $2",
        "config-sqlite-dir": "Directorio de datos SQLite:",
        "config-sqlite-dir-help": "SQLite recolle todos os datos nun ficheiro único.\n\nO servidor web debe ter permisos sobre o directorio para que poida escribir nel durante a instalación.\n\nAdemais, o servidor <strong>non</strong> debe ser accesible a través da web, motivo polo que non está no mesmo lugar ca os ficheiros PHP.\n\nAsemade, o programa de instalación escribirá un ficheiro <code>.htaccess</code>, pero se erra alguén pode obter acceso á súa base de datos.\nIsto inclúe datos de usuario (enderezos de correo electrónico, contrasinais codificados), así como revisións borradas e outros datos restrinxidos no wiki.\n\nConsidere poñer a base de datos nun só lugar, por exemplo en <code>/var/lib/mediawiki/oseuwiki</code>.",
-       "config-oracle-def-ts": "Espazo de táboas por defecto:",
-       "config-oracle-temp-ts": "Espazo de táboas temporal:",
        "config-type-mysql": "MariaDB, MySQL ou compatíbel",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki soporta os seguintes sistemas de bases de datos:\n\n$1\n\nSe non ve listado a continuación o sistema de base de datos que intenta usar, siga as instrucións ligadas enriba para activar o soporte.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] é o obxectivo principal para MediaWiki e é o que mellor soportado está. MediaWiki tamén funciona con [{{int:version-db-mysql-url}} MySQL] e [{{int:version-db-percona-url}} Percona Server], que son compatibles con MariaDB. ([https://www.php.net/manual/en/mysqli.installation.php Como compilar PHP con compatibilidade MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] é un sistema de base de datos popular e de código aberto como alternativa a MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Como compilar PHP con compatibilidade PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] é un sistema de base de datos lixeiro moi ben soportado. ([https://www.php.net/manual/en/pdo.installation.php Como compilar o PHP con soporte SQLite], emprega PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] é un sistema comercial de xestión de base de datos a nivel empresarial. ([https://www.php.net/manual/en/oci8.installation.php Como compilar PHP con soporte OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] é un sistema comercial de xestión de base de datos de nivel empresarial para Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Como compilar o PHP con compatibilidade SQLSRV])",
        "config-header-mysql": "Configuración MariaDB/MySQL",
        "config-header-postgres": "Configuración do PostgreSQL",
        "config-header-sqlite": "Configuración do SQLite",
-       "config-header-oracle": "Configuración do Oracle",
-       "config-header-mssql": "Configuración de Microsoft SQL Server",
        "config-invalid-db-type": "Tipo de base de datos incorrecto",
        "config-missing-db-name": "Debe introducir un valor para \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Debe introducir un valor para \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "Debe introducir un valor para \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "O TNS da base de datos, \"$1\", é incorrecto.\nUtilice só \"TNS Name\" ou unha cadea de texto \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm métodos de nomeamento de Oracle])",
        "config-invalid-db-name": "O nome da base de datos, \"$1\", é incorrecto.\nSó pode conter letras ASCII (a-z, A-Z), números (0-9), guións baixos (_) e guións (-).",
        "config-invalid-db-prefix": "O prefixo da base de datos, \"$1\", é incorrecto.\nSó pode conter letras ASCII (a-z, A-Z), números (0-9), guións baixos (_) e guións (-).",
        "config-connection-error": "$1.\n\nComprobe o servidor, nome de usuario e contrasinal que hai a continuación e inténteo de novo.",
        "config-invalid-schema": "O esquema de MediaWiki, \"$1\", é incorrecto.\nSó pode conter letras ASCII (a-z, A-Z), números (0-9) e guións baixos (_).",
-       "config-db-sys-create-oracle": "O programa de instalación soamente soporta o emprego de contas SYSDBA como método para crear unha nova conta.",
-       "config-db-sys-user-exists-oracle": "A conta de usuario \"$1\" xa existe. SYSDBA soamente se pode empregar para a creación dunha nova conta!",
        "config-postgres-old": "Necesítase PostgreSQL $1 ou posterior. Vostede ten a versión $2.",
-       "config-mssql-old": "Necesítase Microsoft SQL Server $1 ou posterior. Vostede ten a versión $2.",
        "config-sqlite-name-help": "Escolla un nome que identifique o seu wiki.\nNon utilice espazos ou guións.\nEste nome será utilizado para o ficheiro de datos SQLite.",
        "config-sqlite-parent-unwritable-group": "Non se puido crear o directorio de datos <code><nowiki>$1</nowiki></code>, porque o servidor web non pode escribir no directorio pai <code><nowiki>$2</nowiki></code>.\n\nO programa de instalación determinou o usuario que executa o seu servidor web.\nPara continuar, faga que se poida escribir no directorio <code><nowiki>$3</nowiki></code>.\nNun sistema Unix/Linux cómpre realizar:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Non se puido crear o directorio de datos <code><nowiki>$1</nowiki></code>, porque o servidor web non pode escribir no directorio pai <code><nowiki>$2</nowiki></code>.\n\nO programa de instalación non puido determinar o usuario que executa o seu servidor web.\nPara continuar, faga que se poida escribir globalmente no directorio <code><nowiki>$3</nowiki></code>.\nNun sistema Unix/Linux cómpre realizar:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Motor de almacenamento:",
        "config-mysql-innodb": "InnoDB (recomendado)",
        "config-mysql-engine-help": "<strong>InnoDB</strong> é case sempre a mellor opción, dado que soporta ben os accesos simultáneos.\n\n<strong>MyISAM</strong> é máis rápido en instalacións de usuario único e de só lectura.\nAs bases de datos MyISAM tenden a se corromper máis a miúdo ca as bases de datos InnoDB.",
-       "config-mssql-auth": "Tipo de autenticación:",
-       "config-mssql-install-auth": "Seleccione o tipo de autenticación que se utilizará para conectarse á base de datos durante o proceso de instalación.\nSe selecciona \"{{int:config-mssql-windowsauth}}\", usaranse as credenciais do usuario co que se está a executar o servidor web.",
-       "config-mssql-web-auth": "Seleccione o tipo de autenticación que utilizará o servidor web para conectarse ao servidor da base de datos durante o funcionamiento normal do wiki.\nSe selecciona \"{{int:config-mssql-windowsauth}}\", usaranse as credenciais do usuario co que se está a executar o servidor web.",
-       "config-mssql-sqlauth": "Autenticación de SQL Server",
-       "config-mssql-windowsauth": "Autenticación de Windows",
        "config-site-name": "Nome do wiki:",
        "config-site-name-help": "Isto aparecerá na barra de títulos do navegador e noutros lugares.",
        "config-site-name-blank": "Escriba o nome do sitio.",
index 3a869cf..ba846e6 100644 (file)
        "config-db-type": "סוג מסד הנתונים:",
        "config-db-host": "שרת מסד הנתונים:",
        "config-db-host-help": "אם שרת מסד הנתונים שלך נמצא על שרת אחר, יש להקליד את שם המחשב או את כתובת ה־IP כאן.\n\nאם זה אירוח משותף, ספק האירוח שלכם אמור לתת לך את שם השרת הנכון במסמכים.\n\nאם זוהי התקנה בשרת Windows שמשתמשת ב־MySQL, השימוש ב־localhost עשוי לא לעבוד. אם הוא לא עובד, יש לנסות את \"127.0.0.1\" בתור כתובת ה־IP המקומית.\n\nאם זה PostgreSQL, תשאירו את השדה הזה ריק כדי להתחבר דרך שקע יוניקס.",
-       "config-db-host-oracle": "TNS של מסד הנתונים:",
-       "config-db-host-oracle-help": "יש להקליד [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm שם חיבור מקומי (Local Connect Name)] תקין; הקובץ tnsnames.ora צריך להיות זמין להתקנה הזאת.<br />\nאם יש פה ב־client libraries 10g או בגרסה חדשה יותר, אפשר להשתמש גם בשיטת מתן השמות [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "זיהוי ויקי זה",
        "config-db-name": "שם מסד הנתונים (ללא מקף):",
        "config-db-name-help": "נא לבחור שם שמזהה את הוויקי שלכם.\nלא צריכים להיות בו רווחים.\n\nאם זהו משתמשים באירוח משותף, ספק האירוח שלכם ייתן לכם שם מסד נתונים מסוים שתוכלו להשתמש בו או יאפשר לכם ליצור מסד נתונים דרך לוח בקרה.",
-       "config-db-name-oracle": "סכמה של מסד נתונים:",
-       "config-db-account-oracle-warn": "קיימים שלושה תרחישים נתמכים עבור התקנת אורקל בתור מסד הנתונים:\n\nאם הרצונך ליצור חשבון מסד נתונים כחלק מתהליך ההתקנה, נא לספק חשבון בעל תפקיד SYSDBA בתור חשבון מסד הנתונים עבור ההתקנה ולציין את האישורים המבוקשים עבור חשבון הגישה לאינטרנט, אחרת ניתן ליצור באופן ידני את חשבון הגישה לאינטרנט, ולספק חשבון זה בלבד (אם יש לו ההרשאות הדרושות ליצירת עצמי סכמה) או לספק שני חשבונות שונים, אחד עם הרשאות יצירה ואחד מוגבלת עבור גישה לאינטרנט.\n\nסקריפט ליצירת חשבון עם ההרשאות הנדרשות ניתן למצוא בתיקייה \"<span dir=\"ltr\">maintenance/oracle/</span>\" של ההתקנה זו. נא לזכור כי שימוש בחשבון מוגבל יגרום להשבתת כל יכולות תחזוקה עם חשבון בררת המחדל.",
        "config-db-install-account": "חשבון משתמש להתקנה",
        "config-db-username": "שם המשתמש במסד הנתונים:",
        "config-db-password": "הססמה במסד הנתונים:",
        "config-pg-test-error": "ההתחברות למסד הנתונים '''$1''' לא מצליחה: $2",
        "config-sqlite-dir": "תיקיית נתונים (data directory) של SQLite:",
        "config-sqlite-dir-help": "SQLite שומר את כל הנתונים בקובץ אחד.\n\nלשרת הווב צריכה להיות הרשאה לכתוב לתיקייה שמוגדרת כאן.\n\nהיא לא צריכה נגישה לכולם דרך האינטרנט – בגלל זה איננו שמים אותה באותו מקום עם קובצי ה־PHP.\n\nתוכנת ההתקנה תכתוב קובץ <code dir=\"ltr\">.htaccess</code> יחד אִתו, אבל אם זה ייכשל, מישהו יוכל להשיג גישה למסד הנתונים שלכם.\nשם נמצא מידע מפורש של משתמשים (כתובות דוא״ל, ססמאות מגובבות) וגם גרסאות מחוקות של דפים ומידע מוגבל אחר.\n\nכדאי לשקול לשים את מסד הנתונים במקום אחר לגמרי, למשל ב־<code dir=\"ltr\">/var/lib/mediawiki/yourwik</code>.",
-       "config-oracle-def-ts": "מרחב טבלאות לפי בררת מחדל (default tablespace):",
-       "config-oracle-temp-ts": "מרחב טבלאות זמני (temporary tablespace):",
        "config-type-mysql": "MariaDB‏, MySQL, או תואם",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "מדיה־ויקי תומכת במערכות מסדי הנתונים הבאות:\n\n$1\n\nאם אינך רואה את מסד הנתונים שלך ברשימה, יש לעקוב אחר ההוראות המקושרות לעיל כדי להפעיל את התמיכה.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] הוא היעד העיקרי עבור מדיה־ויקי ולו התמיכה הטובה ביותר. מדיה־ויקי עובדת גם עם [{{int:version-db-mysql-url}} MySQL] ועם [{{int:version-db-percona-url}} Percona Server], שתואמים ל־MariaDB. (ר׳ [https://www.php.net/manual/en/mysql.installation.php how to compile PHP with MySQL support])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] הוא מסד נתונים נפוץ בקוד פתוח והוא נפוץ בתור חלופה ל־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] הוא מסד נתונים קליל עם תמיכה טובה מאוד. (ר׳ [https://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], משתמש ב־PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] הוא מסד נתונים עסקי מסחרי. (ר׳ [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] הוא מסד נתונים עסקי מסחרי לחלונות. ([https://www.php.net/manual/en/sqlsrv.installation.php How to compile PHP with SQLSRV support])",
        "config-header-mysql": "הגדרות MariaDB/MySQL",
        "config-header-postgres": "הגדרות PostgreSQL",
        "config-header-sqlite": "הגדרות SQLite",
-       "config-header-oracle": "הגדרות Oracle",
-       "config-header-mssql": "הגדרות Microsoft SQL Server",
        "config-invalid-db-type": "סוג מסד הנתונים שגוי",
        "config-missing-db-name": "יש להזין ערך עבור \"{{int:config-db-name}}\".",
        "config-missing-db-host": "יש להכניס ערך לשדה \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "יש להכניס ערך לשדה \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "\"$1\" הוא TNS מסד־נתונים בלתי־‏תקין.\nיש להשתמש ב־\"TNS name\" או במחרוזת \"Easy Connect\" (ר' [http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods])",
        "config-invalid-db-name": "\"$1\" הוא שם מסד נתונים בלתי־תקין.\nיש להשתמש רק באותיות ASCII&rlm; (a עד z&rlm;, A עד Z), סְפָרוֹת (0 עד 9), קווים תחתיים (_) ומינוסים (-).",
        "config-invalid-db-prefix": "\"$1\" היא תחילית מסד נתונים בלתי תקינה.\nיש להשתמש רק באותיות ASCII&rlm; (a עד z&rlm;, A עד Z), סְפָרוֹת (0 עד 9), קווים תחתיים (_) ומינוסים (-).",
        "config-connection-error": "<div dir=\"ltr\">$1.</div>\n\nיש לבדוק את שם השרת, את שם המשתמש ואת הססמה בטופס להלן ולנסות שוב.",
        "config-invalid-schema": "\"$1\" היא סכמה לא תקינה עבור מדיה־ויקי.\nיש להשתמש רק באותיות ASCII&rlm; (a עד z&rlm;, A עד Z), סְפָרוֹת (0 עד 9) וקווים תחתיים (_).",
-       "config-db-sys-create-oracle": "תוכנית ההתקנה תומכת רק בשימוש בחשבון SYSDBA ליצירת חשבון חדש.",
-       "config-db-sys-user-exists-oracle": "חשבון המשתמש \"$1\" כבר קיים. SYSDBA יכול לשמש רק ליצירת חשבון חדש!",
        "config-postgres-old": "נדרש PostgreSQL $1 או גרסה חדשה יותר, הגרסה הנוכחית שלכם היא $2.",
-       "config-mssql-old": "חובה להשתמש ב־Microsoft SQL Server מגרסה $1 או גרסה חדשה יותר. הגרסה שלך היא $2.",
        "config-sqlite-name-help": "יש לבחור בשם שמזהה את הוויקי שלכם.\nאין להשתמש ברווחים או במינוסים.\nזה יהיה שם קובץ הנתונים ל־SQLite.",
        "config-sqlite-parent-unwritable-group": "לא ניתן ליצור את תיקיית הנתונים <code><nowiki>$1</nowiki></code>, כי לשָׁרַת הווב אין הרשאות לכתוב לתיקיית האם <code><nowiki>$2</nowiki></code> .\n\nתוכנת ההתקנה זיהתה את החשבון שתחתיו רץ שרת הווב שלכם.\nיש לאפשר לשָׁרַת הווב לכתוב לתיקייה <code><nowiki>$3</nowiki></code>.\nבמערכת Unix/Linux יש לכתוב:\n\n<div dir=\"ltr\"><pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre></div>",
        "config-sqlite-parent-unwritable-nogroup": "לא ניתן ליצור את תיקיית הנתונים <code><nowiki>$1</nowiki></code>, כי לשָׁרַת הווב אין הרשאות לכתוב לתיקיית האם <code><nowiki>$2</nowiki></code>.\n\nתוכנת ההתקנה לא זיהתה את החשבון שתחתיו רץ שרת הווב שלכם.\nיש לאפשר לכל החשבונות לכתוב לתיקייה <code><nowiki>$3</nowiki></code> כדי להמשיך.\nבמערכת Unix/Linux יש לכתוב:\n\n<div dir=\"ltr\"><pre>cd $2\nmkdir $3\nchmod a+w $3</pre></div>",
        "config-mysql-engine": "מנוע האחסון:",
        "config-mysql-innodb": "InnoDB (מומלץ)",
        "config-mysql-engine-help": "'''InnoDB''' היא כמעט תמיד האפשרות הטובה ביותר, כי במנוע הזה יש תמיכה טובה ביותר בעיבוד מקבילי.\n\n'''MyISAM''' עשוי להיות בהתקנות שמיועדות למשתמש אחד ולהתקנות לקריאה בלבד.\nמסדי נתונים עם MyISAM נוטים להיהרס לעתים קרובות יותר מאשר מסדי נתונים עם InnoDB.",
-       "config-mssql-auth": "סוג אימות:",
-       "config-mssql-install-auth": "נא לבחור את סוג האימות שישמש להתחברות למסד הנתונים בזמן תהליך ההתקנה. בחירה ב־\"{{int:config-mssql-windowsauth}}\" תשתמש בהרשאות של החשבון שמריץ את השרת הנוכחי.",
-       "config-mssql-web-auth": "נא לבחור את סוג האימות שישמש את השרת להתחברות למסד הנתונים בזמן הריצה הרגילה של הוויקי.\nבחירה ב־\"{{int:config-mssql-windowsauth}}\" תשתמש בהרשאות של החשבון שמריץ את השרת הנוכחי.",
-       "config-mssql-sqlauth": "SQL Server Authentication",
-       "config-mssql-windowsauth": "Windows Authentication",
        "config-site-name": "שם הוויקי:",
        "config-site-name-help": "זה יופיע בשורת הכותרת של הדפדפן ובמקומות רבים אחרים.",
        "config-site-name-blank": "נא להזין שם לאתר.",
index 90b11a9..9141611 100644 (file)
        "config-using-32bit": "<विशेष>चेतावनी:</विशेष> आपका सिस्टम 32-बिट पूर्णांक के साथ चल रहा है यह [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit विवेचित नहीं है]।",
        "config-db-type": "डेटाबेस प्रकार:",
        "config-db-host": "डेटाबेस होस्ट:",
-       "config-db-host-oracle": "डेटाबेस टीएनएस:",
        "config-db-wiki-settings": "इस विकि को पहचानें",
        "config-db-name": "डेटाबेस का नाम:",
        "config-db-install-account": "इसे स्थापित करने हेतु सदस्य खाता",
        "config-db-username": "डेटाबेस सदस्यनाम:",
        "config-db-password": "डेटाबेस पासवर्ड:",
        "config-db-port": "डेटाबेस पोर्ट:",
-       "config-type-mssql": "माइक्रोसॉफ़्ट एसक्यूएल सर्वर",
        "config-invalid-db-type": "अमान्य डेटाबेस प्रकार",
        "config-regenerate": "LocalSettings.php फिर से निर्मित करें →",
        "config-db-web-account": "वेब पहुँच हेतु डेटाबेस खाता",
        "config-mysql-innodb": "इनोडीबी",
-       "config-mssql-auth": "प्रमाणन प्रकार:",
-       "config-mssql-sqlauth": "SQL सर्वर प्रमाणन",
        "config-site-name": "विकि का नाम:",
        "config-site-name-blank": "एक साइट का नाम लिखें",
        "config-project-namespace": "प्रकल्प नामस्थान:",
index 1914600..5aeb9d9 100644 (file)
        "config-db-type": "Datebanksystem:",
        "config-db-host": "Datebankserver:",
        "config-db-host-help": "Soweit sich die Datebank uff en annre Server befindt, ist hier der Servernoome orrer die entsprechende IP-Adresse oonzugewe.\n\nSoweit en gemeinschaftlich genutzter Server verwendt weard, sollt der Hoster den zutreffend Servernoomen in seiner Dokumentation oongeb hoon.\n\nSoweit uff enem Windows-Server installiert und MySQL genutzt weard, funktioniert der Servername „localhost“ voaraussichtlich net. Wenn net, sollte „127.0.0.1“ orrer die lokale IP-Adress oongeb sin.\n\nSoweit PostgresQL benutzt weard, muss das Feld/Campo leer geloss sin, um üwer en Unix-Socket zu verbinne.",
-       "config-db-host-oracle": "Datebank-TNS:",
-       "config-db-host-oracle-help": "En gültiche [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm „Local Connect“-Namen] angeben. Die „tnsnames.ora“-Datei muss von die Installation erkannt werre könne.<br />Sofern die Client-Bibliotheke für Version 10g orrer neier verwennet weare, kann ooch [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm „Easy Connect“] zu der Noomensgebung benutzt sin.",
        "config-db-wiki-settings": "Bitte Date zu der indeitiche Identifikatio von das Wiki oongewe",
        "config-db-name": "Datebanksystem:",
        "config-db-name-help": "Bitte en Noome oongewe, mit dem das Wiki identifiziert werre kann.\nDobei sollt ken Leerzeiche verwennet sin.\n\nSoweit en gemeinschaftlich genutzter Server verwennet weard, sollt der Hoster den Datebanknoome oongegewe orrer awer die Erstellung von en Datebank üwer en entsprechendes Interface gestattet hoon.",
-       "config-db-name-oracle": "Datebankschema:",
-       "config-db-account-oracle-warn": "Es gebt drei von MediaWiki unnerstützte Möchlichkeite Oracle als Datebank inzurichte:\n\nSoweit das Datebankbenutzerkonto im Moment (während des) von dem Installationsvoargang erstellt werre soll, muss en Datebankbenutzerkonto mit der SYSDBA-Berechtichung zusammer mit den entsprechende Onnmeldeinformatione oongeb sin, mit dem dann üwer das Web uff die Datebank zugegriff sin kann. Alternativ kann man ooch ledichlich en enzelnes manuell oongelechtes Datebankbenutzerkonto oongewe, mit dem üwer das Web uff die Datebank zugegriff werre kann, soweit das üwer die Berechtichung zur Erstellung von Datebankscheme verfücht. Zudem ist es möchlich zwooi Datebankbenutzerkonte oonzugew von dene enes die Berechtichung zu der Erstellung von Datebankscheme hot und das annere, um mit ihm üwer das Web uff die Datebank zuzugreife.\n\nEn Skript zu dem Oonlehn von en Datebankbenutzerkonto mit den notwendiche Berechtichunge findt man unner dem Pad „…/maintenance/oracle/“ von der MediaWiki-Installation. Das ist dobei zu bedenke, dass die Verwennung von en Datebankbenutzerkonto mit beschränkte Berechtichunge die Nutzung von der Wartungsfunktione für das Standarddatebankbenutzerkonto deaktiviert.",
        "config-db-install-account": "Benutzerkonto für die Installation",
        "config-db-username": "Der Datebankbenutzer sein Noome:",
        "config-db-password": "Der Datebankbenutzer sei Passwort:",
        "config-pg-test-error": "Do kann ken Verbinnung zur Datebank '''$1''' heargestellt sin: $2",
        "config-sqlite-dir": "SQLite-Dateverzeichnis:",
        "config-sqlite-dir-help": "SQLite speichert alle Date in en enziche Datei.\n\nDas für sie voargesiehn Verzeichnis muss (während des) im Momento von dem Installationsvoargang beschreibbar orrer beschrib fähich sin.\n\nDas sollt '''net''' üwer das Web zugänglich sin, was der Grund ist, warum die Datei net dort abgeleht weard, wo sich die PHP-Dateie befinne.\n\nDas Installationsprogramm weard mit der Datei zusammer en zusätzliche <code>.htaccess</code>-Datei erstelle. Soweit das scheitert, könne Dritte uff die Datedatei zugreife.\nDas umfasst die Nutzerdate (E-Mail-Adresse, Passwörter, und so weiter) wie ooch gelöschte Seiteversione und annere vertrauliche Date, die im Wiki gespeichert sind.\n\nTue konsideriere, erwäch die Datedatei an en gänz anner Platz abzulehn, zum beispiel im Verzeichnis <code>./var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Standardtabelleraum:",
-       "config-oracle-temp-ts": "Temporärer Tabelleraum:",
        "config-type-mysql": "MySQL (orrer kompatible Datebanksysteme)",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki unnerstützt die follichenne Datebanksysteme:\n\n$1\n\nSoweit net das Datebanksystem oongezeicht weard, das verwennt werre soll, gebt das uwe en Link zu der Oonleitung mit Informatione, wie das aktiviert sin kann.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] ist das von MediaWiki primär unterstützte Datebanksystem. MediaWiki funktioniert ooch mit [{{int:version-db-mariadb-url}} MariaDB] und [{{int:version-db-percona-url}} Percona Server], die MySQL-kompatibel sind. ([https://www.php.net/manual/en/mysqli.installation.php Oonleitung zur Kompilierung von PHP mit MySQL-Unnerstützung] [englisch Sproch])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] ist en beliebtes Open-Source-Datebanksystem und ein Alternativ zu MySQL. Es gibt awer enche klenre Implementierungsfehler, so dass von der Nutzung in ener Produktivumgebung abgerat weard. ([https://www.php.net/manual/en/pgsql.installation.php Oonnleitung zur Kompilierung von PHP mit PostgreSQL-Unterstützung])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] ist en verschlanktes Datebanksystem, das ooch gut unnerstützt weard ([http://www.php.net/manual/de/pdo.installation.php Oonleitung zur Kompilierung von PHP mit SQLite-Unterstützung], verwennt PHP Data Objects (PDO))",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] ist en kommerzielle Unnernehmensdatebank ([http://www.php.net/manual/en/oci8.installation.php Oonleitung zur Kompilierung von PHP mit OCI8-Unnerstützung (en)])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] ist en gewerbliche Unnernehmensdatebank für Windows. ([Config-dbsupport-oracle/manual/de/sqlsrv.installation.php Oonleitung zur Kompilierung von PHP mithilfe SQLSRV-Unnerstützung])",
        "config-header-mysql": "MySQL-Instellunge",
        "config-header-postgres": "PostgreSQL-Instellunge",
        "config-header-sqlite": "SQLite-Instellunge",
-       "config-header-oracle": "Oracle-Instellunge",
-       "config-header-mssql": "Instellunge von Microsoft SQL Server",
        "config-invalid-db-type": "Unzulässiges Datebanksystem",
        "config-missing-db-name": "Bei \"{{int:config-db-name}}\" muss en Weart oongeb sin.",
        "config-missing-db-host": "Bei \"{{int:config-db-host}}\" muss en Weart oongeb sin.",
-       "config-missing-db-server-oracle": "Für das \"{{int:config-db-host-oracle}}\" muss en Weart ingeb sin.",
-       "config-invalid-db-server-oracle": "Ungültiches Datebank-TNS „$1“.\nEntweder „TNS Noome“ orrer ene „Easy Connect“-Zeichefolliche verwenne ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle-Benennungsmethode])",
        "config-invalid-db-name": "Ungülticher Datebankname „$1“.\nDo deerfe nuar ASCII-codierte Buchstoobe (a-z, A-Z), Zooahle (0-9), Unner- (_) sowie Binnestriche (-) verwennt sin.",
        "config-invalid-db-prefix": "Ungülticher Datebanktabellepräfix „$1“.\nEs dürfe nuar ASCII-codierte Buchstoobe (a-z, A-Z), Zoohle (0-9), Unner- (_) sowie Binnestriche (-) verwennt sin.",
        "config-connection-error": "$1.\n\nBitte unne oongeb Servernoome, Benutzernoome sowie das Passwort üwerprüfe und es dann erneit versuche.",
        "config-invalid-schema": "Ungültiches Dateschema für MediaWiki „$1“.\nEs dürfe nuar ASCII-codierte Buchstoobe (a-z, A-Z), Zoohle (0-9) und Unnerstriche (_) verwennt sin.",
-       "config-db-sys-create-oracle": "Das Installationsprogramm unnerstützt nuar die Verwennung von en Datebankbenutzerkonto mit SYSDBA-Berechtichung zum oonlehn von en neie Datebankbenutzerkonto.",
-       "config-db-sys-user-exists-oracle": "Das Datebankbenutzerkonto „$1“ ist schoon voarhand. En Datebankbenutzerkontos mit SYSDBA-Berechtichung kann nuar zum oonlehn von en neie Datebankbenutzerkonto benutzt sin.",
        "config-postgres-old": "MySQL $1 orrer höcher weard benöticht. MySQL $2 ist momentan voarhand.",
-       "config-mssql-old": "Es weard Microsoft SQL Server $1 orrer später benöticht. Dein Version ist $2.",
        "config-sqlite-name-help": "Bitte en Noome oongewe, mit dem das Wiki identifiziert werre kann.\nDobei bitte ken Leerzeiche orrer Binnestriche verwenne.\nDer Noome weard für die SQLite-Datedateinoome benutzt.",
        "config-sqlite-parent-unwritable-group": "Das Dateverzeichnis <code><nowiki>$1</nowiki></code> kann net erzeicht werre, weil das üwergeoordnete Verzeichnis <code><nowiki>$2</nowiki></code> net für den Webserver beschreibbar ist.\n\nDas Installationsprogramm konnt den Benutzer bestimme, mit dem Webserver ausgeführt weard.\nSchreibzugriff uff das <code><nowiki>$3</nowiki></code>-Verzeichnis muss für den ermöglicht werre, so das den Installationsvoargang fortgesetz sin kann.\n\nUff enem Unix- orrer Linux-System:\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Das Dateverzeichnis <code><nowiki>$1</nowiki></code> kann net erzeicht sin, weil das üwergeordnete Verzeichnis <code><nowiki>$2</nowiki></code> net für den Webserver beschreibbar ist.\n\nDas Installationsprogramm konnt den Benutzer bestimmen, mit dem Webserver ausgeführt weard.\nSchreibzugriff uff das <code><nowiki>$3</nowiki></code>-Verzeichnis muss global für den und annre Benutzer ermöglicht sin, so das den Installationsvoargang fortgesetzt sin kann.\n\nUff enem Unix- orrer Linux-System:\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Speicher-Engine:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-engine-help": "'''InnoDB''' ist nächst immer die bessre Wähl, weil es gleichzeitiche Zugriffe gut unnerstützt.\n\n'''MyISAM''' ist in Enzelnutzerumgebunge sowie bei schreibgeschützte Wikis schneller.\nBei MyISAM-Datebanke treten tendenziell häuficher Fehler uff als bei InnoDB-Datebanke.",
-       "config-mssql-auth": "Authentifikationstyp:",
-       "config-mssql-install-auth": "Wähl den Authentifikationstyp aus, der zur Verbinnung mit der Datebank während von der Installationsprozesses verwennt weard.\nFalls du „{{int:config-mssql-windowsauth}}“ auswählst, werre die Oonmeldeinformatione von en beliebiche Benutzer verwennt, wo den Webserver ausführt.",
-       "config-mssql-web-auth": "Wähl den Authentifikationstyp aus, der vom Webserver zur Verbinnung mit dem Datebankserver während / im Verloof von der gewöhnliche Betrieb von der Wiki verwennt weard.\nFalls du „{{int:config-mssql-windowsauth}}“ auswählst, werre die Oonmeldeinformatione von en beliebiche Benutzer verwennt, wo den Webserver ausführt.",
-       "config-mssql-sqlauth": "SQL-Server-Authentifikation",
-       "config-mssql-windowsauth": "Windows-Authentifikation",
        "config-site-name": "Der Wiki sein Noome:",
        "config-site-name-help": "Er weard in der Titelleiste von der Browser, wie ooch verschiedne annre Stelle, benutzt.",
        "config-site-name-blank": "Der Wiki sein Noome oongewe.",
index 5a5f109..59f56b5 100644 (file)
        "config-using-uri": "Serwerowy URL \"<nowiki>$1$2</nowiki>\" so wužiwa.",
        "config-db-type": "Typ datoweje banki:",
        "config-db-host": "Serwer datoweje banki:",
-       "config-db-host-oracle": "Datowa banka TNS:",
        "config-db-wiki-settings": "Tutón wiki identifikować",
        "config-db-name": "Mjeno datoweje banki:",
-       "config-db-name-oracle": "Šema datoweje banki:",
        "config-db-install-account": "Wužiwarske konto za instalaciju",
        "config-db-username": "Wužiwarske mjeno datoweje banki:",
        "config-db-password": "Hesło datoweje banki:",
        "config-db-schema-help": "Tuta šema da so zwjetša derje wužiwać.\nZměń ju jenož, jeli su přeswědčiwe přičiny za to.",
        "config-pg-test-error": "Zwisk z datowej banku '''$1''' móžno njeje: $2",
        "config-sqlite-dir": "Zapis SQLite-datow:",
-       "config-oracle-def-ts": "Standardny tabelowy rum:",
-       "config-oracle-temp-ts": "Nachwilny tabelowy rum:",
        "config-type-mysql": "MySQL (abo kompatibelny)",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] je primarny cil za MediaWiki a podpěruje so najlěpje. MediaWiki funguje tež z [{{int:version-db-mariadb-url}} MariaDB] a [{{int:version-db-percona-url}} Percona Server], kotrejž stej kompatibelnej z MySQL. ([https://www.php.net/manual/en/mysqli.installation.php Nawod ke kompilowanju  PHP z  MySQL-podpěru])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] je popularny system datoweje banki zjawneho žórła jako alternatiwa k MySQL. Móhło hišće někotre zmylki eksistować, a njeporuča so jón w produktiwnej wokolinje wužiwać. ([https://www.php.net/manual/en/pgsql.installation.php Nawod za kompilowanje PHP z podpěru PostgreSQL])",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] je komercielna předewzaćelska datowa banka. ([http://www.php.net/manual/en/oci8.installation.php Nawod za kompilowanje PHP z OCI8-podpěru])",
        "config-header-mysql": "Nastajenja MySQL",
        "config-header-postgres": "Nastajenja PostgreSQL",
        "config-header-sqlite": "Nastajenja SQLite",
-       "config-header-oracle": "Nastajenja Oracle",
        "config-invalid-db-type": "Njepłaćiwy typ datoweje banki",
        "config-missing-db-name": "Dyrbiš hódnotu za \"Mjeno datoweje banki\" zapodać",
        "config-missing-db-host": "Dyrbiš hódnotu za \"Database host\" zapodać",
-       "config-missing-db-server-oracle": "Dyrbiš hódnotu za \"Database TNS\" zapodać",
-       "config-invalid-db-server-oracle": "Njepłaćiwa datowa banka TNS \"$1\".\nWužij pak \"TNS Name\" pak znamješkowy rjećazk \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle - pomjenowanske metody])",
        "config-invalid-db-name": "Njepłaćiwe mjeno \"$1\" datoweje banki.\nWužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9),a podsmužki (_) a wjazawki (-).",
        "config-invalid-db-prefix": "Njepłaćiwy prefiks \"$1\" datoweje banki.\nWužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9), podsmužki (_) a wjazawki (-).",
        "config-connection-error": "$1.\n\nSkontroluj serwer, wužiwarske a hesło a spytaj hišće raz.",
        "config-invalid-schema": "Njepłaćiwe šema za MediaWiki \"$1\".\nWužij jenož pismiki ASCII (a-z, A-Z), ličby (0-9) a podsmužki (_).",
-       "config-db-sys-create-oracle": "Instalaciski program podpěruje jenož wužiwanje SYSDBA-konta za zakoženje noweho konta.",
-       "config-db-sys-user-exists-oracle": "Wužiwarske konto \"$1\" hižo eksistuje. SYSDBA hodźi so jenož za załoženje noweho konta wužiwać!",
        "config-postgres-old": "PostgreSQL $1 abo nowši trěbny, maš $2.",
        "config-sqlite-name-help": "Wubjer mjeno, kotrež twój wiki identifikuje.\nNjewužij mjezery abo wjazawki.\nTo budźe so za mjeno dataje SQLite-datow wužiwać.",
        "config-sqlite-mkdir-error": "Zmylk při wutworjenju datoweho zapisa \"$1\".\nSkontroluj městno a spytaj hišće raz.",
index fed6854..9226e61 100644 (file)
        "config-db-type": "Adatbázis típusa:",
        "config-db-host": "Adatbázis hosztneve:",
        "config-db-host-help": "Ha az adatbázisszerver másik szerveren található, add meg a hosztnevét vagy az IP-címét.\n\nHa megosztott webtárhelyet használsz, a szolgáltató dokumentációjában megtalálható a helyes hosztnév.\n\nHa Windows-alapú szerverre telepítesz, és MySQL-t használsz, a „localhost” nem biztos, hogy működni fog. Ha így van, próbáld meg a „127.0.0.1” helyi IP-cím használatát.\n\nHa PostgreSQL-t használsz, hagyd ezt a mezőt üresen a Unix-socketon keresztül történő csatlakozáshoz.",
-       "config-db-host-oracle": "Adatbázis TNS:",
        "config-db-wiki-settings": "A wiki azonosítása",
        "config-db-name": "Adatbázisnév:",
        "config-db-name-help": "Válassz egy nevet a wiki azonosítására.\nNe tartalmazzon szóközt.\n\nHa megosztott webtárhelyet használsz, a szolgáltatód vagy megadja a használandó adatbázisnevet, vagy te magad hozhatsz létre adatbázisokat egy vezérlőpulton keresztül.",
-       "config-db-name-oracle": "Adatbázisséma:",
-       "config-db-account-oracle-warn": "Oracle adatbázisba való telepítésnek három támogatott módja van:\n\nHa a telepítési folyamat során adatbázisfiókot szeretnél létrehozni, akkor egy olyan fiókot kell használnod, mely rendelkezik SYSDBA jogosultsággal, majd meg kell adnod a létrehozandó, webes hozzáféréshez használt fiók adatait. Emellett a fiók kézzel is létrehozható, ekkor ennek az adatait kell megadni (a fióknak rendelkeznie kell megfelelő jogosul adatbázis-objektumok létrehozásához), vagy megadhatsz két fiókot: egyet a létrehozáshoz szükséges jogosultságokkal, és egy korlátozottat a webes hozzáféréshez.\n\nA megfelelő jogosultságokkal rendelkező fiók létrehozásához használható szkript a szoftver „maintenance/oracle/” könyvtárában található. Ne feledd, hogy korlátozott fiók használatakor az alapértelmezett fiókkal nem végezhetőek el a karbantartási műveletek.",
        "config-db-install-account": "A telepítéshez használt felhasználói fiók adatai",
        "config-db-username": "Adatbázis-felhasználónév:",
        "config-db-password": "Adatbázisjelszó:",
        "config-pg-test-error": "Nem sikerült csatlakozni a(z) '''$1''' adatbázishoz: $2",
        "config-sqlite-dir": "SQLite-adatkönyvtár:",
        "config-sqlite-dir-help": "Az SQLite minden adatot egyetlen fájlban tárol.\n\nA megadott könyvtárban írási jogosultsággal kell rendelkeznie a webszervernek.\n\n'''Nem''' szabad elérhetőnek lennie weben keresztül, ezért nem rakjuk oda, ahol a PHP-fájljaid vannak.\n\nA telepítő készít egy <code>.htaccess</code> fájlt az adatbázis mellé, azonban ha valamilyen okból nem sikerül, akkor akárki hozzáférhet a teljes adatbázisodhoz. Ez a felhasználók adatai (e-mail címek, jelszók hashei) mellett a törölt változatokat és más, korlátozott hozzáférésű információkat is tartalmaz.\n\nFontold meg az adatbázis más helyre történő elhelyezését, például a <code>/var/lib/mediawiki/tewikid</code> könyvtárba.",
-       "config-oracle-def-ts": "Alapértelmezett táblatér:",
-       "config-oracle-temp-ts": "Ideiglenes táblatér:",
        "config-type-mysql": "MySQL (vagy kompatibilis)",
-       "config-type-mssql": "Microsoft SQL Szerver",
        "config-support-info": "A MediaWiki a következő adatbázisrendszereket támogatja:\n\n$1\n\nHa az alábbi listán nem találod azt a rendszert, melyet használni szeretnél, a fenti linken található instrukciókat követve engedélyezheted a támogatását.",
        "config-dbsupport-mysql": "* A [{{int:version-db-mysql-url}} MySQL] a MediaWiki elsődleges célpontja, így a legjobban támogatott. A MediaWiki elfut [{{int:version-db-mariadb-url}} MariaDB-n] és [{{int:version-db-percona-url}} Percona Serveren] is, mivel ezek MySQL-kompatibilisek. ([https://www.php.net/manual/en/mysql.installation.php Hogyan fordítható a PHP MySQL-támogatással])",
        "config-dbsupport-postgres": "* A [{{int:version-db-postgres-url}} PostgreSQL] népszerű, nyílt forráskódú adatbázisrendszer, a MySQL alternatívája. ([https://www.php.net/manual/en/pgsql.installation.php Hogyan fordítható a PHP PostgreSQL-támogatással])",
        "config-dbsupport-sqlite": "* Az [{{int:version-db-sqlite-url}} SQLite] egy könnyű, nagyon jól támogatott adatbázisrendszer. ([http://www.php.net/manual/en/pdo.installation.php Hogyan fordítható a PHP SQLite-támogatással], PDO-t használ)",
-       "config-dbsupport-oracle": "* Az [{{int:version-db-oracle-url}} Oracle] kereskedelmi, vállalati adatbázisrendszer. ([http://www.php.net/manual/en/oci8.installation.php Hogyan fordítható a PHP OCI8-támogatással])",
-       "config-dbsupport-mssql": "* A [{{int:version-db-mssql-url}} Microsoft SQL Server] kereskedelmi, vállalati adatbázisrendszer. ([https://www.php.net/manual/en/sqlsrv.installation.php Hogyan fordítható a PHP SQLSRV-támogatással])",
        "config-header-mysql": "MySQL-beállítások",
        "config-header-postgres": "PostgreSQL-beállítások",
        "config-header-sqlite": "SQLite-beállítások",
-       "config-header-oracle": "Oracle-beállítások",
-       "config-header-mssql": "Microsoft SQL Server beállítások",
        "config-invalid-db-type": "Érvénytelen adatbázistípus",
        "config-missing-db-name": "Meg kell adnod a(z) „{{int:config-db-name}}” értékét.",
        "config-missing-db-host": "Meg kell adnod az „{{int:config-db-host}}” értékét.",
-       "config-missing-db-server-oracle": "Meg kell adnod az „{{int:config-db-host-oracle}}” értékét.",
-       "config-invalid-db-server-oracle": "Érvénytelen adatbázis TNS: „$1”\nHasználd a „TNS Name” vagy az Easy Connect” sztringet!\n([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]).",
        "config-invalid-db-name": "Érvénytelen adatbázisnév: „$1”.\nCsak ASCII-karakterek (a-z, A-Z), számok (0-9), alulvonás (_) és kötőjel (-) használható.",
        "config-invalid-db-prefix": "Érvénytelen adatbázisnév-előtag: „$1”.\nCsak ASCII-karakterek (a-z, A-Z), számok (0-9), alulvonás (_) és kötőjel (-) használható.",
        "config-connection-error": "$1.\n\nEllenőrizd a hosztot, felhasználónevet és jelszót, majd próbáld újra.",
        "config-invalid-schema": "Érvénytelen MediaWiki-séma: „$1”.\nCsak ASCII-karakterek (a-z, A-Z), számok (0-9) és alulvonás (_) használható.",
-       "config-db-sys-create-oracle": "A telepítő csak a SYSDBA fiókkal tud új felhasználói fiókot létrehozni.",
-       "config-db-sys-user-exists-oracle": "Már létezik „$1” nevű felhasználói fiók. A SYSDBA csak új fiók létrehozására használható!",
        "config-postgres-old": "A PostgreSQL $1 vagy újabb verziója szükséges, a rendszeren $2 van.",
-       "config-mssql-old": "Microsoft SQL Server $1 vagy későbbi szükséges. Te verziód: $2.",
        "config-sqlite-name-help": "Válassz egy nevet a wiki azonosítására.\nNe tartalmazzon szóközt vagy kötőjelet.\nEz lesz az SQLite-adatfájl neve.",
        "config-sqlite-parent-unwritable-group": "Nem hozható létre a(z) <code><nowiki>$1</nowiki></code> adatkönyvtár, mert a szülőkönyvtárba (<code><nowiki>$2</nowiki></code>) nem írhat a webszerver.\n\nA telepítő megállapította, hogy mely felhasználó futtatja a webszervert.\nA folytatáshoz tedd írhatóvá a(z) <code><nowiki>$3</nowiki></code> könyvtárat.\nUnix/Linux rendszeren tedd a következőt:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Nem lehet létrehozni az adatok tárolásához szükséges <code><nowiki>$1</nowiki></code> könyvtárat, mert a webszerver nem írhat a szülőkönyvtárba (<code><nowiki>$2</nowiki></code>).\n\nA telepítő nem tudta megállapíteni, hogy melyik felhasználói fiókon fut a webszerver.\nA folytatáshoz tedd írhatóvá ezen fiók (és más fiókok!) számára a következő könyvtárat: <code><nowiki>$3</nowiki></code>.\nUnix/Linux rendszereken tedd a következőt:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Tárolómotor:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-engine-help": "A legtöbb esetben az '''InnoDB''' a legjobb választás, mivel megfelelően támogatja a párhuzamosságot.\n\nA '''MyISAM''' gyorsabb megoldás lehet egyfelhasználós vagy csak olvasható környezetekben, azonban a MyISAM-adatbázisok sokkal gyakrabban sérülnek meg, mint az InnoDB-adatbázisok.",
-       "config-mssql-auth": "Hitelesítés típusa:",
-       "config-mssql-sqlauth": "SQL Server hitelesítés",
-       "config-mssql-windowsauth": "Windows hitelesítés",
        "config-site-name": "A wiki neve:",
        "config-site-name-help": "A böngésző címsorában és még számos más helyen jelenik meg.",
        "config-site-name-blank": "Add meg az oldal nevét.",
index 9e08055..eae79b0 100644 (file)
        "config-db-type": "Typo de base de datos:",
        "config-db-host": "Servitor de base de datos:",
        "config-db-host-help": "Si tu servitor de base de datos es in un altere servitor, entra hic le nomine o adresse IP del servitor.\n\nSi tu usa un servitor web usate in commun, tu providitor deberea dar te le correcte nomine de servitor in su documentation.\n\nSi tu usa MySQL, le nomine \"localhost\" possibilemente non functiona como nomine de servitor. In tal caso, essaya \"127.0.0.1\", i.e. le adresse IP local.\n\nSi tu usa PostgreSQL, lassa iste campo vacue pro connecter via un \"socket\" de Unix.",
-       "config-db-host-oracle": "TNS del base de datos:",
-       "config-db-host-oracle-help": "Entra un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nomine Local Connect] valide; un file tnsnames.ora debe esser visibile a iste installation.<br />Si tu usa bibliothecas de cliente 10g o plus recente, tu pote anque usar le methodo de nomination [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identificar iste wiki",
        "config-db-name": "Nomine del base de datos (sin tractos de union):",
        "config-db-name-help": "Selige un nomine que identifica tu wiki.\nIllo non pote continer spatios.\n\nSi tu usa un servitor web usate in commun, tu providitor te fornira le nomine specific de un base de datos a usar, o te permitte crear un base de datos via un pannello de controlo.",
-       "config-db-name-oracle": "Schema del base de datos:",
-       "config-db-account-oracle-warn": "Il ha tres scenarios supportate pro le installation de Oracle como le base de datos de iste systema:\n\nSi tu vole crear un conto del base de datos como parte del processo de installation, per favor specifica un conto con le rolo SYSDBA como le conto del base de datos pro installation, e specifica le nomine e contrasigno desirate pro le conto de accesso per web. Alteremente tu pote crear le conto de accesso per web manualmente e specificar solmente iste conto (si illo ha le permissiones requisite pro crear le objectos de schema) o specifica duo contos differente, un con privilegios de creation e un conto restringite pro accesso per web.\n\nUn script pro crear un conto con le privilegios requisite se trova in le directorio \"maintenance/oracle/\" de iste installation. Non oblida que le uso de un conto restringite disactiva tote le capacitates de mantenentia in le conto predefinite.",
        "config-db-install-account": "Conto de usator pro installation",
        "config-db-username": "Nomine de usator del base de datos:",
        "config-db-password": "Contrasigno del base de datos:",
        "config-pg-test-error": "Impossibile connecter al base de datos '''$1''': $2",
        "config-sqlite-dir": "Directorio pro le datos de SQLite:",
        "config-sqlite-dir-help": "SQLite immagazina tote le datos in un sol file.\n\nLe directorio que tu forni debe permitter le accesso de scriptura al servitor web durante le installation.\n\nIllo '''non''' debe esser accessibile via web. Pro isto, nos non lo pone ubi tu files PHP es.\n\nLe installator scribera un file <code>.htaccess</code> insimul a illo, ma si isto falli, alcuno pote ganiar accesso directe a tu base de datos.\nIsto include le crude datos de usator (adresses de e-mail, contrasignos codificate) assi como versiones delite e altere datos restringite super le wiki.\n\nConsidera poner le base de datos in un loco completemente differente, per exemplo in <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Spatio de tabellas predefinite:",
-       "config-oracle-temp-ts": "Spatio de tabellas temporari:",
        "config-type-mysql": "MariaDB, MySQL o compatibile",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki supporta le sequente systemas de base de datos:\n\n$1\n\nSi tu non vide hic infra le systema de base de datos que tu tenta usar, alora seque le instructiones ligate hic supra pro activar le supporto.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] es le systema primari pro MediaWiki e le melio supportate. MediaWiki functiona anque con [{{int:version-db-mysql-url}} MySQL] e con [{{int:version-db-percona-url}} Percona Server], le quales es compatibile con MariaDB. ([https://www.php.net/manual/en/mysqli.installation.php Como compilar PHP con supporto de MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] es un systema de base de datos popular e open source, alternativa a MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Como compilar PHP con supporto de PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] es un systema de base de datos legier que es multo ben supportate. ([https://www.php.net/manual/en/pdo.installation.php Como compilar PHP con supporto de SQLite], usa PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] es un banca de datos commercial pro interprisas. ([https://www.php.net/manual/en/oci8.installation.php Como compilar PHP con supporto de OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] es un base de datos de interprisa commercial pro Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Como compilar PHP con supporto de SQLSRV])",
        "config-header-mysql": "Configuration de MariaDB/MySQL",
        "config-header-postgres": "Configuration de PostgreSQL",
        "config-header-sqlite": "Configuration de SQLite",
-       "config-header-oracle": "Configuration de Oracle",
-       "config-header-mssql": "Configuration de Microsoft SQL Server",
        "config-invalid-db-type": "Typo de base de datos invalide",
        "config-missing-db-name": "Es necessari entrar un valor pro \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Es necessari entrar un valor pro \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "Es necessari entrar un valor pro \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "TNS de base de datos \"$1\" invalide.\nUsa o \"TNS Name\" o un catena \"Easy Connect\". ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Methodos de nomenclatura de Oracle])",
        "config-invalid-db-name": "Nomine de base de datos \"$1\" invalide.\nUsa solmente litteras ASCII (a-z, A-Z), numeros (0-9), characteres de sublineamento (_) e tractos de union (-).",
        "config-invalid-db-prefix": "Prefixo de base de datos \"$1\" invalide.\nUsa solmente litteras ASCII (a-z, A-Z), numeros (0-9), characteres de sublineamento (_) e tractos de union (-).",
        "config-connection-error": "$1.\n\nVerifica le servitor, nomine de usator e contrasigno e reproba. Si tu usa \"localhost\" como nomine de servitor, essaya substituer \"127.0.0.1\" (o vice versa).",
        "config-invalid-schema": "Schema invalide pro MediaWiki \"$1\".\nUsa solmente litteras ASCII (a-z, A-Z), numeros (0-9) e characteres de sublineamento (_).",
-       "config-db-sys-create-oracle": "Le installator supporta solmente le uso de un conto SYSDBA pro le creation de un nove conto.",
-       "config-db-sys-user-exists-oracle": "Le conto de usator \"$1\" ja existe. SYSDBA pote solmente esser usate pro le creation de un nove conto!",
        "config-postgres-old": "PostgreSQL $1 o plus recente es requirite, tu ha $2.",
-       "config-mssql-old": "Microsoft SQL Server $1 o plus recente es necessari. Tu ha $2.",
        "config-sqlite-name-help": "Selige un nomine que identifica tu wiki.\nNon usar spatios o tractos de union.\nIsto essera usate pro le nomine del file de datos de SQLite.",
        "config-sqlite-parent-unwritable-group": "Impossibile crear le directorio de datos <code><nowiki>$1</nowiki></code>, proque le directorio superjacente <code><nowiki>$2</nowiki></code> non concede le accesso de scriptura al servitor web.\n\nLe installator ha determinate le usator sub que le servitor web es executate.\nConcede le accesso de scriptura in le directorio <code><nowiki>$3</nowiki></code> a iste usator pro continuar.\nIn un systema Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Impossibile crear le directorio de datos <code><nowiki>$1</nowiki></code>, proque le directorio superjacente <code><nowiki>$2</nowiki></code> non concede le accesso de scriptura al servitor web.\n\nLe installator non poteva determinar le usator sub que le servitor web es executate.\nConcede le accesso de scriptura in le directorio <code><nowiki>$3</nowiki></code> a iste usator (e alteres!) pro continuar.\nIn un systema Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Motor de immagazinage:",
        "config-mysql-innodb": "InnoDB (recommendate)",
        "config-mysql-engine-help": "'''InnoDB''' es quasi sempre le melior option, post que illo ha bon supporto pro simultaneitate.\n\n'''MyISAM''' pote esser plus rapide in installationes a usator singule o a lectura solmente.\nLe bases de datos MyISAM tende a esser corrumpite plus frequentemente que le base de datos InnoDB.",
-       "config-mssql-auth": "Typo de authentication:",
-       "config-mssql-install-auth": "Selige le typo de authentication a usar pro connecter al base de datos durante le processo de installation.\nSi tu selige \"{{int:config-mssql-windowsauth}}\", le credentiales del usator que executa le servitor web essera usate.",
-       "config-mssql-web-auth": "Selige le typo de authentication que le servitor web usara pro connecter al base de datos durante le operation ordinari del wiki.\nSi tu selige \"{{int:config-mssql-windowsauth}}\", le credentiales del usator que executa le servitor web essera usate.",
-       "config-mssql-sqlauth": "Authentication per SQL Server",
-       "config-mssql-windowsauth": "Authentication per Windows",
        "config-site-name": "Nomine del wiki:",
        "config-site-name-help": "Isto apparera in le barra de titulo del navigator e in varie altere locos.",
        "config-site-name-blank": "Entra un nomine de sito.",
index 2a98729..d0b43ad 100644 (file)
        "config-db-type": "Jenis basis data:",
        "config-db-host": "Inang basis data:",
        "config-db-host-help": "Jika server basis data Anda berada di server yang berbeda, masukkan nama inang atau alamat IP di sini.\n\nJika Anda menggunakan inang web bersama, penyedia inang Anda harus memberikan nama inang yang benar di dokumentasi mereka.\n\nJika Anda menginstal pada server Windows dan menggunakan MySQL, \"localhost\" mungkin tidak dapat digunakan sebagai nama server. Jika demikian, coba \"127.0.0.1\" untuk alamat IP lokal.\n\nJika Anda menggunakan PostgreSQL, biarkan field ini kosong untuk menghubungkan lewat soket Unix.",
-       "config-db-host-oracle": "TNS basis data:",
-       "config-db-host-oracle-help": "Masukkan [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] yang sah; berkas tnsnames.ora harus dapat diakses oleh instalasi ini.<br />Jika Anda menggunakan pustaka klien 10g atau lebih baru, Anda juga dapat menggunakan metode penamaan [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifikasi wiki ini",
        "config-db-name": "Nama basis data:",
        "config-db-name-help": "Pilih nama yang mengidentifikasikan wiki Anda.\nNama tersebut tidak boleh mengandung spasi.\n\nJika Anda menggunakan inang web bersama, penyedia inang Anda dapat memberikan Anda nama basis data khusus untuk digunakan atau mengizinkan Anda membuat basis data melalui panel kontrol.",
-       "config-db-name-oracle": "Skema basis data:",
-       "config-db-account-oracle-warn": "Ada tiga skenario yang didukung untuk instalasi Oracle sebagai basis data pendukung:\n\nJika Anda ingin membuat akun basis data sebagai bagian dari proses instalasi, silakan masukkan akun dengan peran SYSDBA sebagai akun basis data untuk instalasi dan tentukan kredensial yang diinginkan untuk akun akses web. Jika tidak, Anda dapat membuat akun akses web secara manual dan hanya memberikan akun tersebut (jika memiliki izin yang diperlukan untuk membuat objek skema) atau memasukkan dua akun yang berbeda, satu dengan hak membuat objek dan satu dibatasi untuk akses web.\n\nSkrip untuk membuat akun dengan privilese yang diperlukan dapat ditemukan pada direktori \"maintenance/oracle/\" instalasi ini. Harap diingat bahwa penggunaan akun terbatas akan menonaktifkan semua kemampuan pemeliharaan dengan akun bawaan.",
        "config-db-install-account": "Akun pengguna untuk instalasi",
        "config-db-username": "Nama pengguna basis data:",
        "config-db-password": "Kata sandi basis data:",
        "config-pg-test-error": "Tidak dapat terhubung ke basis data <strong>$1</strong>: $2",
        "config-sqlite-dir": "Direktori data SQLite:",
        "config-sqlite-dir-help": "SQLite menyimpan semua data dalam satu berkas.\n\nDirektori yang Anda berikan harus dapat ditulisi oleh server web selama instalasi.\n\nDirektori itu '''tidak''' boleh dapat diakses melalui web, inilah sebabnya kami tidak menempatkannya bersama dengan berkas PHP lain.\n\nPenginstal akan membuat berkas <code>.htaccess</code> bersamaan dengan itu, tetapi jika gagal, orang dapat memperoleh akses ke basis data mentah Anda.\nItu termasuk data mentah pengguna (alamat surel, hash sandi) serta revisi yang dihapus dan data lainnya yang dibatasi pada wiki.\n\nPertimbangkan untuk menempatkan basis data di tempat lain, misalnya di <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Tablespace bawaan:",
-       "config-oracle-temp-ts": "Tablespace sementara:",
        "config-type-mysql": "MySQL (atau yang kompatibel)",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki mendukung sistem basis data berikut:\n\n$1\n\nJika Anda tidak melihat sistem basis data yang Anda gunakan tercantum di bawah ini, ikuti petunjuk terkait di atas untuk mengaktifkan dukungan.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] adalah target utama MediaWiki dan memiliki dukungan terbaik. MediaWiki juga berjalan dengan [{{int:version-db-mariadb-url}} MariaDB] dan [{{int:version-db-percona-url}} Server Percona], yang kompatibel dengan MySQL. ([https://www.php.net/manual/en/mysql.installation.php Cara mengompilasi PHP dengan dukungan MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] adalah sistem basis data sumber terbuka populer sebagai alternatif MySQL.([https://www.php.net/manual/en/pgsql.installation.php Bagaimana mengompilasikan PHP dengan dukungan PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] adalah sistem basis data yang ringan yang sangat baik dukungannya. ([http://www.php.net/manual/en/pdo.installation.php cara mengompilasi PHP dengan dukungan SQLite], menggunakan PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] adalah basis data komersial untuk perusahaan. ([http://www.php.net/manual/en/oci8.installation.php cara mengompilasi PHP dengan dukungan OCI8])",
-       "config-dbsupport-mssql": "[{{int:version-db-mssql-url}} Microsoft SQL Server] adalah database perusahaan komersial untuk Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Bagaimana cara mengkompilasi PHP dengan dukungan SQLSRV])",
        "config-header-mysql": "Pengaturan MariaDB/MySQL",
        "config-header-postgres": "Pengaturan PostgreSQL",
        "config-header-sqlite": "Pengaturan SQLite",
-       "config-header-oracle": "Pengaturan Oracle",
-       "config-header-mssql": "Setelan Microsoft SQL Server",
        "config-invalid-db-type": "Jenis basis data tidak sah",
        "config-missing-db-name": "Anda harus memasukkan nilai untuk \"{{int:config-db-name}}\"",
        "config-missing-db-host": "Anda harus memasukkan nilai untuk \"{{int:config-db-host}}\"",
-       "config-missing-db-server-oracle": "Anda harus memasukkan nilai untuk \"{{int:config-db-host-oracle}}\"",
-       "config-invalid-db-server-oracle": "TNS basis data \"$1\" tidak sah.\nGunakan baik \"Nama TNS\" atau string \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Metode Penamaan Oracle]).",
        "config-invalid-db-name": "Nama basis data \"$1\" tidak sah.\nGunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan tanda hubung (-).",
        "config-invalid-db-prefix": "Prefiks basis data \"$1\" tidak sah.\nGunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), garis bawah (_), dan tanda hubung (-).",
        "config-connection-error": "$1.\n\nPeriksa nama inang, pengguna, dan sandi di bawah ini dan coba lagi.",
        "config-invalid-schema": "Skema MediaWiki \"$1\" tidak sah.\nGunakan hanya huruf ASCII (a-z, A-Z), angka (0-9), dan garis bawah (_).",
-       "config-db-sys-create-oracle": "Penginstal hanya mendukung penggunaan akun SYSDBA untuk membuat akun baru.",
-       "config-db-sys-user-exists-oracle": "Akun pengguna \"$1\"sudah ada. SYSDBA hanya dapat digunakan untuk membuat akun baru!",
        "config-postgres-old": "PostgreSQL $1 atau versi terbaru diperlukan, Anda menggunakan $2.",
-       "config-mssql-old": "Microsoft SQL Server $1 atau yang lebih baru dibutuhkan. Anda memiliki versi $2.",
        "config-sqlite-name-help": "Pilih nama yang mengidentifikasi wiki Anda.\nJangan gunakan spasi atau tanda hubung.\nNama ini akan digunakan untuk nama berkas data SQLite.",
        "config-sqlite-parent-unwritable-group": "Tidak dapat membuat direktori data <code><nowiki>$1</nowiki></code>, karena direktori induk <code><nowiki>$2</nowiki></code> tidak bisa ditulisi oleh server web.\n\nPenginstal telah menentukan pengguna yang menjalankan server web Anda.\nBuat direktori <code><nowiki>$3</nowiki></code> menjadi dapat ditulisi olehnya.\nPada sistem Unix/Linux lakukan hal berikut:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Tidak dapat membuat direktori data <code><nowiki>$1</nowiki></code>, karena direktori induk <code><nowiki>$2</nowiki></code> tidak bisa ditulisi oleh server web.\n\nPenginstal tidak dapat menentukan pengguna yang menjalankan server web Anda.\nBuat direktori <code><nowiki>$3</nowiki></code> menjadi dapat ditulisi oleh semua orang.\nPada sistem Unix/Linux lakukan hal berikut:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Mesin penyimpanan:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-engine-help": "'''InnoDB''' hampir selalu merupakan pilihan terbaik karena memiliki dukungan konkurensi yang baik.\n\n'''MyISAM''' mungkin lebih cepat dalam instalasi pengguna-tunggal atau hanya-baca.\nBasis data MyISAM cenderung lebih sering rusak daripada basis data InnoDB.",
-       "config-mssql-auth": "Jenis otentikasi:",
-       "config-mssql-install-auth": "Pilih jenis otentikasi yang akan digunakan untuk menyambung ke database selama proses instalasi.\nJika Anda memilih \"{{int:config-mssql-windowsauth}}\", kredensial dari pengguna apapun pada server web yang berjalan akan digunakan.",
-       "config-mssql-web-auth": "Pilih jenis otentikasi yang akan digunakan oleh server web untuk menyambung ke server basis data, selama operasi biasa dari wiki.\nJika Anda memilih \"{{int:config-mssql-windowsauth}}\", kredensial dari pengguna apapun pada server web yang berjalan akan digunakan.",
-       "config-mssql-sqlauth": "Otentikasi Server SQL",
-       "config-mssql-windowsauth": "Otentikasi Windows",
        "config-site-name": "Nama wiki:",
        "config-site-name-help": "Ini akan muncul di bilah judul peramban dan di berbagai tempat lainnya.",
        "config-site-name-blank": "Masukkan nama situs.",
index fac0ad7..74d8895 100644 (file)
@@ -52,9 +52,6 @@
        "config-db-install-account": "Konto dil uzero por instalo",
        "config-db-username": "Uzero-nomo dil datumaro:",
        "config-db-password": "Pasovorto dil datumaro:",
-       "config-type-mssql": "Microsoft SQL Server",
-       "config-header-oracle": "Ajusti por Oracle-sistemo:",
-       "config-header-mssql": "Ajusti por Microsoft SQL Server",
        "config-invalid-db-type": "Nevalida tipo di datumaro.",
        "config-ns-generic": "Projeto",
        "config-ns-site-name": "Sama kam la wiki-nomo: $1",
index 59c2317..7c4a0fa 100644 (file)
@@ -42,7 +42,6 @@
        "config-db-type": "Tegund gagnagrunns:",
        "config-db-host": "Netþjónn gagnagrunns:",
        "config-db-name": "Heiti gagnagrunns (engin bandstrik):",
-       "config-db-name-oracle": "Gagnagrunnsskema:",
        "config-db-username": "Notandanafn á gagnagrunni:",
        "config-db-password": "Lykilorð gagnagrunns:",
        "config-db-port": "Gátt gagnagrunns:",
        "config-type-mysql": "MariaDB, MySQL, eða samhæft",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "Stillingar MariaDB/MySQL",
        "config-header-postgres": "Stillingar PostgreSQL",
        "config-header-sqlite": "Stillingar SQLite",
-       "config-header-oracle": "Stillingar Oracle",
-       "config-header-mssql": "Stillingar Microsoft SQL Server",
        "config-regenerate": "Endurgera LocalSettings.php →",
        "config-show-table-status": "<code>SHOW TABLE STATUS</code> beiðni mistókst!",
        "config-db-web-account": "Gagnagrunnsreikningur fyrir vefaðgang",
        "config-mysql-engine": "Gagnagrunnshýsing:",
        "config-mysql-innodb": "InnoDB (mælt með)",
-       "config-mssql-auth": "Tegund auðkenningar:",
-       "config-mssql-sqlauth": "SQL Server auðkenning",
-       "config-mssql-windowsauth": "Windows auðkenning",
        "config-ns-generic": "Verkefni",
        "config-admin-name": "Notandanafnið þitt:",
        "config-admin-password": "Lykilorð:",
index 165a057..cb72d91 100644 (file)
        "config-db-type": "Tipo di database:",
        "config-db-host": "Host del database:",
        "config-db-host-help": "Se il server del tuo database è su un server diverso, immetti qui il nome dell'host o il suo indirizzo IP.\n\nSe stai utilizzando un web hosting condiviso, il tuo hosting provider dovrebbe fornirti il nome host corretto nella sua documentazione.\n\nSe stai utilizzando MySQL, l'uso di \"localhost\" potrebbe non funzionare correttamente come nome del server. In caso di problemi, prova a impostare \"127.0.0.1\" come indirizzo IP locale.\n\nSe usi PostgreSQL, lascia questo campo vuoto per consentire di connettersi tramite un socket Unix.",
-       "config-db-host-oracle": "TNS del database:",
-       "config-db-host-oracle-help": "Inserisci un valido [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; un file tnsnames.ora deve essere visibile a questa installazione.<br />Se stai usando la libreria cliente 10g o più recente puoi anche usare il metodo di denominazione [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifica questo wiki",
        "config-db-name": "Nome del database (no trattini):",
        "config-db-name-help": "Scegli un nome che identifica il tuo wiki.\nNon deve contenere spazi.\n\nSe utilizzi un web hosting condiviso, il tuo hosting provider o ti fornisce uno specifico nome di database da utilizzare, oppure ti consentirà di creare il database tramite un pannello di controllo.",
-       "config-db-name-oracle": "Schema del database:",
-       "config-db-account-oracle-warn": "Ci sono tre scenari supportati per l'installazione di Oracle come database di backend:\n\nSe vuoi creare un'utenza di database come parte del processo di installazione, fornisci un account con ruolo SYSDBA come utenza di database per l'installazione e specifica le credenziali volute per l'utenza di accesso web, altrimenti è possibile creare manualmente l'utenza di accesso web e fornire solo quell'account (se dispone delle autorizzazioni necessario per creare gli oggetti dello schema) o fornire due diverse utenze, una con i permessi di creazione e una per l'accesso web.\n\nScript per la creazione di un'utenza con le autorizzazioni necessarie può essere trovato nella directory \"maintenance/oracle/\" di questa installazione. Tieni presente che l'uso di un'utenza con restrizioni disabiliterà tutte le funzionalità di manutenzione con l'account predefinito.",
        "config-db-install-account": "Account utente per l'installazione",
        "config-db-username": "Nome utente del database:",
        "config-db-password": "Password del database:",
        "config-pg-test-error": "Impossibile connettersi al database '''$1''': $2",
        "config-sqlite-dir": "Directory data di SQLite:",
        "config-sqlite-dir-help": "SQLite memorizza tutti i dati in un unico file.\n\nLa directory che indicherai deve essere scrivibile dal server web durante l'installazione.\n\nDovrebbe essere <strong>non accessibile via web</strong>, è per questo che non la stiamo mettendo dove ci sono i file PHP.\n\nL'installatore scriverà insieme ad essa un file <code>.htaccess</code>, ma se il tentativo fallisse qualcuno potrebbe avere accesso al database grezzo.\nQuesto include dati utente grezzi (indirizzi, password cifrate) così come versioni eliminate e altri dati ad accesso limitato del wiki.\n\nConsidera l'opportunità di sistemare allo stesso tempo il database da qualche altra parte, per esempio in <code>/var/lib/mediawiki/tuowiki</code>.",
-       "config-oracle-def-ts": "Tablespace di default:",
-       "config-oracle-temp-ts": "Tablespace temporaneo:",
        "config-type-mysql": "MariaDB, MySQL o compatibile",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki supporta i seguenti sistemi di database:\n\n$1\n\nSe fra quelli elencati qui sotto non vedi il sistema di database che vorresti utilizzare, seguire le istruzioni linkate sopra per abilitare il supporto.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] è la configurazione preferibile per MediaWiki ed è quella meglio supportata. MediaWiki funziona anche con [{{int:version-db-mysql-url}} MySQL] e [{{int:version-db-percona-url}} Percona Server], che sono compatibili con MariaDB.([https://www.php.net/manual/en/mysqli.installation.php Come compilare PHP con supporto MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] è un popolare sistema di database open source come alternativa a MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Come compilare PHP con supporto PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite]  è un sistema di database leggero, che è supportato molto bene. ([https://www.php.net/manual/en/pdo.installation.php Come compilare PHP con supporto SQLite], utilizza PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] è un database di un'impresa commerciale. ([https://www.php.net/manual/en/oci8.installation.php Come compilare PHP con supporto OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] è un database di un'impresa commerciale per Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Come compilare PHP con supporto SQLSRV])",
        "config-header-mysql": "Impostazioni MySQL",
        "config-header-postgres": "Impostazioni PostgreSQL",
        "config-header-sqlite": "Impostazioni SQLite",
-       "config-header-oracle": "Impostazioni Oracle",
-       "config-header-mssql": "Impostazioni di Microsoft SQL Server",
        "config-invalid-db-type": "Tipo di database non valido",
        "config-missing-db-name": "È necessario immettere un valore per \"{{int:config-db-name}}\".",
        "config-missing-db-host": "È necessario immettere un valore per \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "È necessario immettere un valore per \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "TNS database \"$1\" non valido.\nUsa \"TNS Name\" o una stringa \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]).",
        "config-invalid-db-name": "Nome di database \"$1\" non valido.\nUtilizza soltanto caratteri ASCII come lettere (a-z, A-Z), numeri (0-9), sottolineatura (_) e trattini (-).",
        "config-invalid-db-prefix": "Prefisso database \"$1\" non valido.\nUtilizza soltanto caratteri ASCII come lettere (a-z, A-Z), numeri (0-9), sottolineatura (_) e trattini (-).",
        "config-connection-error": "$1.\n\nControlla host, nome utente e password e prova ancora. Se stai usando \"localhost\" come host database, prova invece ad utilizzare \"127.0.0.1\" (o viceversa).",
        "config-invalid-schema": "Schema MediaWiki \"$1\" non valido.\nUsa solo lettere ASCII (a-z, A-Z), numeri (0-9) e caratteri di sottolineatura (_).",
-       "config-db-sys-create-oracle": "Il programma di installazione supporta solo l'utilizzo di un account SYSDBA per la creazione di un nuovo account.",
-       "config-db-sys-user-exists-oracle": "L'account utente \"$1\" esiste già. SYSDBA può essere usato solo per la creazione di un nuovo account!",
        "config-postgres-old": "PostgreSQL $1 o una versione successiva è necessaria, rilevata la $2.",
-       "config-mssql-old": "Si richiede Microsoft SQL Server $1 o successivo. Tu hai la versione $2.",
        "config-sqlite-name-help": "Scegli un nome che identifichi il tuo wiki.\nNon utilizzare spazi o trattini.\nQuesto servirà per il nome del file di dati SQLite.",
        "config-sqlite-parent-unwritable-group": "Non è possibile creare la directory dati <code><nowiki>$1</nowiki></code>, perché la directory superiore <code><nowiki>$2</nowiki></code> non è scrivibile dal webserver.\n\nIl programma di installazione ha determinato l'utente con cui il server web è in esecuzione.\nForniscigli la possibilità di scrivere nella directory <code><nowiki>$3</nowiki></code> per continuare.\nSu un sistema Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Non è possibile creare la directory dati <code><nowiki>$1</nowiki></code>, perché la directory superiore <code><nowiki>$2</nowiki></code> non è scrivibile dal webserver.\n\nIl programma di installazione non ha potuto determinare l'utente con cui il server web è in esecuzione.\nFornisci ad esso (ed altri!) la possibilità di scrivere globalmente nella directory <code><nowiki>$3</nowiki></code> per continuare.\nSu un sistema Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Storage engine:",
        "config-mysql-innodb": "InnoDB (consigliato)",
        "config-mysql-engine-help": "<strong>InnoDB</strong> è quasi sempre l'opzione migliore, in quanto ha un buon supporto della concorrenza.\n\n<strong>MyISAM</strong> potrebbe essere più veloce nelle installazioni monoutente o in sola lettura.\nI database MyISAM tendono a danneggiarsi più spesso dei database InnoDB.",
-       "config-mssql-auth": "Tipo di autenticazione:",
-       "config-mssql-install-auth": "Seleziona il tipo di autenticazione che verrà utilizzato per connettersi al database durante il processo di installazione.\nSe si seleziona \"{{int:config-mssql-windowsauth}}\", saranno utilizzate le credenziali dell'utente con cui viene eseguito il server web, qualunque esso sia.",
-       "config-mssql-web-auth": "Seleziona il tipo di autenticazione che il server web utilizzerà per connettersi al database, durante il normale funzionamento del wiki.\nSe si seleziona \"{{int:config-mssql-windowsauth}}\", saranno utilizzate le credenziali dell'utente con cui viene eseguito il server web, qualunque esso sia.",
-       "config-mssql-sqlauth": "Autenticazione di SQL Server",
-       "config-mssql-windowsauth": "Autenticazione di Windows",
        "config-site-name": "Nome del wiki:",
        "config-site-name-help": "Questo verrà visualizzato nella barra del titolo del browser e in vari altri posti.",
        "config-site-name-blank": "Inserisci il nome del sito.",
index 55e8d78..5da1914 100644 (file)
@@ -25,7 +25,8 @@
                        "Omotecho",
                        "Yusuke1109",
                        "Aefgh39622",
-                       "Tomri5"
+                       "Tomri5",
+                       "Afaz"
                ]
        },
        "config-desc": "MediaWiki のインストーラー",
@@ -90,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-db-type": "データベースの種類:",
        "config-db-host": "データベースのホスト:",
        "config-db-host-help": "異なるサーバー上にデータベースサーバーがある場合、ホスト名またはIPアドレスをここに入力してください。\n\nもし、共有されたウェブホスティングを使用している場合、ホスティングプロバイダーは正確なホスト名を解説しているはずです。\n\nMySQLを使用している場合、「localhost」は、サーバー名としてはうまく働かないでしょう。もしそのような場合は、ローカルIPアドレスとして「127.0.0.1」を試してみてください。\n\nPostgreSQLを使用している場合、UNIXソケットで接続するにはこの欄を空欄のままにしてください。",
-       "config-db-host-oracle": "データベース TNS:",
-       "config-db-host-oracle-help": "有効な[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm ローカル接続名]を入力してください。tnsnames.ora ファイルは、このインストール先から参照できる場所に置いてください。<br />ご使用中のクライアント ライブラリが 10g 以降の場合、[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] ネーミング メソッドを使用できます。",
        "config-db-wiki-settings": "このウィキの識別情報",
        "config-db-name": "データベース名 (ハイフンは使用不可):",
        "config-db-name-help": "このウィキを識別する名前を入力してください。\n空白を含めることはできません。\n\n共有ウェブホストを利用している場合、ホスティングプロバイダーが特定の使用可能なデータベース名を提供するか、あるいは管理パネルからデータベースを作成できるようにしているでしょう。",
-       "config-db-name-oracle": "データベースのスキーマ:",
-       "config-db-account-oracle-warn": "バックエンドのデータベースとして Oracle をインストールする場合、3つのシナリオが考えられます。\n\nデータベース用のアカウントをインストールのプロセス途中で作成したい場合、インストールに使うデータベース用のアカウントしては SYSDBAロール付きのアカウントを指定し、ウェブアクセス用アカウントには必要なログイン情報を指定してください。あるいは、ウェブアクセス用のアカウントを手動で作成して、そのアカウント(スキーマオブジェクトの作成のパーミッションを要求する場合)だけを使うか、二つの異なるアカウントを用意して一つは特権を付与できるもの、もう一つをウェブアクセス用の制限アカウントとしてください。\n\n要求された特権でアカウントを作成するスクリプトは、このインストール環境では、\"maintenance/oracle/\" にあります。制限アカウントを使用することは、デフォルトアカウントでのすべてのメンテナンス特権を無効にすることにご注意ください。",
        "config-db-install-account": "インストールで使用する利用者アカウント",
        "config-db-username": "データベースのユーザー名:",
        "config-db-password": "データベースのパスワード:",
        "config-pg-test-error": "データベース <strong>$1</strong> に接続できません: $2",
        "config-sqlite-dir": "SQLite データ ディレクトリ:",
        "config-sqlite-dir-help": "SQLite は単一のファイル内にすべてのデータを格納しています。\n\n指定したディレクトリは、インストール時にウェブ サーバーが書き込めるようにしておく必要があります。\n\nこのディレクトリはウェブからアクセス<strong>不可能</strong>である必要があります。PHP ファイルがある場所には配置できないのはこのためです。\n\nインストーラーは <code>.htaccess</code> ファイルにも書き込みます。しかし、これが失敗した場合は、誰かが生のデータベースにアクセスできてしまいます。\nデータベースは、生のデータ (メールアドレス、パスワードのハッシュ値) の他、削除された版、その他ウィキ上の制限されているデータを含んでいます。\n\n例えば <code>/var/lib/mediawiki/yourwiki</code> のように、別の場所にデータベースを配置することを検討してください。",
-       "config-oracle-def-ts": "既定のテーブル領域:",
-       "config-oracle-temp-ts": "一時的なテーブル領域:",
        "config-type-mysql": "MariaDB、MySQLまたは互換製品",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "マイクロソフト SQL Server",
        "config-support-info": "MediaWiki は以下のデータベース システムに対応しています:\n\n$1\n\n使用しようとしているデータベース システムが下記の一覧にない場合は、上記リンク先の手順に従ってインストールしてください。",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB]はMediaWikiの主要な対象であり、最もよくサポートされています。MediaWikiはMariaDBと互換性のある[{{int:version-db-mysql-url}} MySQL]、[{{int:version-db-percona-url}} Percona Server]でも動きます。 ([https://www.php.net/manual/ja/mysqli.installation.php PHPをMySQLサポート付きでコンパイルする方法])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] は、MySQLの代替として人気がある公開のデータベースシステムです。([https://www.php.net/manual/en/pgsql.installation.php PHPをPostgreSQLサポート付きでコンパイルする方法])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite]は、良くサポートされている、軽量データベースシステムです。([https://www.php.net/manual/ja/pdo.installation.php SQLiteに対応したPHPをコンパイルする方法]、PDOを使用)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle]は商業企業のデータベースです。([https://www.php.net/manual/en/oci8.installation.php OCI8サポートなPHPをコンパイルする方法])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server]は商業企業のWindows用データベースです。([https://www.php.net/manual/en/sqlsrv.installation.php SQLSRVサポートなPHPをコンパイルする方法])",
        "config-header-mysql": "MariaDB/MySQL の設定",
        "config-header-postgres": "PostgreSQL の設定",
        "config-header-sqlite": "SQLite の設定",
-       "config-header-oracle": "Oracle の設定",
-       "config-header-mssql": "Microsoft SQL Server の設定",
        "config-invalid-db-type": "データベースの種類が無効です。",
        "config-missing-db-name": "「{{int:config-db-name}}」を入力してください",
        "config-missing-db-host": "「{{int:config-db-host}}」を入力してください。",
-       "config-missing-db-server-oracle": "「{{int:config-db-host-oracle}}」の値を入力してください",
-       "config-invalid-db-server-oracle": "「$1」は無効なデータベース TNS です。\n「TNS 名」「Easy Connect」文字列のいずれかを使用してください ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle ネーミング メソッド])。",
        "config-invalid-db-name": "「$1」は無効なデータベース名です。\n半角の英数字 (a-z、A-Z、0-9)、アンダースコア (_)、ハイフン (-) のみを使用してください。",
        "config-invalid-db-prefix": "「$1」は無効なデータベース接頭辞です。\n半角の英数字 (a-z、A-Z、0-9)、アンダースコア (_)、ハイフン (-) のみを使用してください。",
        "config-connection-error": "$1。\n\n以下のホスト名、ユーザー名、パスワードを確認してから再度試してください。データベースホストとして「localhost」を使用している場合は、代わりに 「127.0.0.1」を使用してください(またはその逆)。",
        "config-invalid-schema": "「$1」は MediaWiki のスキーマとして無効です。\n半角の英数字 (a-z、A-Z、0-9)、アンダースコア (_) のみを使用してください。",
-       "config-db-sys-create-oracle": "インストーラーは、新規アカウント作成にはSYSDBAアカウントの利用のみをサポートしています。",
-       "config-db-sys-user-exists-oracle": "利用者アカウント「$1」は既に存在します。SYSDBA は新しいアカウントの作成のみに使用できます!",
        "config-postgres-old": "PostgreSQL $1 以降が必要です。ご使用中の PostgreSQL は $2 です。",
-       "config-mssql-old": "Microsoft SQL Server $1 以降が必要です。ご使用中の Microsoft SQL Server は $2 です。",
        "config-sqlite-name-help": "あなたのウェキと同一性のある名前を選んでください。\n空白およびハイフンは使用しないでください。\nSQLiteのデータファイル名として使用されます。",
        "config-sqlite-parent-unwritable-group": "データ ディレクトリ <code><nowiki>$1</nowiki></code> を作成できません。ウェブ サーバーは親ディレクトリ <code><nowiki>$2</nowiki></code> に書き込めませんでした。\n\nインストーラーは、ウェブ サーバーの実行ユーザーを特定しました。\n続行するには、ディレクトリ <code><nowiki>$3</nowiki></code> に書き込めるようにしてください。\nUnix または Linux であれば、以下を実行してください:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "データ ディレクトリ <code><nowiki>$1</nowiki></code> を作成できません。ウェブ サーバーは、親ディレクトリ <code><nowiki>$2</nowiki></code> に書き込めませんでした。\n\nインストーラーは、ウェブ サーバーの実行ユーザーを特定できませんでした。\n続行するには、ディレクトリ <code><nowiki>$3</nowiki></code> に、ウェブ サーバー (と、あらゆる人々!) がグローバルに書き込めるようにしてください。\nUnix または Linux では、以下を実行してください:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "ストレージ エンジン:",
        "config-mysql-innodb": "InnoDB(推奨)",
        "config-mysql-engine-help": "<strong>InnoDB</strong>は、並行処理のサポートに優れているので、ほとんどの場合において最良の選択肢です。\n\n<strong>MyISAM</strong>は、利用者が1人の場合、あるいは読み込み専用でインストールする場合に、より処理が早くなるでしょう。\nただし、MyISAMのデータベースは、InnoDBより高頻度で破損する傾向があります。",
-       "config-mssql-auth": "認証の種類:",
-       "config-mssql-install-auth": "インストール過程でデータベースに接続するために使用する認証の種類を選択してください。\n「{{int:config-mssql-windowsauth}}」を選択した場合、ウェブサーバーを実行しているユーザーの認証情報が使用されます。",
-       "config-mssql-web-auth": "ウィキの通常の操作の際にウェブサーバーがデータベースサーバーに接続するために使用する認証の種類を選択してください。\n「{{int:config-mssql-windowsauth}}」を選択した場合、ウェブサーバーを実行しているユーザーの認証情報が使用されます。",
-       "config-mssql-sqlauth": "SQL Server 認証",
-       "config-mssql-windowsauth": "Windows 認証",
        "config-site-name": "ウィキ名:",
        "config-site-name-help": "この欄に入力したウィキ名は、ブラウザーのタイトルバーなど様々な場所で利用されます。",
        "config-site-name-blank": "サイト名を入力してください。",
        "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 9c4c3fb..86b0f55 100644 (file)
        "config-wincache": "[https://www.iis.net/downloads/microsoft/wincache-extension WinCache] დაყენდა",
        "config-diff3-bad": "GNU diff3 ვერ მოიძებნა.",
        "config-db-type": "მონაცემთა ბაზის ტიპი:",
-       "config-db-host-oracle": "მონაცემთა ბაზის TNS:",
        "config-db-name": "მონაცემთა ბაზის სახელი:",
-       "config-db-name-oracle": "მონაცემთა ბაზის სქემა:",
        "config-db-username": "მონაცემთა ბაზის მომხმარებლის სახელი:",
        "config-db-password": "მონაცემთა ბაზის პაროლი:",
        "config-db-port": "მონაცემთა ბაზის პორტი:",
        "config-db-schema": "მედიავიკის სქემა:",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "MySQL-ის პარამეტრები",
        "config-header-postgres": "PostgreSQL-ის პარამეტრები",
        "config-header-sqlite": "SQLite-ის პარამეტრები",
-       "config-header-oracle": "Oracle-ის პარამეტრები",
        "config-invalid-db-type": "არასწორი მონაცემთა ბაზის ტიპი",
        "config-sqlite-readonly": "ფაილი <code>$1</code> ჩასაწერად მიუწვდომელია.",
        "config-mysql-innodb": "InnoDB",
index a891d19..e700863 100644 (file)
        "config-db-type": "데이터베이스 종류:",
        "config-db-host": "데이터베이스 호스트:",
        "config-db-host-help": "데이터베이스 서버가 다른 서버에 있으면 여기에 호스트 이름이나 IP 주소를 입력하세요.\n\n공유하는 웹 호스팅을 사용하고 있으면 호스팅 제공 업체는 올바른 호스트 이름을 설명하고 있을 것입니다.\n\nWindows 서버에 설치하고 MySQL을 사용하면 \"localhost\"가 서버 이름으로는 작동하지 않을 수 있습니다. 그렇게 된다면 로컬 IP 주소로 \"127.0.0.1\"을 시도하세요.\n\nPostgreSQL을 사용하면 유닉스 소켓을 통해 연결되도록 입력란을 비워두세요.",
-       "config-db-host-oracle": "데이터베이스 TNS:",
-       "config-db-host-oracle-help": "올바른 [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 로컬 연결 이름]을 입력하세요. tnsnames.ora 파일이 이 설치 위치에서 참조할 수 있는 곳에 있어야 합니다.<br />10g 이후의 클라이언트 라이브러리를 사용하는 경우 [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 쉬운 연결] 네이밍 메서드도 사용할 수 있습니다.",
        "config-db-wiki-settings": "이 위키 식별",
        "config-db-name": "데이터베이스 이름 (하이픈 없음):",
        "config-db-name-help": "위키를 식별하기 위한 이름을 선택하세요.\n공백이 없어야 합니다.\n\n공유하는 웹 호스팅 사용하면 호스팅 제공 업체가 특정 데이터베이스 이름을 제공하거나 제어판에서 데이터베이스를 만들 수 있습니다.",
-       "config-db-name-oracle": "데이터베이스 스키마:",
-       "config-db-account-oracle-warn": "데이터베이스 백엔드로 Oracle을 설치하기 위해 지원하는 세 가지 시나리오가 있습니다:\n\n설치 과정의 일부로 데이터베이스 계정을 만들려면 설치를 위해 데이터베이스 계정으로 SYSDBA 역할을 가진 계정을 제공하고 웹 접근 계정에 대해 원하는 자격 증명을 지정하세요, 그렇지 않으면 수동으로 웹 접근 계정을 만들 수 있으며 (스키마 개체를 만들 권한이 필요한 경우) 또는 생성 권한을 가진 계정과 웹 접근이 제한된 계정의 두 가지 다른 계정을 제공할 수도 있습니다\n\n필요한 권한을 가진 계정을 만드는 스크립트는 이 설치 위치의 \"maintenance/oracle/\" 디렉터리에서 찾을 수 있습니다. 제한된 계정을 사용하면 기본 계정의 모든 유지 관리 기능이 비활성화된다는 점에 유의하십시오.",
        "config-db-install-account": "설치를 위한 사용자 계정",
        "config-db-username": "데이터베이스 사용자 이름:",
        "config-db-password": "데이터베이스 비밀번호:",
        "config-pg-test-error": "<strong>$1</strong> 데이터베이스에 연결할 수 없습니다: $2",
        "config-sqlite-dir": "SQLite 데이터 디렉터리:",
        "config-sqlite-dir-help": "SQLite는 하나의 파일에 모든 데이터를 저장합니다.\n\n입력한 디렉토리는 설치하는 동안 웹 서버가 쓸 수 있어야 합니다.\n\n이 디렉토리는 웹을 통해 접근할 수 <strong>없어야</strong> 합니다. PHP 파일이 있는 곳에 넣을 수 없는 것은 이 때문입니다.\n\n설치 관리자는 <code>.htaccess</code> 파일을 작성하지만, 이것이 실패하면 누군가가 원본 데이터베이스에 접근할 수 있습니다.\n데이터베이스는 원본 사용자 데이터(이메일 주소, 해시한 비밀번호)뿐만 아니라 삭제된 판과 위키의 다른 제한된 데이터를 포함합니다.\n\n예를 들어 <code>/var/lib/mediawiki/yourwiki</code>와 같이 다른 곳에 데이터베이스를 넣는 것이 좋습니다.",
-       "config-oracle-def-ts": "기본 테이블공간:",
-       "config-oracle-temp-ts": "임시 테이블공간:",
        "config-type-mysql": "MariaDB, MySQL 및 호환",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL 서버",
        "config-support-info": "미디어위키는 다음의 데이터베이스 시스템을 지원합니다:\n\n$1\n\n데이터베이스 시스템이 표시되지 않을 때 아래에 나열된 다음 지원을 활성화하려면 위의 링크된 지시에 따라 설치해볼 수 있습니다.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB]는 미디어위키의 기본 대상이며 가장 잘 지원됩니다. 미디어위키는 또한 MariaDB와 호환되는 [{{int:version-db-mysql-url}} MySQL]과 [{{int:version-db-percona-url}} Percona 서버]에서도 작동합니다. ([https://www.php.net/manual/en/mysql.installation.php MySQL 지원으로 PHP를 컴파일하는 방법])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL]은 MySQL의 대안으로서 인기 있는 오픈 소스 데이터베이스 시스템입니다. ([https://www.php.net/manual/en/pgsql.installation.php PostgreSQL 지원으로 PHP를 컴파일하는 방법])",
        "config-dbsupport-sqlite": "*  [{{int:version-db-sqlite-url}} SQLite]는 매우 잘 지원되고 가벼운 데이터베이스 시스템입니다. ([https://www.php.net/manual/en/pdo.installation.php SQLite 지원으로 PHP를 컴파일하는 방법], PDO 사용)",
-       "config-dbsupport-oracle": "*  [{{int:version-db-oracle-url}} Oracle]은 상용 기업 데이터베이스입니다. ([https://www.php.net/manual/en/oci8.installation.php OCI8 지원으로 PHP를 컴파일하는 방법])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL 서버]는 Windows용 상용 기업 데이터베이스입니다. ([https://www.php.net/manual/en/sqlsrv.installation.php SQLSRV 지원으로 PHP를 컴파일하는 방법])",
        "config-header-mysql": "MariaDB/MySQL 설정",
        "config-header-postgres": "PostgreSQL 설정",
        "config-header-sqlite": "SQLite 설정",
-       "config-header-oracle": "Oracle 설정",
-       "config-header-mssql": "Microsoft SQL 서버 설정",
        "config-invalid-db-type": "잘못된 데이터베이스 종류",
        "config-missing-db-name": "\"{{int:config-db-name}}\"에 대한 값을 입력해야 합니다.",
        "config-missing-db-host": "\"{{int:config-db-host}}\"에 대한 값을 입력해야 합니다.",
-       "config-missing-db-server-oracle": "\"{{int:config-db-host-oracle}}\"에 대한 값을 입력해야 합니다.",
-       "config-invalid-db-server-oracle": "\"$1\" 데이터베이스 TNS가 잘못됐습니다.\n\"TNS Name\"이나 \"Easy Connect\" 문자열 중 하나를 사용하세요 ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle 네이밍 메서드]).",
        "config-invalid-db-name": "\"$1\" 데이터베이스 이름이 잘못되었습니다.\nASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.",
        "config-invalid-db-prefix": "\"$1\" 데이터베이스 접두어가 잘못됐습니다.\nASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.",
        "config-connection-error": "$1.\n\n호스트, 계정 이름과 비밀번호를 확인하고 다시 시도하세요.",
        "config-invalid-schema": "미디어위키 \"$1\"에 대한 스키마가 잘못됐습니다.\nASCII 글자 (a-z, A-Z), 숫자 (0-9), 밑줄 (_)과 하이픈 (-)만 사용하세요.",
-       "config-db-sys-create-oracle": "설치 관리자는 새 계정을 만들기 위한 SYSDBA 계정만을 지원합니다.",
-       "config-db-sys-user-exists-oracle": "\"$1\" 사용자 계정이 이미 존재합니다. SYSDBA는 새 계정을 만드는 데에만 사용할 수 있습니다!",
        "config-postgres-old": "PostgreSQL $1 이상이 필요합니다. $2이(가) 있습니다.",
-       "config-mssql-old": "Microsoft SQL 서버 $1 이상의 버전이 필요합니다. 현재 버전은 $2입니다.",
        "config-sqlite-name-help": "위키를 식별하기 위한 이름을 선택하세요.\n공백이나 하이픈을 사용하지 마십시오.\nSQLite 데이터 파일 이름에 사용됩니다.",
        "config-sqlite-parent-unwritable-group": "<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며, 이는 웹 서버는 상위 디렉토리인 <code><nowiki>$2</nowiki></code>에 쓸 수 없기 때문입니다.\n\n설치 관리자는 웹 서버로 실행 중인 사용자를 지정할 수 없습니다.\n계속하려면 웹 서버가 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.\n유닉스/리눅스 시스템에서의 수행:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "<code><nowiki>$1</nowiki></code> 데이터 디렉토리를 만들 수 없으며, 이는 웹 서버가 상위 디렉토리인 <code><nowiki>$2</nowiki></code>에 쓸 수 없기 때문입니다.\n\n설치 관리자는 웹 서버로 실행 중인 사용자를 지정할 수 없습니다.\n계속하려면 웹 서버(와 그 외 서버!)가 전역으로 쓸 수 있는 <code><nowiki>$3</nowiki></code> 디렉토리를 만드세요.\n유닉스/리눅스 시스템에서의 수행:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "저장소 엔진:",
        "config-mysql-innodb": "InnoDB (권장)",
        "config-mysql-engine-help": "<strong>InnoDB</strong>는 동시 실행 지원이 우수하기 때문에 대부분의 경우 최고의 옵션입니다.\n\n<strong>MyISAM</strong>은 단일 사용자나 읽기 전용 설치에서 더 빠를 수 있습니다.\nMyISAM 데이터베이스는 InnoDB 데이터베이스보다 더 자주 손실될 수 있습니다.",
-       "config-mssql-auth": "인증 형식:",
-       "config-mssql-install-auth": "설치 과정 중 데이터베이스에 연결하는 데 사용할 인증 형식을 선택하세요.\n\"{{int:config-mssql-windowsauth}}\"을 선택하시면 웹서버를 실행 중인 아무 사용자의 자격 증명이 사용됩니다.",
-       "config-mssql-web-auth": "위키가 일반적인 작업을 수행하는 동안 데이터베이스 서버에 연결하는 데 사용할 인증 형식을 선택하세요.\n\n\"{{int:config-mssql-windowsauth}}\"을 선택하시면 웹서버를 실행 중인 아무 사용자의 자격 증명이 사용됩니다.",
-       "config-mssql-sqlauth": "SQL 서버 인증",
-       "config-mssql-windowsauth": "Windows 인증",
        "config-site-name": "위키 이름:",
        "config-site-name-help": "브라우저 제목 표시줄과 다른 여러 곳에 나타납니다.",
        "config-site-name-blank": "사이트 이름을 입력하세요.",
index 2a23c6d..5a8148e 100644 (file)
        "config-db-type": "De Zoot Daatebangk:",
        "config-db-host": "Dä Name vun däm Rääschner met dä Daatebangk:",
        "config-db-host-help": "Wann Dinge ẞööver för de Daatebangk ob enem andere Rääschner es, donn heh dämm singe Name udder dämm sing <i lang=\"en\">IP</i>-Addräß enjävve.\n\nWann De ob enem Meetẞööver beß, weet Der Dinge Provaider odder däm sing Dokemäntazjuhn saare, wat De endraare moß.\n\nWann De ob enem ẞööver onger <i lang=\"en\">Windows</i> am enshtalleere bes un en <i lang=\"en\">MySQL</i>-Daatebangk häs, künnd_et sin, dat „<code lang=\"en\">localhost</code>“ nit douch för der Name vum ẞööver. Wann dad-esu es, versöhg et ens met „<code lang=\"en\">127.0.0.1</code>“ als <i lang=\"en\">IP</i>-Addräß vum eije Rääschner.\n\nWann De ene <i lang=\"en\">PostgreSQL</i>-ẞööver häs, donn dat Fäld läddesch lohße, öm en Verbendung övver e <i lang=\"en\">Unix socket</i> opzemaache.",
-       "config-db-host-oracle": "Dä Daatebangk ier <i lang=\"en\" title=\"Transparent Network Substrate\">TNS</i>:",
-       "config-db-host-oracle-help": "Donn ene jöltije [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm „<i lang=\"en\">Local Connect</i>“-Name] aanjävve. De Dattei „<code lang=\"en\">tnsnames.ora</code>“ moß för heh dat Projamm seschbaa un ze Lässe sin.<br />Wann heh de Projamm_Biblijoteeke für de Aanwänderprojramme för de Version 10g udder neuer enjesaz wääde, kam_mer och et [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm „<i lang=\"en\">Easy Connect</i>“] jenumme wääde för der Name ze verjävve.",
        "config-db-wiki-settings": "De Daate vum Wiki",
        "config-db-name": "Dä Nahme vun dä Daatebangk:",
        "config-db-name-help": "Jiff ene Name aan, dä för Ding Wiki passe deiht.\nDoh sullte kei Zweschrereum un kein Stresche dren sin.\n\nWann De nit op Dingem eije Rääschner bes, künnt et sin, dat Dinge Provaider Der extra ene beshtemmpte Name för de Daatebangk jejovve hät, uffr dat de dä drom froore moß udder dat De de Daatebangke övver e Fommulaa selver enreeschte moß.",
-       "config-db-name-oracle": "Schema för de Daatebangk:",
-       "config-db-account-oracle-warn": "Mer han drei Aate, wi mer <i lang=\"en\">Oracle</i> als Dahtebangk aanbenge künne.\n\nWann De ene neue Zohjang op de Dahtenbangk met Nahme un Paßwoot mem Projramm för et Opsäze aanlääje wells, dann jif ene Zohjang met däm Rääsch „<i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"SYS - Database Administrator Authentication\">SYSDBA</i>“ aan, dä et alld jitt, un jif däm di Daate aan för dä neue Zohjang aanzelääje.\nDo kanns och dä neue Zohjang vun Hand aanlääje un heh beim Opsäze nur dää aanjävve — wann dä dat Rääsch hät, en de Daatebangk Schema_Objäkte aanzelääje.\nUdder De jiß zwei ongerscheidlijje Zohjäng op de Daatenbangk aan, woh eine vun dat Rääsch zom Aanlääje hät un dä andere moß dat nit un es för der nomaale Bedrief zohshtändesch.\n\nEn Skrep, wat ene Zohjang op de Dahtenbangk aanlääsch met all dä nüüdejje Rääschde, fengks De em Verzeishneß <code lang=\"en\">maintenance/oracle/</code> vun Dingem MediaWiki. Donn draan dengke, dat ene Zohjang met beschrängkte Rääschde all di Müjjeleschkeite för et Waade un Repareere nit hät, di de jewöhnlejje Zoot Zohjang met sesh brängk.",
        "config-db-install-account": "Der Zohjang för en Enreeschte",
        "config-db-username": "Dä Name vun däm Aanwender för dä Zohjref op de Daatebangk:",
        "config-db-password": "Et Paßwoot vun däm Aanwender för dä Zohjref op de Daatebangk:",
        "config-pg-test-error": "Mer krijje kein Verbendung zor Daatebank '''$1''': $2",
        "config-sqlite-dir": "Dem <i lang=\"en\">SQLite</i> sing Daateverzeishnes:",
        "config-sqlite-dir-help": "<i lang=\"en\">SQLite</i> hät all sing Daate zosamme en en einzel Dattei.\n\nEn dat Verzeishneß, wat De aanjiß, moß dat Web_ẞööver_Projramm beim Opsäze eren schriive dörrve.\n\nDat Verzeishneß sullt '''nit''' övver et Web zohjänglesch sin, dröm dom_mer et nit dohen, woh de <i lang=\"en\">PHP</i>-Datteije sin.\n\nMer donn beim Opsäze zwa uß Vöörssh en <code lang=\"en\">.htaccess</code> Dattei dobei, ävver wann di nit werrek, künnte Lück vun ußerhallef aan Ding Daatebangk_Dattei eraan kumme.\nDoh shtonn Saache dren, wi de Addräße för de Metmaacher ier <i lang=\"en\">e-mail</i> un de verschlößelte Paßwööter un de vershtoche un de fottjeschmeße Sigge un ander Saache ussem Wiki, di mer nit öffentlesch maache darref.\n\nDonn Ding Daatebangk et beß janz woh anders hen, noh <code lang=\"en\">/var/lib/mediawiki/''wikiname''</code> för e Beishpell.",
-       "config-oracle-def-ts": "Tabälleroum för der Shtandattjebruch:",
-       "config-oracle-temp-ts": "Tabälleroum för der Jebruch zweschedorsh:",
        "config-type-mysql": "<i lang=\"en\">MySQL</i> (udder en jlischwääteje)",
        "config-type-postgres": "<i lang=\"en\">PostgreSQL</i>",
        "config-type-sqlite": "<i lang=\"en\">SQLite</i>",
-       "config-type-oracle": "<i lang=\"en\">Oracle</i>",
-       "config-type-mssql": "Dä <i lang=\"en\" xml:lang=\"en\">SQL</i>-ẞööver vun <i lang=\"en\" xml:lang=\"en\">Microsoft</i>",
        "config-support-info": "MediaWiki kann met heh dä Daatebangk_Süßteeme zosamme jonn:\n\n$1\n\nWann dat Daatebangk_Süßteem, wat De nämme wells, onge nit dobei es, dann donn desch aan di Aanleidonge hallde, di bovve verlengk sen, öm et op Dingem ẞööver singem Süßteem müjjelesh ze maache, se aan et Loufe ze krijje.",
        "config-dbsupport-mysql": "* <i lang=\"en\" xml:lang=\"en\">[{{int:version-db-mysql-url}} MySQL]</i> es dat vum MediaWiki et eets un et bäß ongerschtöz Daatebangksüßtehm. Et leuf ävver och met <i lang=\"en\" xml:lang=\"en\">[{{int:version-db-mariadb-url}} MariaDB]</i> un <i lang=\"en\" xml:lang=\"en\">[{{int:version-db-percona-url}} Percona Server]</i>. Di sin kumpatihbel mem <i lang=\"en\" xml:lang=\"en\">MySQL</i>. ([https://www.php.net/manual/de/mysql.installation.php Aanleidung för et Övversäze un Enreeschte von <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"PHP Hypertext Preprocessor\">PHP</i> met <i lang=\"en\">MySQL</i> dobei, op Deutsch])",
        "config-dbsupport-postgres": "* <i lang=\"en\">[{{int:version-db-postgres-url}} PostgreSQL]</i> es e bikannt Daatebangksüßtehm met offe Quälltäxde, un ed es och en Wahl nävve <i lang=\"en\">MySQL</i>. Et sinn_er ävver paa klein Fählersche bekannt, um mer künne et em Momang för et reschtijje Werke nit ämfähle. ([https://www.php.net/manual/de/pgsql.installation.php Aanleidung för et Övversäze un Enreeschte von PHP met <i lang=\"en\">PostgreSQL</i> dobei, op Deutsch])",
        "config-dbsupport-sqlite": "* <i lang=\"en\">[{{int:version-db-sqlite-url}} SQLite]</i> es e eijfach Daatebangksüßtehm, wat joot en Schoß jehallde weed. ([http://www.php.net/manual/de/pdo.installation.php Aanleidong för et Övversäze un Enreeschte von PHP met <i lang=\"en\">SQLite</i> dobei, op Deutsch])",
-       "config-dbsupport-oracle": "* <i lang=\"en\">[{{int:version-db-oracle-url}} Oracle]</i> es e jeschäfflesch Daatebangksüßtehm för Ferme. ([http://www.php.net/manual/de/oci8.installation.php Aanleidong för et Övversäze un Enreeschte von PHP met <i lang=\"en\" xml:lang=\"en\">OCI8</i> dobei, op Deutsch])",
-       "config-dbsupport-mssql": "* Dä <i lang=\"en\" xml:lang=\"en\">[{{int:version-db-mssql-url}} Microsoft SQL Server]</i> es e jeschäfflesch Dahtebangksüßtehm för Rääschner met <i lang=\"en\" xml:lang=\"en\">Windows</i>. ([https://www.php.net/manual/en/sqlsrv.installation.php Aanleidong för et Övversäze un Enreeschte von <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"PHP Hypertext Preprocessor\">PHP</i> met <i lang=\"en\" xml:lang=\"en\">SQLSRV </i> dobei, op Deutsch])",
        "config-header-mysql": "De Enshtällunge för de <i lang=\"en\">MySQL</i> Daatebangk",
        "config-header-postgres": "De Enshtällunge för de <i lang=\"en\">PostgreSQL</i> Daatebangk",
        "config-header-sqlite": "De Enshtällunge för de <i lang=\"en\">SQLite</i> Daatebangk",
-       "config-header-oracle": "De Enshtällunge för de <i lang=\"en\">Oracle</i> Daatebangk",
-       "config-header-mssql": "Enschtällonge för der <i lang=\"en\" xml:lang=\"en\">SQL</i>-ẞööver vun <i lang=\"en\" xml:lang=\"en\">Microsoft</i>",
        "config-invalid-db-type": "Dat es en onjöltijje Zoot Daatebangk.",
        "config-missing-db-name": "Do moß jäd enjävve för \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Do moß jät enjävve för \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "Do moß jät enjävve för \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "Dä Daatebangk ier <i lang=\"en\" title=\"Transparent Network Substrate\">TNS</i> kann nit „$1“ sin, dat es esu nit jöltesch.\nNemm en „TNS-Nahme“ udder ene „<i lang=\"en\" xml:lang=\"en\">Easy-Connect</i>“-<i lang=\"en\" xml:lang=\"en\">Easy-Connect</i>String</i>(Lor noh dädohwähje noh de <i lang=\"en\" xml:lang=\"en\">[http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]</i>)",
        "config-invalid-db-name": "Dä Daatebangk iere Name kann nit „$1“ sin, dä es esu nit jöltesch.\nDöh dörve bloß <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> Boochshtaabe (a-z, A-Z), Zahle (0-9), Ongerstresh (_), un Bendeshtresh (-) dren vörkumme.",
        "config-invalid-db-prefix": "Dä Vörsaz för de Name vun de Tabälle en de Daatebangk kann nit „$1“ sin, dä es esu nit jöltesch.\nDöh dörve bloß <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> Boochshtaabe (a-z, A-Z), Zahle (0-9), Ongerstreshe (_), un Bendeshtreshe (-) dren vörkumme.",
        "config-connection-error": "$1.\n\nDonn de Name för dä Rääschner, vun däm Aanwender för dä Zohjref op de Daatebangk, un et Paßwoot prööfe, repareere, un dann versöhg et norr_ens.",
        "config-invalid-schema": "Dat Schema för MediaWiki kann nit „$1“ sin, dä Name wöhr esu nit jöltesch.\nDöh dörve bloß <i lang=\"en\" title=\"American Standard Code for Information Interchange\">ASCII</i> Boochshtaabe (a-z, A-Z), Zahle (0-9), un Ongerstreshe (_) dren vörkumme.",
-       "config-db-sys-create-oracle": "Dat Projramm för MehdijaWikki opzesäze kann blohß ene <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"SYS - Database Administrator Authentication\">SYSDBA</i>-Zohjang bruche för ene neuje Zohjang zor Dahtebangk ennzereeschte.",
-       "config-db-sys-user-exists-oracle": "Dä Aanwender „$1“ för dä Zohjref op de Daatebangk jidd_et ald. <i lang=\"en\" xml:lang=\"en\" dir=\"ltr\" title=\"SYS - Database Administrator Authentication\">SYSDBA</i> kam_mer bloß bruche, för ene neue Zohjang enzereeschte!",
        "config-postgres-old": "Mer bruche <i lang=\"en\">PostgreSQL</i> $1 udder neuer. Em Momang es <i lang=\"en\">PostgreSQL</i> $2 aam Loufe.",
-       "config-mssql-old": "Dä <i lang=\"en\" xml:lang=\"en\">SQL</i>-ẞööver vun <i lang=\"en\" xml:lang=\"en\">Microsoft</i>   aff de Väsjohn $1 es nüüdesch. Heh es bloß d Väsjohn $2 ze fenge.",
        "config-sqlite-name-help": "Söhk ene Nahme uß, dä Ding Wikki beschrief.\nDonn kein Bendeschresch un Zweschräum en däm Name bruche.\nDä Name weed för der Datteinahme för de <i lang=\"en\">SQLite</i> Dahtebangk jenumme.",
        "config-sqlite-parent-unwritable-group": "Mer kunnte dat Verzeischneß för de Daate, <code lang=\"en\"><nowiki>$1</nowiki></code>, nit enreeschte, weil dat Projramm fö dä Web_ẞööver en dat Verzeischneß doh drövver, <code><nowiki>$2</nowiki></code>, nix erin donn darref.\n\nMer han dä Name vun däm Zohjang op et Süßteem eruß jefonge, onger dämm dat Web_ẞööver_Projramm läuf. Jez moß De bloß doför sorrje, dat dä en dat Verzeischneß  <code><nowiki>$3</nowiki></code> schrieve kann, öm heh wigger maache ze künne.\nOb enem Süßteem met <i lang=\"en\">Unix</i>- oder <i lang=\"en\">Linux</i> jeiht dat esu:\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Mer kunnte dat Verzeischneß för de Daate, <code lang=\"en\"><nowiki>$1</nowiki></code>, nit enreeschte, weil dat Projramm fö dä Web_ẞööver en dat Verzeischneß doh drövver, <code><nowiki>$2</nowiki></code>, nix erin donn darref.\n\nMer han dä Name vun däm Zohjang op et Süßteem nit eruß fenge künne, onger dämm dat Web_ẞööver_Projramm läuf. Jez moß De bloß doför sorrje, dat dä en dat Verzeischneß  <code><nowiki>$3</nowiki></code> schrieve kann, öm heh wigger maache ze künne. Wann De dä Name och nit weiß, maach, dat jeeder_ein doh schrieve kann.\nOb enem Süßteem met <i lang=\"en\">Unix</i>- oder <i lang=\"en\">Linux</i> jeiht dat esu:\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "De Zoot udder et Fommaat vun de Tabälle:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-engine-help": "<strong>InnoDB</strong> es fö jewöhnlesch et beß, weil vill Zohjreffe op eijmohl joot ongershtöz wääde.\n\n<strong>MyISAM</strong> es flöcker op Rääschnere met bloß einem Minsch draan, un bei Wikis, di mer bloß lässe un nit schrieeve kann.\nMyISAM-Daatebangke han em Schnett mih Fähler un jon flöcker kappott, wi InnoDB-Daatebangke.",
-       "config-mssql-auth": "De Zoot Aanmäldong:",
-       "config-mssql-install-auth": "Söhk us, wi dat Aanmälde aan dä Daatebangk vor sesch jonn sull för de Enschtallazjuhn.\nWann De <em>{{int:Config-mssql-windowsauth}}</em> nemms, weed jenumme, met wat emmer dä Wäbßööver aam loufe es.",
-       "config-mssql-web-auth": "Söhk us, wi dat Aanmälde aan dä Daatebangk vör sesch jonn sull för de nommaale Ärbeid vum Wiki.\nWann De <em>{{int:Config-mssql-windowsauth}}</em> nemms, weed dat jenumme, wohmet dä Wäbßööver aam loufe es.",
-       "config-mssql-sqlauth": "De Aanmäldong bemm <i lang=\"en\" xml:lang=\"en\">SQL</i>-ẞööver vun <i lang=\"en\" xml:lang=\"en\">Microsoft</i>",
-       "config-mssql-windowsauth": "De Annmäldong bemm <i lang=\"en\" xml:lang=\"en\">Windows</i>",
        "config-site-name": "Däm Wikki singe Nahme:",
        "config-site-name-help": "Dä douch en dä Övverschreff vun de Brauserfinstere un aan ätlije andere Schtälle op.",
        "config-site-name-blank": "Donn ene Name för di Sait aanjävve.",
index 231271c..ca617d0 100644 (file)
@@ -35,7 +35,6 @@
        "config-db-install-account": "Hesabê bikarhêner bo avakirinê",
        "config-db-username": "Navê bikarhêner bo danagehê:",
        "config-db-password": "Şîfreya danegehê:",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-invalid-db-type": "Cureya danegehê ya nederbasdar",
        "config-sqlite-readonly": "Dosyeya <code>$1</code> ne nivîsbar e.",
        "config-db-web-account": "Hesabê danegehê bô têgihiştina tora înternetê",
index e6e12f1..d38c733 100644 (file)
        "config-using-uri": "D'Server URL  \"<nowiki>$1$2</nowiki>\" gëtt benotzt.",
        "config-db-type": "Datebanktyp:",
        "config-db-host": "Host vun der Datebank:",
-       "config-db-host-oracle": "Datebank-TNS:",
        "config-db-wiki-settings": "Dës Wiki identifizéieren",
        "config-db-name": "Numm vun der Datebank:",
-       "config-db-name-oracle": "Datebankschema:",
        "config-db-install-account": "Benotzerkont fir d'Installatioun",
        "config-db-username": "Datebank-Benotzernumm:",
        "config-db-password": "Passwuert vun der Datebank:",
        "config-db-schema-help": "D'Schemaen hei driwwer si gewéinlech korrekt.\nÄnnert se nëmme wann Dir wësst datt et néideg ass.",
        "config-pg-test-error": "Et ass net méiglech d'Datebank '''$1''' ze kontaktéieren: $2",
        "config-sqlite-dir": "Repertoire vun den SQLite-Donnéeën",
-       "config-oracle-def-ts": "Standard 'tablespace':",
-       "config-oracle-temp-ts": "Temporären 'tablespace':",
        "config-type-mysql": "MariaDB, MySQL, oder kompatibel",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] ass e beléiften Open-Source-Datebanksystem an eng Alternativ zu MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Uleedung fir d'Kompilatoun vu PHP mat PostgreSQL-Ënnerstëtzung])",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] ass eng kommerziell Datebank-Software. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP mat OCI8 Ënnerstëtzung])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] ass eng kommerziell Datebank-Software fir Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Wéi PHP mat SQLSRV Ënnerstëtzung kompiléieren])",
        "config-header-mysql": "MariaDB/MySQL-Astellungen",
        "config-header-postgres": "PostgreSQL-Astellungen",
        "config-header-sqlite": "SQLite-Astellungen",
-       "config-header-oracle": "Oracle-Astellungen",
-       "config-header-mssql": "Microsoft SQL Server Astellungen",
        "config-invalid-db-type": "Net valabelen Datebank-Typ",
        "config-missing-db-name": "Dir musst e Wäert fir \"{{int:config-db-name}}\" aginn",
        "config-missing-db-host": "Dir musst e Wäert fir \"{{int:config-db-host}}\" aginn.",
-       "config-missing-db-server-oracle": "Dir musst e Wäert fir \"{{int:config-db-host-oracle}}\" aginn",
        "config-connection-error": "$1.\n\nKuckt den Numm vum Server, de Benotzernumm an d'Passwuert no a probéiert et nach eng Kéier.",
-       "config-db-sys-user-exists-oracle": "De Benotzerkont \"$1\" gëtt et schonn. SYSDBA kann nëmme benotzt gi fir en neie Benotzerkont opzemaachen.",
        "config-postgres-old": "PostgreSQL $1 oder eng méi nei Versioun gëtt gebraucht, Dir hutt $2.",
-       "config-mssql-old": "Microsoft SQL Server $1 oder eng méi rezent Versioun gëtt gebraucht. Dir hutt d'Versioun $2.",
        "config-sqlite-name-help": "Sicht en Numm deen Är wiki identifizéiert.\nBenotzt keng Espacen a Bindestrécher.\nE gëtt fir den Numm vum SQLite Date-Fichier benotzt.",
        "config-sqlite-readonly": "An de Fichier <code>$1</code> Kann net geschriwwe ginn.",
        "config-sqlite-cant-create-db": "Den Datebank-Fichier <code>$1</code> konnt net ugeluecht ginn.",
        "config-db-web-account-same": "Dee selwechte Kont wéi bei der Installatioun benotzen",
        "config-db-web-create": "De Kont uleeë wann et e net scho gëtt",
        "config-mysql-innodb": "InnoDB (recommandéiert)",
-       "config-mssql-auth": "Typ vun der Authentifikatioun:",
-       "config-mssql-sqlauth": "SOL-Server-Authentifikatioun",
-       "config-mssql-windowsauth": "Windows-Authentifikatioun",
        "config-site-name": "Numm vun der Wiki:",
        "config-site-name-help": "Dësen daucht an der Titelleescht vum Browser an op verschiddenen anere Plazen op.",
        "config-site-name-blank": "Gitt den Numm vum Site un.",
index a1b55a8..17a0c6e 100644 (file)
@@ -41,7 +41,6 @@
        "config-diff3-bad": "GNU diff3 neet gevónje.",
        "config-db-type": "Databanksaort:",
        "config-db-host": "Databankgashieër:",
-       "config-db-host-oracle": "Databank-TNS:",
        "config-db-wiki-settings": "Identificeer deze wiki",
        "config-db-name": "Databanknaam:",
        "mainpagetext": "<strong>MediaWiki software geïnsjtalleerd.</strong>",
index d555bc7..7ad56ff 100644 (file)
        "config-db-type": "Tipo de database:",
        "config-db-host": "Host do database:",
        "config-db-host-help": "Se o serviou do to database o l'è insce 'n serviou despægio, inmetti chì o nomme de l'host ò o so adresso IP.\n\nSe ti doeuvi un web hosting condiviso, o to hosting provider o doviæ fornite o nomme host corretto inta so documentaçion.\n\nSe t'ê aproeuvo a instalâ insce 'n serviou Windows con uso de MySQL, l'uso de \"localhost\" o porriæ no fonçionâ correttamente comme nomme do serviou. In caxo de problemi, proeuva a impostâ \"127.0.0.1\" comme adresso IP locale.\n\nSe ti t'adoeuvi PostgreSQL, lascia questo campo voeuo pe consentî de connettise trammite un socket Unix.",
-       "config-db-host-oracle": "TNS do database:",
-       "config-db-host-oracle-help": "Inseisci un vallido [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; un file tnsnames.ora o dev'ese vixibbile a questa installaçion.<br />Se ti t'adoeuvi a libraia cliente 10g o ciù reçente ti poeu ascì doeuviâ o mettodo de denominaçion [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identiffica questo wiki",
        "config-db-name": "Nomme do database:",
        "config-db-name-help": "Çerni un nomme ch'o l'identiffiche o to wiki.\nO no deve contegnî de spaççi.\n\nSe ti doeuvi un web hosting condiviso, o to hosting provider o te fornisce un speciffico nomme de database da doeuviâ, opû o ti consentiâ de creâ o database trammite un panello de controllo.",
-       "config-db-name-oracle": "Schema do database:",
-       "config-db-account-oracle-warn": "Gh'è trei scenarri supportæ pe instalâ l'Oracle comme database de backend:\n\nSe t'oeu creâ 'n'utença de database comme parte do processo d'instalaçion, fornisci un account con rollo SYSDBA comme utença de database pe l'instalaçion e speciffica e credençiæ vosciue pe l'utença d'accesso web, sedonque l'è poscibbile creâ manoalmente l'utença d'accesso web e fornî solo quell'account (s'o g'ha e aotorizaçioin necessaie pe creâ i ogetti do schema) ò fornî doe utençe despæge, un-a co-i permissi de creaçion e un-a pe l'accesso web.\n\nO Script pe creâ un'utença co-e aotorizaçioin necessaie o se troeuva inta directory \"maintenance/oracle/\" de questa instalaçion. Tegnit'amente che l'uzo de 'n'utença con restriçioin o dizabilitiâ tutte e fonçionalitæ de manutençion con l'account predefinio.",
        "config-db-install-account": "Account utente pe l'instalaçion",
        "config-db-username": "Nomme utente do database:",
        "config-db-password": "Password do database:",
        "config-pg-test-error": "Imposcibbile conettise a-o database '''$1''': $2",
        "config-sqlite-dir": "Cartella dæti de SQLite:",
        "config-sqlite-dir-help": "SQLite o memorizza tutti i dæti inte 'n unnico file.\n\nA directory che t'indichiæ a dev'ese scrivibile da-o serviou web durante l'instalaçion.\n\nA dev'ese <strong>non acescibbile via web</strong>, l'è pe questo che no a mettemmo donde gh'è i file PHP.\n\nL'instalou o ghe scriviâ insemme un file <code>.htaccess</code>, ma se o tentativo o falisse quarcun poriæ avei accesso a-o database sgroeuzzo.\nQuesto o l'includde di dæti utente sgroeuzzi (adressi, password çiffræ) coscì comme de vercsioin eliminæ e atri dæti a accesso limitou da wiki.\n\nConsciddera a-a dreitua l'oportunitæ d'alugâ o database da quarch'atra parte, prezempio in <code>/var/lib/mediawiki/tuowiki</code>.",
-       "config-oracle-def-ts": "Tablespace pe difetto:",
-       "config-oracle-temp-ts": "Tablespace tempoannio:",
        "config-type-mysql": "MariaDB, MySQL ò compatibbile",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki o supporta i seguenti scistemi de database:\n\n$1\n\nSe fra quelli elencæ chì de sotta no ti veddi o scistema de database che ti voriesci doeuviâ, segui e instruçioin inganciæ de d'ato pe abilitâ o supporto.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] a l'è a primma scelta pe MediaWiki e a l'è quella megio suportâ. MediaWiki a fonçion-a ascì con [{{int:version-db-mariadb-url}} MariaDB] e [{{int:version-db-percona-url}} Percona Server], che son compatibbili con MySQL.([https://www.php.net/manual/en/mysqli.installation.php Comme compilâ PHP con suporto MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] o l'è un popolare scistema de database open source comme alternativa a MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Comme compilâ PHP con suporto PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] o l'è un scistema de database leggio, ch'o l'è suportou molto ben. ([http://www.php.net/manual/en/pdo.installation.php Comme compilâ PHP con suporto SQLite], o l'utilizza PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] o l'è un database de un'impreiza comerciâ. ([http://www.php.net/manual/en/oci8.installation.php Comme compilâ PHP con suporto OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] o l'è un database de un'impreiza commerciâ per Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Comme compilâ PHP con supporto SQLSRV])",
        "config-header-mysql": "Impostaçioin MySQL",
        "config-header-postgres": "Impostaçioin PostgreSQL",
        "config-header-sqlite": "Impostaçioin SQLite",
-       "config-header-oracle": "Impostaçioin Oracle",
-       "config-header-mssql": "Impostaçioin do Microsoft SQL Server",
        "config-invalid-db-type": "Tipo de database non vallido",
        "config-missing-db-name": "Ti g'hæ da mettighe un valô pe \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Ti g'hæ da mettighe un valô pe \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "L'è necessaio inmettere un valô pe \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "TNS database \"$1\" non vallido.\nAdoeuvia \"TNS Name\" ò 'na stringa \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods]).",
        "config-invalid-db-name": "Nomme de database \"$1\" non vallido.\nAdoeuvia solo che di caratteri ASCII comme lettie (a-z, A-Z), nummeri (0-9), sottoliniatua (_) e trattin (-).",
        "config-invalid-db-prefix": "Prefisso database \"$1\" non vallido.\nChe ti doeuvi solo di caratteri ASCII comme lettie (a-z, A-Z), nummeri (0-9), sottoliniatua (_) e trattin (-).",
        "config-connection-error": "$1.\n\nControlla l'host, o nomme utente e a password, e proeuva torna.",
        "config-invalid-schema": "Schema MediaWiki \"$1\" non vallido.\nChe ti doeuvi solo lettie ASCII (a-z, A-Z), nummeri (0-9) ò caratteri de sottoliniatua (_).",
-       "config-db-sys-create-oracle": "O programma d'instalaçion o suporta solo l'utilizzo de 'n account SYSDBA pe-a creaçion de 'n noeuvo account.",
-       "config-db-sys-user-exists-oracle": "L'utença \"$1\" a l'existe za. SYSDBA o poeu vese doeuviou solo che pe-a creaçion de 'na noeuva utença!",
        "config-postgres-old": "Ghe voeu MySQL $1 ò 'na verscion succesciva. Ti ti g'hæ a $2.",
-       "config-mssql-old": "Ghe voeu Microsoft SQL Server $1 ò succescivo. Ti ti g'hæ a verscion $2.",
        "config-sqlite-name-help": "Çerni un nomme ch'o l'identiffiche a to wiki.\nNo doeuviâ spaÇçi ò trattin.\nQuesto o serviâ pe-o nomme do file di dæti SQLite.",
        "config-sqlite-parent-unwritable-group": "No se poeu creâ a directory dæti <code><nowiki>$1</nowiki></code>, percose a directory supeiô <code><nowiki>$2</nowiki></code> a no l'è scrivibbile da-o webserver.\n\nO programma d'instalaÇion o l'ha determinou l'utente con chi o serviou web o l'è in esecuçion.\nDagghe a poscibilitæ de scrive inta directory <code><nowiki>$3</nowiki></code> pe continoâ.\nInsce un scistema Unix/Linux fanni:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "No se poeu creâ a directory dæti <code><nowiki>$1</nowiki></code>, percose a directory supeiô <code><nowiki>$2</nowiki></code> a no l'è scrivibbile da-o webserver.\n\nO programma d'instalaçion o no l'ha posciuo determinâ l'utente con chi o serviou web o l'è in esecuçion.\nRendi a directory <code><nowiki>$3</nowiki></code> scrivibbile globalmente, da esso (e da atri) pe continoâ.\nInsce un scistema Unix/Linux fanni:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Motô d'archiviaçion:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-engine-help": "<strong>InnoDB</strong> o l'è quæxi sempre a megio opçion, in quante o g'ha 'n bon supporto da concorença.\n\n<strong>MyISAM</strong> o poriæ vese ciu veloçe inte installaçioin mono-utente ò in sola-lettua.\nI database MyISAM tendan a dannezâse ciu soventi di database InnoDB.",
-       "config-mssql-auth": "Tipo d'aotenticaçion:",
-       "config-mssql-install-auth": "Seleçion-a o tipo d'aotenticaçion ch'o saiâ doeuviou pe conettise a-o database durante o processo de instalaçion.\nSe ti seleçion-i \"{{int:config-mssql-windowsauth}}\", saiâ doeuviou e credençiæ de quæ se segge utente segge aproeuv'a fâ giâ o serviou web.",
-       "config-mssql-web-auth": "Seleçion-a o tipo d'aotenticaçion che o serviou web o doeuviâ pe conettise a-o database. \nSe ti seleçion-i \"{{int:config-mssql-windowsauth}}\", saiâ doeuviou e credençiæ de quæ se segge utente segge aproeuv'a fâ giâ o serviou web.",
-       "config-mssql-sqlauth": "Aotenticaçion de SQL Server",
-       "config-mssql-windowsauth": "Aotenticaçion de Windows",
        "config-site-name": "Nomme da wiki:",
        "config-site-name-help": "Questo saiâ vixualizou inta bara do tittolo do navegatô e in atri varri recanti.",
        "config-site-name-blank": "Inseisci o nomme de 'n scito.",
index a637c09..6d06e25 100644 (file)
@@ -62,7 +62,6 @@
        "config-memory-bad": "'''هشدار:''' PHP's <code>memory_limit</code> نسخهٔ $1 است.\nاین ممکن است خیلی پایین باشد.\nممکن است نصب با مشکل رو‌به‌رو شود.",
        "config-db-type": "نوع پایگاه اطلاعات:",
        "config-db-host": "میزبان پایگاه اطلاعات:",
-       "config-db-host-oracle": "ای ویکیۀ  شناسایی کۀ.",
        "config-db-name": "نام پایگاه اطلاعات:",
        "config-upgrade-done": "تکمیل ارتقاء.\nاکنون شما می‌توانید [$1 start using your wiki].\nاگر می‌خواهید پوشهٔ <code>LocalSettings.php</code> را احیا کنید،دکمهٔ زیر را کلیک کنید.\nاین ''' توصیه نمی‌شود ''' مگر اینکه با ویکی خود مشکل داشته باشید.",
        "config-site-name-blank": "نام سایتئ وارد کۀن.",
index a4c524b..8cb1ae7 100644 (file)
        "config-using-uri": "Naudojamas serverio URL „<nowiki>$1$2</nowiki>“.",
        "config-db-type": "Duomenų bazės tipas:",
        "config-db-host": "Duomenų bazės serveris:",
-       "config-db-host-oracle": "Duomenų bazės TNS:",
        "config-db-wiki-settings": "Identifikuoti šią viki",
        "config-db-name": "Duomenų bazės pavadinimas:",
-       "config-db-name-oracle": "Duomenų bazės schema:",
        "config-db-install-account": "Vartotojo paskyra diegimui",
        "config-db-username": "Duomenų bazės vartotojo vardas:",
        "config-db-password": "Duomenų bazės slaptažodis:",
        "config-db-schema": "MediaWiki schema:",
        "config-pg-test-error": "Negalima prisijungti prie duomenų bazės <strong>$1</strong>: $2",
        "config-sqlite-dir": "SQLite duomenų katalogas:",
-       "config-oracle-def-ts": "Numatytoji lentelių sritis:",
-       "config-oracle-temp-ts": "Laikina lentelių sritis:",
        "config-type-mysql": "MySQL (arba suderinama)",
-       "config-type-mssql": "Microsoft SQL serveris",
        "config-header-mysql": "MySQL nustatymai",
        "config-header-postgres": "PostgreSQL nustatymai",
        "config-header-sqlite": "SQLite nustatymai",
-       "config-header-oracle": "Oracle nustatymai",
-       "config-header-mssql": "„Microsoft“ SQL serverio nustatymai",
        "config-invalid-db-type": "Neteisingas duomenų bazės tipas",
        "config-missing-db-name": "Privalote įvesti „{{int:config-db-name}}“ reikšmę.",
        "config-missing-db-host": "Privalote įvesti „{{int:config-db-host}}“ reikšmę.",
-       "config-missing-db-server-oracle": "Privalote įvesti „{{int:config-db-host-oracle}}“ reikšmę.",
        "config-postgres-old": "PostgreSQL $1 ar vėlesnė yra reikalinga. Jūs turite $2.",
        "config-sqlite-cant-create-db": "Nepavyko sukurti duomenų bazės failo <code>$1</code>.",
        "config-regenerate": "Pergeneruoti LocalSettings.php →",
@@ -99,9 +91,6 @@
        "config-db-web-create": "Sukurti paskyrą, jeigu jos nėra",
        "config-mysql-engine": "Saugojimo variklis:",
        "config-mysql-innodb": "InnoDB",
-       "config-mssql-auth": "Autentifikavimo tipas:",
-       "config-mssql-sqlauth": "SQL Serverio autentifikavimas",
-       "config-mssql-windowsauth": "Windows autentifikavimas",
        "config-site-name": "Viki pavadinimas:",
        "config-site-name-blank": "Įveskite svetainės pavadinimą.",
        "config-project-namespace": "Projekto vardų sritis:",
index 675e3db..3546be0 100644 (file)
@@ -29,7 +29,6 @@
        "config-env-hhvm": "HHVM $1 ir uzstādīts.",
        "config-apcu": "[https://www.php.net/apcu APCu] ir uzstādīts",
        "config-diff3-bad": "GNU diff3 nav atrasts.",
-       "config-db-host-oracle": "Datubāzes TNS:",
        "config-db-name": "Datubāzes nosaukums:",
        "config-db-username": "Datubāzes lietotājvārds:",
        "config-db-password": "Datubāzes parole:",
        "config-header-mysql": "MySQL iestatījumi",
        "config-header-postgres": "PostgreSQL iestatījumi",
        "config-header-sqlite": "SQLite iestatījumi",
-       "config-header-oracle": "Oracle iestatījumi",
-       "config-header-mssql": "Microsoft SQL servera iestatījumi",
        "config-mysql-innodb": "InnoDB",
-       "config-mssql-windowsauth": "Windows Autentifikācija",
        "config-ns-generic": "Projekts",
        "config-ns-site-name": "Tāds pats kā viki nosaukums: $1",
        "config-ns-other": "Cits (jānorāda)",
index a3d824b..820b9b0 100644 (file)
@@ -48,7 +48,6 @@
        "config-db-type": "Karazana banky angona:",
        "config-db-host": "Anaran'ny lohamilin'ny banky angona:",
        "config-db-host-help": "Raha lohamila hafa ny lohamilin'ny banky angona, dia atsofohy eto ny anaran'ilay lohamilina na ny adiresy IP-ny.\n\nRaha mampiasa fampiantranoana iombonana ianao dia tokony hanome anao ny anaran-dohamilina izy ao amin'ny toromariny.\n\nRaha mametraka amin'ny lohamilina Windows ianao sady mampiasa MySQL, dia mety tsy mandeha ny anaran-dohamilina \"localhost\". Raha tsy mandeha ilay izy dia \"127.0.0.1\" no atao adiresy IP an-toerana.\n\nRaha mampiasa PostgreSQL ianao, dia avelaho ho fotsy ity saha ity ahafahana mifandray amin'ny alalan'ny socket Unix.",
-       "config-db-host-oracle": "TNS an'ny banky angona:",
        "config-db-username": "Anaram-pikamban'ny banky angona :",
        "config-db-password": "Tenimiafin'ny banky angona :",
        "config-db-prefix": "Tovom-banky angona:",
@@ -56,8 +55,6 @@
        "config-header-mysql": "Parametatr'i MySQL",
        "config-header-postgres": "Parametatra PostgreSQL",
        "config-header-sqlite": "Parametatr'i SQLite",
-       "config-header-oracle": "Parametatr'i Oracle",
-       "config-header-mssql": "Parametatry ny lohamilina Microsoft SQL Server",
        "config-invalid-db-type": "Karazana banky angona tsy ekena.",
        "config-mysql-innodb": "innoDB",
        "config-ns-generic": "Tetikasa",
index e652683..c5b9932 100644 (file)
        "config-db-type": "Тип на база:",
        "config-db-host": "Домаќин на базата:",
        "config-db-host-help": "Ако вашата база е на друг опслужувач, тогаш тука внесете го името на домаќинот или IP-адресата.\n\nАко користите заедничко (споделено) вдомување, тогаш вашиот вдомител треба да го наведе точното име на домаќинот во неговата документација.\n\nАко користите MySQL, можноста „localhost“ може да не функционира за опслужувачкото име. Во тој случај, обидете се со внесување на „127.0.0.1“ како месна IP-адреса.\n\nАко користите PostgreSQL, оставете го полево празно за да се поврзете преку Unix-приклучок.",
-       "config-db-host-oracle": "TNS на базата:",
-       "config-db-host-oracle-help": "Внесете важечко [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm месно име за поврзување]. На оваа воспоставка мора да ѝ биде видлива податотеката tnsnames.ora.<br />Ако користите клиентски библиотеки 10g или понови, тогаш можете да го користите и методот на иметнување на [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Идентификувај го викиво",
        "config-db-name": "Име на базата (без цртички):",
        "config-db-name-help": "Одберете име што ќе го претставува вашето вики.\nИмето не смее да содржи празни места.\n\nАко користите заедничко (споделено) вдомување, тогаш вашиот вдомител ќе ви даде конкретно име на база за користење, или пак ќе ви даде да создавате бази преку управувачницата.",
-       "config-db-name-oracle": "Шема на базата:",
-       "config-db-account-oracle-warn": "Постојат три поддржани сценарија за воспоставка на Oracle како базен услужник:\n\nАко сакате да создадете сметка на базата како дел од постапката за воспоставка, наведете сметка со SYSDBA-улога како сметка за базата што ќе се воспостави и наведете ги саканите податоци за сметката за мрежен пристап. Во друг случај, можете да создадете сметка за мрежен пристап рачно и да ја наведете само таа сметка (ако има дозволи за создавање на шематски објекти) или пак да наведете две различни сметки, една со привилегии за создавање, а друга (ограничена) за мрежен пристап.\n\nСкриптата за создавање сметка со задолжителни привилегии ќе ја најдете во папката „maintenance/oracle/“ од оваа воспоставка. Имајте на ум дека ако користите ограничена сметка ќе ги оневозможите сите функции за одржување со основната сметка.",
        "config-db-install-account": "Корисничка смета за воспоставка",
        "config-db-username": "Корисничко име за базата:",
        "config-db-password": "Лозинка за базата:",
        "config-pg-test-error": "Не можам да се поврзам со базата <strong>$1</strong>: $2",
        "config-sqlite-dir": "Папка на SQLite-податоци:",
        "config-sqlite-dir-help": "SQLite ги складира сите податоци во една податотека.\n\nПапката што ќе ја наведете мора да е запислива од мрежниот опслужувач во текот на воспоставката.\n\nТаа '''не''' смее да биде достапна преку семрежјето, и затоа не ја ставаме кајшто ви се наоѓаат PHP-податотеките.\n\nВоспоставувачот воедно ќе создаде податотека <code>.htaccess</code>, но ако таа не функционира како што треба, тогаш некој ќе може да ви влезе во вашата необработена (сирова) база на податоци.\nТука спаѓаат необработени кориснички податоци (е-поштенски адреси, хеширани лозинки) како и избришани преработки и други податоци за викито до кои се има ограничен пристап.\n\nСе препорачува целата база да ја сместите некаде, како на пр. <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Стандарден таблеарен простор:",
-       "config-oracle-temp-ts": "Привремен табеларен простор:",
        "config-type-mysql": "MariaDB, MySQL или складно",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "МедијаВики ги поддржува следниве системи на бази на податоци:\n\n$1\n\nАко системот што сакате да го користите не е наведен подолу, тогаш проследете ја горенаведената врска со инструкции за да овозможите поддршка за тој систем.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] е главната цел на МедијаВики и најдобро е поддржан. МедијаВики работи и со  [{{int:version-db-mysql-url}} MySQL] и [{{int:version-db-percona-url}} Percona], кои се складни со MariaDB. ([https://www.php.net/manual/en/mysqli.installation.php Како да срочите PHP со поддршка за MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] е популарен систем на бази на податоци со отворен код кој претставува алтернатива на MySQL ([https://www.php.net/manual/en/pgsql.installation.php како да составите PHP со поддршка за PostgreSQL]). ([https://www.php.net/manual/en/pgsql.installation.php Како да срочите PHP со поддршка за PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] е лесен систем за бази на податоци кој е многу добро поддржан. ([https://www.php.net/manual/en/pdo.installation.php Како да составите PHP со поддршка за SQLite], користи PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] е база на податоци на комерцијално претпријатие. ([https://www.php.net/manual/en/oci8.installation.php Како да составите PHP со поддршка за OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server]  е база на податоци на комерцијално претпријатиe за Windows ([https://www.php.net/manual/en/sqlsrv.installation.php How to compile PHP with SQLSRV поддршка])",
        "config-header-mysql": "Нагодувања на MariaDB/MySQL",
        "config-header-postgres": "Нагодувања на PostgreSQL",
        "config-header-sqlite": "Нагодувања на SQLite",
-       "config-header-oracle": "Нагодувања на Oracle",
-       "config-header-mssql": "Нагодувања за Microsoft SQL Server",
        "config-invalid-db-type": "Неважечки тип на база",
        "config-missing-db-name": "Мора да внесете значење за параметарот „{{int:config-db-name}}“.",
        "config-missing-db-host": "Мора да внесете вредност за „{{int:config-db-host}}“.",
-       "config-missing-db-server-oracle": "Мора да внесете вредност за „{{int:config-db-host-oracle}}“.",
-       "config-invalid-db-server-oracle": "Неважечки TNS „$1“.\nКористете или „TNS Name“ или низата „Easy Connect“ ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Методи на именување за Oracle])",
        "config-invalid-db-name": "Неважечко име на базата „$1“.\nКористете само ASCII-букви (a-z, A-Z), бројки (0-9), долни црти (_) и цртички (-).",
        "config-invalid-db-prefix": "Неважечка претставка за базата „$1“.\nКористете само ASCII-букви (a-z, A-Z), бројки (0-9), долни црти (_) и цртички (-).",
        "config-connection-error": "$1.\n\nПроверете го долунаведениот домаќин, корисничко име и лозинка и обидете се повторно. Ако користите „localhost“ како домаќин на базата, заменете го со „127.0.0.1“ (или обратно).",
        "config-invalid-schema": "Неважечка шема за МедијаВики „$1“.\nКористете само букви, бројки и долни црти.",
-       "config-db-sys-create-oracle": "Воспоставувачот поддржува само употреба на SYSDBA-сметка за создавање на нова сметка.",
-       "config-db-sys-user-exists-oracle": "Корисничката сметка „$1“ веќе постои. SYSDBA служи само за создавање на нова сметка!",
        "config-postgres-old": "Се бара PostgreSQL $1 или поново, а вие имате $2.",
-       "config-mssql-old": "Се бара Microsoft SQL Server $1 или понова верзија. Вие имате $2.",
        "config-sqlite-name-help": "Одберете име кое ќе го претставува вашето вики.\nНе користете празни простори и црти.\nОва ќе се користи за податотечното име на SQLite-податоците.",
        "config-sqlite-parent-unwritable-group": "Не можам да ја создадам папката <code><nowiki>$1</nowiki></code> бидејќи мрежниот опслужувач не може да запише во матичната папка <code><nowiki>$2</nowiki></code>.\n\nВоспоставувачот го утврди корисникот под кој работи вашиот мрежен опслужувач.\nЗа да продолжите, наместете да може да запишува во папката <code><nowiki>$3</nowiki></code>.\nНа Unix/Linux систем направете го следново:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Не можам да ја создадам папката <code><nowiki>$1</nowiki></code> бидејќи мрежниот опслужувач не може да запише во матичната папка <code><nowiki>$2</nowiki></code>.\n\nВоспоставувачот не можеше го утврди корисникот под кој работи вашиот мрежен опслужувач.\nЗа да продолжите, наместете тој (и други!) да може глобално да запишува во папката <code><nowiki>$3</nowiki></code>\nНа Unix/Linux систем направете го следново:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Складишен погон:",
        "config-mysql-innodb": "InnoDB (препорачано)",
        "config-mysql-engine-help": "'''InnoDB''' речиси секогаш е најдобар избор, бидејќи има добра поддршка за едновременост.\n\n'''MyISAM''' може да е побрз кај воспоставките наменети за само еден корисник или незаписни воспоставки (само читање).\nБазите на податоци од MyISAM почесто се расипуваат од базите на InnoDB.",
-       "config-mssql-auth": "Тип на заверка:",
-       "config-mssql-install-auth": "Изберете го типот на заверка што ќе се користи за поврзување со базата на податоци во текот на воспоставката.\nАко изберете „{{int:config-mssql-windowsauth}}“, ќе се користат најавните податоци или корисникот како кој работи мрежниот опслужувач.",
-       "config-mssql-web-auth": "Изберете го типот на заверка што мрежниот послужувач ќе го користи за поврзување со опслужувачот на базата во текот на редовната работа на викито.\nАко изберете „{{int:config-mssql-windowsauth}}“, ќе се користат најавните податоци или корисникот како кој работи мрежниот опслужувач.",
-       "config-mssql-sqlauth": "Заверка за SQL Server",
-       "config-mssql-windowsauth": "Заверка за Windows",
        "config-site-name": "Име на викито:",
        "config-site-name-help": "Ова ќе се појавува во заглавната лента на прелистувачот и на разни други места.",
        "config-site-name-blank": "Внесете име на мрежното место.",
index c1bbec0..8b50625 100644 (file)
@@ -42,7 +42,6 @@
        "config-db-type": "ഡേറ്റാബേസ് തരം:",
        "config-db-host": "ഡേറ്റാബേസ് ഹോസ്റ്റ്:",
        "config-db-name": "ഡേറ്റാബേസിന്റെ പേര്:",
-       "config-db-name-oracle": "ഡേറ്റാബേസ് സ്കീമ:",
        "config-db-install-account": "ഇൻസ്റ്റലേഷനുള്ള ഉപയോക്തൃ അംഗത്വം",
        "config-db-username": "ഡേറ്റാബേസ് ഉപയോക്തൃനാമം:",
        "config-db-password": "ഡേറ്റാബേസ് രഹസ്യവാക്ക്:",
index 9f31fda..a1b7b37 100644 (file)
        "config-db-type": "डाटाबेसचा प्रकार:",
        "config-db-host": "डाटाबेसचा यजमान:",
        "config-db-name": "डाटाबेसचे नाव:",
-       "config-db-name-oracle": "डाटाबेस आकृतीबंध:",
        "config-db-install-account": "उभारणीसाठी सदस्य खाते",
        "config-db-username": "डाटाबेसवरील सदस्यनाव:",
        "config-db-password": "डाटाबेसवरील परवलीचा शब्द:",
        "config-db-prefix": "डाटाबेस सारणी उपसर्ग:",
        "config-db-port": "डाटाबेस द्वार:",
        "config-pg-test-error": "विदागाराशी अनुबंधन करता येत नाही <strong>$1</strong>: $2",
-       "config-type-mssql": "मायक्रोसॉफ्ट एसक्युएल सर्व्हर",
-       "config-header-mssql": "मायक्रोसॉफ्ट एसक्युएल सर्व्हर मांडणावळ",
        "config-invalid-db-type": "डाटाबेसचा अवैध प्रकार.",
        "config-connection-error": "$1.\n\nयजमान,सदस्यनाव व परवलीचा शब्द तपासा व पुन्हा प्रयत्न करा.",
-       "config-mssql-old": "मायक्रोसॉफ्ट एसक्युएल सर्व्हर $1 किंवा त्यानंतरची आवृत्ती हवी. आपणापाशी $2 आहे.",
        "config-upgrade-done-no-regenerate": "दर्जोन्नती पूर्ण.\n\nआपण आता [$1 आपला विकिचा वापर करु शकता].",
-       "config-mssql-auth": "अधिप्रमाणन प्रकार:",
-       "config-mssql-install-auth": "उभारणीच्या(इन्स्टॉलेशन) प्रक्रियेदरम्यान,'अधिप्रमाणन प्रकार'( ऑथेंटीकेशन टाईप) निवडा, ज्याचा वापर डाटाबेसशी अनुबंधनात करण्यात येईल.जर आपण \"{{int:config-mssql-windowsauth}} निवडले तर,ज्याकोणत्याही सदस्याची अधिकारपत्रे(क्रेडेंटियल्स) वेबसर्व्हरवर सुरू असतील,तशीच वापरल्या जातील.",
-       "config-mssql-web-auth": "'अधिप्रमाणन प्रकार'( ऑथेंटीकेशन टाईप) निवडा, ज्यास,या विकिचे सामान्य चालनादरम्यान, वेब सर्व्हर हा डाटाबेसशी अनुबंधन करण्यास वापरेल.जर आपण\"{{int:config-mssql-windowsauth}}\" निवडले तर,ज्याकोणत्याही सदस्याची अधिकारपत्रे(क्रेडेंटियल्स) वेबसर्व्हरवर सुरू असतील,तशीच वापरल्या जातील.",
-       "config-mssql-sqlauth": "एसक्युएल सर्व्हर अधिप्रमाणन",
-       "config-mssql-windowsauth": "विंडोजचे अधिप्रमाणन",
        "config-site-name": "विकिचे नाव:",
        "config-site-name-help": "हे न्याहाळकाच्या शीर्षक पट्टीत व इतर ठिकाणीही दिसेल .",
        "config-site-name-blank": "संकेतस्थळाचे नाव टाका.",
index 1163486..6e1aa71 100644 (file)
@@ -70,9 +70,7 @@
        "config-no-cli-uploads-check": "<strong>Amaran:</strong> Direktori asali anda untuk muat naikan (<code>$1</code>) belum diperiksa untuk kerentanan\nkepada pelaksanaan skrip yang menyeleweng sewaktu pemasangan CLI.",
        "config-db-type": "Jenis pangkalan data:",
        "config-db-host": "Hos pangkalan data:",
-       "config-db-host-oracle": "TNS pangkalan data:",
        "config-db-name": "Nama pangkalan data:",
-       "config-db-name-oracle": "Skema pangkalan data:",
        "config-db-username": "Nama pengguna pangkalan data:",
        "config-db-password": "Kata laluan pangkalan data:",
        "config-db-prefix": "Awalan jadual pangkalan data:",
        "config-db-schema": "Skema untuk MediaWiki:",
        "config-pg-test-error": "Tidak boleh bersambung dengan pangkalan data <strong>$1</strong>: $2",
        "config-sqlite-dir": "Direktori data SQLite:",
-       "config-oracle-def-ts": "Ruang jadual lalai:",
-       "config-oracle-temp-ts": "Ruang jadual sementara:",
        "config-type-mysql": "MySQL (atau yang serasi)",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "Keutamaan MySQL",
        "config-header-postgres": "Keutamaan PostgreSQL",
        "config-header-sqlite": "Keutamaan SQLite",
-       "config-header-oracle": "Keutamaan Oracle",
-       "config-header-mssql": "Tetapan Microsoft SQL Server",
        "config-invalid-db-type": "Jenis pangkalan data tidak sah",
        "config-can-upgrade": "Terdapat jadual MediaWiki dalam pangkalan data ini. Untuk menaik tarafnya kepada MediaWiki $1, klik <strong>Teruskan</strong>.",
        "config-unknown-collation": "<strong>Amaran:</strong> Pangkalan data sedang menggunakan kolasi yang tidak dikenali.",
@@ -96,7 +89,6 @@
        "config-db-web-create": "Ciptakan akaun jika belum wujud",
        "config-mysql-engine": "Enjin storan:",
        "config-mysql-innodb": "InnoDB",
-       "config-mssql-auth": "Jenis pengesahan:",
        "config-site-name": "Nama wiki:",
        "config-site-name-help": "Ini akan dipaparkan pada bar tajuk perisian pelayar dan tempat-tempat lain yang berkenaan.",
        "config-site-name-blank": "Isikan nama tapak.",
index 5662f0a..5b4f2d2 100644 (file)
@@ -35,7 +35,6 @@
        "config-apcu": "[https://www.php.net/apcu APCu] نصب بیه.",
        "config-wincache": "[https://www.iis.net/downloads/microsoft/wincache-extension WinCache] نصب بیه.",
        "config-diff3-bad": "GNU diff3 پیدا نیه.",
-       "config-mssql-auth": "نوع تأیید:",
        "config-ns-generic": "پروژه",
        "config-ns-other": "دیگه ( تعیین هاکنین)",
        "config-ns-other-default": "مه‌ویکی",
index 5379e8d..03e0e99 100644 (file)
        "config-db-type": "Tipo 'e database:",
        "config-db-host": "Host d' 'o database:",
        "config-db-host-help": "Si 'o server database vuosto stà mpizzato dint' 'a nu server differente, miette 'o nomme d' 'o host o l'indirizzo IP sujo.\n\nSi state ausanno nu servizio spartuto web hosting, 'aggenzia 'e hosting v'avess'a dà 'o nomme buono 'e nomme host dint' 'a documentaziona suoja.\n\nSi state installanno chisto dint'a nu server Windows cu MySQL, ausanno \"localhost\" può darse ca nun funziona p' 'o nomme server. Si chisto nun funziona, mettite \"127.0.0.1\" p' 'o ndirizzo locale vuosto.\n\nSi state ausanno PostgreSQL, lassate abbacante stu campo pe' v'accucchià cu nu socket Unix.",
-       "config-db-host-oracle": "TNS d' 'o database:",
-       "config-db-host-oracle-help": "Mettite nu valido [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Nomme 'e conessione lucale]; nu file \"tnsnames.ora\" adda essere vesibbele dint'a sta installazione.<br />Si state ausanno 'a libbreria cliente 10g o cchiù ricente putite pure ausà 'o metodo 'e denominazione [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifica stu wiki",
        "config-db-name": "Nomme d' 'o database:",
        "config-db-name-help": "Sciglite nu nomme ca identificasse 'a wiki vosta.\nNun avess'a cuntenè spazie.\n\nSi ausate nu web hosting spartuto, 'o furnitore d' 'o hosting v'avesse 'a specificà nu nomme 'e database specifico pe' ve permettere 'e crià database pe' bbìa 'e nu pannello 'e cuntrollo.",
-       "config-db-name-oracle": "Schema d' 'o database:",
-       "config-db-account-oracle-warn": "Ce stanno tre scenarie suppurtate p' 'a installazione d'Oracle comme database 'e backend:\n\nSi vulite crià n'utenza 'e database comme parte d' 'o prucesso 'e installazione, dàte nu cunto c' 'o ruolo SYSDBA comme utenza d' 'o database pe ne fà installazione e specificate 'e credenziale vulute pe' ne fà l'utenza d'acciesso web, sinò è possibbele crià manualmente l'utenza d'accesso web e dà surtanto chillu cunto (si tenite autorizzaziune neccessarie pe' crià oggette 'e stu schema) po dà dduje utenze divierze, una ch' 'e permesse 'e criazione e n'ata pe ne putè trasì ô web.\n\n'O script p' 'a criazione 'e n'utenza cu tutte st'autorizzaziune neccessarie 'o putite truvà dint' 'a cartella \"maintenance/oracle\" 'e sta installazione. Tenite a mmente che l'uso 'e n'utenza cu sti restriziune stutarrà tutt' 'e funziune 'e manutenzione c' 'o cunto predefinito.",
        "config-db-install-account": "Cunto utente pe' l'installazione",
        "config-db-username": "Nomme utente p' 'o database:",
        "config-db-password": "Password d' 'o database:",
        "config-pg-test-error": "Nun se può connettà a 'o database <strong>$1</strong>: $2",
        "config-sqlite-dir": "Cartella 'e data 'e SQLite:",
        "config-sqlite-dir-help": "SQLite astipa tutte 'e date dint'a n'uneco file.\n\n'A cartella ca starraje a innecà adda essere scrivibbele d' 'o server webe pe' tramente ca sta l'istallazione.\n\nAvess'a essere <strong>nun trasibbele via web</strong>, è pecchesto ca nun se sta mettenno addò stanno 'e file PHP.\n\nL'installatore scriverrà nzieme a chesta nu file <code>.htaccess</code>, ma si 'o tentativo scassasse, coccheruno putesse tenè acciesso dint' 'o database ncruro.\nChesto pure cunzidera 'e date ncruro 'e ll'utente (indirizze, password cifrate) accussì comme 'e verziune luvate e ati dati d'accesso limmetato dint' 'o wiki.\n\nCunzidera ll'opportunità 'e sistimà ô tiempo 'o database 'a n'ata parte, p'esempio int'a <code>/var/lib/mediawiki/tuowiki</code>.",
-       "config-oracle-def-ts": "Tablespace 'e default:",
-       "config-oracle-temp-ts": "Tablespace temporaneo:",
        "config-type-mysql": "MariaDB, MySQL o compatibbele",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki supporta 'e sisteme 'e database ccà abbascio:\n\n$1\n\nSi nfra chiste ccà nun vedite 'o sistema 'e database ca vulite ausà, allora avite liegge 'e instruziune ccà ncoppa pe' ne dà supporto.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] è 'a configurazione cchiù mmeglio p' 'o MediaWiki e è chilla meglio suppurtata. MediaWiki può faticà pure cu' [{{int:version-db-mariadb-url}} MariaDB] e [{{int:version-db-percona-url}} Percona Server], ca fossero MariaDB cumpatibbele. ([https://www.php.net/manual/en/mysqli.installation.php Comme s'adda fà pe' cumpilà PHP cu suppuorto MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] è nu sistema canusciuto 'e database open source ca fosse n'alternativa a MySQL.\n([https://www.php.net/manual/en/pgsql.installation.php Comme s'avess'a cumpilà PHP cu suppuorto PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite]  è nu sistema 'e database leggero, ca fosse assaje buono suppurtato.\n([https://www.php.net/manual/en/pdo.installation.php Comme cumpilà PHP cu suppuorto SQLite], aùsa PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] è nu database 'e na fraveca commerciale. ([https://www.php.net/manual/en/oci8.installation.php Comme cumpilà PHP cu suppuorto OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] è nu database 'e na fraveca commerciale p' 'o Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Comme cumpilà PHP cu suppuorto SQLSRV])",
        "config-header-mysql": "Mpustaziune MariaDB/MySQL",
        "config-header-postgres": "Mpustaziune PostgreSQL",
        "config-header-sqlite": "Mpustaziune SQLite",
-       "config-header-oracle": "Mpustaziune Oracle",
-       "config-header-mssql": "Mpustaziune 'e Microsoft SQL Server",
        "config-invalid-db-type": "'O tipo 'e database nun è buono.",
        "config-missing-db-name": "Avita miette nu valore p' 'o \"{{int:config-db-name}}\"",
        "config-missing-db-host": "Avita miette nu valore p' 'o \"{{int:config-db-host}}\"",
-       "config-missing-db-server-oracle": "Avita miette nu valore p' 'o \"{{int:config-db-host-oracle}}\"",
-       "config-invalid-db-server-oracle": "'O database 'e TNS \"$1\" nun è buono.\nAusate 'o \"TNS Name\" o na catena d' \"Easy Connect\"([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Metude 'e Nommena Oracle]).",
        "config-invalid-db-name": "Nomme 'e database \"$1\" nun valido.\nAúsa surtanto carattere ASCII comme lettere (a-z, A-Z), nummere (0-9), sottolineatura (_) e trattine (-).",
        "config-invalid-db-prefix": "Prefisso database \"$1\" nun valido.\nAúsa surtanto carattere ASCII comme lettere (a-z, A-Z), nummere (0-9), sottolineatura (_) e trattine (-).",
        "config-connection-error": "$1.\n\nCuntrullate 'o host, nomme utente e password e tentate n'ata vota.",
        "config-invalid-schema": "Schema MediaWiki \"$1\" nun è buono.\nAusate surtanto 'e lettere ASCII (a-z, A-Z), nummere (0-9) e carattere 'e sottolineatura (_).",
-       "config-db-sys-create-oracle": "'O prugramma 'e installazione supporta surtanto l'uso 'e nu cunto SYSDBA pe' putè crià nu cunto nuovo.",
-       "config-db-sys-user-exists-oracle": "'O cunto utente \"$1\" esiste già. SYSDBA se pò ausà surtanto pe' crià cunte nuove!",
        "config-postgres-old": "PostgreSQL $1 o cchiù muderno è necessario. Vuje tenite $2.",
-       "config-mssql-old": "Microsoft SQL Server $1 o cchiù muderno è necessario. Vuje tenite $2.",
        "config-sqlite-name-help": "Sciglite nu nomme ca identificasse 'o wiki vuosto.\nNun ausà spazie o trattine.\nChesto serverrà pe' putè miettere 'o nomme ro file 'e date SQLite.",
        "config-sqlite-parent-unwritable-group": "Nun se pò crià 'a cartella 'e date <code><nowiki>$1</nowiki></code>, pecché 'a cartella supiriore <code><nowiki>$2</nowiki></code> nun se pò scrivere 'a 'o webserver.\n\n'O prugramma d'installazione ha determinato l'utente c' 'o quale 'o server web se stà a esecutà.\nDàte 'a pussibbelità 'e scrivere dint' 'a cartella <code><nowiki>$3</nowiki></code> pe' cuntinuà\nNcopp'a nu sistema Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Nun se può crià na cartella 'e date <code><nowiki>$1</nowiki></code>, pecché 'a cartella patre <code><nowiki>$2</nowiki></code> nun è scrivibbele p' 'o server web.\n\n'O prugramma 'e installazione nun ave pututo determinà l'utente c' 'o quale se stà ausanno 'o server web.\nFacite 'a cartella <code><nowiki>$3</nowiki></code> screvibbele globbalmente pe chisto (e ll'ati!) pe' putè cuntinuà:\nDint'a nu sistema Unix/Linux facite:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Mutore d'astipo:",
        "config-mysql-innodb": "InnoDB (fosse 'o cunzigliato)",
        "config-mysql-engine-help": "<strong>InnoDB</strong> è quase sempe 'a meglia opzione, pecché ave nu buono suppuorto concorrente.\n\n<strong>MyISAM</strong> putesse ghì cchiù ampressa int'a na installazione mono-utente e liegge-surtanto.\n'E database MyISAM se scassano cchiù spisso d' 'e database InnoDB.",
-       "config-mssql-auth": "Tipo d'autenticazione:",
-       "config-mssql-install-auth": "Sceglie 'o tipo d'autenticazziona ca s'ausarrà pe cunnettà â database, durante ll'operazziona d'istallazziona. Si piglie \"{{int:config-mssql-windowsauth}}\", 'e credenziale 'e qualunque fosse ll'utenza ca 'o webserver sta pruciessanno sarranno ausate.",
-       "config-mssql-web-auth": "Sceglie 'o tipo d'autenticazziona ca 'o web server pigliarrà pe se cunnettà a 'o server 'e bbase 'e dati, durante ll'operazziona nurmale d' 'a wiki.\nSi piglie \"{{int:config-mssql-windowsauth}}\", 'e credenziale 'e qualunque fosse ll'utenza ca 'o webserver sta pruciessanno sarranno ausate.",
-       "config-mssql-sqlauth": "Autenticazione 'e SQL Server",
-       "config-mssql-windowsauth": "Autenticazione 'e Windows",
        "config-site-name": "Nomme d' 'o wiki:",
        "config-site-name-help": "Chisto cumparerrà dint' 'a barra d' 'o titolo d' 'o navigatore e pure dint'a n'ati pizze.",
        "config-site-name-blank": "Scrive 'o nomme d' 'o sito.",
index 522294f..ba5af6c 100644 (file)
        "config-db-type": "Databasetype:",
        "config-db-host": "Databasevert:",
        "config-db-host-help": "Hvis databasen kjører på en annen tjenermaskin, skriv inn vertsnavnet eller IP-adressen her.\n\nHvis du bruker et webhotell, vil du kunne be om aktuelt vertsnavn fra din leverandør.\n\nHvis du bruker MySQL, kan det hende at «localhost» ikke brukes som tjenernavn. Hvis så er tilfelle, prøv «127.0.0.1» som lokal IP-adresse.\n\nHvis du bruker PostgreSQL, la dette feltet være blankt slik at koplingen gjøres via en \"Unix socket\".",
-       "config-db-host-oracle": "Database TNS:",
-       "config-db-host-oracle-help": "Skriv inn et gyldig [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; en tnsnames.ora-fil må være synlig for installasjonsprosessen.<br />Hvis du bruker klientbibliotek 10g eller nyere kan du også bruke navngivingsmetoden [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifiser denne wikien",
        "config-db-name": "Databasenavn (ingen bindestreker):",
        "config-db-name-help": "Velg et navn som identifiserer wikien din.\nDet bør ikke inneholde mellomrom.\n\nHvis du bruker en delt nettvert vil verten din enten gi deg et spesifikt databasenavn å bruke, eller la deg opprette databaser via kontrollpanelet.",
-       "config-db-name-oracle": "Databaseskjema:",
-       "config-db-account-oracle-warn": "Det finnes tre mulig fremgangsmåter for å installere Oracle som database:\n\nHvis du ønsker å opprette en databasekonto som del av installasjonsprosessen, oppgi da en konto med SYSDBA-rolle som databasekonto for installasjonen og angi påkrevd autentiseringsinformasjon for web-aksesskontoen. Ellers kan du enten opprette web-aksesskontoen manuelt eller kun oppgi den kontoen (hvis den har påkrevede tillatelser for å opprette skjemeobjektene) , alternativt oppgi to ulike kontoer, en med opprettelsesprivilegier (create) og en begrenset konto for web-aksess.\n\nSkript for å opprette en konto med påkrevde privilegier finnes i \"maintenance/oracle/\"-folderen av denne installasjonen. Husk at det å bruke en begrenset konto vil blokkere all vedlikeholdsfunksjonalitet med standard konto.",
        "config-db-install-account": "Brukerkonto for installasjon",
        "config-db-username": "Databasebrukernavn:",
        "config-db-password": "Databasepassord:",
        "config-pg-test-error": "Får ikke kontakt med database '''$1''': $2",
        "config-sqlite-dir": "SQLite datamappe:",
        "config-sqlite-dir-help": "SQLite lagrer alle data i en enkelt fil.\n\nMappen du oppgir må være skrivbar for nettjeneren under installasjonen.\n\nDen bør '''ikke''' være tilgjengelig fra nettet, dette er grunnen til at vi ikke legger det der PHP-filene dine er.\n\nInstallasjonsprogrammet vil skrive en <code>.htaccess</code>-fil sammen med det, men om det mislykkes kan noen få tilgang til din råe database. Dette inkluderer rå brukerdata (e-postadresser, hashede passord) samt slettede revisjoner og andre begrensede data på wikien.\n\nVurder å plassere databasen et helt annet sted, for eksempel i <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Standard tabellrom:",
-       "config-oracle-temp-ts": "Midlertidig tabellrom:",
        "config-type-mysql": "MariaDB, MySQL eller kompatibel",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQLServer",
        "config-support-info": "MediaWiki støtter følgende databasesystem:\n\n$1\n\nHvis du ikke ser databasesystemet du prøver å bruke i listen nedenfor, følg instruksjonene det er lenket til over for å aktivere støtte.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] er den foretrukne databasetypen for MediaWiki og har best støtte.  MediaWiki fungerer også med [{{int:version-db-mysql-url}} MySQL] og [{{int:version-db-percona-url}} Percona Server], som begge er MariaDB-kompatible. ([https://www.php.net/manual/en/mysqli.installation.php Hvordan kompilere PHP med MySQL-støtte])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] er et populært åpen kildekode-databasesystem og et alternativ til MySQL.  ([https://www.php.net/manual/en/pgsql.installation.php Hvordan kompilere PHP med PostgreSQL-støtte])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] er et lettvekts-databasesystem som har veldig god støtte. ([http://www.php.net/manual/en/pdo.installation.php Hvordan kompilere PHP med SQLite-støtte], bruker PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] er en kommersiell database for bedrifter. ([https://www.php.net/manual/en/oci8.installation.php Hvordan kompilere PHP med OCI8-støtte])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] er et kommersielt databasesystem under Windows for bedrifter. ([https://www.php.net/manual/en/sqlsrv.installation.php Hvordan kompilere PHP med SQLSRV-støtte])",
        "config-header-mysql": "MariadB/MySQL-innstillinger",
        "config-header-postgres": "PostgreSQL-innstillinger",
        "config-header-sqlite": "SQLite-innstillinger",
-       "config-header-oracle": "Oracle-innstillinger",
-       "config-header-mssql": "Microsoft SQLServer-innstillinger",
        "config-invalid-db-type": "Ugyldig databasetype",
        "config-missing-db-name": "Du må skrive inn en verdi for «{{int:config-db-name}}»",
        "config-missing-db-host": "Du må skrive inn en verdi for «{{int:config-db-host}}»",
-       "config-missing-db-server-oracle": "Du må skrive inn en verdi for «{{int:config-db-host-oracle}}»",
-       "config-invalid-db-server-oracle": "Ugyldig database-TNS «$1».\nBruk enten \"TNS Name\" eller en \"Easy Connect\"-streng ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods])",
        "config-invalid-db-name": "Ugyldig databasenavn «$1».\nBruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9), undestreker (_) og bindestreker (-).",
        "config-invalid-db-prefix": "Ugyldig databaseprefiks «$1».\nBruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9), undestreker (_) og bindestreker (-).",
        "config-connection-error": "$1.\n\nSjekk verten, brukernavnet og passordet nedenfor og prøv igjen. Hvis du brukte «localhost» som databasevert, prøv å bruke «127.0.0.1» i stedet (eller motsatt).",
        "config-invalid-schema": "Ugyldig skjema for MediaWiki «$1».\nBruk bare ASCII-bokstaver (a-z, A-Z), tall (0-9) og undestreker (_).",
-       "config-db-sys-create-oracle": "Installasjonsprogrammet støtter kun bruk av en SYSDBA-konto for opprettelse av en ny konto.",
-       "config-db-sys-user-exists-oracle": "Brukerkontoen «$1» finnes allerede. SYSDBA kan kun brukes for oppretting av nye kontoer!",
        "config-postgres-old": "PostgreSQL $1 eller senere kreves, du har $2.",
-       "config-mssql-old": "Microsoft SQLServer $1 eller senere kreves. Du har $2.",
        "config-sqlite-name-help": "Velg et navn som identifiserer wikien din.\nIkke bruk mellomrom eller bindestreker.\nDette vil bli brukt til SQLite-datafilnavnet.",
        "config-sqlite-parent-unwritable-group": "Kan ikke opprette datamappen <code><nowiki>$1</nowiki></code> fordi foreldremappen <code><nowiki>$2</nowiki></code> ikke er skrivbar for nettjeneren.\n\nInstallasjonsprogrammet har bestemt brukeren nettjeneren din kjører som.\nGjør <code><nowiki>$3</nowiki></code>-mappen skrivbar for denne for å fortsette.\nPå et Unix/Linux-system, gjør:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Kan ikke opprette datamappen <code><nowiki>$1</nowiki></code> fordi foreldremappen <code><nowiki>$2</nowiki></code> ikke er skrivbar for nettjeneren.\n\nInstallasjonsprogrammet kunne ikke bestemme brukeren nettjeneren din kjører som.\nGjør <code><nowiki>$3</nowiki></code>-mappen globalt skrivbar for denne (og andre!) for å fortsette.\nPå et Unix/Linux-system, gjør:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Lagringsmotor:",
        "config-mysql-innodb": "InnoDB (anbefalt)",
        "config-mysql-engine-help": "'''InnoDB''' er nesten alltid det beste alternativet siden den har god støtte for samtidighet («concurrency»).\n\n'''MyISAM''' kan være raskere i enbruker- eller les-bare-installasjoner.\nMyISAM-databaser har en tendens til å bli ødelagt oftere enn InnoDB-databaser.",
-       "config-mssql-auth": "Autentiseringstype:",
-       "config-mssql-install-auth": "Valg autentiseringstypen som skal brukes for å koble til databasen under installeringsprosessen. Hvis du velger «{{int:config-mssql-windowsauth}}», vil påloggingsinformasjonen for brukeren som kjører webtjeneren blir brukt.",
-       "config-mssql-web-auth": "Velg autentiseringstype som webtjeneren vil bruke for å koble til databasetjeneren under normal kjøring av wikien.\nHvis du velger «{{int:config-mssql-windowsauth}}», vil påloggingsinformasjonen til brukeren som kjører webtjeneren blir brukt.",
-       "config-mssql-sqlauth": "SQLServer-autentisering",
-       "config-mssql-windowsauth": "Windows-autentisering",
        "config-site-name": "Navn på wiki:",
        "config-site-name-help": "Dette vil vises i tittellinjen i nettleseren og diverse andre steder.",
        "config-site-name-blank": "Skriv inn et nettstedsnavn.",
index 2677d47..e20b9e9 100644 (file)
        "config-env-hhvm": "HHVM $1 स्थापना गरिएको छ ।",
        "config-db-type": "डाटाबेस प्रकारः",
        "config-db-host": "डेटाबेस होस्ट:",
-       "config-db-host-oracle": "डेटाबेस TNS:",
        "config-db-name": "डाटाबेस नामः",
-       "config-db-name-oracle": "डेटाबेस स्केमा:",
        "config-db-username": "डाटाबेस प्रयोगकर्ता नामः",
        "config-db-password": "डाटाबेस पासबर्डः",
        "config-db-port": "डेटाबेस पोर्ट:",
        "config-header-mysql": "MySQL सेटिङ",
        "config-header-postgres": "PostgreSQL सेटिङहरू",
        "config-header-sqlite": "SQLite सेटिङ्हरू",
-       "config-header-oracle": "ओरेकल सेटिङहरू",
        "config-site-name": "विकीको नाम:",
        "config-site-name-blank": "साइटको नाम लेख्नुहोस।",
        "config-project-namespace": "आयोजना नेमस्पेस:",
index 3450712..c0c754b 100644 (file)
@@ -28,9 +28,7 @@
        "config-no-cli-uploads-check": "''Waarschuwing:'' je standaardmap voor uploads (<code>$1</code>) wordt niet gecontroleerd op kwetsbaarheden voor het uitvoeren van willekeurige scripts gedurende de CLI-installatie.",
        "config-brokenlibxml": "Je systeem heeft een combinatie van PHP- en libxml2-versies geïnstalleerd die is foutgevoelig is en kan leiden tot onzichtbare beschadiging van gegevens in MediaWiki en andere webapplicaties.\nUpgrade naar PHP 5.2.9 of hoger en libxml2 2.7.3 of hoger([https://bugs.php.net/bug.php?id=45996 bij PHP gerapporteerde fout]).\nDe installatie wordt afgebroken.",
        "config-db-host-help": "Als je databaseserver een andere server is, voer dan de hostnaam of het IP-adres hier in.\n\nAls je gebruik maakt van gedeelde webhosting, hoort je provider je de juiste hostnaam te hebben verstrekt.\n\nAls je MediaWiki op een Windowsserver installeert en MySQL gebruikt, dan werkt \"localhost\" mogelijk niet als servernaam.\nAls het inderdaad niet werkt, probeer dan \"127.0.0.1\" te gebruiken als lokaal IP-adres.\n\nAls je PostgreSQL gebruikt, laat dit veld dan leeg om via een Unix-socket te verbinden.",
-       "config-db-host-oracle-help": "Voer een geldige [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] in; een tnsnames.ora-bestand moet zichtbaar zijn voor deze installatie.<br />Als je gebruik maakt van clientlibraries 10g of een latere versie, kan je ook gebruik maken van de naamgevingsmethode [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-name-help": "Kies een naam die je wiki identificeert.\nEr mogen geen spaties gebruikt worden.\nAls je gebruik maakt van gedeelde webhosting, dan hoort je provider ofwel jou een te gebruiken databasenaam gegeven te hebben, of je aangegeven te hebben hoe je databases kunt aanmaken.",
-       "config-db-account-oracle-warn": "Er zijn drie ondersteunde scenario's voor het installeren van Oracle als databasebackend:\n\nAls je een database-account wilt aanmaken als onderdeel van het installatieproces, geef dan de gegevens op van een database-account in met de rol SYSDBA voor de installatie en voer de gewenste aanmeldgegevens in voor het account met webtoegang. Je kunt ook het account met webtoegang handmatig aanmaken en alleen van dat account de aanmeldgegevens opgeven als deze de vereiste rechten heeft om schemaobjecten aan te maken. Als laatste is het mogelijk om aanmeldgegevens van twee verschillende accounts op te geven; een met de rechten om schemaobjecten aan te maken, en een met alleen webtoegang.\n\nEen script voor het aanmaken van een account met de vereiste rechten is te vinden in de map \"maintenance/oracle/\" van deze installatie. Onthoud dat het gebruiken van een account met beperkte rechten alle mogelijkheden om beheerscripts uit te voeren met het standaardaccount onmogelijk maakt.",
        "config-db-prefix-help": "Als je een database moet gebruiken voor meerdere wiki's, of voor MediaWiki en een andere toepassing, dan kan je ervoor kiezen om een voorvoegsel toe te voegen aan de tabelnamen om conflicten te voorkomen.\nGebruik geen spaties.\n\nDit veld wordt meestal leeg gelaten.",
        "config-mysql-old": "Je moet MySQL $1 of later gebruiken.\nJij gebruikt $2.",
        "config-db-schema-help": "Dit schema klopt meestal.\nWijzig het alleen als je weet dat dit nodig is.",
@@ -38,7 +36,6 @@
        "config-support-info": "MediaWiki ondersteunt de volgende databasesystemen:\n\n$1\n\nAls je het databasesysteem dat je wilt gebruiken niet in de lijst terugvindt, volg dan de handleiding waarnaar hierboven wordt verwezen om ondersteuning toe te voegen.",
        "config-missing-db-name": "Je moet een waarde opgeven voor \"Databasenaam\"",
        "config-missing-db-host": "Je moet een waarde invoeren voor \"Databaseserver\"",
-       "config-missing-db-server-oracle": "Je moet een waarde opgeven voor \"Database-TNS\"",
        "config-postgres-old": "PostgreSQL $1 of hoger is vereist.\nJij gebruikt $2.",
        "config-sqlite-name-help": "Kies een naam die je wiki identificeert.\nGebruik geen spaties of koppeltekens.\nDeze naam wordt gebruikt voor het gegevensbestand van SQLite.",
        "config-upgrade-done": "Het bijwerken is afgerond.\n\nJe kunt [$1 je wiki nu gebruiken].\n\nAls je je <code>LocalSettings.php</code> opnieuw wilt aanmaken, klik dan op de knop hieronder.\nDit is '''niet aan te raden''' tenzij je problemen hebt met je wiki.",
index 23835cd..0c687f6 100644 (file)
        "config-db-type": "Databasetype:",
        "config-db-host": "Databasehost:",
        "config-db-host-help": "Als uw databaseserver een andere server is, voer dan de hostnaam of het IP-adres hier in.\n\nAls u gebruik maakt van gedeelde webhosting, hoort uw provider u de juiste hostnaam te hebben verstrekt.\n\nAls u MySQL gebruikt, dan werkt \"localhost\" mogelijk niet als servernaam.\nAls het inderdaad niet werkt, probeer dan \"127.0.0.1\" te gebruiken als lokaal IP-adres.\n\nAls u PostgreSQL gebruikt, laat dit veld dan leeg om via een Unix-socket te verbinden.",
-       "config-db-host-oracle": "Database-TNS:",
-       "config-db-host-oracle-help": "Voer een geldige [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] in; een tnsnames.ora-bestand moet zichtbaar zijn voor deze installatie.<br />Als u gebruik maakt van clientlibraries 10g of een latere versie, kunt u ook gebruik maken van de naamgevingsmethode [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identificeer deze wiki",
        "config-db-name": "Databasenaam (zonder koppeltekens):",
        "config-db-name-help": "Kies een naam die uw wiki identificeert.\nEr mogen geen spaties gebruikt worden.\nAls u gebruik maakt van gedeelde webhosting, dan hoort uw provider ofwel u een te gebruiken databasenaam gegeven te hebben, of u aangegeven te hebben hoe u databases kunt aanmaken.",
-       "config-db-name-oracle": "Databaseschema:",
-       "config-db-account-oracle-warn": "Er zijn drie ondersteunde scenario's voor het installeren van Oracle als databasebackend:\n\nAls u een database-account wilt aanmaken als onderdeel van het installatieproces, geef dan de gegevens op van een database-account in met de rol SYSDBA voor de installatie en voer de gewenste aanmeldgegevens in voor het account met webtoegang. U kunt ook het account met webtoegang handmatig aanmaken en alleen van dat account de aanmeldgegevens opgeven als deze de vereiste rechten heeft om schemaobjecten aan te maken. Als laatste is het mogelijk om aanmeldgegevens van twee verschillende accounts op te geven; een met de rechten om schemaobjecten aan te maken, en een met alleen webtoegang.\n\nEen script voor het aanmaken van een account met de vereiste rechten is te vinden in de map \"maintenance/oracle/\" van deze installatie. Onthoud dat het gebruiken van een account met beperkte rechten alle mogelijkheden om beheerscripts uit te voeren met het standaardaccount onmogelijk maakt.",
        "config-db-install-account": "Gebruiker voor installatie",
        "config-db-username": "Gebruikersnaam voor database:",
        "config-db-password": "Wachtwoord voor database:",
        "config-pg-test-error": "Kan geen verbinding maken met database '''$1''': $2",
        "config-sqlite-dir": "Gegevensmap voor SQLite:",
        "config-sqlite-dir-help": "SQLite slaat alle gegevens op in een enkel bestand.\n\nDe map die u opgeeft moet beschrijfbaar zijn voor de webserver tijdens de installatie.\n\nDeze mag '''niet toegankelijk''' zijn via het web en het bestand mag dus niet tussen de PHP-bestanden staan.\n\nHet installatieprogramma schrijft het bestand <code>.htaccess</code> weg met het databasebestand, maar als dat niet werkt kan iemand zich toegang tot het ruwe databasebestand verschaffen.\nOok de gebruikersgegevens (e-mailadressen, wachtwoordhashes) en verwijderde versies en overige gegevens met beperkte toegang via MediaWiki zijn dan onbeschermd.\n\nOverweeg om de database op een totaal andere plaats neer te zetten, bijvoorbeeld in <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Standaard tablespace:",
-       "config-oracle-temp-ts": "Tijdelijke tablespace:",
        "config-type-mysql": "MariaDB, MySQL of compatibele systemen",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki ondersteunt de volgende databasesystemen:\n\n$1\n\nAls u het databasesysteem dat u wilt gebruiken niet in de lijst terugvindt, volg dan de handleiding waarnaar hierboven wordt verwezen om ondersteuning toe te voegen.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] is de primaire database voor MediaWiki en wordt het best ondersteund. MediaWiki werkt ook met [{{int:version-db-mysql-url}} MySQL] en [{{int:version-db-percona-url}} Percona Server], die MariaDB-compatibel zijn ([https://www.php.net/manual/en/mysqli.installation.php hoe PHP te compileren met MySQL-ondersteuning]).",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is een populair open source databasesysteem als alternatief voor MySQL.([https://www.php.net/manual/en/pgsql.installation.php Hoe u PHP kunt compileren met ondersteuning voor PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is een zeer goed ondersteund lichtgewicht databasesysteem ([https://www.php.net/manual/en/pdo.installation.php hoe PHP gecompileerd moet zijn met ondersteuning voor SQLite]; gebruikt PDO).",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] is een commerciële database voor grote bedrijven ([https://www.php.net/manual/en/oci8.installation.php PHP compileren met ondersteuning voor OCI8]).",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] is een commerciële enterprisedatabase voor Windows ([https://www.php.net/manual/en/sqlsrv.installation.php PHP compileren met ondersteuning voor SQLSRV]).",
        "config-header-mysql": "MariaDB/MySQL-instellingen",
        "config-header-postgres": "PostgreSQL-instellingen",
        "config-header-sqlite": "SQLite-instellingen",
-       "config-header-oracle": "Oracle-instellingen",
-       "config-header-mssql": "Instellingen voor Microsoft SQL Server",
        "config-invalid-db-type": "Ongeldig databasetype.",
        "config-missing-db-name": "U moet een waarde opgeven voor \"{{int:config-db-name}}\".",
        "config-missing-db-host": "U moet een waarde invoeren voor \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "U moet een waarde opgeven voor \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "Ongeldige database-TNS \"$1\".\nGebruik \"TNS Names\" of een \"Easy Connect\" tekst ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle naamgevingsmethoden])",
        "config-invalid-db-name": "Ongeldige databasenaam \"$1\".\nGebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_) en streepjes (-).",
        "config-invalid-db-prefix": "Ongeldig databasevoorvoegsel \"$1\".\nGebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_) en streepjes (-).",
        "config-connection-error": "$1.\n\nControleer de host, gebruikersnaam en wachtwoord en probeer het opnieuw. Probeer \"127.0.0.1\" in plaats van \"localhost\" als database host. (of omgekeerd)",
        "config-invalid-schema": "Ongeldig schema voor MediaWiki \"$1\".\nGebruik alleen letters (a-z, A-Z), cijfers (0-9) en liggende streepjes (_).",
-       "config-db-sys-create-oracle": "Het installatieprogramma biedt alleen de mogelijkheid een nieuw account aan te maken met een SYSDBA-account.",
-       "config-db-sys-user-exists-oracle": "Gebruikersaccount \"$1\" bestaat al. SYSDBA kan alleen gebruikt worden voor het aanmaken van een nieuw account!",
        "config-postgres-old": "PostgreSQL $1 of hoger is vereist.\nU gebruikt $2.",
-       "config-mssql-old": "Microsoft SQL Server $1 of hoger is vereist. U hebt  $2.",
        "config-sqlite-name-help": "Kies een naam die uw wiki identificeert.\nGebruik geen spaties of koppeltekens.\nDeze naam wordt gebruikt voor het gegevensbestand van SQLite.",
        "config-sqlite-parent-unwritable-group": "Het was niet mogelijk de gegevensmap <code><nowiki>$1</nowiki></code> te maken omdat in de bovenliggende map <code><nowiki>$2</nowiki></code> niet geschreven mag worden door de webserver.\n\nHet installatieprogramma heeft vast kunnen stellen onder welke gebruiker de webserver draait.\nMaak de map <code><nowiki>$3</nowiki></code> beschrijfbaar om door te kunnen gaan.\nVoer op een Linux-systeem de volgende opdrachten uit:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Het was niet mogelijk de gegevensmap <code><nowiki>$1</nowiki></code> te maken omdat in de bovenliggende map <code><nowiki>$2</nowiki></code> niet geschreven mag worden door de webserver.\n\nHet installatieprogramma heeft niet vast kunnen stellen onder welke gebruiker de webserver draait.\nMaak de map <code><nowiki>$3</nowiki></code> beschrijfbaar voor de webserver (en anderen!) om door te kunnen gaan.\nVoer op een Linux-systeem de volgende opdrachten uit:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Opslagmethode:",
        "config-mysql-innodb": "InnoDB (aanbevolen)",
        "config-mysql-engine-help": "'''InnoDB''' is vrijwel altijd de beste instelling, omdat deze goed omgaat met meerdere verzoeken tegelijkertijd.\n\n'''MyISAM''' is bij een zeer beperkt aantal gebruikers mogelijk sneller, of als de wiki alleen-lezen is.\nMyISAM-databases raken vaker beschadigd dan InnoDB-databases.",
-       "config-mssql-auth": "Authenticatietype:",
-       "config-mssql-install-auth": "Selecteer de authenticatiemethode die wordt gebruikt om met de database te verbinden tijdens het installatieproces.\nAls u \"{{int:config-mssql-windowsauth}}\" selecteert, dan worden de aanmeldgegevens van de gebruiker waaronder de webserver draait voor authenticatie gebruikt.",
-       "config-mssql-web-auth": "Selecteer de authenticatiemethode die de webserver gebruikt om met de database te verbinden tijdens het installatieproces.\nAls u \"{{int:config-mssql-windowsauth}}\" selecteert, dan worden de aanmeldgegevens van de gebruiker waaronder de webserver draait voor authenticatie gebruikt.",
-       "config-mssql-sqlauth": "SQL Server Authenticatie",
-       "config-mssql-windowsauth": "Windowsauthenticatie",
        "config-site-name": "Naam van de wiki:",
        "config-site-name-help": "Deze naam verschijnt in de titelbalk van browsers en op andere plaatsen.",
        "config-site-name-blank": "Geef een naam op voor de site.",
index 3aaecb5..814764a 100644 (file)
        "config-using-uri": "Utilizacion de l'URL de servidor \"<nowiki>$1$2</nowiki>\".",
        "config-db-type": "Tipe de basa de donadas :",
        "config-db-host": "Nom d’òste de la basa de donadas :",
-       "config-db-host-oracle": "Nom TNS de la basa de donadas :",
        "config-db-wiki-settings": "Identificar aqueste wiki",
        "config-db-name": "Nom de la basa de donadas :",
-       "config-db-name-oracle": "Esquèma de basa de donadas :",
        "config-db-install-account": "Compte d'utilizaire per l'installacion",
        "config-db-username": "Nom d'utilizaire de la basa de donadas :",
        "config-db-password": "Senhal de la basa de donadas :",
        "config-db-schema": "Esquèma per MediaWiki",
        "config-pg-test-error": "Impossible de se connectar a la basa de donadas '''$1''' : $2",
        "config-sqlite-dir": "Dorsièr de las donadas SQLite :",
-       "config-oracle-def-ts": "Espaci d'emmagazinatge (''tablespace'') per defaut :",
-       "config-oracle-temp-ts": "Espaci d'emmagazinatge (''tablespace'') temporari :",
        "config-type-mysql": "MariaDB, MySQL o compatible",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "Paramètres de MySQL",
        "config-header-postgres": "Paramètres de PostgreSQL",
        "config-header-sqlite": "Paramètres de SQLite",
-       "config-header-oracle": "Paramètres d’Oracle",
-       "config-header-mssql": "Paramètres de Microsoft SQL Server",
        "config-invalid-db-type": "Tipe de basa de donadas invalid",
        "config-missing-db-name": "Vos cal entrar una valor per « {{int:config-db-name}} ».",
        "config-missing-db-host": "Vos cal entrar una valor per « {{int:config-db-host}} ».",
-       "config-missing-db-server-oracle": "Vos cal entrar una valor per « {{int:config-db-oracle}} ».",
        "config-postgres-old": "PostgreSQL $1 o version ulteriora es requesit, avètz $2.",
        "config-sqlite-readonly": "Lo fichièr <code>$1</code> es pas accessible en escritura.",
        "config-sqlite-cant-create-db": "Impossible de crear lo fichièr de basa de donadas <code>$1</code>.",
@@ -91,9 +83,6 @@
        "config-db-web-create": "Creatz lo compte se existís pas ja",
        "config-mysql-engine": "Motor d'emmagazinatge :",
        "config-mysql-innodb": "InnoDB",
-       "config-mssql-auth": "Tipe d’autentificacion :",
-       "config-mssql-sqlauth": "Autentificacion de SQL Server",
-       "config-mssql-windowsauth": "Autentificacion Windows",
        "config-site-name": "Nom del wiki :",
        "config-site-name-blank": "Entratz un nom de site.",
        "config-project-namespace": "Espaci de noms del projècte :",
index 6fdcd82..8926e6c 100644 (file)
        "config-db-name": "Tiedokannan nimi:",
        "config-db-username": "Tiedokannan käyttäinimi:",
        "config-db-password": "Tiedokannan salasana:",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "MariaDB/MySQL-azetukset",
        "config-header-postgres": "PostgreSQL-azetukset",
        "config-header-sqlite": "SQLite-azetukset",
-       "config-header-oracle": "Oracle-azetukset",
-       "config-header-mssql": "Microsoft SQL Server azetukset",
        "config-mysql-innodb": "InnoDB",
        "config-site-name": "Wikin nimi:",
        "config-site-name-blank": "Kirjuta sivun nimi.",
index feda6b2..fc66bdb 100644 (file)
        "config-db-type": "Typ bazy danych:",
        "config-db-host": "Adres serwera bazy danych:",
        "config-db-host-help": "Jeśli serwer bazy danych jest na innej maszynie, wprowadź jej nazwę domenową lub adres IP.\n\nJeśli korzystasz ze współdzielonego hostingu, operator serwera powinien podać Ci prawidłową nazwę serwera w swojej dokumentacji.\n\nJeśli korzystasz z MySQL, użycie „localhost” może nie zadziałać jako nazwa hosta. Jeśli wystąpi ten problem, użyj „127.0.0.1” jako lokalnego adresu IP.\n\nJeżeli korzystasz z PostgreSQL, pozostaw to pole puste, aby połączyć się poprzez gniazdo Unixa.",
-       "config-db-host-oracle": "Nazwa instancji bazy danych (TNS):",
-       "config-db-host-oracle-help": "Wprowadź prawidłową [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nazwę połączenia lokalnego]. Plik „tnsnames.ora” musi być widoczny dla instalatora.<br />Jeśli używasz biblioteki klienckiej 10g lub nowszej możesz również skorzystać z metody nazw [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm łatwego łączenia].",
        "config-db-wiki-settings": "Zidentyfikuj tę wiki",
        "config-db-name": "Nazwa bazy danych:",
        "config-db-name-help": "Wybierz nazwę, która zidentyfikuje Twoją wiki.\nNie może ona zawierać spacji.\n\nJeśli korzystasz ze współdzielonego hostingu, dostawca usługi hostingowej może wymagać użycia konkretnej nazwy bazy danych lub pozwalać na tworzenie baz danych za pośrednictwem panelu użytkownika.",
-       "config-db-name-oracle": "Nazwa schematu bazy danych:",
-       "config-db-account-oracle-warn": "Bazę danych Oracle można przygotować do pracy z MediaWiki na trzy sposoby:\n\nMożesz utworzyć konto użytkownika bazy danych podczas instalacji MediaWiki. Wówczas należy podać nazwę i hasło użytkownika z rolą SYSDBA w celu użycia go przez instalator do utworzenia nowe konta użytkownika, z którego korzystać będzie MediaWiki.\n\nMożesz również skorzystać z konta użytkownika bazy danych utworzonego bezpośrednio w Oracle i wówczas wystarczy podać tylko nazwę i hasło tego użytkownika. Konto z rolą SYSDBA nie będzie potrzebne, jednak konto użytkownika powinno mieć uprawnienia do utworzenia obiektów w schemacie bazy danych. Możesz też podać dwa konta - konto dla instalatora, z pomocą którego zostaną obiekty w schemacie bazy danych i drugie konto, z którego będzie MediaWiki korzystać będzie do pracy.\n\nW podkatalogu \"maintenance/oracle\" znajduje się skrypt do tworzenia konta użytkownika. Korzystanie z konta użytkownika z ograniczonymi uprawnieniami spowoduje wyłączenie funkcji związanych z aktualizacją oprogramowania MediaWiki.",
        "config-db-install-account": "Konto użytkownika dla instalatora",
        "config-db-username": "Nazwa użytkownika bazy danych:",
        "config-db-password": "Hasło bazy danych:",
        "config-pg-test-error": "Nie można połączyć się z bazą danych''' $1 ''': $2",
        "config-sqlite-dir": "Katalog danych SQLite:",
        "config-sqlite-dir-help": "SQLite przechowuje wszystkie dane w pojedynczym pliku.\n\nWskazany katalog musi być dostępny do zapisu przez webserver podczas instalacji.\n\nPowinien '''nie''' być dostępny za z sieci web, dlatego nie umieszczamy ich tam, gdzie znajdują się pliki PHP.\n\nInstalator zapisze plik <code>.htaccess</code> obokniego, ale jeśli to zawiedzie, ktoś może uzyskać dostęp do nieprzetworzonej bazy danych.\nZawiera ona nieopracowane dane użytkownika (adresy e-mail, zahaszowane hasła) jak również usunięte wersje oraz inne dane o ograniczonym dostępie na wiki.\n\nWarto rozważyć umieszczenie w bazie danych zupełnie gdzie indziej, na przykład w <code>/var/lib/mediawiki/yourwiki</code> .",
-       "config-oracle-def-ts": "Domyślna przestrzeń tabel:",
-       "config-oracle-temp-ts": "Przestrzeń tabel tymczasowych:",
        "config-type-mysql": "MariaDB, MySQL lub kompatybilna",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki może współpracować z następującymi systemami baz danych:\n\n$1\n\nPoniżej wyświetlone są systemy baz danych gotowe do użycia. Jeżeli poniżej brakuje bazy danych, z której chcesz skorzystać, oznacza to, że brakuje odpowiedniego oprogramowania lub zostało ono niepoprawnie skonfigurowane. Powyżej znajdziesz odnośniki do dokumentacji, która pomoże w konfiguracji odpowiednich komponentów.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] jest bazą danych, na której rozwijane jest oprogramowanie MediaWiki. MediaWiki działa również z [{{int:version-db-mysql-url}} MySQL] i [{{int:version-db-percona-url}} Percona Server], które są zgodne z MariaDB. ([https://www.php.net/manual/en/mysqli.installation.php Zobacz, jak skompilować PHP ze wsparciem dla MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] jest popularnym, otawrtym systemem baz danych, często stosowanym jako alternatywa dla MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Zobacz, jak skompilować PHP z obsługą PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] jest niewielkim systemem bazy danych, z którym MediaWiki bardzo dobrze współpracuje. ([https://www.php.net/manual/pl/pdo.installation.php Zobacz, jak skompilować PHP ze wsparciem dla SQLite], korzystając z PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] jest komercyjną profesjonalną bazą danych. ([https://www.php.net/manual/pl/oci8.installation.php Jak skompilować PHP ze wsparciem dla OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] jest komercyjną profesjonalną bazą danych. ([https://www.php.net/manual/pl/sqlsrv.installation.php Jak skompilować PHP ze wsparciem dla SQLSRV])",
        "config-header-mysql": "Ustawienia MariaDB/MySQL",
        "config-header-postgres": "Ustawienia PostgreSQL",
        "config-header-sqlite": "Ustawienia SQLite",
-       "config-header-oracle": "Ustawienia Oracle",
-       "config-header-mssql": "Ustawienia Microsoft SQL Server",
        "config-invalid-db-type": "Nieprawidłowy typ bazy danych",
        "config-missing-db-name": "Należy wpisać wartość w polu „{{int:config-db-name}}”.",
        "config-missing-db-host": "Należy wpisać wartość w polu „{{int:config-db-host}}”.",
-       "config-missing-db-server-oracle": "Należy wpisać wartość w polu „{{int:config-db-host-oracle}}”.",
-       "config-invalid-db-server-oracle": "Nieprawidłowa nazwa instancji bazy danych (TNS) „$1”.\nUżyj \"TNS Name\" lub \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods])",
        "config-invalid-db-name": "Nieprawidłowa nazwa bazy danych „$1”.\nUżywaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) lub znaku odejmowania (-).",
        "config-invalid-db-prefix": "Nieprawidłowy prefiks bazy danych „$1”.\nUżywaj wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9), podkreślenia (_) lub znaku odejmowania (-).",
        "config-connection-error": "$1.\n\nSprawdź adres serwera, nazwę użytkownika i hasło, a następnie spróbuj ponownie. Jeżeli korzystasz z „localhosta” jako serwera bazy danych, spróbuj zamiast tego użyć „127.0.0.1” (lub na odwrót).",
        "config-invalid-schema": "Nieprawidłowa nazwa schematu dla MediaWiki „$1”.\nNazwa może zawierać wyłącznie liter ASCII (a-z, A-Z), cyfr (0-9) i podkreślenia (_).",
-       "config-db-sys-create-oracle": "Instalator może wykorzystać wyłącznie konto SYSDBA do tworzenia nowych kont użytkowników.",
-       "config-db-sys-user-exists-oracle": "Konto użytkownika „$1” już istnieje. SYSDBA można użyć tylko do utworzenia nowego konta!",
        "config-postgres-old": "Korzystasz z wersji $2 oprogramowania PostgreSQL, a potrzebna jest wersja co najmniej $1.",
-       "config-mssql-old": "Wymagany jest Microsoft SQL Server w wersji $1 lub nowszej. Masz zainstalowaną wersję $2.",
        "config-sqlite-name-help": "Wybierz nazwę, która będzie identyfikować Twoją wiki.\nNie wolno używać spacji ani myślników.\nZostanie ona użyta jako nazwa pliku danych SQLite.",
        "config-sqlite-parent-unwritable-group": "Nie można utworzyć katalogu danych <code><nowiki>$1</nowiki></code> , ponieważ katalog nadrzędny <code><nowiki>$2</nowiki></code> nie jest dostępny do zapisu przez webserwer.\n\nInstalator nie może określić, jako kttóry użytkownik działa webserwer.\nZezwól by katalog <code><nowiki>$3</nowiki></code> był dostępny do zapisu przez niego, aby przejść dalej.\nW systemie Unix/Linux wykonaj:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Nie można utworzyć katalogu danych <code><nowiki>$1</nowiki></code> , ponieważ katalog nadrzędny <code><nowiki>$2</nowiki></code> nie jest dostępny do zapisu przez webserwer.\n\nInstalator nie może określić, jako kttóry użytkownik działa webserwer.\nZezwól by katalog <code><nowiki>$3</nowiki></code> był globalnie modyfikowalny przez niego (i innych!) aby przejść dalej.\nW systemie Unix/Linux wykonaj:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Silnik przechowywania",
        "config-mysql-innodb": "InnoDB (zalecane)",
        "config-mysql-engine-help": "'''InnoDB''' jest prawie zawsze najlepszą opcją, ponieważ posiada dobrą obsługę współbieżności.\n\n'''MyISAM''' może być szybsze w instalacjach pojedynczego użytkownika lub tylko do odczytu.\nBazy danych MyISAM mają tendencję do ulegania uszkodzeniom częściej niż bazy InnoDB.",
-       "config-mssql-auth": "Typ uwierzytelniania:",
-       "config-mssql-install-auth": "Wybierz typ uwierzytelniania, który będzie używany do łączenia się z bazą danych w trakcie procesu instalacji.\nJeśli wybierzesz „{{int:config-mssql-windowsauth}}”, będą wykorzystywane dane konta użytkownika, pod którym działa serwer www.",
-       "config-mssql-web-auth": "Wybierz typ uwierzytelniania, który będzie używany przez serwer www do łączenia się z bazą danych podczas normalnego funkcjonowania wiki.\nJeśli wybierzesz „{{int:config-mssql-windowsauth}}”, użyte zostaną dane konta użytkownika, pod którym działa serwer www.",
-       "config-mssql-sqlauth": "Uwierzytelnianie serwera SQL",
-       "config-mssql-windowsauth": "Autoryzacja Windows",
        "config-site-name": "Nazwa wiki:",
        "config-site-name-help": "Ten napis pojawi się w pasku tytułowym przeglądarki oraz w różnych innych miejscach.",
        "config-site-name-blank": "Wprowadź nazwę witryny.",
        "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 b6ab572..b8b97de 100644 (file)
        "config-db-type": "Sòrt ëd base ëd dàit:",
        "config-db-host": "Ospitant ëd la base ëd dàit:",
        "config-db-host-help": "Se sò servent ëd base ëd dàit a l'é su un servent diferent, ch'a anserissa ambelessì ël nòm dl'ospitant o l'adrëssa IP.\n\nS'a deuvra n'ospitalità partagià, sò fornidor d'ospitalità a dovrìa deje ël nòm dl'ospitant giust ant soa documentassion.\n\nSe a anstala su un servent Windows e a deuvra MySQL, dovré «localhost» a podrìa funsioné nen com nòm dël servent. S'a marcia nen, ch'a preuva «127.0.0.1» com adrëssa IP local.\n\nS'a deuvra PostgresSQL, ch'a lassa sto camp bianch për coleghesse a travers un socket UNIX.",
-       "config-db-host-oracle": "TNS dla base ëd dàit:",
-       "config-db-host-oracle-help": "Anserì un [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm nòm ëd conession local] bon; n'archivi tnsnames.ora a dev esse visìbil da costa anstalassion..<br />S'a deuvra le librarìe cliente 10g o pi neuve a peul ëdcò dovré ël métod ëd nominassion [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identìfica sta wiki",
        "config-db-name": "Nòm dla base ëd dàit:",
        "config-db-name-help": "Ch'a serna un nòm ch'a identìfica soa wiki.\nA dovrìa conten-e gnun ëspassi.\n\nS'a deuvra n'ospitalità partagià, sò fornidor ëd l'ospitalità a-j darà un nòm ëd base ëd dàit specìfich da dovré o a lassrà ch'a lo crea via un panel ëd contròl.",
-       "config-db-name-oracle": "Schema dla base ëd dàit:",
-       "config-db-account-oracle-warn": "A-i é tre possibilità mantnùe për istalé Oracle tanme terminal ëd base ëd dàit:\n\nS'a veul creé un cont ëd base ëd dàit com part dël process d'istalassion, për piasì ch'a fornissa un cont con ël ròl SYSDBA com cont ëd base ëd dàit për l'istalassion e ch'a specìfica le credensiaj vorsùe për ël cont d'acess an sl'aragnà, dësnò a peul ëdcò creé ël cont d'acess an sl'aragnà manualment e mach fornì col cont (se a l'ha ij përmess necessari për creé j'oget dë schema) o fornì doi cont diferent, un con ij privilegi ëd creé e un limità për l'acess an sla Ragnà.\n\nIj senari për creé un cont con ij privilegi necessari a peul esse trovà ant la cartela «manutension/oracol/» ëd costa istalassion. Ch'a ten-a da ment che dovrand un cont limità a disabiliterà tute le funsion ëd manutension con ël cont predefinì.",
        "config-db-install-account": "Cont d'utent për l'instalassion.",
        "config-db-username": "Nòm d'utent dla base ëd dàit:",
        "config-db-password": "Ciav dla base ëd dàit:",
        "config-pg-test-error": "Impossìbil coleghesse a la base ëd dàit '''$1'''; $2",
        "config-sqlite-dir": "Dossié dij dat SQLite:",
        "config-sqlite-dir-help": "SQLite a memorisa tùit ij dat ant n'archivi ùnich.\n\nËl dossié che chiel a forniss a dev esse scrivìbil dal servent durant l'instalassion.\n\nA dovrìa '''pa''' esse acessìbil da l'aragnà, sossì a l'é për sòn ch'i l'oma pa butalo andova a-i son ij sò file PHP.\n\nL'instalador a scriverà n'archivi <code>.htaccess</code> ansema con chiel, ma se lòn a faliss quaidun a peul intré an soa base ëd dàit originaria.\nLòn a comprend ij dat brut ëd l'utent (adrëssa ëd pòsta eletrònica, ciav tërbola) e ëdcò le revision scancelà e d'àutri dat segret ëd la wiki.\n\nCh'a consìdera ëd buté la base ëd dàit tuta antrega da n'àutra part, për esempi an <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Spassi dla tàula dë stàndard:",
-       "config-oracle-temp-ts": "Spassi dla tàula temporani:",
        "config-support-info": "MediaWiki a manten ij sistema ëd base ëd dàit sì-dapress:\n\n$1\n\nS'a vëd pa listà sì-sota ël sistema ëd base ëd dàit ch'a preuva a dovré, antlora va andaré a j'istrussion dl'anliura sì-dzora për abilité ël manteniment.",
        "config-dbsupport-mysql": "* $1 e l'é l'obietiv primari për MediaWiki e a l'é mej mantnù ([https://www.php.net/manual/en/mysql.installation.php com compilé PHP con ël manteniment MySQL])",
        "config-dbsupport-postgres": "* $1 e l'é un sistema ëd base ëd dàit popolar a sorgiss duverta com alternativa a MySQL ([https://www.php.net/manual/en/pgsql.installation.php com compilé PHP con ël manteniment ëd PostgreSQL]). A peulo ess-ie chèich cit bigat, e a l'é nen arcomandà ëd dovrelo an n'ambient ëd produssion.",
        "config-dbsupport-sqlite": "* $1 e l'é un sistema ëd base ëd dàit leger che a l'é motobin bin mantnù ([http://www.php.net/manual/en/pdo.installation.php com compilé PHP con ël manteniment ëd SQLite], a deuvra PDO)",
-       "config-dbsupport-oracle": "* $1 a l'é na base ëd dàit comersial për j'amprèise. ([http://www.php.net/manual/en/oci8.installation.php Com compilé PHP con ël manteniment OCI8])",
        "config-header-mysql": "Ampostassion MySQL",
        "config-header-postgres": "Ampostassion PostgreSQL",
        "config-header-sqlite": "Ampostassion SQLite",
-       "config-header-oracle": "Ampostassion Oracle",
        "config-invalid-db-type": "Sòrt ëd ëd base ëd dàit pa bon-a",
        "config-missing-db-name": "A dev buteje un valor për \"Nòm ëd la base ëd dàit\"",
        "config-missing-db-host": "A dev buteje un valor për \"l'òspit ëd la base ëd dàit\"",
-       "config-missing-db-server-oracle": "A dev buteje un valor për \"TNS ëd la base ëd dat\"",
-       "config-invalid-db-server-oracle": "TNS ëd la base ëd dat pa bon \"$1\".\nDovré mach dle litre ASCII (a-z, A-Z), nùmer (0-9), sotlignadure (_) e pontin (.).",
        "config-invalid-db-name": "Nòm ëd la base ëd dàit pa bon \"$1\".\nDovré mach litre ASCII (a-z, A-Z), nùmer (0-9), sotlignadure (_) e tratin (-).",
        "config-invalid-db-prefix": "Prefiss dla base ëd dàit pa bon \"$1\".\nDovré mach litre ASCII (a-z, A-Z), nùmer (0-9), sotlignadure (_) e tratin (-).",
        "config-connection-error": "$1.\n\nControla l'ospitant, lë stranòm d'utent e la ciav sì-sota e prové torna.",
        "config-invalid-schema": "Schema pa bon për MediaWiki \"$1\".\nDovré mach litre ASCII (a-z, A-Z), nùmer (0-9) e sotlignadure (_).",
-       "config-db-sys-create-oracle": "L'istalador a arconòss mach ij cont SYSDBA durant la creassion d'un cont neuv.",
-       "config-db-sys-user-exists-oracle": "Ël cont utent \"$1\" a esist già. SYSDBA a peul mach esse dovrà për creé un cont neuv!",
        "config-postgres-old": "A-i é da manca ëd PostgreSQL $1 o pi recent, chiel a l'ha $2.",
        "config-sqlite-name-help": "Serne un nòm ch'a identìfica soa wiki.\nDovré nì dë spassi nì ëd tratin.\nSòn a sarà dovrà për ël nòm ëd l'archivi ëd dat SQLite.",
        "config-sqlite-parent-unwritable-group": "As peul pa creesse ël dossié ëd dat <code><nowiki>$1</nowiki></code>, përchè ël dossié a mont <code><nowiki>$2</nowiki></code> a l'é pa scrivìbil dal servent.\n\nL'instalador a l'ha determinà sota che utent a gira sò servent.\nFé an manera che ël dossié <code><nowiki>$3</nowiki></code> a sia scrivìbil da chiel për continué.\nSu un sistema Unix/Linux buté:\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
index 632813c..4517ca1 100644 (file)
        "config-using-uri": "د پالنگر URL \"<nowiki>$1$2</nowiki>\" کارېږي.",
        "config-db-type": "د توکبنسټ ډول:",
        "config-db-host": "د توکبنسټ کوربه:",
-       "config-db-host-oracle": "د توکبنسټ TNS:",
        "config-db-wiki-settings": "دا ويکي پېژندل",
        "config-db-name": "د توکبنسټ نوم:",
-       "config-db-name-oracle": "د اومتوکبنسټ طرحه:",
        "config-db-username": "د توکبنسټ کارن-نوم:",
        "config-db-password": "د توکبنسټ پټنوم:",
        "config-db-port": "د توکبنسټ ور:",
        "config-db-schema": "د مېډياويکي طرحه:",
-       "config-type-mssql": "مايکروسافټ SQL پالنگر",
        "config-header-mysql": "د MySQL امستنې",
        "config-header-postgres": "د PostgreSQL امستنې",
        "config-header-sqlite": "د SQLite امستنې",
-       "config-header-oracle": "د اورېکل امستنې",
-       "config-header-mssql": "د مايکروسافټ SQL پالنگر امستنې",
        "config-sqlite-readonly": "د <code>$1</code> دوتنه د ليکلو وړ نه ده.",
        "config-sqlite-cant-create-db": "د توکبنسټ دوتنه <code>$1</code> جوړه نه شوه.",
        "config-site-name": "د ويکي نوم:",
index 5d1cc8f..a267cb8 100644 (file)
        "config-db-type": "Tipo do banco de dados:",
        "config-db-host": "Servidor do banco de dados:",
        "config-db-host-help": "Se o banco de dados do seu servidor está em um servidor diferente, digite o nome do host ou o endereço IP aqui.\n\nSe você está utilizando uma hospedagem web compartilhada, o seu provedor de hospedagem deverá fornecer o nome do host correto na sua documentação.\n\nSe você está usando o MySQL, usar \"localhost\" pode não funcionar para o nome de servidor. Se não funcionar, tente \"127.0.0.1\" para o endereço de IP local.\n\nSe você está usando PostgreSQl, deixe este campo em branco para se conectar através de um socket Unix.",
-       "config-db-host-oracle": "TNS do banco de dados:",
-       "config-db-host-oracle-help": "Digite um [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Nome de Conexão local] válido; o arquivo tnsnames.ora precisa estar visível para esta instalação.<br />Se você estiver usando bibliotecas cliente 10g ou mais recente, você também pode usar o método [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifique esta wiki",
        "config-db-name": "Nome da base de dados (sem hífen):",
        "config-db-name-help": "Escolha um nome que identifique a sua wiki.\nEle não deve conter espaços.\n\nSe você está utilizando uma hospedagem web compartilhada, o provedor de hospedagem lhe dará um nome especifico de banco de dados para usar ou o deixará criar a partir do painel de controle.",
-       "config-db-name-oracle": "Esquema do banco de dados:",
-       "config-db-account-oracle-warn": "Há três cenários suportados para instalar o Oracle como backend do banco de dados:\n\nSe você deseja criar a conta do banco de dados como parte do processo de instalação, forneça uma conta com função SYSDBA como conta do banco de dados para instalação e especifique as credenciais desejadas para a conta de acesso pela web, caso contrário, você poderá criar a conta de acesso via web manualmente e fornecer apenas aquela conta (se tiver permissões necessárias para criar os objetos schema) ou fornecer duas contas diferentes, uma com privilégios de criação e uma restrita para acesso à web.\n\nO script para criar uma conta com os privilégios necessários pode ser encontrado no diretório \"maintenance/oracle/\" desta instalação. Lembre-se de que usar uma conta restrita desativará todos os recursos de manutenção com a conta padrão.",
        "config-db-install-account": "Conta de usuário para instalação",
        "config-db-username": "Nome de usuário do banco de dados:",
        "config-db-password": "Senha do banco de dados:",
        "config-pg-test-error": "Não foi possível se conectar com o banco de dados <strong>$1</strong>: $2",
        "config-sqlite-dir": "Diretório de dados do SQLite:",
        "config-sqlite-dir-help": "O SQLite armazena todos os dados em um único arquivo.\n\nO diretório que você fornecer deve permitir a sua escrita pelo servidor web durante a instalação.\n\nO diretório <strong>não</strong> deve ser acessível pela web, por isso não estamos colocando onde estão os seus arquivos PHP.\n\nO instalador escreverá um arquivo <code>.htaccess</code>, mas se isso falhar alguém poderá ganhar acesso a toda sua base de dados.\nIsso inclui dados brutos dos usuários (endereços de e-mail, senhas criptografadas) assim como todas revisões deletadas e outros dados restritos na wiki.\n\nConsidere colocar a banco de dados em algum outro lugar, por exemplo <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Espaço de tabela padrão:",
-       "config-oracle-temp-ts": "Tablespace temporário:",
        "config-type-mysql": "MariaDB, MySQL (ou compatível)",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "O MediaWiki suporta os sistemas de banco de dados a seguir:\n\n$1\n\nSe você não vê o sistema de banco de dados que você está tentando usar listados abaixo, siga as instruções relacionadas acima, para ativar o suporte.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] é a base de dados preferida para o MediaWiki e a melhor suportada. O MediaWiki também trabalha com [{{int:version-db-mysql-url}} MySQL] e [{{int:version-db-percona-url}} Percona Server], que são compatíveis com MariaDB. ([https://www.php.net/manual/pt_BR/mysqli.installation.php Como compilar PHP com suporte para MySQL].)",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] é um popular sistema de banco de dados de código aberto como uma alternativa para o MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Como compilar o PHP com suporte PostgreSQL])",
        "config-dbsupport-sqlite": "* O [{{int:version-db-sqlite-url}} SQLite] é uma plataforma de base de dados ligeira muito bem suportada. ([https://www.php.net/manual/en/pdo.installation.php Como compilar PHP com suporte para SQLite], usa PDO.)",
-       "config-dbsupport-oracle": "* A [{{int:version-db-oracle-url}} Oracle] é uma base de dados comercial para empresas. ([https://www.php.net/manual/pt_BR/oci8.installation.php Como compilar PHP com suporte para OCI8].)",
-       "config-dbsupport-mssql": "* O [{{int:version-db-mssql-url}} Microsoft SQL Server] é uma base de dados comercial do Windows para empresas. ([https://www.php.net/manual/en/sqlsrv.installation.php Como compilar PHP com suporte para SQLSRV].)",
        "config-header-mysql": "Definições MariaDB/MySQL",
        "config-header-postgres": "Configurações PostgreSQL",
        "config-header-sqlite": "Configurações SQLite",
-       "config-header-oracle": "Configurações Oracle",
-       "config-header-mssql": "Configurações Microsoft SQL Server",
        "config-invalid-db-type": "Tipo do banco de dados inválido.",
        "config-missing-db-name": "Você deve inserir um valor para \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Você deve inserir um valor para \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "Você deve inserir um valor para \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "Banco de dados TNS inválido \"$1\".\nUse \"TNS Name\" ou \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Métodos de nomeação da Oracle]).",
        "config-invalid-db-name": "O nome do banco de dados é inválido \"$1\".\nUse apenas letras ASCII (a-z, A-Z), números (0-9), underscores (_) e hifens (-).",
        "config-invalid-db-prefix": "O prefixo do banco de dados é inválido \"$1\".\nUse apenas letras ASCII (a-z, A-Z), números (0-9), underscores (_) e hifens (-).",
        "config-connection-error": "$1.\n\nVerifique o servidor, nome de usuário e senha e tente novamente. Se estiver usando \"localhost\" como o servidor do banco de dados, tente usar \"127.0.0.1\" em vez disso (ou vice versa).",
        "config-invalid-schema": "Schema inválido para o MediaWiki \"$1\".\nUse apenas letras ASCII (a-z, A-Z), números (0-9) e underscores (_).",
-       "config-db-sys-create-oracle": "O instalador só permite criar uma conta nova usando uma conta SYSDBA.",
-       "config-db-sys-user-exists-oracle": "A conta de usuário \"$1\" já existe. SYSDBA somente pode ser utilizado na criação de uma nova conta!",
        "config-postgres-old": "PostgreSQL $1 ou posterior é necessário. Você tem $2.",
-       "config-mssql-old": "Microsoft SQL Server $1 ou posterior é necessário. Você tem $2.",
        "config-sqlite-name-help": "Escolha um nome que identifique a sua wiki.\nNão utilize espaços ou hifens.\nIsto será utilizado como nome do arquivo de dados do SQLite.",
        "config-sqlite-parent-unwritable-group": "Não é possível criar o diretório de dados <code><nowiki>$1</nowiki></code>, porque o diretório pai <code><nowiki>$2</nowiki></code> não pode ser gravado pelo servidor web.\n\nO instalador conseguiu determinar o usuário em que seu servidor web está sendo executado.\nDe permissão de gravação global ao diretório <code><nowiki>$3</nowiki></ code> para o instalador para continuar.\nEm um sistema Unix/Linux faça:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Não é possível criar o diretório de dados <code><nowiki>$1</nowiki></code>, porque o diretório pai <code><nowiki>$2</nowiki></code> não pode ser gravado pelo servidor web.\n\nO instalador não conseguiu determinar o usuário em que seu servidor web está sendo executado.\nDe permissão de gravação global ao diretório <code><nowiki>$3</nowiki></ code> para o instalador (e outros!) para continuar.\nEm um sistema Unix/Linux faça:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Mecanismo de armazenamento:",
        "config-mysql-innodb": "InnoDB (recomendado)",
        "config-mysql-engine-help": "<strong>InnoDB</strong> é quase sempre a melhor opção, uma vez que possui um bom suporte de concorrência.\n\n<strong>MyISAM</strong> pode ser mais rápido em instalações de usuário único ou somente leitura.\\O banco de dados MyISAM tendem a ficar corrompidos mais frequentemente do que os bancos de dados InnoDB.",
-       "config-mssql-auth": "Tipo de autenticação:",
-       "config-mssql-install-auth": "Selecione o tipo de autenticação que será usado para se conectar ao banco de dados durante o processo de instalação.\nSe você selecionar \"{{int:config-mssql-windowsauth}}\", as credenciais de qualquer usuário que o servidor web esteja executando serão usadas.",
-       "config-mssql-web-auth": "Selecione o tipo de autenticação que o servidor web usará para se conectar ao servidor do banco de dados, durante a operação normal da wiki.\nSe você selecionar \"{{int:config-mssql-windowsauth}}\", as credenciais de qualquer usuário no qual o servidor web está rodando serão usadas.",
-       "config-mssql-sqlauth": "Autenticação do SQL Server",
-       "config-mssql-windowsauth": "Autenticação do Windows",
        "config-site-name": "Nome da wiki:",
        "config-site-name-help": "Isto aparecerá na barra de títulos do navegador e em vários outros lugares.",
        "config-site-name-blank": "Digite o nome do site.",
index 223e26e..f08ea75 100644 (file)
        "config-db-type": "Tipo da base de dados:",
        "config-db-host": "Servidor da base de dados:",
        "config-db-host-help": "Se a base de dados estiver num servidor separado, introduza aqui o nome ou o endereço IP desse servidor.\n\nSe estiver a usar um servidor partilhado, o fornecedor do alojamento deve fornecer o nome do servidor na documentação.\n\nSe estiver a usar MySQL, usar como nome do servidor \"localhost\" poderá não funcionar. Se não funcionar, tente usar \"127.0.0.1\" como endereço IP local.\n\nSe estiver a usar PostgreSQL, deixe este campo em branco para fazer a ligação através de um socket Unix.",
-       "config-db-host-oracle": "TNS (Transparent Network Substrate) da base de dados:",
-       "config-db-host-oracle-help": "Introduza um [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Nome Local de Ligação] válido; tem de estar visível para esta instalação um ficheiro tnsnames.ora.<br />Se está a usar bibliotecas cliente versão 10g ou posterior, também pode usar o método [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Ligação Fácil] de atribuição do nome.",
        "config-db-wiki-settings": "Identifique esta wiki",
        "config-db-name": "Nome da base de dados (sem hífenes):",
        "config-db-name-help": "Escolha um nome para identificar a sua wiki.\nO nome não deve conter espaços.\n\nSe estiver a usar um servidor partilhado, o fornecedor do alojamento deve poder fornecer-lhe o nome de uma base de dados que possa usar, ou permite-lhe criar bases de dados através de um painel de controlo.",
-       "config-db-name-oracle": "Esquema ''(schema)'' da base de dados:",
-       "config-db-account-oracle-warn": "Há três cenários suportados na instalação do servidor de base de dados Oracle:\n\nSe pretende criar a conta de acesso pela internet na base de dados durante o processo de instalação, forneça como conta para a instalação uma conta com o papel de SYSDBA na base de dados e especifique as credenciais desejadas para a conta de acesso pela internet. Se não pretende criar a conta de acesso pela internet durante a instalação, pode criá-la manualmente e fornecer só essa conta para a instalação (se ela tiver as permissões necessárias para criar os objetos do esquema ''(schema)''). A terceira alternativa é fornecer duas contas diferentes; uma com privilégios de criação e outra com privilégios limitados para o acesso pela internet.\n\nExiste um script para criação de uma conta com os privilégios necessários no diretório \"maintenance/oracle/\" desta instalação. Mantenha em mente que usar uma conta com privilégios limitados impossibilita todas as operações de manutenção com a conta padrão.",
        "config-db-install-account": "Conta do utilizador para a instalação",
        "config-db-username": "Nome do utilizador da base de dados:",
        "config-db-password": "Palavra-passe do utilizador da base de dados:",
        "config-pg-test-error": "Não foi possível criar uma ligação à base de dados <strong>$1</strong>: $2",
        "config-sqlite-dir": "Diretório de dados do SQLite:",
        "config-sqlite-dir-help": "O SQLite armazena todos os dados num único ficheiro.\n\nDurante a instalação, o servidor de Internet precisa de ter permissão de escrita no diretório que especificar.\n\nEste diretório <strong>não</strong> deve poder ser acedido diretamente da Internet, por isso está a ser colocado onde estão os seus ficheiros PHP.\n\nJuntamente com o diretório, o instalador irá criar um ficheiro <code>.htaccess</code>, mas se esta operação falhar é possível que alguém venha a ter acesso direto à base de dados.\nIsto inclui acesso aos dados dos utilizadores (endereços de correio eletrónico, palavras-passe encriptadas), às revisões eliminadas e a outros dados de acesso restrito na wiki.\n\nConsidere colocar a base de dados num local completamente diferente, como, por exemplo, em <code>/var/lib/mediawiki/asuawiki</code>.",
-       "config-oracle-def-ts": "Tablespace padrão:",
-       "config-oracle-temp-ts": "Tablespace temporário:",
        "config-type-mysql": "MariaDB, MySQL (ou compatível)",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "O MediaWiki suporta as seguintes plataformas de base de dados:\n\n$1\n\nSe a plataforma que pretende usar não está listada abaixo, siga as instruções nas hiperligações acima para ativar o suporte.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] é a base de dados preferida para o MediaWiki e a melhor suportada. O MediaWiki também trabalha com [{{int:version-db-mysql-url}} MySQL] e [{{int:version-db-percona-url}} Percona Server], que são compatíveis com MariaDB. ([https://www.php.net/manual/pt_BR/mysqli.installation.php Como compilar PHP com suporte para MySQL].)",
        "config-dbsupport-postgres": "* O [{{int:version-db-postgres-url}} PostgreSQL] é uma plataforma popular de base de dados de código aberto, alternativa ao MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Como compilar PHP com suporte para PostgreSQL].)",
        "config-dbsupport-sqlite": "* O [{{int:version-db-sqlite-url}} SQLite] é uma plataforma de base de dados ligeira muito bem suportada. ([https://www.php.net/manual/en/pdo.installation.php Como compilar PHP com suporte para SQLite], usa PDO.)",
-       "config-dbsupport-oracle": "* A [{{int:version-db-oracle-url}} Oracle] é uma base de dados comercial para empresas. ([https://www.php.net/manual/en/oci8.installation.php Como compilar PHP com suporte para OCI8].)",
-       "config-dbsupport-mssql": "* O [{{int:version-db-mssql-url}} Microsoft SQL Server] é uma base de dados comercial do Windows para empresas. ([https://www.php.net/manual/en/sqlsrv.installation.php Como compilar PHP com suporte para SQLSRV].)",
        "config-header-mysql": "Definições MariaDB/MySQL",
        "config-header-postgres": "Definições PostgreSQL",
        "config-header-sqlite": "Definições SQLite",
-       "config-header-oracle": "Definições Oracle",
-       "config-header-mssql": "Configurações do Microsoft SQL Server",
        "config-invalid-db-type": "O tipo de base de dados é inválido",
        "config-missing-db-name": "Tem de introduzir um valor para \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Tem de introduzir um valor para \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "Tem de introduzir um valor para \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "O TNS da base de dados, \"$1\", é inválido.\nUse \"TNS Name\" ou o método \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Métodos de Configuração da Conectividade em Oracle])",
        "config-invalid-db-name": "O nome da base de dados, \"$1\",  é inválido.\nUse só letras (a-z, A-Z), algarismos (0-9), sublinhados (_) e hífens (-) dos caracteres ASCII.",
        "config-invalid-db-prefix": "O prefixo da base de dados, \"$1\",  é inválido.\nUse só letras (a-z, A-Z), algarismos (0-9), sublinhados (_) e hífens (-) dos caracteres ASCII.",
        "config-connection-error": "$1.\n\nVerifique o servidor, o nome do utilizador e a palavra-passe e tente novamente. Se estiver a usar \"localhost\" como servidor da base de dados, tente antes usar \"127.0.0.1\" (ou vice-versa).",
        "config-invalid-schema": "O esquema ''(schema)'' do MediaWiki, \"$1\", é inválido.\nUse só letras (a-z, A-Z), algarismos (0-9) e sublinhados (_) dos caracteres ASCII.",
-       "config-db-sys-create-oracle": "O instalador só permite criar uma conta nova usando uma conta SYSDBA.",
-       "config-db-sys-user-exists-oracle": "A conta \"$1\" já existe. A conta SYSDBA só pode criar uma conta nova!",
        "config-postgres-old": "É necessário o PostgreSQL $1 ou posterior; tem a versão $2.",
-       "config-mssql-old": "É necessário o Microsoft SQL Server $1 ou posterior. Tem a versão $2.",
        "config-sqlite-name-help": "Escolha o nome que identificará a sua wiki.\nNão use espaços ou hífens.\nEste nome será usado como nome do ficheiro de dados do SQLite.",
        "config-sqlite-parent-unwritable-group": "Não é possível criar o diretório de dados <code><nowiki>$1</nowiki></code>, porque o servidor de internet não tem permissão de escrita no diretório que o contém <code><nowiki>$2</nowiki></code>.\n\nO instalador determinou em que nome de utilizador o seu servidor de internet está a correr.\nPara continuar, configure o diretório <code><nowiki>$3</nowiki></code> para poder ser escrito por este utilizador.\nPara fazê-lo em sistemas Unix ou Linux, use:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Não é possível criar o diretório de dados <code><nowiki>$1</nowiki></code>, porque o servidor de internet não tem permissão de escrita no diretório que o contém <code><nowiki>$2</nowiki></code>.\n\nNão foi possível determinar em que nome de utilizador o seu servidor de internet está a correr.\nPara continuar, configure o diretório <code><nowiki>$3</nowiki></code> para que este possa ser globalmente escrito por esse utilizador (e por outros!).\nPara fazê-lo em sistemas Unix ou Linux, use:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Motor de armazenamento:",
        "config-mysql-innodb": "InnoDB (recomendado)",
        "config-mysql-engine-help": "<strong>InnoDB</strong> é quase sempre a melhor opção, porque suporta bem acessos simultâneos <i>(concurrency)</i>.\n\n<strong>MyISAM</strong> pode ser mais rápido no modo de utilizador único ou em instalações somente para leitura.\nAs bases de dados MyISAM tendem a perder integridade de dados com mais frequência do que as bases de dados InnoDB.",
-       "config-mssql-auth": "Tipo de autenticação:",
-       "config-mssql-install-auth": "Selecione o tipo de autenticação a usar para ligar à base de dados durante o processo de instalação.\nSe selecionar \"{{int:config-mssql-windowsauth}}\", serão usadas as credenciais do utilizador com que o servidor de Internet está a ser executado.",
-       "config-mssql-web-auth": "Selecione o tipo de autenticação que o servidor de Internet irá usar para se ligar ao servidor da base de dados durante a operação normal da wiki.\nSe selecionar \"{{int:config-mssql-windowsauth}}\", serão usadas as credenciais do utilizador com que o servidor de Internet está a ser executado.",
-       "config-mssql-sqlauth": "Autenticação do SQL Server",
-       "config-mssql-windowsauth": "Autenticação do Windows",
        "config-site-name": "Nome da wiki:",
        "config-site-name-help": "Este nome aparecerá no título da janela do seu navegador e em vários outros sítios.",
        "config-site-name-blank": "Introduza o nome do sítio.",
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 fb68b30..a6e9ddb 100644 (file)
        "config-no-uri": "<strong>Eroare:</strong> Nu pot determina URI-ul curent.\nInstalare întreruptă.",
        "config-db-type": "Tipul bazei de date:",
        "config-db-host": "Gazdă bază de date:",
-       "config-db-host-oracle": "Baza de date TNS:",
        "config-db-wiki-settings": "Identificați acest wiki",
        "config-db-name": "Numele bazei de date (fără cratime):",
-       "config-db-name-oracle": "Schema bazei de date:",
        "config-db-install-account": "Contul de utilizator pentru instalare",
        "config-db-username": "Nume de utilizator pentru baza de date:",
        "config-db-password": "Parola bazei de date:",
        "config-db-port": "Portul bazei de date:",
        "config-db-schema": "Schema pentru MediaWiki (fără cratime):",
        "config-sqlite-dir": "Director de date SQLite:",
-       "config-oracle-def-ts": "Spațiu de stocare („tablespace”) implicit:",
-       "config-oracle-temp-ts": "Spațiu de stocare („tablespace”) temporar:",
        "config-type-mysql": "MariaDB, MySQL sau compatibil",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "Setările MariaDB/MySQL",
        "config-header-postgres": "Setări PostgreSQL",
        "config-header-sqlite": "Setări SQLite",
-       "config-header-oracle": "Setări Oracle",
-       "config-header-mssql": "Setări Microsoft SQL Server",
        "config-invalid-db-type": "Tip de bază de date incorect",
        "config-missing-db-name": "Trebuie să introduceți o valoare pentru „{{int:config-db-name}}”.",
        "config-missing-db-host": "Trebuie să introduceți o valoare pentru „{{int:config-db-host}}”.",
-       "config-missing-db-server-oracle": "Trebuie să introduceți o valoare pentru „{{int:config-db-host-oracle}}”.",
        "config-connection-error": "$1.\n\nVerificați hostul, numele de utilizator și parola și reîncercați. Dacă folosiți „localhost” drept host al bazei de date, încercați mai bine „127.0.0.1” (sau invers).",
        "config-upgrade-done-no-regenerate": "Actualizare completă.\n\nAcum puteți [$1 începe să vă folosiți wikiul].",
        "config-regenerate": "Regenerare LocalSettings.php →",
        "config-db-web-create": "Creați contul dacă nu există deja",
        "config-mysql-engine": "Motor de stocare:",
        "config-mysql-innodb": "InnoDB (recomandat)",
-       "config-mssql-auth": "Tip de autentificare:",
        "config-site-name": "Numele wikiului:",
        "config-site-name-blank": "Introduceți un nume pentru sit.",
        "config-project-namespace": "Spațiul de nume al proiectului:",
index df1ca1a..d56298b 100644 (file)
@@ -40,8 +40,6 @@
        "config-env-hhvm": "HHVM $1 ha state installate.",
        "config-outdated-sqlite": "<strong>Iapre l'uecchjie:</strong> tu è SQLite $2, ca jè 'na versione troppe vecchie respette a quedda minime $1. SQLite non g'è disponibbele.",
        "config-db-type": "Tipe de database:",
-       "config-db-host-oracle": "Database TNS:",
-       "config-db-name-oracle": "Scheme d'u database:",
        "config-db-username": "Nome utende d'u database:",
        "config-db-password": "Password d'u database:",
        "config-db-port": "Porte d'u database:",
        "config-type-mysql": "MariaDFB, MySQL, o combatibbile",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "'Mbostaziune de MariaDB/MySQL",
        "config-header-postgres": "'Mbostaziune de PostgreSQL",
        "config-header-sqlite": "'Mbostaziune de SQLite",
-       "config-header-oracle": "'Mbostaziune de Oracle",
-       "config-header-mssql": "'Mbostaziune de Microsoft SQL Server",
        "config-invalid-db-type": "Tipe de database invalide.",
        "config-mysql-innodb": "InnoDB (conzigliate)",
        "config-ns-generic": "Proggette",
index 03ef206..3343d15 100644 (file)
        "config-db-type": "Тип базы данных:",
        "config-db-host": "Хост базы данных:",
        "config-db-host-help": "Если ваш сервер базы данных находится на другом сервере, введите здесь его имя хоста или IP-адрес.\n\nЕсли вы используете совместный виртуальный хостинг, ваш провайдер хостинга должен сообщить вам правильное имя хоста в своей документации.\n\nЕсли вы используете MySQL, «localhost» может не подойти в качестве имени сервера. В этом случае попробуйте указать 127.0.0.1 в качестве локального IP-адреса.\n\nЕсли вы используете PostgreSQL, оставьте это поле пустым для подключения через сокет Unix.",
-       "config-db-host-oracle": "TNS базы данных:",
-       "config-db-host-oracle-help": "Введите действительный [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; файл tnsnames.ora должен быть видимым для этой инсталляции. <br />При использовании клиентских библиотек версии 10g и старше также возможно использовать метод именования [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Идентификация этой вики",
        "config-db-name": "Имя базы данных (без дефисов):",
        "config-db-name-help": "Выберите название-идентификатор для вашей вики.\nОно не должно содержать пробелов.\n\nЕсли вы используете виртуальный хостинг, провайдер или выдаст вам конкретное имя базы данных, или позволит создавать базы данных с помощью панели управления.",
-       "config-db-name-oracle": "Схема базы данных:",
-       "config-db-account-oracle-warn": "Поддерживаются три сценария установки Oracle в качестве базы данных:\n\nЕсли вы хотите создать учётную запись базы данных в процессе установки, пожалуйста, укажите учётную запись роли SYSDBA для установки и укажите желаемые полномочия учётной записи с веб-доступом. вы также можете учётную запись с веб-доступом вручную и указать только её (если у неё есть необходимые разрешения на создание объектов схемы) или указать две учётные записи, одну с правами создания объектов, а другую с ограничениями для веб-доступа.\n\nСценарий для создания учётной записи с необходимыми привилегиями можно найти в папке «maintenance/oracle/» этой программы установки. Имейте в виду, что использование ограниченной учётной записи приведёт к отключению всех возможностей обслуживания с учётной записи по умолчанию.",
        "config-db-install-account": "Учётная запись для установки",
        "config-db-username": "Имя пользователя базы данных:",
        "config-db-password": "Пароль базы данных:",
        "config-pg-test-error": "Не удаётся подключиться к базе данных <strong>$1</strong>: $2",
        "config-sqlite-dir": "Директория данных SQLite:",
        "config-sqlite-dir-help": "SQLite хранит все данные в одном файле.\n\nДиректория, указываемая вами, должна быть доступна для записи веб-сервером во время установки.\n\nОна '''не должна''' быть доступна через Интернет, поэтому не должна совпадать с той, где хранятся PHP файлы.\n\nУстановщик запишет в эту директорию файл <code>.htaccess</code>, но если это не сработает, кто-нибудь может получить доступ ко всей базе данных.\nВ этой базе находится в том числе и информация о пользователях (адреса электронной почты, хэши паролей), а также удалённые страницы и другие секретные данные о вики.\n\nПо возможности, расположите базу данных где-нибудь в стороне, например, в <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Пространство таблиц по умолчанию:",
-       "config-oracle-temp-ts": "Временное пространство таблиц:",
        "config-type-mysql": "MariaDB, MySQL или совместимая",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki поддерживает следующие СУБД:\n\n$1\n\nЕсли вы не видите своей системы хранения данных в этом списке, следуйте инструкциям, на которые есть ссылка выше, чтобы получить поддержку.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] — основная база данных для MediaWiki, которая поддерживается лучше всего. MediaWiki также работает с [{{int:version-db-mariadb-url}} MariaDB] и [{{int:version-db-percona-url}} Percona Server], которые являются MariaDB-совместимыми. (См.[https://www.php.net/manual/ru/mysql.installation.php Как собрать PHP с поддержкой MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] — популярная СУБД с открытым исходным кодом, альтернатива MySQL. ([https://www.php.net/manual/ru/pgsql.installation.php Как собрать PHP с поддержкой PostgreSQL]).",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] — это легковесная система баз данных, имеющая очень хорошую поддержку. ([https://www.php.net/manual/ru/pdo.installation.php Как собрать PHP с поддержкой SQLite], работающей посредством PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] — это коммерческая корпоративная база данных. ([https://www.php.net/manual/ru/oci8.installation.php Как собрать PHP с поддержкой OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] — это коммерческая корпоративная база данных для Windows. ([https://www.php.net/manual/ru/sqlsrv.installation.php Как собрать PHP с поддержкой SQLSRV])",
        "config-header-mysql": "Настройки MariaDB/MySQL",
        "config-header-postgres": "Настройки PostgreSQL",
        "config-header-sqlite": "Настройки SQLite",
-       "config-header-oracle": "Настройки Oracle",
-       "config-header-mssql": "Параметры Microsoft SQL Server",
        "config-invalid-db-type": "Неверный тип базы данных",
        "config-missing-db-name": "Вы должны ввести значение «{{int:config-db-name}}».",
        "config-missing-db-host": "Необходимо ввести значение параметра «{{int:config-db-host}}».",
-       "config-missing-db-server-oracle": "Вы должны заполнить поле «{{int:config-db-host-oracle}}»",
-       "config-invalid-db-server-oracle": "Неверное TNS базы данных «$1».\nИспользуйте либо «TNS Name», либо строку «Easy Connect» ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Методы наименования Oracle])",
        "config-invalid-db-name": "Неверное имя базы данных «$1».\nИспользуйте только ASCII-символы (a-z, A-Z), цифры (0-9), знак подчёркивания (_) и дефис(-).",
        "config-invalid-db-prefix": "Неверный префикс базы данных «$1».\nИспользуйте только буквы ASCII (a-z, A-Z), цифры (0-9), знак подчёркивания (_) и дефис (-).",
        "config-connection-error": "$1.\n\nПроверьте хост, имя пользователя и пароль и попробуйте ещё раз. Если в качестве хоста базы данных используется \"localhost\", попробуйте использовать вместо него \"127.0.0.1\" (или наоборот).",
        "config-invalid-schema": "Неправильная схема для MediaWiki «$1».\nИспользуйте только ASCII символы (a-z, A-Z), цифры(0-9) и знаки подчёркивания(_).",
-       "config-db-sys-create-oracle": "Программа установки поддерживает только использование SYSDBA для создания новой учётной записи.",
-       "config-db-sys-user-exists-oracle": "Учётная запись «$1». SYSDBA может использоваться только для создания новой учётной записи!",
        "config-postgres-old": "Необходим PostgreSQL $1 или более поздняя версия. У вас установлен PostgreSQL $2.",
-       "config-mssql-old": "Требуется Microsoft SQL Server версии $1 или более поздней. У вас установлена версия $2.",
        "config-sqlite-name-help": "Выберите имя-идентификатор для вашей вики.\nНе используйте дефисы и пробелы.\nЭта строка будет использоваться в имени файла SQLite.",
        "config-sqlite-parent-unwritable-group": "Не удалось создать директорию данных <nowiki><code>$1</code></nowiki>, так как у веб-сервера нет прав записи в родительскую директорию <nowiki><code>$2</code></nowiki>.\n\nУстановщик определил пользователя, под которым работает веб-сервер.\nСделайте директорию <nowiki><code>$3</code></nowiki> доступной для записи и продолжите.\nВ Unix/Linux системе выполните:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Не удалось создать директорию для данных <code><nowiki>$1</nowiki></code>, так как у веб-сервера нет прав на запись в родительскую директорию <code><nowiki>$2</nowiki></code>.\n\nПрограмма установки не смогла определить пользователя, под которым работает веб-сервер.\nДля продолжения сделайте каталог <code><nowiki>$3</nowiki></code> глобально доступным для записи серверу (и другим).\nВ Unix/Linux сделайте:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Движок базы данных:",
        "config-mysql-innodb": "InnoDB (рекомендуется)",
        "config-mysql-engine-help": "'''InnoDB''' почти всегда предпочтительнее, так как он лучше справляется с параллельным доступом.\n\n'''MyISAM''' может оказаться быстрее для вики с одним пользователем или с минимальным количеством поступающих правок, однако базы данных на нём портятся чаще, чем на InnoDB.",
-       "config-mssql-auth": "Тип аутентификации:",
-       "config-mssql-install-auth": "Выберите тип проверки подлинности, который будет использоваться для подключения к базе данных во время процесса установки.\nЕсли вы выберите «{{int:config-mssql-windowsauth}}», будут использоваться учётные данные пользователя, под которым работает веб-сервер.",
-       "config-mssql-web-auth": "Выберите тип проверки подлинности, который веб-сервер будет использовать для подключения к серверу базы данных во время обычного функционирования вики.\nЕсли вы выберите «{{int:config-mssql-windowsauth}}», будут использоваться учётные данные пользователя, под которым работает веб-сервер.",
-       "config-mssql-sqlauth": "Проверка подлинности SQL Server",
-       "config-mssql-windowsauth": "Проверка подлинности Windows",
        "config-site-name": "Название вики:",
        "config-site-name-help": "Название будет отображаться в заголовке окна браузера и в некоторых других местах вики.",
        "config-site-name-blank": "Введите название сайта.",
index 3fc52ab..b0a171b 100644 (file)
        "config-db-type": "Dâtabase type:",
        "config-db-host": "Dâtabase host:",
        "config-db-host-help": "Gif yer database server is oan ae different server, enter the host name or IP address here.\n\nGif ye'r uisin shaired wab hostin, yer hostin provider shid gie ye the richt host name in their documentation.\n\nGif ye'r installin oan ae Windows server n uisin MySQL, uisin \"localhost\" michtna wark fer the server name. Gif it disna, try \"127.0.0.1\" fer the local IP address.\n\nGif ye'r uisin PostgreSQL, lea this field blank tae connect bi wa o ae Unix socket.",
-       "config-db-host-oracle": "Dâtabase TNS:",
-       "config-db-host-oracle-help": "Enter ae valid [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; ae tnsnames.ora file maun be veesible til this instawation. <br />Gif ye'r uisin client libries 10g or newer ye can uise forby the [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] namin methyd.",
        "config-db-wiki-settings": "Identifie this wiki",
        "config-db-name": "Dâtabase name:",
        "config-db-name-help": "Chuise ae name that identifies yer wiki.\nIt shidna contain spaces.\n\nGif ye'r uisin shaired wab hoastin, yer hoastin provider will either gie ye ae speceefic database name tae uise or let ye mak databases bi waa o ae control panel.",
-       "config-db-name-oracle": "Dâtabase schema:",
-       "config-db-account-oracle-warn": "Thaur's three supportit scenaríos fer instawin Oracle aes ae database backend:\n\nGif ye wish tae cræft ae database accoont aes pairt o the instawation process, please supplie aen accoont wi SYSDBA role aes database accoont fer instawation n speceefie the desired creedentials fer the wab-access accoont, itherwise ye can eether cræft the wab-access accoont manuallie n supplie yinlie that accoont (gif it haes the needit permeessions tae cræft the schema objects) or supplie twa differant accoonts, yin wi cræft preevileges n ae restreectit yin fer wab access.\n\nScreept fer cræftin aen accoont wi the needit preevileges can be foond in the \"maintenance/oracle/\" directerie o this instawation. Keep in mynd that uisin ae restreectit accoont will disable aw maintenance capabileeties wi the defaut accoont.",
        "config-db-install-account": "Uiser accoont fer installâtion",
        "config-db-username": "Database uisername:",
        "config-db-password": "Database passwaird:",
        "config-pg-test-error": "Canna connect til database <strong>$1</strong>: $2",
        "config-sqlite-dir": "SQLite data directerie:",
        "config-sqlite-dir-help": "SQLite stores aw data in ae single file.\n\nThe directerie ye provide maun be writable bi the wabserver durin instawation.\n\nIt shid <strong>no</strong> be accessible bi waa o the wab, this is why we'r no puttin it whaur yer PHP files ar.\n\nThe instawer will write ae <code>.htaccess</code> file alang wi it, but gif that fails somebodie can gain access til yer raw database.\nThat incluides raw uiser data (wab-mail addresses, hashed passwairds) aes weel aes delytit reveesions n ither restreected data oan the wiki.\n\nConsider puttin the database some ither place awthegether, fer example in <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Defaut buirdspace:",
-       "config-oracle-temp-ts": "Temperie buirdspace:",
        "config-type-mysql": "MaSQL (or compâtible)",
-       "config-type-mssql": "Micræsaff SQL Server",
        "config-support-info": "MediaWiki supports the follaein database systems:\n\n$1\n\nGif ye dinna see the database system ye'r tryin tae uise listed ablow, than follae the instructions linked abuin tae enable support.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] is the primarie tairget fer MediaWiki n is best supported. MediaWiki warks forby wi [{{int:version-db-mariadb-url}} MariaDB] n [{{int:version-db-percona-url}} Percona Server], thir ar MySQL compatible. ([https://www.php.net/manual/en/mysqli.installation.php Hou tae compile PHP wi MySQL support])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is ae popular apen soorce database system aes aen alternative til MySQL. Thaur micht be some wee bugs still hingin roond, n it's na recommendit fer uiss in ae production environment. ([https://www.php.net/manual/en/pgsql.installation.php Hou tae compile PHP wi PostgreSQL support])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is ae lichtweicht database system that is ver weel supportit. ([http://www.php.net/manual/en/pdo.installation.php Hou tae compile PHP wi SQLite support], uises PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] is ae commercial enterprise database. ([http://www.php.net/manual/en/oci8.installation.php Hou tae compile PHP wi OCI8 support])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] is ae commercial enterprise database fer Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Hou tae compile PHP wi SQLSRV support])",
        "config-header-mysql": "MaSQL settins",
        "config-header-postgres": "PostgreSQL settins",
        "config-header-sqlite": "SQLite settins",
-       "config-header-oracle": "Oracle settins",
-       "config-header-mssql": "Microsoft SQL Server settings",
        "config-invalid-db-type": "Onvalid database type",
        "config-missing-db-name": "Ye maun enter ae value fer \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Ye maun enter ae value fer \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "Ye maun enter ae value fer \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "Onvalid database TNS \"$1\".\nUise either \"TNS Name\" or aen \"Easy Connect\" string ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle Naming Methods])",
        "config-invalid-db-name": "Onvalid database name \"$1\".\nUise yinly ASCII letters (a-z, A-Z), nummers (0-9), unnerscores (_) an hyphens (-).",
        "config-invalid-db-prefix": "Onvalid database prefix \"$1\".\nUise yinly ASCII letters (a-z, A-Z), nummers (0-9), unnerscores (_) an hyphens (-).",
        "config-connection-error": "$1.\n\nCheck the host, uisername n passwaird n gie it anither shot.",
        "config-invalid-schema": "Onvalid schema fer MediaWiki \"$1\".\nUise yinly ASCII letters (a-z, A-Z), nummers (0-9) an unnerscores (_).",
-       "config-db-sys-create-oracle": "Installer yinly supports usin ae SYSDBA accoont fer makin ae new accoont.",
-       "config-db-sys-user-exists-oracle": "Uiser accoont \"$1\" awreadie exeests. SYSDBA can yinly be uised fer the makin o ae new accoont!",
        "config-postgres-old": "PostgreSQL $1 or later is required. Ye hae $2.",
-       "config-mssql-old": "Microsoft SQL Server $1 or newer is needed. Ye hae $2.",
        "config-sqlite-name-help": "Chuise ae name that identifies yer wiki.\nDinna uise spaces or hyphens.\nThis will be uised fer the SQLite data file name.",
        "config-sqlite-parent-unwritable-group": "Canna mak the data directerie <code><nowiki>$1</nowiki></code>, cause the parent directerie <code><nowiki>$2</nowiki></code> isna writable bi the wabserver.\n\nThe installer haes determined the uiser yer wabserver is runnin aes.\nMak the <code><nowiki>$3</nowiki></code> directerie writable bi it tae continue.\nOan ae Unix/Linux system dae:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Canna cræft the data directerie <code><nowiki>$1</nowiki></code>, cause the pairent directerie <code><nowiki>$2</nowiki></code> isna writable bi the wabserver.\n\nThe instawer coudna determine the uiser yer wabserver is rinnin aes.\nMak the <code><nowiki>$3</nowiki></code> directerie globallie writable bi it (n ithers!) tae continue.\nOan ae Unix/Linux system dae:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Storage engine:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-engine-help": "<strong>InnoDB</strong> is awmaist aye the best optie, aes it haes guid concurrencie support.\n\n<strong>MyISAM</strong> micht be faster in single-uiser or read-yinly installâtions.\nMyISAM databases tend tae rot mair aften than InnoDB databases.",
-       "config-mssql-auth": "Authentication type:",
-       "config-mssql-install-auth": "Select the authentication type that's tae be uised tae connect wi the database durin the installation process.\nGif ye select \"{{int:config-mssql-windowsauth}}\", the credeentials o whitever uiser the wabserver is rinnin aes will be uised.",
-       "config-mssql-web-auth": "Select the authentication type that the wab server will uise tae connect wi the database server, durin ordinair operation o the wiki.\nGif ye select \"{{int:config-mssql-winowsauth}}\", the credeentials o whitever uiser the wabserver is rinnin aes will be uised.",
-       "config-mssql-sqlauth": "SQL Server Authentication",
-       "config-mssql-windowsauth": "Windows Authentication",
        "config-site-name": "Name o wiki:",
        "config-site-name-help": "This will kyth in the title baur o the brouser n in varioos ither places.",
        "config-site-name-blank": "Enter ae site name.",
index 06090ca..9bab12f 100644 (file)
        "config-db-type": "Tip baze podataka:",
        "config-db-host": "Domaćin baze podataka:",
        "config-db-host-help": "Ako je vaša baza podataka na drugom serveru, tada ovdje unesite ime domaćina ili IP adresu.\n\nAko koristite zajednički (deljen) hosting, tada će vaš vjerovnik navesti ispravno ime domaćina u njegovoj dokumentaciji.\n\nAko koristite MySQL, mogućnost \"localhost\" možda neće raditi za serversko ime. U tom slučaju, pokušajte unijeti \"127.0.0.1\" kao lokalnu IP adresu.\n\nAko koristite PostgreSQL, ostavite polje prazno za povezivanje putem Unix priključka.",
-       "config-db-host-oracle": "TNS baze podataka:",
-       "config-db-host-oracle-help": "Unesite valjano [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm lokalno ime za povezivanje]. Ovoj uspostavi mora biti vidljiva datotekata tnsnames.ora.<br />Ako koristite klijentske biblioteke 10g ili novije, tada možete koristiti i metodu imenovanja [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Identifikuj ovaj wiki",
        "config-db-name": "Ime baze podataka (bez crtica):",
        "config-db-name-help": "Odaberite ime koje će predstavljati vaš wiki.\nIme ne smije sadržavati razmake.\n\nAko koristite zajednički (deljen) hosting, tada vaš će vam poslodavac dati određeno ime baze podataka za korištenje, ili pak će vas pustiti da pravite baze podataka putem upravljačnice.",
-       "config-db-name-oracle": "Šema baze podataka:",
-       "config-db-account-oracle-warn": "Postoje tri podržana scenarija za uspostavu Oraclea kao bazni davatelja usluga:\n\nAko želite stvoriti račun baze podataka kao dio postupka uspostave, navedite račun s SYSDBA-ulogom kao račun za bazu koja se uspostavlja i navedite željene podatke za račun mrežnog pristupa. U drugom slučaju, možete izraditi račun za pristup mreži ručno i navesti samo taj račun (ako postoje dozvole za izradu shematskih objekata) ili pak navesti dva različita računa, jedan s povlasticama izrade, a drugi (ograničeno) za mrežni pristup.\n\nSkriptu za izradu računa s obveznim ovlastima naći ćete u direktorijumu „maintenance/oracle/“ ove uspostave. Imajte na umu da ćete, ako koristite ograničeni račun, onemogućiti sve funkcije održavanja s primarnim računom.",
        "config-db-install-account": "Korisnički račun za uspostavu",
        "config-db-username": "Korisničko ime baze podataka:",
        "config-db-password": "Lozinka baze podataka:",
        "config-pg-test-error": "Nije moguće povezati se sa bazom podataka <strong>$1</strong>: $2",
        "config-sqlite-dir": "Direktorijum za SQLite-podatke:",
        "config-sqlite-dir-help": "SQLite pohranjuje sve podatke u jednu datoteku.\n\nDirektorijum što navedete mora biti zapisljiv iz mrežnog servera tijekom uspostave.\n\nTaj je '''ne''' mora biti dostupno putem svemrežja, tako da ne stavljamo gdje su vaše PHP datoteke.\n\nUspostavljač će također stvoriti datoteku <code>.htaccess</code>, ali ako ta ne radi kako treba, tada netko može unijeti vašu neobrađenu (sirovu) bazu podataka.\nTo uključuje neobrađene korisničke podatke (adrese e-pošte, hash lozinke) kao i izbrisane revizije i druge podatke za wiki koji ima ograničen pristup.\n\nPreporučuje se da cijelu bazu smjestite negdje, primjerice <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Podrazumevani tablearni prostor:",
-       "config-oracle-temp-ts": "Privremeni tabelarni prostor:",
        "config-type-mysql": "MariaDB, MySQL ili kompatibilan",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki podržava sljedeće sustave baza podataka:\n\n$1\n\nAko sustav koji želite koristiti nije naveden u nastavku, slijedite vezu gore navedenih uputa kako biste omogućili podršku za taj sustav.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] je glavna meta MediaWikija i najbolje je podržan. MediaWiki također radi sa [{{int:version-db-mysql-url}} MySQL-om] i [{{int:version-db-percona-url}} Percona], koji su skladni sa MariaDB-om. ([https://www.php.net/manual/en/mysqli.installation.php Kako kompajlirati PHP sa podrškom MySQL-a])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] je popularan sistem baza podataka otvorenog koda koji predstavlja alternativu MySQL-u. ([https://www.php.net/manual/en/pgsql.installation.php Kako kompajlirati PHP sa podrškom PostgreSQL-a])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] je lagan sistem baze podataka koji je veoma dobro podržan. ([https://www.php.net/manual/en/pdo.installation.php Kako kompajlirati PHP sa podrškom SQLite-a], koristi PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] je baza podataka komercijalnih preduzeća. ([https://www.php.net/manual/en/oci8.installation.php Kako kompajlirati PHP sa podrškom OCI8-a])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] je baza podataka komercijalnih preduzeća za Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Kako kompajlirati PHP sa podrškom SQLSRV-a])",
        "config-header-mysql": "Podešavanja MariaDB/MySQL-a",
        "config-header-postgres": "Podešavanja PostgreSQL-a",
        "config-header-sqlite": "Podešavanja SQLite-a",
-       "config-header-oracle": "Podešavanja Oracle-a",
-       "config-header-mssql": "Podešavanja za Microsoft SQL Server",
        "config-invalid-db-type": "Nevažeći tip baze",
        "config-missing-db-name": "Morate unijeti vrijednost za \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Morate unijeti vrijednost za \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "Morate unijeti vrijednost za \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "Nevažeći TNS „$1”.\nKoristite ili „TNS Name” ili nisku „Easy Connect”.\n([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle metodi imenovanja]).",
        "config-invalid-db-name": "Ime baze podataka „$1” nije važeće.\nKoristite samo ASCII-slova (a-z, A-Z), brojeve (0-9) i podvlake (_).",
        "config-invalid-db-prefix": "Prefiks baze podataka „$1” nije važeći.\nKoristite samo ASCII-slova (a-z, A-Z), brojeve (0-9), podvlake (_) i crtice (-).",
        "config-connection-error": "$1.\n\nProvjerite host, korisničko ime i lozinku i pokušajte ponovno. Ako kao host baze podataka koristite \"localhost\", zamijenite ga \"127.0.0.1\" (ili obrnuto).",
        "config-invalid-schema": "Šema za MediaWiki „$1” nije važeća.\nKoristite samo ASCII slova (a-z, A-Z), brojeve (0-9) i podvlake (_).",
-       "config-db-sys-create-oracle": "Uspostavljač podržava samo upotrebu SYSDBA-računa za pravljenje novih računa.",
-       "config-db-sys-user-exists-oracle": "Korisnički račun \"$1\" već postoji. SYSDBA samo služi za stvaranje novog računa!",
        "config-postgres-old": "Zahtijeva se PostgreSQL $1 ili noviji. Vi imate $2.",
-       "config-mssql-old": "Zahtijeva se Microsoft SQL Server $1 ili novija verzija. Vi imate $2.",
        "config-sqlite-name-help": "Odaberite ime koje će predstavljati vaš wiki.\nNe koristite razmake i crte.\nOvo će se koristiti za ime datoteke SQLite-podataka.",
        "config-sqlite-parent-unwritable-group": "Nije moguće izraditi direktorijum <code><nowiki>$1</nowiki></code> \njer mrežni poslužitelj ne može pisati u matični direktorijum <code><nowiki>$2</nowiki></code>.\n\nIdentificiran je korisnik pod kojim radi vaš mrežni poslužitelj.\nDa biste nastavili, namjestite da može zapisivati u direktorijum <code><nowiki>$3</nowiki></code>.\nNa Unix/Linux sistemu učinite sljedeće:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Nije moguće izraditi direktorijum <code><nowiki>$1</nowiki></code> \njer mrežni poslužitelj ne može pisati u matični direktorijum <code><nowiki>$2</nowiki></code>.\n\nUspostavljač nije mogao odrediti korisnika pod kojim radi vaš mrežni poslužitelj.\nDa biste nastavili, postavite toga (i druge!) da biste se globalno zapisivati u direktorijum <code><nowiki>$3</nowiki></code>.\nNa Unix/Linux sistemu učinite sljedeće:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-db-web-no-create-privs": "Račun koji ste naveli za uspostavu nema dovoljne privilegije za da stvori račun.\nOvdje morate navesti postojeći račun.",
        "config-mysql-engine": "Skladišni pogon:",
        "config-mysql-innodb": "InnoDB (preporučeno)",
-       "config-mssql-auth": "Tip potvrde identiteta:",
-       "config-mssql-sqlauth": "Potvrda identiteta za SQL Server",
-       "config-mssql-windowsauth": "Potvrda identiteta za Windows",
        "config-site-name": "Ime wikija:",
        "config-site-name-help": "Ovo će se pojaviti u naslovnoj traci pregledača i na raznim drugim mestima.",
        "config-project-namespace": "Projektni imenski prostor:",
index fefe7a2..6079246 100644 (file)
@@ -37,7 +37,6 @@
        "config-db-host": "දත්ත සංචිත ධාරක:",
        "config-db-wiki-settings": "මෙම විකිය හඳුනා ගන්න",
        "config-db-name": "දත්ත සංචිතයේ නම:",
-       "config-db-name-oracle": "දත්ත සංචිත සංක්ෂිප්ත නිරූපණය:",
        "config-db-install-account": "ස්ථාපනය සඳහා පරිශීලක ගිණුම",
        "config-db-username": "දත්ත සංචිතයේ පරිශීලක නාමය:",
        "config-db-password": "දත්ත සංචිතයේ මුරපදය:",
        "config-db-schema": "මාධ්‍යවිකි සඳහා සංක්ෂිප්ත නිරූපණය:",
        "config-pg-test-error": "'''$1''' දත්ත සංචිතය වෙත සම්බන්ධ විය නොහැක: $2",
        "config-sqlite-dir": "SQLite දත්ත නාමවලිය:",
-       "config-oracle-def-ts": "සාමාන්‍ය වගු අවකාශය:",
-       "config-oracle-temp-ts": "තාවකාලික වගු අවකාශය:",
        "config-header-mysql": "MySQL සැකසුම්",
        "config-header-postgres": "PostgreSQL සැකසුම්",
        "config-header-sqlite": "SQLite සැකසුම්",
-       "config-header-oracle": "ඔරකල් සැකසුම්",
        "config-invalid-db-type": "වලංගු නොවන දත්ත සංචිත වර්ගය",
        "config-missing-db-name": "\"දත්ත සංචිත නාමය\" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ",
        "config-missing-db-host": "\"දත්ත සංචිත ධාරකය\" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ",
-       "config-missing-db-server-oracle": "\"දත්ත සංචිත TNS\" සඳහා ඔබ විසින් අගයක් දිය යුතු වේ",
        "config-sqlite-name-help": "ඔබගේ විකිය හදුන්වාදෙන නමක් තෝරාගන්න. \nහිස්තැන් හෝ විරාම ලක්ෂණ ‍නොයොදන්න.\nමෙය SQLite දත්ත ගොනුනාමය සදහා යොදා ගනු ඇත.",
        "config-regenerate": "නැවත ජනිත කරන්න LocalSettings.php →",
        "config-db-web-account": "ජාල ප්‍රවේශනය සඳහා දත්ත සංචිත ගිණුම",
        "config-mysql-engine": "ආචයන එන්ජිම:",
        "config-mysql-innodb": "InnoDB",
-       "config-mssql-windowsauth": "windows සහතික කිරීම.",
        "config-site-name": "විකියෙහි නම:",
        "config-site-name-blank": "අඩවි නාමයක් යොදන්න.",
        "config-project-namespace": "ව්‍යාපෘතියේ නාමඅවකාශය:",
index 1dcd2c1..16616cf 100644 (file)
        "config-env-hhvm": "HHVM $1 je nainštalované.",
        "config-db-type": "Typ databázy:",
        "config-db-host": "Databázový server:",
-       "config-db-host-oracle": "Databázové TNS:",
        "config-db-wiki-settings": "Identifikácia tejto wiki",
        "config-db-name": "Názov databázy:",
-       "config-db-name-oracle": "Databázová schéma:",
        "config-db-install-account": "Používateľský účet pre inštaláciu",
        "config-db-username": "Databázové používateľské meno:",
        "config-db-password": "Databázové heslo:",
        "config-missing-db-name": "Musíte zadať hodnotu pre \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Musíte zadať hodnotu pre \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "Musíte zadať hodnotu pre \"{{int:config-db-host-oracle}}\".",
        "config-site-name": "Názov wiki:",
        "config-site-name-blank": "Zadajte názov stránky.",
        "config-ns-generic": "Projekt",
index 3dd7038..cdf7b68 100644 (file)
        "config-using-uri": "Uporabljam URL strežnika \"<nowiki>$1$2</nowiki>\".",
        "config-db-type": "Vrsta zbirke podatkov:",
        "config-db-host": "Gostitelj zbirke podatkov:",
-       "config-db-host-oracle": "TNS zbirke podatkov:",
        "config-db-wiki-settings": "Prepoznaj ta wiki:",
        "config-db-name": "Ime zbirke podatkov (brez vezajev):",
-       "config-db-name-oracle": "Shema zbirke podatkov:",
        "config-db-install-account": "Uporabniški račun za namestitev",
        "config-db-username": "Uporabniško ime zbirke podatkov:",
        "config-db-password": "Geslo zbirke podatkov:",
        "config-header-mysql": "Nastavitve MariaDB/MySQL",
        "config-header-postgres": "Nastavitve PostgreSQL",
        "config-header-sqlite": "Nastavitve SQLite",
-       "config-header-oracle": "Nastavitve Oracle",
-       "config-header-mssql": "nastavitve Microsoft SQL Server",
        "config-invalid-db-type": "Neveljavna vrsta zbirke podatkov",
        "config-missing-db-name": "Vnesti morate vrednost za »{{int:config-db-name}}«",
        "config-missing-db-host": "Vnesti morate vrednost za »{{int:config-db-host}}«.",
-       "config-missing-db-server-oracle": "Vnesti morate vrednost za »{{int:config-db-host-oracle}}«.",
-       "config-invalid-db-server-oracle": "Neveljaven TNS zbirke podatkov »$1«.\nUporabite ali \"ime TNS\" ali niz \"Easy Connect\" ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Načini poimenovanja Oracle])",
        "config-invalid-db-name": "Neveljavno ime zbirke podatkov »$1«.\nUporabljajte samo črke ASCII (a-z, A-Z), številke (0-9), podčrtaje (_) in vezaje (-).",
        "config-invalid-db-prefix": "Neveljavna predpona zbirke podatkov »$1«.\nUporabljajte samo črke ASCII (a-z, A-Z), številke (0-9), podčrtaje (_) in vezaje (-).",
        "config-connection-error": "$1.\n\nPreverite gostitelja, uporabniško ime in geslo ter poskusite znova. Če kot gostitelja zbirke podatkov uporabljate »localhost«, poskusite namesto tega uporabiti »127.0.0.1« (ali obratno).",
        "config-db-web-create": "Ustvari račun, če že ne obstaja",
        "config-mysql-engine": "Pogon skladiščenja:",
        "config-mysql-innodb": "InnoDB (priporočeno)",
-       "config-mssql-auth": "Tip avtentikacije:",
        "config-site-name": "Ime wikija:",
        "config-site-name-help": "To bo prikazano v naslovni vrstici brskalnika in na drugih različnih mestih.",
        "config-site-name-blank": "Vnesite ime strani.",
index e740511..92eb4c1 100644 (file)
        "config-using-32bit": "<strong>Упозорење:</strong> изгледа да ваш систем ради са 32-битним целим бројевима. Ово се [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit не препоручује].",
        "config-db-type": "Тип базе података:",
        "config-db-host": "Хост базе података",
-       "config-db-host-oracle": "TNS базе података:",
        "config-db-wiki-settings": "Идентификуј овај вики",
        "config-db-name": "Име базе података (без цртица):",
        "config-db-name-help": "Одаберите име које идентификује ваш вики.\nОно не треба да садржи размаке.\n\nАко користите дељени веб-хостинг, ваш добављач услуге хостинга ће вам дати одређено име базе података за коришћење или ће вас пустити да правите базе података путем контролне табле.",
-       "config-db-name-oracle": "Шема базе података:",
        "config-db-install-account": "Кориснички налог за инсталацију",
        "config-db-username": "Корисничко име базе података:",
        "config-db-password": "Лозинка базе података:",
        "config-db-schema-help": "Ова шема обично ће радити добро.\nПромените је само ако знате да је то потребно.",
        "config-pg-test-error": "Није могуће повезати се са базом података <strong>$1</strong>: $2",
        "config-sqlite-dir": "Директоријум SQLite података:",
-       "config-oracle-def-ts": "Подразумевани табеларни простор:",
-       "config-oracle-temp-ts": "Привремени табеларни простор:",
        "config-type-mysql": "MariaDB, MySQL или компатибилан",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki подржава следеће системе база података:\n\n$1\n\nАко не видите систем који покушавате да користите на листи испод, онда пратите повезана упутства изнад како бисте омогућили подршку.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] је примарна мета за Медијавики и најбоље је подржана. Медијавики ради и са [{{int:version-db-mysql-url}} MySQL-ом] и [{{int:version-db-percona-url}} Percona Server-ом], који су компатибилни са MariaDB-ом. ([https://www.php.net/manual/en/mysqli.installation.php Како компајлирати PHP са подршком MySQL-а])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] је популаран систем база података отвореног кода кaо алтернатива MySQL-у. ([https://www.php.net/manual/en/pgsql.installation.php Како компајлирати PHP са подршком PostgreSQL-а])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] је лаган систем базе података који је веома добро подржан. ([https://www.php.net/manual/en/pdo.installation.php Како компајлирати PHP са подршком SQLite-а], користи PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] је база података комерцијалних предузећа. ([https://www.php.net/manual/en/oci8.installation.php Како компајлирати PHP са подршком OCI8-а])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] је база података комерцијалних предузећа за Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Како компајлирати PHP са подршком SQLSRV-а])",
        "config-header-mysql": "Подешавања MariaDB/MySQL-а",
        "config-header-postgres": "Подешавања PostgreSQL-а",
        "config-header-sqlite": "Подешавања SQLite-а",
-       "config-header-oracle": "Подешавања Oracle-а",
-       "config-header-mssql": "Подешавања Microsoft SQL Server-а",
        "config-invalid-db-type": "Тип базе података није важећи.",
        "config-missing-db-name": "Морате да унесете вредност за „{{int:config-db-name}}”.",
        "config-missing-db-host": "Морате да унесете вредност за „{{int:config-db-host}}”.",
-       "config-missing-db-server-oracle": "Морате да унесете вредност за „{{int:config-db-host-oracle}}”.",
-       "config-invalid-db-server-oracle": "TNS база података „$1” није важећа.\nКористите или „TNS Name” или ниску „Easy Connect”.\n([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle методи именовања]).",
        "config-invalid-db-name": "Име базе података „$1” није важеће.\nКористите само ASCII слова (a-z, A-Z), бројеве (0-9) и подвлаке (_).",
        "config-invalid-db-prefix": "Префикс базе података „$1” није важећи.\nКористите само ASCII слова (a-z, A-Z), бројеве (0-9), подвлаке (_) и цртице (-).",
        "config-connection-error": "$1.\n\nПроверите хост, корисничко име и лозинку, па покушајте поново.",
        "config-invalid-schema": "Шема за MediaWiki „$1” није важећа.\nКористите само ASCII слова (a-z, A-Z), бројеве (0-9) и подвлаке (_).",
-       "config-db-sys-create-oracle": "Инсталациони програм подржава само коришћење SYSDBA налога за отварање новог.",
-       "config-db-sys-user-exists-oracle": "Кориснички налог „$1” већ постоји. SYSDBA се само може користити за отварање новог налога!",
        "config-postgres-old": "Неопходан је PostgreSQL $1 или новији. Ви имате $2.",
-       "config-mssql-old": "Неопходан је Microsoft SQL Server $1 или новији. Ви имате $2.",
        "config-sqlite-name-help": "Одаберите име које идентификује ваш вики.\nНе користите размаке или цртице.\nОво ће се користити за име датотеке SQLite података.",
        "config-sqlite-mkdir-error": "Грешка при прављењу директоријума са подацима „$1”.\nПроверите локацију, па покушајте поново.",
        "config-sqlite-dir-unwritable": "Није могуће уписати у директоријум „$1”.\nПромените му дозволе, тако да веб-сервер може да уписује у њему, па покушајте поново.",
        "config-db-web-no-create-privs": "Налог који сте навели за инсталацију нема довољне привилегије да отвори налог.\nНалог који овде наведете већ мора да постоји.",
        "config-mysql-engine": "Механизам складишта:",
        "config-mysql-innodb": "InnoDB (препоручено)",
-       "config-mssql-auth": "Тип потврде идентитета:",
-       "config-mssql-sqlauth": "SQL Server потврда идентитета",
-       "config-mssql-windowsauth": "Windows потврда идентитета",
        "config-site-name": "Име викија:",
        "config-site-name-help": "Ово ће се појавити у насловној траци прегледача и на разним другим местима.",
        "config-site-name-blank": "Унесите име локације.",
index 26d60f5..4ce871e 100644 (file)
        "config-using-32bit": "<strong>Upozorenje:</strong> izgleda da vaš sistem radi sa 32-bitnim celim brojevima. Ovo se [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:32-bit ne preporučuje].",
        "config-db-type": "Tip baze podataka:",
        "config-db-host": "Host baze podataka",
-       "config-db-host-oracle": "TNS baze podataka:",
        "config-db-wiki-settings": "Identifikuj ovaj viki",
        "config-db-name": "Ime baze podataka (bez crtica):",
        "config-db-name-help": "Odaberite ime koje identifikuje vaš viki.\nOno ne treba da sadrži razmake.\n\nAko koristite deljeni veb-hosting, vaš dobavljač usluge hostinga će vam dati određeno ime baze podataka za korišćenje ili će vas pustiti da pravite baze podataka putem kontrolne table.",
-       "config-db-name-oracle": "Šema baze podataka:",
        "config-db-install-account": "Korisnički nalog za instalaciju",
        "config-db-username": "Korisničko ime baze podataka:",
        "config-db-password": "Lozinka baze podataka:",
        "config-db-schema-help": "Ova šema obično će raditi dobro.\nPromenite je samo ako znate da je to potrebno.",
        "config-pg-test-error": "Nije moguće povezati se sa bazom podataka <strong>$1</strong>: $2",
        "config-sqlite-dir": "Direktorijum SQLite podataka:",
-       "config-oracle-def-ts": "Podrazumevani tabelarni prostor:",
-       "config-oracle-temp-ts": "Privremeni tabelarni prostor:",
        "config-type-mysql": "MariaDB, MySQL ili kompatibilan",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki podržava sledeće sisteme baza podataka:\n\n$1\n\nAko ne vidite sistem koji pokušavate da koristite na listi ispod, onda pratite povezana uputstva iznad kako biste omogućili podršku.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] je primarna meta za MediaWiki i najbolje je podržana. MediaWiki takođe radi sa [{{int:version-db-mysql-url}} MySQL-om] i [{{int:version-db-percona-url}} Percona Server-om], koji su kompatibilni sa MariaDB-om. ([https://www.php.net/manual/en/mysqli.installation.php Kako kompajlirati PHP sa podrškom MySQL-a])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] je popularan sistem baza podataka otvorenog koda kao alternativa MySQL-u. ([https://www.php.net/manual/en/pgsql.installation.php Kako kompajlirati PHP sa podrškom PostgreSQL-a])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] je lagan sistem baze podataka koji je veoma dobro podržan. ([https://www.php.net/manual/en/pdo.installation.php Kako kompajlirati PHP sa podrškom SQLite-a], koristi PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] je baza podataka komercijalnih preduzeća. ([https://www.php.net/manual/en/oci8.installation.php Kako kompajlirati PHP sa podrškom OCI8-a])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] je baza podataka komercijalnih preduzeća za Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Kako kompajlirati PHP sa podrškom SQLSRV-a])",
        "config-header-mysql": "Podešavanja MariaDB/MySQL-a",
        "config-header-postgres": "Podešavanja PostgreSQL-a",
        "config-header-sqlite": "Podešavanja SQLite-a",
-       "config-header-oracle": "Podešavanja Oracle-a",
-       "config-header-mssql": "Podešavanja Microsoft SQL Server-a",
        "config-invalid-db-type": "Tip baze podataka nije važeći.",
        "config-missing-db-name": "Morate da unesete vrednost za „{{int:config-db-name}}”.",
        "config-missing-db-host": "Morate da unesete vrednost za „{{int:config-db-host}}”.",
-       "config-missing-db-server-oracle": "Morate da unesete vrednost za „{{int:config-db-host-oracle}}”.",
-       "config-invalid-db-server-oracle": "TNS baza podataka „$1” nije važeća.\nKoristite ili „TNS Name” ili nisku „Easy Connect”.\n([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle metodi imenovanja]).",
        "config-invalid-db-name": "Ime baze podataka „$1” nije važeće.\nKoristite samo ASCII slova (a-z, A-Z), brojeve (0-9) i podvlake (_).",
        "config-invalid-db-prefix": "Prefiks baze podataka „$1” nije važeći.\nKoristite samo ASCII slova (a-z, A-Z), brojeve (0-9), podvlake (_) i crtice (-).",
        "config-connection-error": "$1.\n\nProverite host, korisničko ime i lozinku, pa pokušajte ponovo.",
        "config-invalid-schema": "Šema za MediaWiki „$1” nije važeća.\nKoristite samo ASCII slova (a-z, A-Z), brojeve (0-9) i podvlake (_).",
-       "config-db-sys-create-oracle": "Instalacioni program podržava samo korišćenje SYSDBA naloga za otvaranje novog.",
-       "config-db-sys-user-exists-oracle": "Korisnički nalog „$1” već postoji. SYSDBA se samo može koristiti za otvaranje novog naloga!",
        "config-postgres-old": "Neophodan je PostgreSQL $1 ili noviji. Vi imate $2.",
-       "config-mssql-old": "Neophodan je Microsoft SQL Server $1 ili noviji. Vi imate $2.",
        "config-sqlite-name-help": "Odaberite ime koje identifikuje vaš viki.\nNe koristite razmake ili crtice.\nOvo će se koristiti za ime datoteke SQLite podataka.",
        "config-sqlite-mkdir-error": "Greška pri pravljenju direktorijuma sa podacima „$1”.\nProverite lokaciju, pa pokušajte ponovo.",
        "config-sqlite-dir-unwritable": "Nije moguće upisati u direktorijum „$1”.\nPromenite mu dozvole, tako da veb-server može da upisuje u njemu, pa pokušajte ponovo.",
        "config-db-web-no-create-privs": "Nalog koji ste naveli za instalaciju nema dovoljne privilegije da otvori nalog.\nNalog koji ovde navedete već mora da postoji.",
        "config-mysql-engine": "Mehanizam skladišta:",
        "config-mysql-innodb": "InnoDB (preporučeno)",
-       "config-mssql-auth": "Tip potvrde identiteta:",
-       "config-mssql-sqlauth": "SQL Server potvrda identiteta",
-       "config-mssql-windowsauth": "Windows potvrda identiteta",
        "config-site-name": "Ime vikija:",
        "config-site-name-help": "Ovo će se pojaviti u naslovnoj traci pregledača i na raznim drugim mestima.",
        "config-site-name-blank": "Unesite ime lokacije.",
index 45b8545..2c8eb7f 100644 (file)
        "config-db-type": "Databastyp:",
        "config-db-host": "Databasvärd:",
        "config-db-host-help": "Om din databasserver är på en annan server, ange då värdnamnet eller IP-adressen här.\n\nOm du använder ett delat webbhotell, bör din leverantör ge dig rätt värdnamn i deras dokumentation.\n\nOm du använder MySQL, kanske \"localhost\" inte fungerar för servernamnet. Om det inte gör det försök med \"127.0.0.1\" som den lokala IP-adressen.\n\nOm du använder PostgreSQL, lämna detta fält blankt för att ansluta via en Unix-socket.",
-       "config-db-host-oracle": "Databas TNS:",
-       "config-db-host-oracle-help": "Ange ett giltigt [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; en tnsnames.ora-fil måste vara synlig för denna installation.<br />Om du använder klientbibliotek 10g eller nyare kan du också använda [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] namngivningsmetoden.",
        "config-db-wiki-settings": "Identifiera denna wiki",
        "config-db-name": "Databasnamn (inga bindestreck):",
        "config-db-name-help": "Välj ett namn som identifierar din wiki.\nDet bör inte innehålla mellanslag.\n\nOm du använder ett delat webbhotell kan de antingen ge dig ett särskilt databasnamn att använda eller så kan de låta dig skapa en databas via kontrollpanelen.",
-       "config-db-name-oracle": "Databasschema:",
-       "config-db-account-oracle-warn": "Det finns tre stödda scenarier för installationen av Oracle som en backend-databas:\n\nOm du vill skapa ett databaskonto som en del av installationen, ange ett konto med SYSDBA-roll som databaskonto under installationen och ange de önskade autentiseringsuppgifterna för kontot med webb-åtkomst, annars kan du antingen skapa ett konto med webb-åtkomst manuellt och ange enbart detta konto (om den har behörighet att skapa schema-objekt) eller ange två olika konton, en med create-behörighet och en begränsad för webb-åtkomst.\n\nSkript för att skapa ett konto med de korrekta behörigheterna kan hittas i \"maintenance/oracle/\"-katalogen för denna installation. Tänk på att användningen av ett begränsat konto inaktiverar all underhållsmöjlighet med standardkontot.",
        "config-db-install-account": "Användarkonto för installation",
        "config-db-username": "Databas-användarnamn:",
        "config-db-password": "Databas-lösenord:",
        "config-pg-test-error": "Kan inte ansluta till databas '''$1''': $2",
        "config-sqlite-dir": "SQLite data-katalog:",
        "config-sqlite-dir-help": "SQLite lagrar all data i en enda fil.\n\nDen katalog du anger måste vara skrivbar av webbservern under installationen.\n\nDet bör <strong>inte</strong> vara tillgänglig via webben; Det är därför vi inte lägger den där dina PHP-filer är.\n\nInstallationsprogrammet kommer att skriva en <code>.htaccess</code>-fil tillsammans med den, men om det misslyckas kan någon få tillgång till den råa databasen.\nVlken innehåller rå användardata (e-postadresser, hashade lösenord) samt borttagna revideringar och annan begränsad data på wiki.\n\nÖverväga att lägga databasen någon helt annanstans, till exempel i <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Standardtabellutrymme (tablespace):",
-       "config-oracle-temp-ts": "Tillfälligt tabellutrymme (tablespace):",
        "config-type-mysql": "MariaDB, MySQL eller kompatibelt",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki stöder följande databassystem:\n\n$1\n\nOm du inte ser det databassystem som du försöker använda nedanstående, följ då instruktionerna länkade ovan för aktivera stöd för det.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] är det primära målet för MediaWiki och stöds bäst. MediaWiki fungerar även med [{{int:version-db-mysql-url}} MySQL] och [{{int:version-db-percona-url}} Percona Server], som är kompatibla med MariaDB. ([https://www.php.net/manual/en/mysqli.installation.php Hur man kompilerar PHP med stöd för MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] är ett populärt databassystem med öppen källkod som ett alternativ till MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Hur man kompilerar PHP med PostgreSQL-stöd])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] är en lättviktsdatabassystem med väldigt bra stöd. ([https://www.php.net/manual/en/pdo.installation.php Hur man kompilerar PHP med SQLite stöd], använder PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] är en kommersiellt databas för företag. ([https://www.php.net/manual/en/oci8.installation.php Hur man kompilerar PHP med OCI8 stöd])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] är en kommersiellt databas för företag för Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Hur man kompilerar PHP med SQLSRV stöd])",
        "config-header-mysql": "MariaDB/MySQL-inställningar",
        "config-header-postgres": "PostgreSQL-inställningar",
        "config-header-sqlite": "SQLite-inställningar",
-       "config-header-oracle": "Oracle-inställningar",
-       "config-header-mssql": "Inställningar för Microsoft SQL Server",
        "config-invalid-db-type": "Ogiltig databastyp",
        "config-missing-db-name": "Du måste ange ett värde för \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Du måste ange ett värde för \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "Du måste ange ett värde för \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "Ogiltig databas-TNS \"$1\".\nAnvända antingen \"TNS Name\" eller en \"Easy Connect\"-sträng ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracles namngivningsmetoder]).",
        "config-invalid-db-name": "\"$1\" är ett ogiltigt databasnamn.\nAnvänd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).",
        "config-invalid-db-prefix": "\"$1\" är ett ogiltigt databasprefix.\nAnvänd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).",
        "config-connection-error": "$1.\n\nKontrollera värd, användarnamn och lösenord och försök igen. Om du använder \"localhost\" som databasvärden, försök använda \"127.0.0.1\" istället (eller tvärtom).",
        "config-invalid-schema": "\"$1\" är ett ogiltigt schema för MediaWiki.\nAnvänd bara ASCII-bokstäver (a-z, A-Z), siffror (0-9), understreck (_) och bindestreck (-).",
-       "config-db-sys-create-oracle": "Installationsprogrammet stöder endast användningen av ett SYSDBA-konto för att skapa ett nytt konto.",
-       "config-db-sys-user-exists-oracle": "Användarkontot \"$1\" finns redan. SYSDBA kan endast användas för att skapa ett nytt konto!",
        "config-postgres-old": "PostgreSQL $1 eller senare krävs, du har $2.",
-       "config-mssql-old": "Microsoft SQL-server $1 eller senare krävs. Du har $2.",
        "config-sqlite-name-help": "Välja ett namn som identifierar din wiki.\nAnvänd inte mellanslag eller bindestreck.\nDetta kommer att användas för SQLite-data filnamnet.",
        "config-sqlite-parent-unwritable-group": "Kan inte skapa datakatalogen <code><nowiki>$1</nowiki></code>, då den överordnade katalogen <code><nowiki>$2</nowiki></code> inte är skrivbar för webbservern.\n\nInstallationen har avgjort vilken användare din webbserver körs som.\nGör <code><nowiki>$3</nowiki></code>-katalogen skrivbar för den för att fortsätta.\nPå ett Unix/Linux system gör:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Kan inte skapa datakatalogen <code><nowiki>$1</nowiki></code>, då den överordnade katalogen <code><nowiki>$2</nowiki></code> inte är skrivbar för webbservern.\n\nInstallationen kunde inte avgöra vilken användare din webbserver körs som.\nGör <code><nowiki>$3</nowiki></code>-katalogen skrivbar för den (och andra!) för att fortsätta.\nPå ett Unix/Linux system gör:\n\n<pre>cd $2\nmkdir $3\nchmod g+w $3</pre>",
        "config-mysql-engine": "Lagringsmotor:",
        "config-mysql-innodb": "InnoDB (rekommenderas)",
        "config-mysql-engine-help": "'''InnoDB''' är nästan alltid det bästa valet eftersom den har ett bra system för samtidiga arbeten.\n\n'''MyISAM''' kan vara snabbare i enanvändarläge eller skrivskyddade installationer.\nMyISAM-databaser tenderar att bli korrupta oftare än InnoDB-databaser.",
-       "config-mssql-auth": "Autentiseringstyp:",
-       "config-mssql-install-auth": "Välj autentiseringstypen som kommer att användas för att ansluta till databasen under installationsprocessen.\nOm du väljer \"{{int:config-mssql-windowsauth}}\", kommer autentiseringsuppgifterna för den användare webbservern körs som att användas.",
-       "config-mssql-web-auth": "Välj autentiseringstypen som kommer att användas för att ansluta till databasen under ordinarie drift av wikin.\nOm du väljer \"{{int:config-mssql-windowsauth}}\", kommer autentiseringsuppgifterna för den användare webbservern körs som att användas.",
-       "config-mssql-sqlauth": "SQL Server-autentisering",
-       "config-mssql-windowsauth": "Windows-autentisering",
        "config-site-name": "Namnet på wikin:",
        "config-site-name-help": "Detta visas i titelfältet i webbläsaren och på flera andra platser.",
        "config-site-name-blank": "Ange ett webbplatsnamn.",
index 84b5b03..64e25f5 100644 (file)
@@ -32,7 +32,6 @@
        "config-restart": "ಸರಿ,ಕುಡ ಸುರು ಮಲ್ಪುಲೆ",
        "config-db-type": "ದತ್ತಾಂಶಸಂಚಯ ಮಾದರಿ:",
        "config-db-host-help": "ಇರೆನ ದತ್ತಸಂಚಯ ಸೇವಕ ಬೇತೆ ಸೇವಕೊ(ಸರ್ವರ್)ಡು ಇತ್ತ್ಂಡ, ಆಶ್ರಯದಾತ ಪುದರು ಇಜಿಂಡ ಐಪಿ ವಿಳಾಸ ಮುಲ್ಪ ಸೇರಾಲೆ.\nಈರ್ ಪಾಲುದ ಜಾಲ ಆಶ್ರಯ ಬಳಸುನಾಂಡಾ, ಇರೆನ ಆಶ್ರಯ ದಾತೆರ್ ಅಕಲೆನ ದಾಖಲಿಕೆಡ್ ಇರೆಗ್ ಸರಿಯಾಯಿನ ಆಶ್ರಯದಾತ ನಾಮ ಕೊರೊಡು.\nಈರ್ MySQL ಬಳಸುನಾಂಡ,\"localhost\" (\"ತಲ-ಆಶ್ರಯದಾತ\")ಬಳಕೆ ಆಶ್ರಯದಾತ ಪುದರುಗು ಬೇಲೆ ಮಲ್ಪಂದ್.ಅವು ಆಯಿಜಿಡ, ತಲ ಐಪಿ ವಿಳಾಸೊಗು \"127.0.0.1\" ಪಾಡ್ದ್ ಪ್ರಯತ್ನ ಮಲ್ಪುಲೆ.\nಈರ್ PostgreSQL ಬಳಸುನಾಂಡ, ಈ ಕ್ಷೇತ್ರೊನು ಖಾಲಿ ಬುಡುದು,ಯುನಿಕ್ಸ್ ಗುರಿತ ಮೂಲಕ ಕೂಡಾಲೆ.",
-       "config-db-host-oracle": "ದತ್ತಾಂಶಸಂಚಯ TNS:",
        "config-db-wiki-settings": "ಈ ವಿಕಿಯನ್ನು ಗುರುತಿಸಾಲೆ",
        "config-db-name": "ಮಾಹಿತಿಕೋಶದ ಪುದರ್(ಕೂಡುಗೆರೆ ದಾಂತೆ):",
        "config-db-username": "ದತ್ತಾಂಶಸಂಚಯ ಪುದರ್:",
index e8e9a75..c95759c 100644 (file)
        "config-db-type": "డాటాబేసు రకం:",
        "config-db-host": "డేటాబేసు హోస్టు:",
        "config-db-host-help": "మీ డేటాబేసు సర్వరు వేరే సర్వరులో ఉంటే, దాని హోస్ట్ పేరు, ఐపీ చిరునామా ఇక్కడ ఇవ్వండి.\n\nమీరు షేర్‍డ్ వెబ్ హోస్టింగును వాడుతూంటే, మీ హోస్టింగు సేవను అందించేవారు తమ డాక్యుమెంటేషనులో సరైన హోస్ట్ పేరును ఇచ్చి ఉండాలి.\n\nమీరు విండోస్ సర్వరులో స్థాపిస్తూ, MySQL వాడుతూ ఉంటే, సర్వరు పేరుగా \"localhost\" పనిచెయ్యకపోవచ్చు. అపుడు, స్థానిక ఐపీ చిరునామాగా \"127.0.0.1\" వాడండి.\n\nమీరు PostgreSQL వాడుతూ ఉంటే, Unix సాకెట్ ద్వారా కనెక్టయేందుకు ఈ ఫీల్డును ఖాళీగా వదిలెయ్యండి.",
-       "config-db-host-oracle": "డేటాబేసు TNS:",
        "config-db-wiki-settings": "ఈ వికీ గుర్తింపును ఇవ్వండి",
        "config-db-name": "డాటాబేసు పేరు:",
        "config-db-name-help": "మీ వికీని సూచించే విధంగా ఓ పేరును ఎంచుకోండి.\nదానిలో స్పేసులు ఉండరాదు.\n\nమీరు షేర్‍డ్ వెబ్ హోస్టింగును వాడుతూంటే, మీకు హోస్టింగు సేవనందించేవారు మీకు ఓ డేటాబేసు పేరును గాని, లేదా కంట్రోలు ప్యానెలు ద్వారా ఓ డేటాబేసును సృష్టించుకునే వీలునుగానీ ఇస్తారు.",
-       "config-db-name-oracle": "డేటాబేసు స్కీమా:",
        "config-db-install-account": "స్థాపనకి వాడుకరి ఖాతా",
        "config-db-username": "డేటాబేసు వాడుకరిపేరు:",
        "config-db-password": "డేటాబేసు సంకేతపదం:",
        "config-db-schema-help": "మామూలుగా ఈ స్కీమా సరిపోతుంది.\nఅవసరమని మీకు తెలిస్తేనే మార్చండి.",
        "config-pg-test-error": "డేటాబేసు <strong>$1</strong> కి కనెక్టు కాలేకపోయాం: $2",
        "config-sqlite-dir": "SQLite డేటా డైరెక్టరీ:",
-       "config-oracle-def-ts": "డిఫాల్టు టేబుల్‍స్పేసు:",
-       "config-oracle-temp-ts": "తాత్కాలిక టేబుల్‍స్పేసు:",
        "config-type-mysql": "MySQL (లేదా సరిపోయేది)",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki కింది డేటాబేసు వ్యవస్థలకు అనుకూలిస్తుంది:\n\n$1\n\nమీరు వాడదలచిన డేటాబేసు వ్యవస్ కింది జాబితాలో లేకపోతే, పైన లింకు ద్వారా ఇచ్చిన సూచనలను పాటించి, అనుకూలతలను సాధించండి.",
        "config-dbsupport-postgres": "* MySQL కు ప్రత్యామ్నాయంగా [{{int:version-db-postgres-url}} PostgreSQL] ప్రజామోదం పొందిన ఓపెన్‍సోర్సు డేటాబేసు వ్యవస్థ. దానిలో చిన్న చితకా లోపాలుండే అవకాశం ఉంది. అందుచేత దాన్ని ఉత్పాదక రంగంలో వాడవచ్చని చెప్పలేం.  ([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] ఓ తేలికైన డేటాబేసు వ్యవస్థ. దానికి చక్కటి అనుకూలతలున్నాయి. ([http://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] ఒక వాణిజ్యపరంగా సంస్థాగతంగా వాడదగ్గ డేటాబేసు. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])",
        "config-header-mysql": "MySQL అమరికలు",
        "config-header-postgres": "PostgreSQL అమరికలు",
        "config-header-sqlite": "SQLite అమరికలు",
-       "config-header-oracle": "Oracle అమరికలు",
-       "config-header-mssql": "Microsoft SQL Server అమరికలు",
        "config-invalid-db-type": "తప్పుడు డాటాబేసు రకం",
        "config-missing-db-name": "\"{{int:config-db-name}}\" ను తప్పకుండా ఇవ్వాలి",
        "config-missing-db-host": "\"{{int:config-db-host}}\" ను తప్పకుండా ఇవ్వాలి",
-       "config-missing-db-server-oracle": "\"{{int:config-db-host-oracle}}\" ను తప్పకుండా ఇవ్వాలి",
        "config-invalid-db-name": "డేటాబేసు పేరు సరైనది కాదు \"$1\".\nASCII అక్షరాలు (a-z, A-Z), అంకెలు (0-9), క్రీగీత (_) and హైఫన్ (-) లను మాత్రమే వాడాలి.",
        "config-invalid-db-prefix": "డేటాబేసు ఆదిపదం (ప్రిఫిక్స్) సరైనది కాదు \"$1\".\nASCII అక్షరాలు (a-z, A-Z), అంకెలు (0-9), క్రీగీత (_) and హైఫన్ (-) లను మాత్రమే వాడాలి.",
        "config-connection-error": "$1.\n\nక్రింది హోస్టు, వాడుకరిపేరు మరియు సంకేతపదాలను ఒకసారి సరిచూసుకుని అప్పుడు ప్రయత్నించండి.",
        "config-invalid-schema": "\"$1\" MediaWiki కోసం చెల్లని స్కీమా.\nASCII అక్షరాలు (a-z, A-Z), అంకెలు (0-9) క్రీగీత (_) లను మాత్రమే వాడాలి.",
-       "config-db-sys-user-exists-oracle": "వాడుకరి ఖాతా \"$1\" ఈసరికే ఉంది. కొత్త ఖాతాను సృష్టించేందుకు SYSDBA ను మాత్రమే వాడాలి!",
        "config-postgres-old": "PostgreSQL $1 గానీ ఆ తరువాతిది గానీ అవసరం. మీకు $2 ఉంది.",
-       "config-mssql-old": "మైక్రోసాఫ్ట్ SQL సర్వర్ $1 లేదీ దాని తరువాతి వర్షన్ ఉండాలి. మీ దగ్గర $2 ఉంది.",
        "config-sqlite-name-help": "మీ వికీని గుర్తించే పేరు ఒకదాన్ని ఎంచుకోండి.\nస్పేసులు గానీ, హైఫన్‍లు గానీ వాడకండి.\nదాన్ని SQLite డేటాఫైలు పేరు కోసంవాడతాం.",
        "config-sqlite-mkdir-error": "డేటా డైరెక్టరీని సృష్టించడంలో లోపం \"$1\".\nస్థానాన్ని సరిచూసి మళ్ళీ ప్రయత్నించండి.",
        "config-sqlite-connection-error": "$1.\n\nకింద ఉన్న డేటా డైరెక్టరీ, డేటాబేసు పేరును సరిచూసి మళ్ళీ ప్రయత్నించండి.",
        "config-db-web-no-create-privs": "స్థాపన కోసం మీరిచ్చిన ఖాతాకు ఓ కొత్త ఖాతాను సృష్టించే అనుమతులు లేవు.\nఇక్కడ మీరిచ్చే ఖాతా తప్పనిసరిగా ఈసరికే ఉనికిలో ఉండాలి.",
        "config-mysql-engine": "స్టోరేజీ ఇంజను:",
        "config-mysql-innodb": "InnoDB",
-       "config-mssql-auth": "ఆథెంటికేషన్ రకం:",
-       "config-mssql-sqlauth": "SQL Server ఆథెంటికేషన్",
-       "config-mssql-windowsauth": "విండోస్ ఆథెంటికేషన్",
        "config-site-name": "వికీ పేరు:",
        "config-site-name-help": "ఇది బ్రౌజరు టిటిలుబారు లోను, అనేక ఇతర చోట్లా కనిపిస్తుంది.",
        "config-site-name-blank": "ఓ సైటు పేరును ఇవ్వండి.",
index 38aafbe..4512740 100644 (file)
        "config-db-type": "ชนิดฐานข้อมูล:",
        "config-db-host": "โฮสต์ฐานข้อมูล:",
        "config-db-host-help": "ถ้าเซิร์ฟเวอร์ฐานข้อมูลของคุณอยู่บนเซิร์ฟเวอร์อื่น ให้ป้อนชื่อโฮสต์หรือที่อยู่ IP ที่นี่\n\nถ้าคุณกำลังใช้งานโฮสต์เว็บที่ใช้ร่วมกัน ผู้ให้บริการโฮสต์ควรให้ชื่อโฮสต์ที่ถูกต้องแก่คุณในเอกสารคู่มือ\n\nถ้าคุณกำลังติดตั้งบนเซิร์ฟเวอร์ Windows และกำลังใช้ MySQL การใช้ \"localhost\" อาจไม่สามารถใช้ได้สำหรับชื่อเซิร์ฟเวอร์ ถ้าไม่สามารถใช้ได้ ให้ลองใช้ \"127.0.0.1\" สำหรับที่อยู่ IP เฉพาะที่",
-       "config-db-host-oracle": "TNS ฐานข้อมูล:",
-       "config-db-host-oracle-help": "ป้อน [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name] ที่ถูกต้อง; ไฟล์ tnsnames.ora ต้องสามารถมองเห็นได้โดยการติดตัั้งนี้<br />ถ้าคุณกำลังใช้ไลบรารีไคลเอนต์ 10g หรือใหม่กว่า คุณก็สามารถใช้วิธีการตั้งชื่อแบบ [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect] ได้เช่นกัน",
        "config-db-wiki-settings": "ระบุวิกินี้",
        "config-db-name": "ชื่อฐานข้อมูล:",
        "config-db-name-help": "เลือกชื่อที่ระบุวิกิของคุณ\nชื่อไม่ควรมีช่องว่าง\n\nถ้าคุณกำลังใช้โฮสต์เว็บที่ใช้ร่วมกัน ผู้ให้บริการโฮสต์ของคุณจะระบุชื่อฐานข้อมูลให้คุณ หรือให้คุณสร้างฐานข้อมูลโดยใช้แผงควบคุม",
-       "config-db-name-oracle": "แบบแผนฐานข้อมูล:",
-       "config-db-account-oracle-warn": "มีสถานการณ์สมมติสามสถานการณ์ที่สนับสนุนสำหรับการติดตั้ง Oracle เป็นแบ็กเอนด์ฐานข้อมูล:\n\nถ้าคุณต้องการสร้างบัญชีฐานข้อมูลเป็นส่วนหนึ่งของกระบวนการติดตั้ง โปรดจัดหาบัญชีที่มีบทบาท SYSDBA เป็นบัญชีฐานข้อมูลสำหรับการติดตั้งและระบุข้อมูลประจำตัวที่ต้องการสำหรับบัญชีการเข้าถึงเว็บ หรือคุณสามารถสร้างบัญชีการเข้าถึงเว็บด้วยตนเองและจัดหาเฉพาะบัญชีนั้น (ถ้ามีสิทธิ์ที่ต้องการในการสร้างวัตถุแบบแผน) หรือจัดหาบัญชีสองบัญชี โดยบัญชีหนึ่งใช้สร้างสิทธิ์ และบัญชีที่จำกัดอีกบัญชีหนึ่งสำหรับการเข้าถึงเว็บ\n\nสคริปต์ที่ใช้สำหรับการสร้างบัญชีพร้อมสิทธิ์ที่ต้องการสามารถพบได้ในไดเรกทอรี \"maintenance/oracle/\" ของการติดตั้งนี้\nอย่าลืมว่าการใช้บัญชีที่จำกัดจะเป็นการปิดใช้งานความสามารถในการบำรุงรักษาทั้งหมดด้วยบัญชีเริ่มต้น",
        "config-db-install-account": "บัญชีผู้ใช้สำหรับการติดตั้ง",
        "config-db-username": "ชื่อผู้ใช้ฐานข้อมูล:",
        "config-db-password": "รหัสผ่านฐานข้อมูล:",
        "config-pg-test-error": "ไม่สามารถเชื่อมต่อไปยังฐานข้อมูล <strong>$1</strong>: $2",
        "config-sqlite-dir": "ไดเรกทอรีข้อมูล SQLite:",
        "config-sqlite-dir-help": "SQLite จัดเก็บข้อมูลทั้งหมดในไฟล์เดียว\n\nไดเรกทอรีที่คุณระบุจะต้องสามารถเขียนได้โดยเว็บเซิร์ฟเวอร์ระหว่างการติดตั้ง\n\nไดเรกทอรีดังกล่าว<strong>ไม่</strong>ควรสามารถเข้าถึงได้ผ่านเว็บ นี่คือเหตุผลที่เราไม่นำไฟล์ข้อมูลดังกล่าวไปไว้ในตำแหน่งที่มีไฟล์ PHP ของคุณอยู่\n\nโปรแกรมติดตั้งจะเขียนไฟล์ <code>.htaccess</code> ไปพร้อมกับไฟล์ข้อมูลดังกล่าว แต่ถ้าเกิดความล้มเหลว ทุกคนจะสามารถเข้าถึงฐานข้อมูลดิบของคุณได้\nซึ่งรวมถึงข้อมูลผู้ใช้ดิบ (ที่อยู่อีเมล ข้อมูลแฮช) รวมถึงรุ่นปรับปรุงที่ถูกลบไปแล้ว และข้อมูลที่ถูกจำกัดอื่นๆ บนวิกิ\n\nให้พิจารณานำฐานข้อมูลไปไว้ในตำแหน่งอื่น ตัวอย่างเช่น ใน <code>/var/lib/mediawiki/yourwiki</code>",
-       "config-oracle-def-ts": "พื้นที่ตารางเริ่มต้น:",
-       "config-oracle-temp-ts": "พื้นที่ตารางชั่วคราว:",
        "config-type-mysql": "MySQL (หรือที่เข้ากันได้)",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki สนับสนุนระบบฐานข้อมูลต่อไปนี้:\n\n$1\n\nถ้าคุณไม่พบระบบฐานข้อมูลที่คุณกำลังพยายามใช้ในรายการด้านล่างนี้ ให้ทำตามคำแนะนำที่เชื่อมโยงด้านบนเพื่อเปิดใช้งานการสนับสนุน",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] คือเป้าหมายหลักสำหรับ MediaWiki และได้รับการสนับสนุนดีที่สุด MediaWiki ยังคงสามารถใช้ได้ร่วมกับ [{{int:version-db-mariadb-url}} MariaDB] และ [{{int:version-db-percona-url}} Percona Server] ซึ่งเข้ากันได้กับ MySQL ([https://www.php.net/manual/en/mysqli.installation.php วิธีการคอมไพล์ PHP ด้วยการสนับสนุน MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] คือระบบฐานข้อมูลแบบโอเพนซอร์สที่ได้รับความนิยมสูงที่สามารถใช้แทน MySQL ได้ ([https://www.php.net/manual/en/pgsql.installation.php วิธีการคอมไพล์ PHP ด้วยการสนับสนุน PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] คือระบบฐานข้อมูลขนาดเล็กที่ได้รับการสนับสนุนดีมาก ([http://www.php.net/manual/en/pdo.installation.php วิธีการคอมไพล์ PHP ด้วยการสนับสนุน SQLite], ใช้ PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] คือฐานข้อมูลสำหรับองค์กรพาณิชย์ ([http://www.php.net/manual/en/oci8.installation.php วิธีการคอมไพล์ PHP ด้วยการสนับสนุน OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] คือฐานข้อมูลสำหรับองค์กรพาณิชย์สำหรับ Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php วิธีการคอมไพล์ PHP ด้วยการสนับสนุน SQLSRV])",
        "config-header-mysql": "การตั้งค่า MySQL",
        "config-header-postgres": "การตั้งค่า PostgreSQL",
        "config-header-sqlite": "การตั้งค่า SQLite",
-       "config-header-oracle": "การตั้งค่า Oracle",
-       "config-header-mssql": "การตั้งค่า Microsoft SQL Server",
        "config-invalid-db-type": "ชนิดฐานข้อมูลไม่ถูกต้อง",
        "config-missing-db-name": "คุณต้องป้อนค่าสำหรับ \"{{int:config-db-name}}\"",
        "config-missing-db-host": "คุณต้องป้อนค่าสำหรับ \"{{int:config-db-host}}\"",
-       "config-missing-db-server-oracle": "คุณต้องป้อนค่าสำหรับ \"{{int:config-db-host-oracle}}\"",
-       "config-invalid-db-server-oracle": "TNS ฐานข้อมูล \"$1\" ไม่ถูกต้อง\nให้ใช้สตริง \"ชื่อ TNS\" หรือ \"Easy Connect\"\n ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm วิธีการตั้งชื่อของ Oracle])",
        "config-invalid-db-name": "ชื่อฐานข้อมูล \"$1\" ไม่ถูกต้อง\nให้ใช้เฉพาะอักษร ASCII (a-z, A-Z) ตัวเลข (0-9) ขีดล่าง (_) และยัติภังค์ (-)",
        "config-invalid-db-prefix": "คำนำหน้าฐานข้อมูล \"$1\" ไม่ถูกต้อง\nให้ใช้เฉพาะอักษร ASCII (a-z, A-Z) ตัวเลข (0-9) ขีดล่าง (_) และยัติภังค์ (-)",
        "config-connection-error": "$1\n\nตรวจสอบโฮสต์ ชื่อผู้ใช้และรหัสผ่าน และลองอีกครั้ง",
        "config-invalid-schema": "แบบแผนสำหรับ MediaWiki \"$1\" ไม่ถูกต้อง\nให้ใช้เฉพาะอักษร ASCII (a-z, A-Z) ตัวเลข (0-9) และขีดล่าง (_)",
-       "config-db-sys-create-oracle": "โปรแกรมติดตั้งสนับสนุนเฉพาะการใช้บัญชี SYSDBA สำหรับการสร้างบัญชีใหม่เท่านั้น",
-       "config-db-sys-user-exists-oracle": "มีบัญชีผู้ใช้ \"$1\" อยู่แล้ว คุณสามารถใช้เฉพาะ SYSDBA สำหรับการสร้างบัญชีใหม่ได้เท่านั้น!",
        "config-postgres-old": "จำเป็นต้องใช้ PostgreSQL $1 หรือสูงกว่า คุณมี $2",
-       "config-mssql-old": "จำเป็นต้องใช้ Microsoft SQL Server $1 หรือสูงกว่า คุณมี $2.",
        "config-sqlite-name-help": "เลือกชื่อที่จะระบุวิกิของคุณ\nอย่าใช้ช่องว่างหรือยัติภังค์\nชื่อนี้จะถูกใช้สำหรับชื่อไฟล์ข้อมูล SQLite",
        "config-sqlite-parent-unwritable-group": "ไม่สามารถสร้างไดเรกทอรีข้อมูล <code><nowiki>$1</nowiki></code> ได้ เนื่องจากไดเรกทอรีหลัก <code><nowiki>$2</nowiki></code> ไม่สามารถเขียนได้โดยเว็บเซิร์ฟเวอร์\n\nโปรแกรมติดตั้งได้ทำการตรวจสอบแล้วว่าเว็บเซิร์ฟเวอร์ของคุณกำลังทำงานในฐานะผู้ใช้ใด\nทำให้ไดเรกทอรี <code><nowiki>$3</nowiki></code> สามารถเขียนโดยผู้ใช้ดังกล่าวได้เพื่อดำเนินการต่อ\nถ้าคุณใช้ระบบ Unix/Linux ให้่ทำเช่นนี้:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "ไม่สามารถสร้างไดเรกทอรีข้อมูล <code><nowiki>$1</nowiki></code> ได้ เนื่องจากไดเรกทอรีหลัก <code><nowiki>$2</nowiki></code> ไม่สามารถเขียนได้โดยเว็บเซิร์ฟเวอร์\n\nโปรแกรมติดตั้งไม่สามารถทำการตรวจสอบได้ว่าเว็บเซิร์ฟเวอร์ของคุณกำลังทำงานในฐานะผู้ใช้ใด\nทำให้ไดเรกทอรี <code><nowiki>$3</nowiki></code> สามารถเขียนโดยส่วนกลาง (ุผู้ใช้ดังกล่าว รวมถึงคนอื่นๆ ด้วย!) ได้เพื่อดำเนินการต่อ\nถ้าคุณใช้ระบบ Unix/Linux ให้่ทำเช่นนี้:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "กลไกที่จัดเก็บข้อมูล:",
        "config-mysql-innodb": "InnoDB",
        "config-mysql-engine-help": "<strong>InnoDB</strong> เป็นตัวเลือกที่เกือบดีที่สุดเสมอ เนื่องจากมีการสนับสนุนกระบวนการทำงานพร้อมกัน\n\n<strong>MyISAM</strong> อาจทำงานได้เร็วกว่าในการติดตั้งแบบผู้ใช้คนเดียวหรือแบบอ่านอย่างเดียว\nฐานข้อมูล MyISAM มักจะได้รับความเสียหายบ่อยมากกว่าฐานข้อมูล InnoDB",
-       "config-mssql-auth": "ชนิดการยืนยันตัวตน:",
-       "config-mssql-install-auth": "เลือกชนิดการยืนยันตัวตนที่จะใช้เชื่อมต่อไปยังฐานข้อมูลในระหว่างกระบวนการติดตั้ง\nถ้าคุณเลือก \"{{int:config-mssql-windowsauth}}\" ข้อมูลประจำตัวที่ระบุว่าเว็บเซิร์ฟเวอร์กำลังทำงานในฐานะผู้ใช้ใดจะถูกใช้",
-       "config-mssql-web-auth": "เลือกชนิดการยืนยันตัวตนที่จะใช้เชื่อมต่อไปยังฐานข้อมูลในระหว่างการใช้งานวิกิตามปกติ\nถ้าคุณเลือก \"{{int:config-mssql-windowsauth}}\" ข้อมูลประจำตัวที่ระบุว่าเว็บเซิร์ฟเวอร์กำลังทำงานในฐานะผู้ใช้ใดจะถูกใช้",
-       "config-mssql-sqlauth": "การยืนยันตัวตนโดย SQL Server",
-       "config-mssql-windowsauth": "การยืนยันตัวตนโดย Windows",
        "config-site-name": "ชื่อของวิกิ:",
        "config-site-name-help": "ชื่อนี้จะปรากฏในแถบชื่อเรื่องของเบราว์เซอร์และในที่อื่นๆ อีกหลายแห่ง",
        "config-site-name-blank": "ป้อนชื่อไซต์",
index 6d63409..1c095f7 100644 (file)
        "config-db-type": "Uri ng kalipunan ng datos:",
        "config-db-host": "Tagapagpasinaya ng kalipunan ng datos:",
        "config-db-host-help": "Kung ang iyong tagapaghain ng kalipunan ng dato ay nasa ibabaw ng isang ibang tagapaghain, ipasok ang pangalan ng tagapagpasinaya o tirahan ng IP dito.\n\nKung gumagamit ka ng pinagsasaluhang pagpapasinaya ng sangkasaputan, dapat ibigay sa iyo ng iyong tagapagbigay ng pagpapasinaya ang tamang pangalan ng tagapagpasinaya sa loob ng kanilang kasulatan.\n\nKapag nagluluklok ka sa ibabaw ng isang tagapaghain ng Windows at gumagamit ng MySQL, maaaring hindi gumana ang paggamit ng \"localhost\" para sa pangalan ng tagapaghain. Kung hindi, subukan ang \"127.0.0.1\" para sa katutubong tirahan ng IP.\n\nKapag gumagamit ka ng PostgreSQL, iwanang walang laman ang hanay na ito upang kumabit sa pamamagitan ng bokilya ng Unix.",
-       "config-db-host-oracle": "TNS ng kalipunan ng dato:",
-       "config-db-host-oracle-help": "Magpasok ng isang katanggap-tanggap na [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Katutubong Pangalan ng Pagkabit]; dapat na nakikita ang isang talaksan ng tnsnames.ora sa pagluluklok na ito.<br />Kung gumagamit ka ng mga aklatan ng kliyente na 10g o mas bago, maaari mo ring gamitin ang pamamaraan ng pagpapangalan ng [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Maginhawang Pagkabit].",
        "config-db-wiki-settings": "Kilalanin ang wiking ito",
        "config-db-name": "Pangalan ng kalipunan ng dato:",
        "config-db-name-help": "Pumili ng isang pangalan na pangkilala sa wiki mo.\nHindi ito dapat maglaman ng mga patlang.\n\nKung gumagamit ka ng pinagsasaluhang pagpapasinaya ng sangkasaputan, ang iyong tagapagbigay ng pagpapasinaya ay maaaring bigyan ka ng isang tiyak na pangalan ng kalipunan ng datong gagamitin o papayagan kang lumikha ng mga kalipunan ng dato sa pamamagitan ng isang entrepanyong pantaban.",
-       "config-db-name-oracle": "Balangkas ng kalipunan ng dato:",
-       "config-db-account-oracle-warn": "Mayroong tatlong suportadong senaryo para sa pag-install ng Oracle bilang database backend:\n\nKung nais mong lumikha ng account ng database bilang bahagi ng proseso ng pag-install, paki magbigay ng isang account na mayroong gampanin ng SYSDBA bilang account ng database para sa pag-install at tukuyin ang ninanais na mga kredensiyal para sa account ng web-access, o di kaya ay maaaring gawing manu-mano ang paglikha ng account ng web access at ibigay lamang ang account na iyan (kung mayroong ito ng kinakailangang mga pahintulot upang malikha ang mga schema object) o magbigay ng dalawang magkaibang mga account, isang mayroong pribilehiyo ng paglikha at isang may pagbabawal para sa web access.\n\nAng script sa paglikha ng isang account na mayroon ng kinakailangang mga pribilehiyo ay matatagpuan sa loob ng directory na \"maintenance/oracle/\" ng pag-install na ito. Pakatandaan na ang paggamit ng isang account na may pagbabawal ay hindi magpapagana sa lahat ng mga kakayahang pampananatili kasama ang nakatakdang account.",
        "config-db-install-account": "Account ng tagagamit para sa pagluluklok",
        "config-db-username": "Pangalang pangtagagamit ng kalipunan ng dato:",
        "config-db-password": "Password sa kalipunan ng dato:",
        "config-pg-test-error": "Hindi makakabit sa kalipunan ng dato na '''$1''': $2",
        "config-sqlite-dir": "Direktoryo ng dato ng SQLite:",
        "config-sqlite-dir-help": "Iniimbak ng SQLite ang lahat ng dato sa loob ng isang nag-iisang file.\n\nAng ibibigay mong directory ay dapat na maging masusulatan ng tagapaghain ng kasaputan habang nag-i-install.\n\n'''Hindi''' ito dapat na mapuntahan sa pamamagitan ng web server, ito ang dahilan kung bakit hindi namin ito inilalagay sa kung nasaan ang iyong mga file ng PHP.\n\nAng installer ay magsusulat ng isang file na <code>.htaccess</code> na kasama ito, subalit kapag nabigo iyon mayroong isang tao na maaaring makakuha ng pagka nakakapunta sa iyong hilaw na database.\nKasama riyan ang hilaw na dato ng tagagamit (mga email address, pinaghalong mga password) pati na ang nabura nang mga pagbabago at iba pang may pagbabawal na dato ng wiki.\n\nIsaalang-alang ang paglalagay na magkakasama ang database sa ibang lugar, halimbawa na ang sa loob ng <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Likas na nakatakdang puwang ng talahanayan:",
-       "config-oracle-temp-ts": "Pansamantalang puwang ng talahanayan:",
        "config-type-mysql": "MariaDB, MySQL, o katugma",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
-       "config-type-oracle": "Oracle",
        "config-support-info": "Sinusuportahan ng MediaWiki ang sumusunod na mga sistema ng kalipunan ng dato:\n\n$1\n\nKung hindi mo makita ang sistema ng kalipunan ng dato na sinusubukan mong gamitin na nakatala sa ibaba, kung gayon ay sundi ang mga tagubilin na nakakawing sa itaas upang mapagana ang suporta,",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] ang pangunahing puntirya para sa MediaWiki at ang pinaka sinusuportahan. Gumagana rin ang MediaWiki [{{int:version-db-mariadb-url}} MariaDB] at sa [{{int:version-db-percona-url}} Percona Server], na tugma sa MySQL.  ([https://www.php.net/manual/en/mysql.installation.php Paano magtipon ng PHP na mayroong suporta ng MySQL])",
        "config-dbsupport-postgres": "* Ang [{{int:version-db-postgres-url}} PostgreSQL] ay isang bantog na sistema ng kalipunan ng dato na bukas ang pinagmulan na panghalili sa MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Paano magtipon ng PHP na mayroong suporta ng PostgreSQL]).",
        "config-dbsupport-sqlite": "* Ang [{{int:version-db-sqlite-url}} SQLite] ay isang magaan ang timbang na sistema ng kalipunan ng dato na sinusuportahan nang napaka mainam. ([http://www.php.net/manual/en/pdo.installation.php Paano magtipon ng PHP na mayroong suporta ng SQLite], gumagamit ng PDO)",
-       "config-dbsupport-oracle": "* Ang [{{int:version-db-oracle-url}} Oracle] ay isang kalipunan ng dato ng kasigasigang pangkalakal. ([http://www.php.net/manual/en/oci8.installation.php Paano magtipunan ng PHP na mayroong suporta ng OCI8])",
        "config-header-mysql": "Mga katakdaan ng MariaDB/MySQL",
        "config-header-postgres": "Mga katakdaan ng PostgreSQL",
        "config-header-sqlite": "Mga katakdaan ng SQLite",
-       "config-header-oracle": "Mga katakdaan ng Oracle",
        "config-invalid-db-type": "Hindi tanggap na uri ng kalipunan ng dato",
        "config-missing-db-name": "Dapat kang magpasok ng isang halaga para sa \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Dapat kang magpasok ng isang halaga para sa \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "Dapat kang magpasok ng isang halaga para sa \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "Hindi katanggap-tanggap na pangalan ng TNSng kalipunan ng dato na \"$1\".\nGumamit ng kahit na \"TNS Name\" o \"Easy Connect\" na tali ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Paraan ng Pagpapangalan ng Oracle]).",
        "config-invalid-db-name": "Hindi tanggap na pangalan ng kalipunan ng dato na \"$1\".\nGumamit lamang ng mga titik ng ASCII (a-z, A-Z), mga bilang (0-9), mga salungguhit (_) at mga gitling (-).",
        "config-invalid-db-prefix": "Hindi tanggap na unlapi ng kalipunan ng dato na \"$1\".\nGamitin lamang ang mga titik na ASCII (a-z, A-Z), mga bilang (0-9), mga salungguhit (_) at mga gitling (-).",
        "config-connection-error": "$1.\n\nSuriin ang host, pangalan at password na nasa ibaba at subukan ulit.",
        "config-invalid-schema": "Hindi katanggap-tanggap na panukala para sa \"$1\" ng MediaWiki.\nGumamit lamang ng mga titik ng ASCII (a-z, A-Z), mga bilang (0-9), at mga salungguhit (_).",
-       "config-db-sys-create-oracle": "Ang installer ay sumusuporta lamang sa paggamit ng isang account ng SYSDBA para sa paglikha ng isang bagong account.",
-       "config-db-sys-user-exists-oracle": "Umiiral na ang account ng tagagamit na \"$1\". Magagamit lamang ang SYSDBA para sa paglikha ng isang bagong account!",
        "config-postgres-old": "Kailangan ang PostgreSQL $1 o mas bago, mayroon kang $2.",
        "config-sqlite-name-help": "Pumili ng isang pangalan na pangkilala na wiki mo.\nHuwag gumamit ng mga puwang o mga gitling.\nGagamitin ito para sa pangalan ng talaksan ng dato ng SQLite.",
        "config-sqlite-parent-unwritable-group": "Hindi malikha ang direktoryo ng dato na <code><nowiki>$1</nowiki></code>, sapagkat ang magulang na direktoryong <code><nowiki>$2</nowiki></code> ay hindi masulatan ng tagapaghain ng kasaputan.\n\nNapag-alaman ng tagapagluklok kung sinong tagagamit ang kinatatakbuhan ng iyong tagapaghain ng kasaputan.\nGawing nasusulatan nito ang <code><nowiki>$3</nowiki></code> ng direktoryo upang makapagpatuloy.\nIto ang gawin sa ibabaw ng isang sistema ng Unix/Linux:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
index e2a4683..04078d6 100644 (file)
        "config-db-type": "Veritabanı tipi:",
        "config-db-host": "Veritabanı sunucusu:",
        "config-db-host-help": "Veritabanı sunucunuz farklı bir sunucu üzerinde ise, ana bilgisayar adını veya IP adresini buraya girin.\n\nPaylaşılan ağ barındırma hizmeti kullanıyorsanız, barındırma sağlayıcınız size doğru bir ana bilgisayar adını kendi belgelerinde vermiştir.\n\nEğer MySQL kullanan bir Windows sunucusuna yükleme yapıyorsanız, sunucu adı olarak \"localhost\" kullanırsanız çalışmayabilir. Çalışmazsa, yerel IP adresi için \"127.0.0.1\" deneyin.\n\nPostgreSQL kullanıyorsanız, bu alanı bir Unix soketi ile bağlanmak için boş bırakın.",
-       "config-db-host-oracle": "Veritabanı TNS:",
        "config-db-wiki-settings": "Bu wikiyi tanımla",
        "config-db-name": "Veritabanı adı (tiresiz):",
        "config-db-name-help": "Vikinizi tanımlayan bir isim seçin.\nBoşluk karakteri içermemelidir.\n\nPaylaşılan bir web hosting servisi kullanıyorsanız, tedarikçiniz size ya kullanmanız için bir veritabanı ismi verecek ya da bir kontrol paneli vasıtasıyla sizin oluşturmanıza izin verecektir.",
-       "config-db-name-oracle": "Veritabanı şeması:",
        "config-db-install-account": "Yükleme için kullanıcı hesabı",
        "config-db-username": "Veritabanı kullanıcı adı:",
        "config-db-password": "Veritabanı parolası:",
        "config-db-schema-help": "Bu şema yeterli olacaktır.\nEğer gerçekten ihtiyaç duyarsanız değiştirin.",
        "config-pg-test-error": "Veritabanıyla bağlantı kurulamıyor ''' $1 ''':$2",
        "config-sqlite-dir": "SQLite veri dizini",
-       "config-oracle-def-ts": "Varsayılan tablo alanı:",
-       "config-oracle-temp-ts": "Geçici tablo alanı:",
        "config-type-mysql": "MySQL (veya uyumlu)",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "MySQL ayarları",
        "config-header-postgres": "PostgreSQL ayarları",
        "config-header-sqlite": "SQLite ayarları",
-       "config-header-oracle": "Oracle ayarları",
-       "config-header-mssql": "Microsoft SQL Server ayarları",
        "config-invalid-db-type": "Geçersiz veritabanı türü",
        "config-missing-db-name": "\"Veritabanı adı\" için bir değer girmelisiniz",
        "config-missing-db-host": "\"{{int:config-db-host}}\" için bir değer girmelisiniz.",
-       "config-missing-db-server-oracle": "\"{{int:config-db-host-oracle}}\" için bir değer girmelisiniz",
        "config-invalid-db-name": "Geçersiz veritabanı adı \" $1 \".\nSadece ASCII harf (a-z, A-Z), rakamların (0-9), alt çizgi (_) ve tire (-) kullanın.",
        "config-connection-error": "$1.\n\nSunucuyu kontrol edin, kullanıcı adı ve parolayı denetleyin ve yeniden deneyin.",
        "config-invalid-schema": "Geçersiz şema MediaWiki için \" $1 \".\nYalnızca ASCII harf (a-z, A-Z), rakamların (0-9) ve alt çizgi (_) kullanın.",
-       "config-db-sys-create-oracle": "Kurulum yeni hesap oluştururken sadece SYSDBA hesabı kullanımını destekliyor.",
-       "config-db-sys-user-exists-oracle": "Kullanıcı hesabı \" $1 \" zaten var. SYSDBA sadece yeni bir hesap oluşturmak için kullanılabilir.",
        "config-postgres-old": "PostgreSQL  $1  veya daha yenisi gerekir. Sende  $2 sürümü var.",
-       "config-mssql-old": "Microsoft SQL Server $1 veya daha yükseği gerekli. Sizdeki sürüm: $2.",
        "config-sqlite-name-help": "Wiki'nizi tanımlayan bir ad seçin.\nBoşluk ya da tire kullanmayın.\nBu isim SQLite veri dosyası için kullanılacaktır.",
        "config-sqlite-mkdir-error": "Veri dizini oluşturulurken bir hata oluştu \" $1 \".\nKonumu denetleyin ve yeniden deneyin.",
        "config-sqlite-dir-unwritable": "Bu dizine yazılamadı: \"$1\"\nİzinleri değiştirerek tekrar deneyiniz.",
        "config-db-web-no-create-privs": "Kurulum için belirlediğiniz hesap, hesap yaratımı için gerekli izinlere sahip değil.\nBurada belirttiğiniz hesap halihazırda var olmalı.",
        "config-mysql-engine": "Depolama motoru:",
        "config-mysql-innodb": "InnoDB (önerilen)",
-       "config-mssql-auth": "Kimlik doğrulama türü:",
-       "config-mssql-install-auth": "Kurulum işlemi sırasında veritabanına bağlanmak için kullanılacak doğrulama türünü seçin.\n\"{{int:config-mssql-windowsauth}}\"'ı seçerseniz,ağ sunucusu olarak çalışan kullanıcının kimlik bilgileri kullanılacaktır.",
-       "config-mssql-sqlauth": "SQL Server kimlik doğrulaması",
-       "config-mssql-windowsauth": "Windows Kimlik Doğrulama",
        "config-site-name": "Wiki adı:",
        "config-site-name-help": "Bu tarayıcının başlık çubuğunda ve diğer yerlerde görünecek.",
        "config-site-name-blank": "Bir site adı girin.",
index d9c615d..5d976e4 100644 (file)
        "config-using-uri": "«<nowiki>$1$2</nowiki>» URL исемле сервер файдаланыла.",
        "config-db-type": "Мәгълүматлар базасы төре:",
        "config-db-host": "Мәгълүматлар базасы хосты:",
-       "config-db-host-oracle": "TNS мәгълүмат базасы:",
        "config-db-wiki-settings": "Бу вики тәңгәлләштерү",
        "config-db-name": "Мәгълүматлар базасы исеме (сызыкчасыз):",
-       "config-db-name-oracle": "Мәгълүматлар базасы төзелеше:",
        "config-db-username": "Мәгълүмат базасын кулланучы исеме:",
        "config-db-password": "Мәгълүмат базасының серсүзе:",
        "config-db-port": "Мәгълүматлар базасы порты:",
        "config-db-schema": "MediaWiki өчен (сызыкчасыз) төзелеш:",
        "config-type-mysql": "MariaDB, MySQL яки ярашлы",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "MariaDB/MySQL көйләнмәләре",
        "config-header-postgres": "PostgreSQL көйләнмәләре",
        "config-header-sqlite": "SQLite көйләнмәләре",
-       "config-header-oracle": "Oracle көйләнмәләре",
-       "config-header-mssql": "Microsoft SQL Server көйләнмәләре",
        "config-invalid-db-type": "Мәгълүматлар базасы ялгыш төре.",
        "config-upgrade-done-no-regenerate": "Яңартү тәмамланды.\n\nХәзер сез [$1 вики] белән эшли аласыз.",
        "config-regenerate": "LocalSettings.php яңадан төзү →",
        "config-show-table-status": "«<code>SHOW TABLE STATUS</code>» таләбе эшләнмәде!",
        "config-mysql-engine": "Саклау системасы:",
        "config-mysql-innodb": "InnoDB (киңәш ителә)",
-       "config-mssql-auth": "Аутентификация төре:",
-       "config-mssql-sqlauth": "SQL Server чынлыгын раслау",
-       "config-mssql-windowsauth": "Windows чынлыгын раслау",
        "config-site-name": "Вики исеме:",
        "config-site-name-blank": "Сайт исемен языгыз.",
        "config-project-namespace": "Проектның исемнәр киңлеге:",
index 3ae74e7..938f199 100644 (file)
        "config-db-type": "Тип бази даних:",
        "config-db-host": "Хост бази даних:",
        "config-db-host-help": "Якщо сервер бази даних знаходиться на іншому сервері, введіть тут ім'я хосту і IP-адресу.\n\nЯкщо Ви використовуєте спільний веб-хостинг, Ваш хостинг-провайдер має надати Вам правильне ім'я хосту у його документації.\n\nЯкщо Ви використовуєте MySQL, можливість «localhost» може не працювати для серверного імені. Якщо не працює, використайте «127.0.0.1» як локальну IP-адресу.\n\nЯкщо Ви використовуєте PostgreSQL, залиште це поле пустим, щоб під'єднатись через сокет Unix.",
-       "config-db-host-oracle": "TNS бази даних:",
-       "config-db-host-oracle-help": "Введіть допустиме [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Local Connect Name]; файл tnsnames.ora має бути видимим для цієї інсталяції. <br />Якщо Ви використовуєте бібліотеки 10g чи новіші, можна також використовувати метод іменування [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Ідентифікувати цю вікі",
        "config-db-name": "Назва бази даних (без дефісів):",
        "config-db-name-help": "Виберіть назву, що ідентифікує Вашу вікі.\nВона не повинна містити пробілів.\n\nЯкщо Ви використовуєте віртуальний хостинг, Ваш хостинг-провайдер або надасть Вам конкретну назву бази даних, або дозволить створювати бази даних з допомогою панелі управління.",
-       "config-db-name-oracle": "Схема бази даних:",
-       "config-db-account-oracle-warn": "Є три підтримувані сценарії установки Oracle:\n\nЯкщо Ви хочете створити обліковий запис бази даних у процесі встановлення, будь ласка, вкажіть обліковий запис ролі SYSDBA для установки і бажані повноваження для облікового запису з веб-доступом. В протилежному випадку Ви можете або створити обліковий запис з веб-доступом вручну і вказати тільки цей обліковий запис (якщо він має необхідні дозволи на створення об'єктів-схем), або вказати два різні облікові записи, з яких в одного будуть права на створення, а в другого, обмеженого — права веб-доступу.\n\nСкрипт для створення облікового запису з необхідними повноваженнями можна знайти у папці \"maintenance/oracle/\" цієї інсталяції. Майте на увазі, що використання обмеженого облікового запису вимкне можливість використання технічного обслуговування з облікового запису за замовчуванням.",
        "config-db-install-account": "Обліковий запис користувача для встановлення",
        "config-db-username": "Ім'я користувача бази даних:",
        "config-db-password": "Пароль бази даних:",
        "config-pg-test-error": "Не вдається підключитися до бази даних '''$1''': $2",
        "config-sqlite-dir": "Папка даних SQLite:",
        "config-sqlite-dir-help": "SQLite зберігає усі дані в єдиному файлі.\n\nПапка, яку Ви вказуєте, має бути доступна серверу для запису під час встановлення.\n\nВона '''не''' повинна бути доступна через інтернет, тому ми і не поміщуємо її туди, де Ваші файли PHP.\n\nІнсталятор пропише у неї файл <code>.htaccess</code>, але якщо це не спрацює, хтось може отримати доступ до Вашої вихідної бази даних, яка містить вихідні дані користувача (адреси електронної пошти, хеші паролів), а також видалені версії та інші обмежені дані на вікі.\n\nЗа можливості розташуйте базу даних десь окремо, наприклад в <code>/var/lib/mediawiki/yourwiki</code>.",
-       "config-oracle-def-ts": "Простір таблиць за замовчуванням:",
-       "config-oracle-temp-ts": "Тимчасовий простір таблиць:",
        "config-type-mysql": "\nMariaDB, MySQL (або сумісні)",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki підтримує такі системи баз даних:\n\n$1\n\nЯкщо Ви не бачите серед перерахованих систему баз даних, яку використовуєте, виконайте вказівки, вказані вище, щоб увімкнути підтримку.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] є основною ціллю для MediaWiki і найкраще підтримується.  MediaWiki також працює з [{{int:version-db-mysql-url}} MySQL] та [{{int:version-db-percona-url}} Percona Server], які сумісні з MariaDB.  ([https://www.php.net/manual/en/mysqli.installation.php Як зібрати PHP з підтримкою MySQL])",
        "config-dbsupport-postgres": "*  [{{int:version-db-postgres-url}} PostgreSQL] — популярна відкрита СУБД, альтернатива MySQL. ([https://www.php.net/manual/en/pgsql.installation.php як зібрати PHP з допомогою PostgreSQL]).",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] — легка система баз даних, яка дуже добре підтримується. ([http://www.php.net/manual/en/pdo.installation.php Як зібрати PHP з допомогою SQLite], використовує PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] — комерційна база даних масштабу підприємства. ([http://www.php.net/manual/en/oci8.installation.php Як зібрати PHP з підтримкою OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] — це комерційна база даних для Windows масштабу підприємства. ([https://www.php.net/manual/en/sqlsrv.installation.php Як зібрати PHP з підтримкою SQLSRV])",
        "config-header-mysql": "Налаштування MariaDB/MySQL",
        "config-header-postgres": "Налаштування PostgreSQL",
        "config-header-sqlite": "Налаштування SQLite",
-       "config-header-oracle": "Налаштування Oracle",
-       "config-header-mssql": "Параметри Microsoft SQL Server",
        "config-invalid-db-type": "Невірний тип бази даних",
        "config-missing-db-name": "Ви повинні ввести значення параметра «{{int:config-db-name}}».",
        "config-missing-db-host": "Ви повинні ввести значення параметра «{{int:config-db-host}}».",
-       "config-missing-db-server-oracle": "Ви повинні ввести значення параметра «{{int:config-db-host-oracle}}».",
-       "config-invalid-db-server-oracle": "Неприпустиме TNS бази даних \"$1\".\nВикористовуйте \"TNS Name\" або рядок \"Easy Connect\"  ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Методи найменування Oracle])",
        "config-invalid-db-name": "Неприпустима назва бази даних \"$1\".\nВикористовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9), знаки підкреслення (_) і дефіси (-).",
        "config-invalid-db-prefix": "Неприпустимий префікс бази даних \"$1\".\nВикористовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9), знаки підкреслення (_) і дефіси (-).",
        "config-connection-error": "$1.\n\nПеревірте нижченаведений хост, ім'я користувача та пароль і спробуйте ще раз. Якщо Ви використовуєте «localhost» як хост бази даних, замініть його на «127.0.0.1» (або навпаки)",
        "config-invalid-schema": "Неприпустима схема для MediaWiki \"$1\".\nВикористовуйте тільки ASCII букви (a-z, A-Z), цифри (0-9) і знаки підкреслення(_).",
-       "config-db-sys-create-oracle": "Інсталятор підтримує лише використання облікового запису SYSDBA для створення нового облікового запису.",
-       "config-db-sys-user-exists-oracle": "Обліковий запис користувача \"$1\" уже існує. SYSDBA використовується лише для створення новий облікових записів!",
        "config-postgres-old": "Необхідна PostgreSQL $1 або пізніша, а у Вас $2.",
-       "config-mssql-old": "Вимагається Microsoft SQL Server версії $1 або більш  пізнішої. У вас установлена версія $2.",
        "config-sqlite-name-help": "Виберіть назву, що ідентифікує Вашу вікі.\nНе використовуйте пробіли і дефіси.\nЦе буде використовуватись у назві файлу даних SQLite.",
        "config-sqlite-parent-unwritable-group": "Не можна створити папку даних <code><nowiki>$1</nowiki></code>, оскільки батьківська папка <code><nowiki>$2</nowiki></code> не доступна веб-серверу для запису.\n\nІнсталятор виявив, під яким користувачем працює Ваш сервер.\nЗробіть папку <code><nowiki>$3</nowiki></code> доступною для запису, щоб продовжити.\nВ ОС Unix/Linux виконайте:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Не можна створити папку даних <code><nowiki>$1</nowiki></code>, оскільки батьківська папка <code><nowiki>$2</nowiki></code> не доступна веб-серверу для запису.\n\nІнсталятор не зміг виявити, під яким користувачем працює Ваш сервер.\nЗробіть папку <code><nowiki>$3</nowiki></code> доступною для запису серверу (і всім!) глобально, щоб продовжити.\nВ ОС Unix/Linux виконайте:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Двигун бази даних:",
        "config-mysql-innodb": "InnoDB (рекомендовано)",
        "config-mysql-engine-help": "'''InnoDB''' є завжди кращим вибором, оскільки краще підтримує паралельний доступ.\n\n'''MyISAM''' може бути швидшим для одного користувача або в інсталяціях read-only.\nБази даних MyISAM схильні псуватись частіше, ніж бази InnoDB.",
-       "config-mssql-auth": "Тип автентифікації:",
-       "config-mssql-install-auth": "Виберіть тип перевірки автентичності, який буде використовуватися для підключення до бази даних під час процесу установки. \nЯкщо ви оберете \"{{int:config-mssql-windowsauth}}\", будуть використовуватися облікові дані користувача, під яким працює веб-сервер.",
-       "config-mssql-web-auth": "Виберіть тип перевірки автентичності, який веб-сервер буде використовувати для підключення до сервера бази даних під час звичайного функціонування вікі. \nЯкщо ви оберете \"{{int:config-mssql-windowsauth}}\", будуть використовуватися облікові дані користувача, під яким працює веб-сервер.",
-       "config-mssql-sqlauth": "Автентифікація сервера SQL",
-       "config-mssql-windowsauth": "Перевірка Достовірності Windows",
        "config-site-name": "Назва вікі:",
        "config-site-name-help": "Це буде відображатись у заголовку вікна браузера та у деяких інших місцях.",
        "config-site-name-blank": "Введіть назву сайту.",
index 0929c1b..eb71a48 100644 (file)
        "config-db-type": "Kiểu cơ sở dữ liệu:",
        "config-db-host": "Máy chủ của cơ sở dữ liệu:",
        "config-db-host-help": "Nếu máy chủ cơ sở dữ liệu của bạn nằm trên máy chủ khác, hãy điền tên hoặc địa chỉ IP của máy chủ vào đây.\n\nNếu bạn đang dùng Web hosting chia sẻ, tài liệu của nhà cung cấp hosting của bạn sẽ có tên chính xác của máy chủ.\n\nNếu bạn đang sử dụng MySQL, việc dùng “localhost” có thể không hợp với tên máy chủ. Nếu bị như vậy, hãy thử “127.0.0.1” tức địa chỉ IP địa phương.\n\nNếu bạn đang dùng PostgreSQL, hãy để trống mục này để kết nối với một ổ cắm Unix.",
-       "config-db-host-oracle": "TNS cơ sở dữ liệu:",
-       "config-db-host-oracle-help": "Nhập một [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm Tên Kết nối Địa phương] hợp lệ; một tập tin tnsnames.ora phải được hiển thị đối với cài đặt này.<br />Nếu bạn đang sử dụng các thư viện trình khách 10g trở lên, bạn cũng có thể sử dụng phương pháp đặt tên [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm Easy Connect].",
        "config-db-wiki-settings": "Dữ liệu để nhận ra wiki này",
        "config-db-name": "Tên cơ sở dữ liệu (không có dấu gạch ngang):",
        "config-db-name-help": "Chọn một tên để chỉ thị wiki của bạn.\nKhông nên đưa dấu cách vào tên này.\n\nNếu bạn đang sử dụng Web hosting chia sẻ, nhà cung cấp hosting của bạn hoặc là sẽ cung cấp cho bạn một tên cơ sở dữ liệu cụ thể để sử dụng hoặc là sẽ cho phép bạn tạo ra các cơ sở dữ liệu thông qua một bảng điều khiển.",
-       "config-db-name-oracle": "Giản đồ cơ sở dữ liệu:",
-       "config-db-account-oracle-warn": "Có ba trường hợp được hỗ trợ để cài đặt Oracle làm cơ sở dữ liệu phía sau:\n\nNếu bạn muốn tạo tài khoản cơ sở dữ liệu trong quá trình cài đặt, xin vui lòng cung cấp một tài khoản với vai trò SYSDBA là tài khoản cơ sở dữ liệu để cài đặt và xác định định danh mong muốn cho tài khoản truy cập Web, nếu không bạn có thể tạo tài khoản truy cập Web thủ công và chỉ cung cấp tài khoản đó (nếu nó có các quyền yêu cầu để tạo ra các đối tượng giản đồ) hoặc cung cấp hai tài khoản riêng, một có quyền tạo ra và một bị hạn chế có quyền truy cập Web.\n\nMột kịch bản để tạo một tài khoản với quyền yêu cầu có sẵn trong thư mục cài đặt “maintenance/oracle/”. Hãy nhớ rằng việc sử dụng một tài khoản bị hạn chế sẽ vô hiệu hóa tất cả các khả năng bảo trì với tài khoản mặc định.",
        "config-db-install-account": "Tài khoản người dùng để cài đặt",
        "config-db-username": "Tên người dùng cơ sở dữ liệu:",
        "config-db-password": "Mật khẩu cơ sở dữ liệu:",
        "config-pg-test-error": "Không thể kết nối với cơ sở dữ liệu '''$1''': $2",
        "config-sqlite-dir": "Thư mục dữ liệu SQLite:",
        "config-sqlite-dir-help": "SQLite lưu tất cả các dữ liệu trong một tập tin duy nhất.\n\nThư mục mà bạn cung cấp phải cho phép máy chủ Web ghi vào khi cài đặt.\n\n<strong>Không</strong> nên làm cho nó truy cập được qua Web; đây là lý do chúng tôi không đặt nó vào cùng thư mục với các tập tin PHP của bạn.\n\nTrình cài đặt sẽ ghi một tập tin <code>.htaccess</code> đi kèm, nhưng nếu thất bại người nào đó có thể truy cập vào cơ sở dữ liệu thô của bạn.\nĐiều đó bao gồm dữ liệu người dùng thô (địa chỉ thư điện tử, mật khẩu được băm) cũng như các phiên bản bị xóa và dữ liệu bị hạn chế khác trên wiki.\n\nXem xét đặt cơ sở dữ liệu tại nơi nào khác hẳn, ví dụ trong <code>/var/lib/mediawiki/wiki_cua_ban</code>.",
-       "config-oracle-def-ts": "Không gian bảng mặc định:",
-       "config-oracle-temp-ts": "Không gian bảng tạm:",
        "config-type-mysql": "MariaDB, MySQL, hoặc tương hợp",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki hỗ trợ các hệ thống cơ sở dữ liệu sau đây:\n\n$1\n\nNếu bạn không thấy hệ thống cơ sở dữ liệu mà bạn đang muốn sử dụng được liệt kê dưới đây, thì hãy theo chỉ dẫn được liên kết ở trên để kích hoạt tính năng hỗ trợ.",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] là mục tiêu chính cho MediaWiki và được hỗ trợ tốt nhất. MediaWiki cũng làm việc với [{{int:version-db-mysql-url}} MySQL] và [{{int:version-db-percona-url}} Percona Server], là những cơ sở dữ liệu tương thích với MariaDB. ([https://www.php.net/manual/en/mysqli.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của MySQL])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] là một hệ thống cơ sở dữ liệu mã nguồn mở phổ biến như là một thay thế cho MySQL. ([https://www.php.net/manual/en/pgsql.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] là một hệ thống cơ sở dữ liệu dung lượng nhẹ được hỗ trợ rất tốt. ([https://www.php.net/manual/en/pdo.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của SQLite], sử dụng PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] là một cơ sở dữ liệu doanh nghiệp thương mại. ([https://www.php.net/manual/en/oci8.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của OCI8])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] là một cơ sở dữ liệu doanh nghiệp thương mại cho Windows. ([https://www.php.net/manual/en/sqlsrv.installation.php Làm thế nào để biên dịch PHP với sự hỗ trợ của SQLSRV])",
        "config-header-mysql": "Thiết lập MariaDB/MySQL",
        "config-header-postgres": "Thiết lập PostgreSQL",
        "config-header-sqlite": "Thiết lập SQLite",
-       "config-header-oracle": "Thiết lập Oracle",
-       "config-header-mssql": "Thiết lập Microsoft SQL Server",
        "config-invalid-db-type": "Loại cơ sở dữ liệu không hợp lệ",
        "config-missing-db-name": "Bạn phải nhập một giá trị cho “{{int:config-db-name}}”",
        "config-missing-db-host": "Bạn phải nhập một giá trị cho “{{int:config-db-host}}”",
-       "config-missing-db-server-oracle": "Bạn phải nhập một giá trị cho “{{int:config-db-host-oracle}}”",
-       "config-invalid-db-server-oracle": "Cơ sở dữ liệu TNS không hợp lệ “$1”.\nHoặc sử dụng “TNS Name” hoặc một chuỗi “Easy Connect” ([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Phương pháp đặt tên Oracle]).",
        "config-invalid-db-name": "Tên cơ sở dữ liệu không hợp lệ “$1”.\nChỉ sử dụng các chữ cái ASCII (a–z, A–Z), số (0–9), dấu gạch dưới (_) và dấu gạch ngang (-).",
        "config-invalid-db-prefix": "Tiền tố cơ sở dữ liệu không hợp lệ “$1”.\nChỉ sử dụng các chữ cái ASCII (a–z, A–Z), số (0–9), dấu gạch dưới (_) và dấu gạch ngang (-).",
        "config-connection-error": "$1.\n\nKiểm tra máy chủ, tên người dùng, và mật khẩu và thử lại lần nữa. Nếu sử dụng “localhost” làm máy chủ cơ sở dữ liệu, hãy thử sử dụng “127.0.0.1” thay thế (hoặc ngược lại).",
        "config-invalid-schema": "Giản đồ “$1” không hợp lệ cho MediaWiki.\nHãy chỉ sử dụng các chữ cái ASCII (a–z, A–Z), chữ số (0–9), và dấu gạch dưới (_).",
-       "config-db-sys-create-oracle": "Trình cài đặt chỉ hỗ trợ sử dụng một tài khoản SYSDBA để tạo một tài khoản mới.",
-       "config-db-sys-user-exists-oracle": "Tài khoản người dùng “$1” đã tồn tại. SYSDBA chỉ có thể được sử dụng để tạo một tài khoản mới!",
        "config-postgres-old": "Cần PostgreSQL $1 trở lên; bạn có $2.",
-       "config-mssql-old": "Cần Microsoft SQL Server $1 trở lên. Bạn có $2.",
        "config-sqlite-name-help": "Chọn một tên để chỉ thị wiki của bạn.\nKhông sử dụng các dấu cách ( ) hoặc dấu gạch nối (-).\nTên này sẽ được sử dụng cho tên tập tin dữ liệu SQLite.",
        "config-sqlite-parent-unwritable-group": "Không thể tạo ra thư mục dữ liệu <code><nowiki>$1</nowiki></code>, bởi vì thư mục cha <code><nowiki>$2</nowiki></code> không cho phép máy chủ Web ghi vào.\n\nTrình cài đặt đã xác định người dùng mà máy chủ Web của bạn đang chạy.\n\nHãy thiết lập để thư mục <code><nowiki>$3</nowiki></code> có thể ghi được bởi nó để tiếp tục.\nTrong một hệ thống Unix/Linux làm theo như sau:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "Không thể tạo ra thư mục dữ liệu <code><nowiki>$1</nowiki></code>, bởi vì thư mục cha <code><nowiki>$2</nowiki></code> không cho phép máy chủ Web ghi vào.\n\nTrình cài đặt không thể xác định người sử dụng mà máy chủ web của bạn đang chạy.\nThiết lập thư mục <code><nowiki>$3</nowiki></code> có thể ghi toàn cục bởi nó (và những người khác!) để tiếp tục.\nTrong một hệ thống Unix/Linux hãy đánh các dòng lệnh sau:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "Máy lưu trữ:",
        "config-mysql-innodb": "InnoDB (khuyến khích)",
        "config-mysql-engine-help": "<strong>InnoDB</strong> hầu như luôn là tùy chọn tốt nhất, vì nó có hỗ trợ đồng thời rất tốt.\n\n<strong>MyISAM</strong> có thể nhanh hơn trong chế độ một người dùng hoặc các cài đặt chỉ-đọc (read-only).\nCơ sở dữ liệu MyISAM có xu hướng thường xuyên bị hỏng hóc hơn so với cơ sở dữ liệu InnoDB.",
-       "config-mssql-auth": "Kiểu xác thực:",
-       "config-mssql-install-auth": "Chọn loại xác thực sẽ được sử dụng để kết nối với cơ sở dữ liệu trong quá trình cài đặt.\nNếu bạn chọn “{{int:config-mssql-windowsauth}}”, thông tin của bất cứ người sử dụng nào mà máy chủ web đang chạy sẽ được sử dụng.",
-       "config-mssql-web-auth": "Chọn kiểu xác thực mà máy chủ web sẽ sử dụng để kết nối đến máy chủ cơ sở dữ liệu, trong quá trình hoạt động bình thường của wiki.\nNếu bạn chọn “{{int:config-mssql-windowsauth}}”, thông tin của bất cứ người sử dụng nào mà máy chủ web đang hoạt động sẽ được sử dụng.",
-       "config-mssql-sqlauth": "Xác thực SQL Server",
-       "config-mssql-windowsauth": "Xác thực Windows",
        "config-site-name": "Tên wiki:",
        "config-site-name-help": "Điều này sẽ xuất hiện trên thanh tiêu đề của trình duyệt và ở những nơi khác.",
        "config-site-name-blank": "Nhập tên của trang Web.",
index f53d856..a4b5bf3 100644 (file)
        "config-pcre-old": "<strong>Nangangarat-an:</strong> Nagkikinahanglan hin PCRE $1 o mas urhi pa.\nAn imo PHP nga binaryo in nakasumpay hin PCRE $2. [https://www.mediawiki.org/wiki/Manual:Errors_and_symptoms/PCRE More information].",
        "config-db-name": "Ngaran han database:",
        "config-db-name-help": "Pagpili hin ngaran nga natudlok ha imo wiki.\nDapat waray ini mga espasyo.\n\nKun ikaw in nagamit hin shared web hosting, an imo hosting provider in mahatag diri ngani an specific database name para paggamit, matugot ha imo paghimo hin mga database pinaagi han control panel.",
-       "config-db-name-oracle": "Schema han database:",
        "config-db-username": "Agnay-gumaramit para ha database:",
        "config-db-password": "Password para ha database:",
        "config-db-port": "Database port:",
        "config-type-mysql": "MySQL (o compatible)",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-sqlite-readonly": "An file nga <code>$1</code> in diri writeable.",
        "config-sqlite-cant-create-db": "Diri nakakahimo hin database file nga <code>$1</code>.",
        "config-db-web-account": "Database account para han web access",
index 8877f2d..58c31a0 100644 (file)
        "config-using-uri": "באניצן סארווער־אדרעס \"<nowiki>$1$2</nowiki>\".",
        "config-db-type": "דאטנבאזע טיפ:",
        "config-db-host": "דאטנבאזע־סארווער:",
-       "config-db-host-oracle": "דאטנבאזע־TNS:",
        "config-db-wiki-settings": "אידענטיפיצירן די דאזיקע וויקי",
        "config-db-name": "דאטנבאזע נאָמען (קיין מקף):",
-       "config-db-name-oracle": "דאטנבאזע סכעמע:",
        "config-db-install-account": "באניצער־קאנטע פאר אינסטאלאציע",
        "config-db-username": "דאטנבאזע באניצער־נאָמען:",
        "config-db-password": "דאטנבאזע־פאסווארט:",
        "config-invalid-db-type": "אומגילטיגער דאטנבאזע־טיפ",
        "config-missing-db-name": "איר דארפט איינגעבן א ווערט פאר \"{{int:config-db-name}}\".",
        "config-missing-db-host": "איר דארפט איינגעבן א ווערט פאר \"{{int:config-db-host}}\".",
-       "config-missing-db-server-oracle": "איר דארפט איינגעבן א ווערט פאר \"{{int:config-db-host-oracle}}\".",
        "config-project-namespace": "פראיעקט נאָמענטייל:",
        "config-ns-generic": "פראיעקט",
        "config-admin-name": "אײַער באַניצער־נאָמען:",
index 49d534a..9f054df 100644 (file)
@@ -32,8 +32,8 @@
        "config-env-php": "安裝咗PHP$1",
        "config-env-hhvm": "安裝咗HHVM$1",
        "config-outdated-sqlite": "<strong>警告:</strong>你安裝咗SQLite $1,但係佢嘅版本低過最低要求版本 $2。你將會用毋到SQLite。",
-       "config-apc": "[https://secure.php.net/apc APC]安裝咗",
-       "config-apcu": "[https://secure.php.net/apcu APCu]安裝咗",
+       "config-apc": "[https://www.php.net/apc APC]安裝咗",
+       "config-apcu": "[https://www.php.net/apcu APCu]安裝咗",
        "config-wincache": "[https://www.iis.net/downloads/microsoft/wincache-extension WinCache]安裝咗",
        "config-diff3-bad": "搵毋到GNU diff3。",
        "config-db-type": "資料庫類型:",
index ecbfe02..4800cbe 100644 (file)
        "config-db-type": "数据库类型:",
        "config-db-host": "数据库主机:",
        "config-db-host-help": "如果您的数据库在别的服务器上,请在这里输入其域名或IP地址。\n\n如果您在使用共享网站套餐,您的网站商应该已在他们的控制面板中给您数据库信息了。\n\n如果您使用MySQL,“localhost”可能无效。如果确实无效,请输入“127.0.0.1”作为IP地址。\n\n如果您在使用PostgreSQL,并且要用Unix socket来连接,请留空。",
-       "config-db-host-oracle": "数据库透明网络底层(TNS):",
-       "config-db-host-oracle-help": "请输入合法的[http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 本地连接名],并确保tnsnames.ora文件对本安装程序可见。<br />如果您使用的客户端库为10g或更新的版本,您还可以使用[http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 简单连接名方法](easy connect naming method)。",
        "config-db-wiki-settings": "标识本wiki",
        "config-db-name": "数据库名称(不带连字号):",
        "config-db-name-help": "请输入一个可以标识您的wiki的名称。请勿使用空格。\n\n如果您正在使用共享web主机,您的主机提供商或会给您指定一个数据库名称,或会让您通过控制面板创建数据库。",
-       "config-db-name-oracle": "数据库模式:",
-       "config-db-account-oracle-warn": "现有三种已支持方案可以将Oracle设置为后端数据库:\n\n如果您希望在安装过程中创建数据库帐户,请为安装程序提供具有SYSDBA角色的数据库帐户,并为web访问帐户指定所需身份证明;否则您可以手动创建web访问的账户并仅须提供该帐户(确保帐户已有创建方案对象(schema object)的所需权限);或提供两个不同的帐户,其一具有创建权限,另一则被限制为web访问。\n\n具有所需权限账户的创建脚本存放于本程序的“maintenance/oracle/”目录下。请注意,使用受限制的帐户将禁用默认帐户的所有维护性功能。",
        "config-db-install-account": "用于安装的用户帐号",
        "config-db-username": "数据库用户名:",
        "config-db-password": "数据库密码:",
        "config-pg-test-error": "无法连接到数据库<strong>$1</strong>:$2",
        "config-sqlite-dir": "SQLite数据目录:",
        "config-sqlite-dir-help": "SQLite会将所有的数据存储于单一文件中。\n\n您所提供的目录必须在安装过程中对网页服务器可写。\n\n该目录<strong>不应</strong>允许通过web访问,因此我们不会将数据文件和PHP文件放在一起。\n\n安装程序在创建数据文件时,亦会在相同目录下创建<code>.htaccess</code>以控制权限。假若此等控制失效,则可能会将您的数据文件暴露于公共空间,让他人可以获取用户数据(电子邮件地址、杂凑后的密码)、被删除的版本以及其他在wiki上被限制访问的数据。\n\n请考虑将数据库统一放置在某处,如<code>/var/lib/mediawiki/yourwiki</code>下。",
-       "config-oracle-def-ts": "默认表空间:",
-       "config-oracle-temp-ts": "临时表空间:",
        "config-type-mysql": "MariaDB、MySQL或兼容程序",
-       "config-type-mssql": "微软SQL服务器",
        "config-support-info": "MediaWiki支持以下数据库系统:\n\n$1\n\n如果您在下面列出的数据库系统中没有找到您希望使用的系统,请根据上方链向的指引启用支持。",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB]是用于MediaWiki的主要数据库,对它的支持最为完备。MediaWiki也可以在[{{int:version-db-mysql-url}} MySQL]和[{{int:version-db-percona-url}} Percona Server]下工作,它们与MariaDB兼容。([https://www.php.net/manual/en/mysqli.installation.php 如何将对MySQL的支持编译进PHP中])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL]是一种流行的开源数据库系统,可作为MySQL的替代。([https://www.php.net/manual/en/pgsql.installation.php 如何将对PostgreSQL的支持编译进PHP中])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite]是一种轻量级的数据库系统,能被良好地支持。([https://www.php.net/manual/en/pdo.installation.php 如何将对SQLite的支持编译进PHP中],须使用PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle]是一种商用企业级的数据库。([https://www.php.net/manual/en/oci8.installation.php 如何将对OCI8的支持编译进PHP中])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server]是一个适用于Windows的商业性企业数据库。([https://www.php.net/manual/en/sqlsrv.installation.php 如何编译带有SQLSRV支持的PHP])",
        "config-header-mysql": "MariaDB/MySQL设置",
        "config-header-postgres": "PostgreSQL设置",
        "config-header-sqlite": "SQLite设置",
-       "config-header-oracle": "Oracle设置",
-       "config-header-mssql": "Microsoft SQL Server设置",
        "config-invalid-db-type": "无效的数据库类型",
        "config-missing-db-name": "您必须为“{{int:config-db-name}}”输入一个值。",
        "config-missing-db-host": "您必须为“{{int:config-db-host}}”输入一个值。",
-       "config-missing-db-server-oracle": "您必须为“{{int:config-db-host-oracle}}”输入一个值。",
-       "config-invalid-db-server-oracle": "无效的数据库TNS“$1”。请使用“TNS 名称”或者一个“轻松连接”字符串([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle 命名方法])",
        "config-invalid-db-name": "无效的数据库名称“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)、下划线(_)和连字号(-)。",
        "config-invalid-db-prefix": "无效的数据库前缀“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)、下划线(_)和连字号(-)。",
        "config-connection-error": "$1。\n\n请检查下列的主机、用户名和密码设置后重试。若使用\"localhost\"作为数据库主机,请尝试\"127.0.0.1\"(反之亦然)。",
        "config-invalid-schema": "无效的MediaWiki数据库模式“$1”。请只使用ASCII字母(a-z、A-Z)、数字(0-9)和下划线(_)。",
-       "config-db-sys-create-oracle": "安装程序仅支持使用SYSDBA帐户创建新帐户。",
-       "config-db-sys-user-exists-oracle": "用户帐户“$1”已经存在。SYSDBA仅可用于创建新帐户!",
        "config-postgres-old": "需要PostgreSQL $1或更新的版本,您的版本为$2。",
-       "config-mssql-old": "需要 Microsoft SQL Server $1 或者更高版本。您的版本是 $2。",
        "config-sqlite-name-help": "请为您的wiki指定一个用于标识的名称。请勿使用空格或连字号,该名称将被用作SQLite的数据文件名。",
        "config-sqlite-parent-unwritable-group": "由于父目录<code><nowiki>$2</nowiki></code>对网页服务器不可写,无法创建数据目录<code><nowiki>$1</nowiki></code>。\n\n安装程序已确定您网页服务器所使用的用户。请将<code><nowiki>$3</nowiki></code>目录设为对该用户可写以继续安装过程。在Unix/Linux系统中,您可以逐行输入下列命令:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "由于父目录<code><nowiki>$2</nowiki></code>对网页服务器不可写,无法创建数据目录<code><nowiki>$1</nowiki></code>。\n\n安装程序无法确定您网页服务器所使用的用户。请将<code><nowiki>$3</nowiki></code>目录设为全局可写(对所有用户)以继续安装过程。在Unix/Linux系统中,您可以逐行输入下列命令:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "存储引擎:",
        "config-mysql-innodb": "InnoDB(推荐)",
        "config-mysql-engine-help": "<strong>InnoDB</strong>通常是最佳选项,因为它对并发操作有着良好的支持。\n\n<strong>MyISAM</strong>在单用户或只读环境下可能会有更快的性能表现。但MyISAM数据库出错的概率一般要大于InnoDB数据库。",
-       "config-mssql-auth": "身份验证类型:",
-       "config-mssql-install-auth": "选择安装过程中链接数据库时将采用的身份验证方式。如果您选择“{{int:config-mssql-windowsauth}}”,将使用运行服务器的用户的身份凭据。",
-       "config-mssql-web-auth": "选择Web服务器在通常wiki操作期间用来连接数据库服务器的身份验证方式。如果您选择“{{int:config-mssql-windowsauth}}”,将使用运行Web服务器的用户的凭据。",
-       "config-mssql-sqlauth": "SQL Server 身份验证",
-       "config-mssql-windowsauth": "Windows 身份验证",
        "config-site-name": "wiki的名称:",
        "config-site-name-help": "填入的内容会出现在浏览器的标题栏以及其他多处位置中。",
        "config-site-name-blank": "输入网站的名称。",
index 28774f8..3669178 100644 (file)
        "config-db-type": "資料庫類型:",
        "config-db-host": "資料庫主機:",
        "config-db-host-help": "如果您的資料庫安裝在其他伺服器上,請在此輸入該主機的名稱或 IP 位址。\n\n如果您使用共用的網頁主機,您的主機提供商應會在說明文件上告訴您正確的主機名稱。\n\n如果您使用 MySQL,伺服器名稱可能無法使用 \"localhost\"。若確實無法使用,請改嘗試使用本機的 IP 位址 \"127.0.0.1\"。\n\n如果您使用 PostgreSQL,將此欄位空白以使用 Unix socket 來連線。",
-       "config-db-host-oracle": "資料庫的 TNS:",
-       "config-db-host-oracle-help": "請輸入有效的 [http://download.oracle.com/docs/cd/B28359_01/network.111/b28317/tnsnames.htm 本地連線名稱],並確認安裝程式可以讀取 tnsnames.ora 檔案。<br />如果您使用的客戶端程式庫為 10g 或者更新的版本,您也可使用 [http://download.oracle.com/docs/cd/E11882_01/network.112/e10836/naming.htm 簡易連線] 的命名方法進行連線。",
        "config-db-wiki-settings": "識別此 wiki",
        "config-db-name": "資料庫名稱(不帶連字號):",
        "config-db-name-help": "請輸入一個可以辨識您的 Wiki 的名稱,\n請勿包含空格。\n\n如果您使用的是共用的網頁主機,您的主機提供商會給您一個指定的資料庫名稱,或者讓您透過管理介面建立資料庫。",
-       "config-db-name-oracle": "資料庫 Schema:",
-       "config-db-account-oracle-warn": "目前有三種支援 Oracle 做為後端資料庫的方案:\n\n如果您希望在安裝的過程中自動建立新的資料庫,請提供具有 SYSDBA 權限的帳號並且提供未來要給網頁存取使用的資料庫帳號及密碼。或者您可以手動建立給網頁存取使用的資料庫帳號 (請確保該帳號有建立 Schema Object 的權限),再不然您可以提供兩組不同的帳號,一組用來建立權限,而另一組用來做為網頁存取使用。\n\n本次安裝建立的帳號以及權限所需要的 Script,可以在 \"maintenance/oracle/\" 中找到。\n請注意,若您使用有限制的帳號將會預設關閉所有維護性功能。",
        "config-db-install-account": "安裝程式使用的使用者帳號",
        "config-db-username": "資料庫使用者名稱:",
        "config-db-password": "資料庫密碼:",
        "config-pg-test-error": "無法連線到資料庫 <strong>$1</strong>:$2",
        "config-sqlite-dir": "SQLite 的資料目錄:",
        "config-sqlite-dir-help": "SQLite 會將所有的資料存儲於單一檔案中。\n\n您所提供的目錄在安裝過程中必須開啟給網頁伺服器的寫入權限。\n\n該目錄 <strong>不應</strong> 可以被透過網頁所開啟,這也是為什麼我們不將資料與 PHP 檔案放在一起。\n\n安裝程式在建立資料庫檔案時,會同時在目錄下建立 <code>.htaccess</code> 以控制網頁伺服器權限。若此設定失效,則會導致任何人可以直接存取您的原始資料檔案,而資料庫的內容包含原始的使用者資料 (電子郵件地址、加密後的密碼)、刪除後的修訂及其他在 Wiki 上被限制存取的資料。\n\n請考慮將資料庫統一放置在某處,如 <code>/var/lib/mediawiki/yourwiki</code> 底下。",
-       "config-oracle-def-ts": "預設資料表空間:",
-       "config-oracle-temp-ts": "臨時資料表空間:",
        "config-type-mysql": "MariaDB、MySQL、或與其相容的套件",
-       "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki 支援以下資料庫系統:\n\n$1\n\n如果您下方沒有看到您要使用的資料庫系統,請根據上方連結指示開啟資料庫的支援。",
        "config-dbsupport-mysql": "* [{{int:version-db-mariadb-url}} MariaDB] 是 MediaWiki 主要支援的資料庫系統。MediaWiki 也同時可運作與於 [{{int:version-db-mysql-url}} MySQL] 和 [{{int:version-db-percona-url}} Percona 伺服器],上述這些與 MariaDB 相容的資料庫系統。([https://www.php.net/manual/en/mysqli.installation.php 如何編譯支援 MySQL 的 PHP])",
        "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] 是一套受歡迎的開源資料庫系統,可用來替代 MySQL。([https://www.php.net/manual/en/pgsql.installation.php 如何編譯支援 PostgreSQL 的 PHP])。",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] 是一套輕量級的資料庫系統,MediaWiki 可在此資料庫系統上良好的運作。([https://www.php.net/manual/en/pdo.installation.php 如何編譯支援 SQLite 的 PHP],須透過 PDO)",
-       "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] 是一套商用企業級的資料庫。([https://www.php.net/manual/en/oci8.installation.php 如何編譯支援 OCI8 的 PHP])",
-       "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] 是一套 Windows 專用的商用企業級的資料庫。 ([https://www.php.net/manual/en/sqlsrv.installation.php 如何編譯支援 SQLSRV 的 PHP])",
        "config-header-mysql": "MariaDB/MySQL 設定",
        "config-header-postgres": "PostgreSQL 設定",
        "config-header-sqlite": "SQLite 設定",
-       "config-header-oracle": "Oracle 設定",
-       "config-header-mssql": "Microsoft SQL Server 設定",
        "config-invalid-db-type": "無效的資料庫類型。",
        "config-missing-db-name": "您必須輸入 \"{{int:config-db-name}}\" 欄位的內容。",
        "config-missing-db-host": "您必須輸入 \"{{int:config-db-host}}\" 欄位的內容。",
-       "config-missing-db-server-oracle": "您必須輸入 \"{{int:config-db-host-oracle}}\" 欄位的內容。",
-       "config-invalid-db-server-oracle": "無效的資料庫 TNS \"$1\"。\n請使用符合 \"TNS 名稱\" 或 \"簡易連線\" 規則的字串([http://docs.oracle.com/cd/E11882_01/network.112/e10836/naming.htm Oracle命名規則])",
        "config-invalid-db-name": "無效的資料庫名稱 \"$1\"。\n僅允許使用 ASCII 字母(a-z、A-Z)、數字(0-9)、底線(_)與連字號(-)。",
        "config-invalid-db-prefix": "無效的資料庫字首 \"$1\"。\n僅允許使用 ASCII 字母(a-z、A-Z)、數字(0-9)、底線(_)與連字號(-)。",
        "config-connection-error": "$1。\n\n請檢查主機、使用者名稱和密碼設定,然後重試。如果是使用 \"localhost\" 來作為資料庫主機,請嘗試改用 \"127.0.0.1\"(反之亦然)。",
        "config-invalid-schema": "無效的資料庫 Schema \"$1\"。\n僅允許使用 ASCII 字母(a-z、A-Z)、數字(0-9)、底線(_)與連字號(-)。",
-       "config-db-sys-create-oracle": "安裝程式只支援使用 SYSDBA 帳號建立新帳號。",
-       "config-db-sys-user-exists-oracle": "使用者帳號 \"$1\" 已存在。 SYSDBA 只可用來建立新的帳號!",
        "config-postgres-old": "需要使用 PostgreSQL $1 或更新的版本,您的版本為 $2。",
-       "config-mssql-old": "需要使用 Microsoft SQL Server $1 或更新的版本,您的版本為 $2。",
        "config-sqlite-name-help": "請為您的 Wiki 設定一個用來辨識的名稱。\n請勿使用空格或連字號,\n該名稱會被用來做為 SQLite 資料檔的名稱。",
        "config-sqlite-parent-unwritable-group": "無法建立資料目錄 <nowiki>$1</nowiki></code>,因網頁伺服器對該目錄所在的上層目錄 <code><nowiki>$2</nowiki></code> 沒有寫入權限。\n\n安裝程序所使用的身份依據您用來執行網頁伺服器的身份而定,\n請開啟網頁伺服器對 <code><nowiki>$3</nowiki></code> 的寫入權以繼續安裝,\n在 Unix/Linux 系統可以執行以下指令:\n\n<pre>cd $2\nmkdir $3\nchgrp $4 $3\nchmod g+w $3</pre>",
        "config-sqlite-parent-unwritable-nogroup": "無法建立資料目錄 <nowiki>$1</nowiki></code>,因網頁伺服器對該目錄所在的上層目錄 <code><nowiki>$2</nowiki></code> 沒有寫入權限。\n\n安裝程序所使用的身份依據您用來執行網頁伺服器的身份而定,\n請開啟全部人對 <code><nowiki>$3</nowiki></code> 的寫入權以繼續安裝,\n在 Unix/Linux 系統可以執行以下指令:\n\n<pre>cd $2\nmkdir $3\nchmod a+w $3</pre>",
        "config-mysql-engine": "儲存引擎:",
        "config-mysql-innodb": "InnoDB(推薦)",
        "config-mysql-engine-help": "由於對同時連線有較好的處理能力,<strong>InnoDB</strong> 通常是最佳的選項。\n\n<strong>MyISAM</strong> 只在單人使用或者唯讀作業的情況之下才可能有較快的處理能力。\n相較於 InnoDB,MyISAM 也較容易出現資料損毀的情況。",
-       "config-mssql-auth": "身份驗證類型:",
-       "config-mssql-install-auth": "請選擇安裝程序中要用來連線資料庫使用的身份驗證類型。\n若您選擇 \"{{int:config-mssql-windowsauth}}\",不論網頁伺服器是使用何種身份執行都會使用這組驗證資料。",
-       "config-mssql-web-auth": "請選擇一般操作中要用來連線資料庫使用的身份驗證類型。\n若您選擇 \"{{int:config-mssql-windowsauth}}\",不論網頁伺服器是使用何種身份執行都會使用這組驗證資料。",
-       "config-mssql-sqlauth": "SQL Server 身份驗證",
-       "config-mssql-windowsauth": "Windows 身份驗證",
        "config-site-name": "wiki 的名稱:",
        "config-site-name-help": "您所填入的內容會出現在瀏覽器的標題列以及各種其他地方。",
        "config-site-name-blank": "請輸入網站名稱。",
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 4de72a9..d27056d 100644 (file)
@@ -42,7 +42,7 @@ class ActivityUpdateJob extends Job {
                static $required = [ 'type', 'userid', 'notifTime', 'curTime' ];
                $missing = implode( ', ', array_diff( $required, array_keys( $this->params ) ) );
                if ( $missing != '' ) {
-                       throw new InvalidArgumentException( "Missing paramter(s) $missing" );
+                       throw new InvalidArgumentException( "Missing parameter(s) $missing" );
                }
 
                $this->removeDuplicates = true;
index 2d4ce34..63e6da4 100644 (file)
@@ -168,7 +168,7 @@ class RecentChangesUpdateJob extends Job {
                        ],
                        __METHOD__,
                        [
-                               'GROUP BY' => [ 'rc_user_text' ],
+                               'GROUP BY' => [ $actorQuery['fields']['rc_user_text'] ],
                                'ORDER BY' => 'NULL' // avoid filesort
                        ],
                        $actorQuery['joins']
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 0954ac8..aa83b1f 100644 (file)
@@ -73,7 +73,7 @@ class APCBagOStuff extends MediumSpecificBagOStuff {
                return true;
        }
 
-       public function add( $key, $value, $exptime = 0, $flags = 0 ) {
+       protected function doAdd( $key, $value, $exptime = 0, $flags = 0 ) {
                return apc_add(
                        $key . self::KEY_SUFFIX,
                        $this->nativeSerialize ? $value : $this->serialize( $value ),
index 021cdf7..80383d1 100644 (file)
@@ -71,7 +71,7 @@ class APCUBagOStuff extends MediumSpecificBagOStuff {
                );
        }
 
-       public function add( $key, $value, $exptime = 0, $flags = 0 ) {
+       protected function doAdd( $key, $value, $exptime = 0, $flags = 0 ) {
                return apcu_add(
                        $key . self::KEY_SUFFIX,
                        $this->nativeSerialize ? $value : $this->serialize( $value ),
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 0ab26c9..9fa9a89 100644 (file)
@@ -79,7 +79,7 @@ class CachedBagOStuff extends BagOStuff {
                        }
                }
 
-               $valuesByKeyFetched = $this->backend->getMulti( $keys, $flags );
+               $valuesByKeyFetched = $this->backend->getMulti( $keysMissing, $flags );
                $this->setMulti( $valuesByKeyFetched, self::TTL_INDEFINITE, self::WRITE_CACHE_ONLY );
 
                return $valuesByKeyCached + $valuesByKeyFetched;
index dab8ba1..b2613b2 100644 (file)
@@ -41,7 +41,7 @@ class EmptyBagOStuff extends MediumSpecificBagOStuff {
                return true;
        }
 
-       public function add( $key, $value, $exptime = 0, $flags = 0 ) {
+       protected function doAdd( $key, $value, $exptime = 0, $flags = 0 ) {
                return true;
        }
 
index 83c8004..b4087be 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
                ];
 
@@ -94,7 +94,7 @@ class HashBagOStuff extends MediumSpecificBagOStuff {
                return true;
        }
 
-       public function add( $key, $value, $exptime = 0, $flags = 0 ) {
+       protected function doAdd( $key, $value, $exptime = 0, $flags = 0 ) {
                if ( $this->hasKey( $key ) && !$this->expire( $key ) ) {
                        return false; // key already set
                }
index 23cf607..329e600 100644 (file)
@@ -160,57 +160,9 @@ abstract class MediumSpecificBagOStuff extends BagOStuff {
         * @return bool Success
         */
        public function set( $key, $value, $exptime = 0, $flags = 0 ) {
-               if (
-                       is_int( $value ) || // avoid breaking incr()/decr()
-                       ( $flags & self::WRITE_ALLOW_SEGMENTS ) != self::WRITE_ALLOW_SEGMENTS ||
-                       is_infinite( $this->segmentationSize )
-               ) {
-                       return $this->doSet( $key, $value, $exptime, $flags );
-               }
-
-               $serialized = $this->serialize( $value );
-               $segmentSize = $this->getSegmentationSize();
-               $maxTotalSize = $this->getSegmentedValueMaxSize();
-
-               $size = strlen( $serialized );
-               if ( $size <= $segmentSize ) {
-                       // Since the work of serializing it was already done, just use it inline
-                       return $this->doSet(
-                               $key,
-                               SerializedValueContainer::newUnified( $serialized ),
-                               $exptime,
-                               $flags
-                       );
-               } elseif ( $size > $maxTotalSize ) {
-                       $this->setLastError( "Key $key exceeded $maxTotalSize bytes." );
-
-                       return false;
-               }
-
-               $chunksByKey = [];
-               $segmentHashes = [];
-               $count = intdiv( $size, $segmentSize ) + ( ( $size % $segmentSize ) ? 1 : 0 );
-               for ( $i = 0; $i < $count; ++$i ) {
-                       $segment = substr( $serialized, $i * $segmentSize, $segmentSize );
-                       $hash = sha1( $segment );
-                       $chunkKey = $this->makeGlobalKey( self::SEGMENT_COMPONENT, $key, $hash );
-                       $chunksByKey[$chunkKey] = $segment;
-                       $segmentHashes[] = $hash;
-               }
-
-               $flags &= ~self::WRITE_ALLOW_SEGMENTS; // sanity
-               $ok = $this->setMulti( $chunksByKey, $exptime, $flags );
-               if ( $ok ) {
-                       // Only when all segments are stored should the main key be changed
-                       $ok = $this->doSet(
-                               $key,
-                               SerializedValueContainer::newSegmented( $segmentHashes ),
-                               $exptime,
-                               $flags
-                       );
-               }
-
-               return $ok;
+               list( $entry, $usable ) = $this->makeValueOrSegmentList( $key, $value, $exptime, $flags );
+               // Only when all segments (if any) are stored should the main key be changed
+               return $usable ? $this->doSet( $key, $entry, $exptime, $flags ) : false;
        }
 
        /**
@@ -268,6 +220,23 @@ abstract class MediumSpecificBagOStuff extends BagOStuff {
         */
        abstract protected function doDelete( $key, $flags = 0 );
 
+       public function add( $key, $value, $exptime = 0, $flags = 0 ) {
+               list( $entry, $usable ) = $this->makeValueOrSegmentList( $key, $value, $exptime, $flags );
+               // Only when all segments (if any) are stored should the main key be changed
+               return $usable ? $this->doAdd( $key, $entry, $exptime, $flags ) : false;
+       }
+
+       /**
+        * Insert an item if it does not already exist
+        *
+        * @param string $key
+        * @param mixed $value
+        * @param int $exptime
+        * @param int $flags Bitfield of BagOStuff::WRITE_* constants (since 1.33)
+        * @return bool Success
+        */
+       abstract protected function doAdd( $key, $value, $exptime = 0, $flags = 0 );
+
        /**
         * Merge changes into the existing cache value (possibly creating a new one)
         *
@@ -283,7 +252,6 @@ abstract class MediumSpecificBagOStuff extends BagOStuff {
         * @param int $attempts The amount of times to attempt a merge in case of failure
         * @param int $flags Bitfield of BagOStuff::WRITE_* constants
         * @return bool Success
-        * @throws InvalidArgumentException
         */
        public function merge( $key, callable $callback, $exptime = 0, $attempts = 10, $flags = 0 ) {
                return $this->mergeViaCas( $key, $callback, $exptime, $attempts, $flags );
@@ -297,9 +265,9 @@ abstract class MediumSpecificBagOStuff extends BagOStuff {
         * @param int $flags Bitfield of BagOStuff::WRITE_* constants
         * @return bool Success
         * @see BagOStuff::merge()
-        *
         */
        final protected function mergeViaCas( $key, callable $callback, $exptime, $attempts, $flags ) {
+               $attemptsLeft = $attempts;
                do {
                        $casToken = null; // passed by reference
                        // Get the old value and CAS token from cache
@@ -309,23 +277,27 @@ abstract class MediumSpecificBagOStuff extends BagOStuff {
                                $this->doGet( $key, self::READ_LATEST, $casToken )
                        );
                        if ( $this->getLastError() ) {
+                               // Don't spam slow retries due to network problems (retry only on races)
                                $this->logger->warning(
-                                       __METHOD__ . ' failed due to I/O error on get() for {key}.',
+                                       __METHOD__ . ' failed due to read I/O error on get() for {key}.',
                                        [ 'key' => $key ]
                                );
-
-                               return false; // don't spam retries (retry only on races)
+                               $success = false;
+                               break;
                        }
 
                        // Derive the new value from the old value
                        $value = call_user_func( $callback, $this, $key, $currentValue, $exptime );
-                       $hadNoCurrentValue = ( $currentValue === false );
+                       $keyWasNonexistant = ( $currentValue === false );
+                       $valueMatchesOldValue = ( $value === $currentValue );
                        unset( $currentValue ); // free RAM in case the value is large
 
                        $this->clearLastError();
                        if ( $value === false ) {
                                $success = true; // do nothing
-                       } elseif ( $hadNoCurrentValue ) {
+                       } elseif ( $valueMatchesOldValue && $attemptsLeft !== $attempts ) {
+                               $success = true; // recently set by another thread to the same value
+                       } elseif ( $keyWasNonexistant ) {
                                // Try to create the key, failing if it gets created in the meantime
                                $success = $this->add( $key, $value, $exptime, $flags );
                        } else {
@@ -333,15 +305,16 @@ abstract class MediumSpecificBagOStuff extends BagOStuff {
                                $success = $this->cas( $casToken, $key, $value, $exptime, $flags );
                        }
                        if ( $this->getLastError() ) {
+                               // Don't spam slow retries due to network problems (retry only on races)
                                $this->logger->warning(
-                                       __METHOD__ . ' failed due to I/O error for {key}.',
+                                       __METHOD__ . ' failed due to write I/O error for {key}.',
                                        [ 'key' => $key ]
                                );
-
-                               return false; // IO error; don't spam retries
+                               $success = false;
+                               break;
                        }
 
-               } while ( !$success && --$attempts );
+               } while ( !$success && --$attemptsLeft );
 
                return $success;
        }
@@ -357,21 +330,58 @@ abstract class MediumSpecificBagOStuff extends BagOStuff {
         * @return bool Success
         */
        protected function cas( $casToken, $key, $value, $exptime = 0, $flags = 0 ) {
+               if ( $casToken === null ) {
+                       $this->logger->warning(
+                               __METHOD__ . ' got empty CAS token for {key}.',
+                               [ 'key' => $key ]
+                       );
+
+                       return false; // caller may have meant to use add()?
+               }
+
+               list( $entry, $usable ) = $this->makeValueOrSegmentList( $key, $value, $exptime, $flags );
+               // Only when all segments (if any) are stored should the main key be changed
+               return $usable ? $this->doCas( $casToken, $key, $entry, $exptime, $flags ) : false;
+       }
+
+       /**
+        * Check and set an item
+        *
+        * @param mixed $casToken
+        * @param string $key
+        * @param mixed $value
+        * @param int $exptime Either an interval in seconds or a unix timestamp for expiry
+        * @param int $flags Bitfield of BagOStuff::WRITE_* constants
+        * @return bool Success
+        */
+       protected function doCas( $casToken, $key, $value, $exptime = 0, $flags = 0 ) {
+               // @TODO: the lock() call assumes that all other relavent sets() use one
                if ( !$this->lock( $key, 0 ) ) {
                        return false; // non-blocking
                }
 
                $curCasToken = null; // passed by reference
+               $this->clearLastError();
                $this->doGet( $key, self::READ_LATEST, $curCasToken );
-               if ( $casToken === $curCasToken ) {
-                       $success = $this->set( $key, $value, $exptime, $flags );
+               if ( is_object( $curCasToken ) ) {
+                       // Using === does not work with objects since it checks for instance identity
+                       throw new UnexpectedValueException( "CAS token cannot be an object" );
+               }
+               if ( $this->getLastError() ) {
+                       // Fail if the old CAS token could not be read
+                       $success = false;
+                       $this->logger->warning(
+                               __METHOD__ . ' failed due to write I/O error for {key}.',
+                               [ 'key' => $key ]
+                       );
+               } elseif ( $casToken === $curCasToken ) {
+                       $success = $this->doSet( $key, $value, $exptime, $flags );
                } else {
+                       $success = false; // mismatched or failed
                        $this->logger->info(
                                __METHOD__ . ' failed due to race condition for {key}.',
                                [ 'key' => $key ]
                        );
-
-                       $success = false; // mismatched or failed
                }
 
                $this->unlock( $key );
@@ -407,12 +417,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 +793,65 @@ abstract class MediumSpecificBagOStuff extends BagOStuff {
        }
 
        /**
+        * Determine the entry (inline or segment list) to store under a key to save the value
+        *
+        * @param string $key
+        * @param mixed $value
         * @param int $exptime
-        * @return bool
+        * @param int $flags
+        * @return array (inline value or segment list, whether the entry is usable)
+        * @since 1.34
         */
-       final protected function expiryIsRelative( $exptime ) {
-               return ( $exptime != 0 && $exptime < ( 10 * self::TTL_YEAR ) );
+       final protected function makeValueOrSegmentList( $key, $value, $exptime, $flags ) {
+               $entry = $value;
+               $usable = true;
+
+               if (
+                       ( $flags & self::WRITE_ALLOW_SEGMENTS ) === self::WRITE_ALLOW_SEGMENTS &&
+                       !is_int( $value ) && // avoid breaking incr()/decr()
+                       is_finite( $this->segmentationSize )
+               ) {
+                       $segmentSize = $this->segmentationSize;
+                       $maxTotalSize = $this->segmentedValueMaxSize;
+
+                       $serialized = $this->serialize( $value );
+                       $size = strlen( $serialized );
+                       if ( $size > $maxTotalSize ) {
+                               $this->logger->warning(
+                                       "Value for {key} exceeds $maxTotalSize bytes; cannot segment.",
+                                       [ 'key' => $key ]
+                               );
+                       } elseif ( $size <= $segmentSize ) {
+                               // The serialized value was already computed, so just use it inline
+                               $entry = SerializedValueContainer::newUnified( $serialized );
+                       } else {
+                               // Split the serialized value into chunks and store them at different keys
+                               $chunksByKey = [];
+                               $segmentHashes = [];
+                               $count = intdiv( $size, $segmentSize ) + ( ( $size % $segmentSize ) ? 1 : 0 );
+                               for ( $i = 0; $i < $count; ++$i ) {
+                                       $segment = substr( $serialized, $i * $segmentSize, $segmentSize );
+                                       $hash = sha1( $segment );
+                                       $chunkKey = $this->makeGlobalKey( self::SEGMENT_COMPONENT, $key, $hash );
+                                       $chunksByKey[$chunkKey] = $segment;
+                                       $segmentHashes[] = $hash;
+                               }
+                               $flags &= ~self::WRITE_ALLOW_SEGMENTS; // sanity
+                               $usable = $this->setMulti( $chunksByKey, $exptime, $flags );
+                               $entry = SerializedValueContainer::newSegmented( $segmentHashes );
+                       }
+               }
+
+               return [ $entry, $usable ];
+       }
+
+       /**
+        * @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 isRelativeExpiration( $exptime ) {
+               return ( $exptime !== self::TTL_INDEFINITE && $exptime < ( 10 * self::TTL_YEAR ) );
        }
 
        /**
@@ -799,11 +864,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 +888,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 cc7ee2a..3df483d 100644 (file)
@@ -214,7 +214,7 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
                        : $this->checkResult( $key, $result );
        }
 
-       protected function cas( $casToken, $key, $value, $exptime = 0, $flags = 0 ) {
+       protected function doCas( $casToken, $key, $value, $exptime = 0, $flags = 0 ) {
                $this->debug( "cas($key)" );
 
                $result = $this->acquireSyncClient()->cas(
@@ -238,7 +238,7 @@ class MemcachedPeclBagOStuff extends MemcachedBagOStuff {
                        : $this->checkResult( $key, $result );
        }
 
-       public function add( $key, $value, $exptime = 0, $flags = 0 ) {
+       protected function doAdd( $key, $value, $exptime = 0, $flags = 0 ) {
                $this->debug( "add($key)" );
 
                $result = $this->acquireSyncClient()->add(
index b1d5d29..8144231 100644 (file)
@@ -76,7 +76,7 @@ class MemcachedPhpBagOStuff extends MemcachedBagOStuff {
                return $this->client->delete( $this->validateKeyEncoding( $key ) );
        }
 
-       public function add( $key, $value, $exptime = 0, $flags = 0 ) {
+       protected function doAdd( $key, $value, $exptime = 0, $flags = 0 ) {
                return $this->client->add(
                        $this->validateKeyEncoding( $key ),
                        $value,
@@ -84,7 +84,7 @@ class MemcachedPhpBagOStuff extends MemcachedBagOStuff {
                );
        }
 
-       protected function cas( $casToken, $key, $value, $exptime = 0, $flags = 0 ) {
+       protected function doCas( $casToken, $key, $value, $exptime = 0, $flags = 0 ) {
                return $this->client->cas(
                        $casToken,
                        $this->validateKeyEncoding( $key ),
index aa4a9b3..b8ce38b 100644 (file)
@@ -164,7 +164,7 @@ class RESTBagOStuff extends MediumSpecificBagOStuff {
                return $this->handleError( "Failed to store $key", $rcode, $rerr, $rhdrs, $rbody );
        }
 
-       public function add( $key, $value, $exptime = 0, $flags = 0 ) {
+       protected function doAdd( $key, $value, $exptime = 0, $flags = 0 ) {
                // @TODO: make this atomic
                if ( $this->get( $key ) === false ) {
                        return $this->set( $key, $value, $exptime, $flags );
index 87d26ef..252b1fa 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();
@@ -338,13 +341,13 @@ class RedisBagOStuff extends MediumSpecificBagOStuff {
                return $result;
        }
 
-       public function add( $key, $value, $expiry = 0, $flags = 0 ) {
+       protected function doAdd( $key, $value, $expiry = 0, $flags = 0 ) {
                $conn = $this->getConnection( $key );
                if ( !$conn ) {
                        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 0e4e3fb..3c4efbb 100644 (file)
  * @ingroup Cache
  */
 class WinCacheBagOStuff extends MediumSpecificBagOStuff {
+       public function __construct( array $params = [] ) {
+               $params['segmentationSize'] = $params['segmentationSize'] ?? INF;
+               parent::__construct( $params );
+       }
+
        protected function doGet( $key, $flags = 0, &$casToken = null ) {
                $casToken = null;
 
@@ -44,7 +49,7 @@ class WinCacheBagOStuff extends MediumSpecificBagOStuff {
                return $value;
        }
 
-       protected function cas( $casToken, $key, $value, $exptime = 0, $flags = 0 ) {
+       protected function doCas( $casToken, $key, $value, $exptime = 0, $flags = 0 ) {
                if ( !wincache_lock( $key ) ) { // optimize with FIFO lock
                        return false;
                }
@@ -76,7 +81,7 @@ class WinCacheBagOStuff extends MediumSpecificBagOStuff {
                return ( $result === [] || $result === true );
        }
 
-       public function add( $key, $value, $exptime = 0, $flags = 0 ) {
+       protected function doAdd( $key, $value, $exptime = 0, $flags = 0 ) {
                if ( wincache_ucache_exists( $key ) ) {
                        return false; // avoid warnings
                }
index f27d042..f0b135f 100644 (file)
@@ -80,6 +80,11 @@ class DBConnRef implements IDatabase {
                return $this->__call( __FUNCTION__, func_get_args() );
        }
 
+       /**
+        * @param bool|null $buffer
+        * @return bool
+        * @deprecated Since 1.34 Use query batching
+        */
        public function bufferResults( $buffer = null ) {
                return $this->__call( __FUNCTION__, func_get_args() );
        }
index e82c735..6029f77 100644 (file)
@@ -250,8 +250,6 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                                $this->flags |= self::DBO_TRX;
                        }
                }
-               // Disregard deprecated DBO_IGNORE flag (T189999)
-               $this->flags &= ~self::DBO_IGNORE;
 
                $this->connectionVariables = $params['variables'];
 
@@ -453,7 +451,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,
@@ -516,15 +513,15 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                return $this->getServerVersion();
        }
 
+       /**
+        * Backwards-compatibility no-op method for disabling query buffering
+        *
+        * @param null|bool $buffer Whether to buffer queries (ignored)
+        * @return bool Whether buffering was already enabled (always true)
+        * @deprecated Since 1.34 Use query batching; this no longer does anything
+        */
        public function bufferResults( $buffer = null ) {
-               $res = !$this->getFlag( self::DBO_NOBUFFER );
-               if ( $buffer !== null ) {
-                       $buffer
-                               ? $this->clearFlag( self::DBO_NOBUFFER )
-                               : $this->setFlag( self::DBO_NOBUFFER );
-               }
-
-               return $res;
+               return true;
        }
 
        final public function trxLevel() {
@@ -1715,10 +1712,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 +1728,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 +2375,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..8931ae2 100644 (file)
@@ -40,15 +40,7 @@ class DatabaseMysqli extends DatabaseMysqlBase {
         * @return mysqli_result|bool
         */
        protected function doQuery( $sql ) {
-               $conn = $this->getBindingHandle();
-
-               if ( $this->bufferResults() ) {
-                       $ret = $conn->query( $sql );
-               } else {
-                       $ret = $conn->query( $sql, MYSQLI_USE_RESULT );
-               }
-
-               return $ret;
+               return $this->getBindingHandle()->query( $sql );
        }
 
        /**
@@ -64,9 +56,14 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                        );
                }
 
-               // Other than mysql_connect, mysqli_real_connect expects an explicit port
-               // and socket parameters. So we need to parse the port and socket out of
-               // $realServer
+               // Other than mysql_connect, mysqli_real_connect expects an explicit port number
+               // e.g. "localhost:1234" or "127.0.0.1:1234"
+               // or Unix domain socket path
+               // e.g. "localhost:/socket_path" or "localhost:/foo/bar:bar:bar"
+               // colons are known to be used by Google AppEngine,
+               // see <https://cloud.google.com/sql/docs/mysql/connect-app-engine>
+               //
+               // We need to parse the port or socket path out of $realServer
                $port = null;
                $socket = null;
                $hostAndPort = IP::splitHostAndPort( $realServer );
@@ -75,15 +72,17 @@ class DatabaseMysqli extends DatabaseMysqlBase {
                        if ( $hostAndPort[1] ) {
                                $port = $hostAndPort[1];
                        }
-               } elseif ( substr_count( $realServer, ':' ) == 1 ) {
-                       // If we have a colon and something that's not a port number
-                       // inside the hostname, assume it's the socket location
+               } elseif ( substr_count( $realServer, ':/' ) == 1 ) {
+                       // If we have a colon slash instead of a colon and a port number
+                       // after the ip or hostname, assume it's the Unix domain socket path
                        list( $realServer, $socket ) = explode( ':', $realServer, 2 );
                }
 
                $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..8768213 100644 (file)
@@ -89,9 +89,9 @@ interface IDatabase {
 
        /** @var int Enable debug logging of all SQL queries */
        const DBO_DEBUG = 1;
-       /** @var int Disable query buffering (only one result set can be iterated at a time) */
+       /** @var int Unused since 1.34 */
        const DBO_NOBUFFER = 2;
-       /** @var int Ignore query errors (internal use only!) */
+       /** @var int Unused since 1.31 */
        const DBO_IGNORE = 4;
        /** @var int Automatically start a transaction before running a query if none is active */
        const DBO_TRX = 8;
@@ -138,28 +138,6 @@ interface IDatabase {
         */
        public function getServerInfo();
 
-       /**
-        * Turns buffering of SQL result sets on (true) or off (false). Default is "on".
-        *
-        * Unbuffered queries are very troublesome in MySQL:
-        *
-        *   - If another query is executed while the first query is being read
-        *     out, the first query is killed. This means you can't call normal
-        *     Database functions while you are reading an unbuffered query result
-        *     from a normal Database connection.
-        *
-        *   - Unbuffered queries cause the MySQL server to use large amounts of
-        *     memory and to hold broad locks which block other queries.
-        *
-        * If you want to limit client-side memory, it's almost always better to
-        * split up queries into batches using a LIMIT clause than to switch off
-        * buffering.
-        *
-        * @param null|bool $buffer
-        * @return null|bool The previous value of the flag
-        */
-       public function bufferResults( $buffer = null );
-
        /**
         * Gets the current transaction level.
         *
@@ -319,7 +297,7 @@ interface IDatabase {
        /**
         * Set a flag for this connection
         *
-        * @param int $flag IDatabase::DBO_DEBUG, IDatabase::DBO_NOBUFFER, or IDatabase::DBO_TRX
+        * @param int $flag One of (IDatabase::DBO_DEBUG, IDatabase::DBO_TRX)
         * @param string $remember IDatabase::REMEMBER_* constant [default: REMEMBER_NOTHING]
         */
        public function setFlag( $flag, $remember = self::REMEMBER_NOTHING );
@@ -327,7 +305,7 @@ interface IDatabase {
        /**
         * Clear a flag for this connection
         *
-        * @param int $flag IDatabase::DBO_DEBUG, IDatabase::DBO_NOBUFFER, or IDatabase::DBO_TRX
+        * @param int $flag One of (IDatabase::DBO_DEBUG, IDatabase::DBO_TRX)
         * @param string $remember IDatabase::REMEMBER_* constant [default: REMEMBER_NOTHING]
         */
        public function clearFlag( $flag, $remember = self::REMEMBER_NOTHING );
@@ -452,8 +430,10 @@ interface IDatabase {
        public function lastError();
 
        /**
-        * Get the number of rows affected by the last write query
-        * @see https://www.php.net/mysql_affected_rows
+        * Get the number of rows affected by the last write query.
+        * Similar to https://www.php.net/mysql_affected_rows but includes rows matched
+        * but not changed (ie. an UPDATE which sets all fields to the same value they already have).
+        * To get the old mysql_affected_rows behavior, include non-equality of the fields in WHERE.
         *
         * @return int
         */
@@ -679,10 +659,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 +691,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 +908,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 +1097,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 +1111,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 990705c..1125572 100644 (file)
@@ -167,8 +167,7 @@ interface ILoadBalancer {
         *
         * @param string|bool $group Query group or false for the generic group
         * @param string|bool $domain DB domain ID or false for the local domain
-        * @throws DBError If no live handle can be obtained
-        * @return bool|int|string
+        * @return int|bool Returns false if no live handle can be obtained
         */
        public function getReaderIndex( $group = false, $domain = false );
 
index 98607ce..d088aa9 100644 (file)
@@ -592,8 +592,7 @@ class LoadBalancer implements ILoadBalancer {
                        $this->connLogger->debug( __METHOD__ . ": Using reader #$i: $serverName..." );
 
                        // Get a connection to this server without triggering other server connections
-                       $flags = self::CONN_SILENCE_ERRORS;
-                       $conn = $this->getServerConnection( $i, $domain, $flags );
+                       $conn = $this->getServerConnection( $i, $domain, self::CONN_SILENCE_ERRORS );
                        if ( !$conn ) {
                                $this->connLogger->warning( __METHOD__ . ": Failed connecting to $i/$domain" );
                                unset( $currentLoads[$i] ); // avoid this server next iteration
@@ -1919,13 +1918,8 @@ class LoadBalancer implements ILoadBalancer {
                }
 
                if ( $this->hasStreamingReplicaServers() ) {
-                       try {
-                               // Set "laggedReplicaMode"
-                               $this->getReaderIndex( self::GROUP_GENERIC, $domain );
-                       } catch ( DBConnectionError $e ) {
-                               // Sanity: avoid expensive re-connect attempts and failures
-                               $this->laggedReplicaMode = true;
-                       }
+                       // This will set "laggedReplicaMode" as needed
+                       $this->getReaderIndex( self::GROUP_GENERIC, $domain );
                }
 
                return $this->laggedReplicaMode;
index d1f1052..84755ed 100644 (file)
@@ -6,6 +6,7 @@ use InvalidArgumentException;
 use Psr\Container\ContainerInterface;
 use RuntimeException;
 use Wikimedia\Assert\Assert;
+use Wikimedia\ScopedCallback;
 
 /**
  * Generic service container.
@@ -77,6 +78,11 @@ class ServiceContainer implements ContainerInterface, DestructibleService {
         */
        private $destroyed = false;
 
+       /**
+        * @var array Set of services currently being created, to detect loops
+        */
+       private $servicesBeingCreated = [];
+
        /**
         * @param array $extraInstantiationParams Any additional parameters to be passed to the
         * instantiator function when creating a service. This is typically used to provide
@@ -433,10 +439,20 @@ class ServiceContainer implements ContainerInterface, DestructibleService {
         * @param string $name
         *
         * @throws InvalidArgumentException if $name is not a known service.
+        * @throws RuntimeException if a circular dependency is detected.
         * @return object
         */
        private function createService( $name ) {
                if ( isset( $this->serviceInstantiators[$name] ) ) {
+                       if ( isset( $this->servicesBeingCreated[$name] ) ) {
+                               throw new RuntimeException( "Circular dependency when creating service! " .
+                                       implode( ' -> ', array_keys( $this->servicesBeingCreated ) ) . " -> $name" );
+                       }
+                       $this->servicesBeingCreated[$name] = true;
+                       $removeFromStack = new ScopedCallback( function () use ( $name ) {
+                               unset( $this->servicesBeingCreated[$name] );
+                       } );
+
                        $service = ( $this->serviceInstantiators[$name] )(
                                $this,
                                ...$this->extraInstantiationParams
@@ -458,6 +474,8 @@ class ServiceContainer implements ContainerInterface, DestructibleService {
                                }
                        }
 
+                       $removeFromStack->consume();
+
                        // NOTE: when adding more wiring logic here, make sure importWiring() is kept in sync!
                } else {
                        throw new NoSuchServiceException( $name );
index 17f72bd..ce68a91 100644 (file)
@@ -59,7 +59,7 @@ interface LogEntry {
        public function getParameters();
 
        /**
-        * Get the user for performed this action.
+        * Get the user who performed this action.
         *
         * @return User
         */
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..ad0f67e 100644 (file)
@@ -119,7 +119,7 @@ class ObjectCache {
         * @return BagOStuff
         * @throws InvalidArgumentException
         */
-       public static function newFromId( $id ) {
+       private static function newFromId( $id ) {
                global $wgObjectCaches;
 
                if ( !isset( $wgObjectCaches[$id] ) ) {
@@ -146,7 +146,7 @@ class ObjectCache {
         *
         * @return string
         */
-       public static function getDefaultKeyspace() {
+       private static function getDefaultKeyspace() {
                global $wgCachePrefix;
 
                $keyspace = $wgCachePrefix;
@@ -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
@@ -296,7 +297,7 @@ class ObjectCache {
         * @return WANObjectCache
         * @throws UnexpectedValueException
         */
-       public static function newWANCacheFromId( $id ) {
+       private static function newWANCacheFromId( $id ) {
                global $wgWANObjectCaches, $wgObjectCaches;
 
                if ( !isset( $wgWANObjectCaches[$id] ) ) {
index 6cc63bf..d9fe319 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 */
@@ -467,13 +467,13 @@ class SqlBagOStuff extends MediumSpecificBagOStuff {
                return $this->modifyMulti( [ $key => $value ], $exptime, $flags, self::$OP_SET );
        }
 
-       public function add( $key, $value, $exptime = 0, $flags = 0 ) {
+       protected function doAdd( $key, $value, $exptime = 0, $flags = 0 ) {
                return $this->modifyMulti( [ $key => $value ], $exptime, $flags, self::$OP_ADD );
        }
 
-       protected function cas( $casToken, $key, $value, $exptime = 0, $flags = 0 ) {
+       protected function doCas( $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 );
        }
 
        /**
diff --git a/includes/page/MovePageFactory.php b/includes/page/MovePageFactory.php
new file mode 100644 (file)
index 0000000..26da151
--- /dev/null
@@ -0,0 +1,91 @@
+<?php
+
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Page;
+
+use MediaWiki\Config\ServiceOptions;
+use MediaWiki\Permissions\PermissionManager;
+use MovePage;
+use NamespaceInfo;
+use RepoGroup;
+use Title;
+use WatchedItemStore;
+use Wikimedia\Rdbms\LoadBalancer;
+
+/**
+ * @since 1.34
+ */
+class MovePageFactory {
+       /** @var ServiceOptions */
+       private $options;
+
+       /** @var LoadBalancer */
+       private $loadBalancer;
+
+       /** @var NamespaceInfo */
+       private $nsInfo;
+
+       /** @var WatchedItemStore */
+       private $watchedItems;
+
+       /** @var PermissionManager */
+       private $permMgr;
+
+       /** @var RepoGroup */
+       private $repoGroup;
+
+       /**
+        * @todo Make this a const when we drop HHVM support (T192166)
+        * @var array
+        */
+       public static $constructorOptions = [
+               'CategoryCollation',
+               'ContentHandlerUseDB',
+       ];
+
+       public function __construct(
+               ServiceOptions $options,
+               LoadBalancer $loadBalancer,
+               NamespaceInfo $nsInfo,
+               WatchedItemStore $watchedItems,
+               PermissionManager $permMgr,
+               RepoGroup $repoGroup
+       ) {
+               $options->assertRequiredOptions( self::$constructorOptions );
+
+               $this->options = $options;
+               $this->loadBalancer = $loadBalancer;
+               $this->nsInfo = $nsInfo;
+               $this->watchedItems = $watchedItems;
+               $this->permMgr = $permMgr;
+               $this->repoGroup = $repoGroup;
+       }
+
+       /**
+        * @param Title $from
+        * @param Title $to
+        * @return MovePage
+        */
+       public function newMovePage( Title $from, Title $to ) : MovePage {
+               return new MovePage( $from, $to, $this->options, $this->loadBalancer, $this->nsInfo,
+                       $this->watchedItems, $this->permMgr, $this->repoGroup );
+       }
+}
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 e5bf94a..b643c3f 100644 (file)
@@ -351,7 +351,6 @@ class Parser {
                $nsInfo = null,
                $logger = null
        ) {
-               $services = MediaWikiServices::getInstance();
                if ( !$svcOptions || is_array( $svcOptions ) ) {
                        // Pre-1.34 calling convention is the first parameter is just ParserConf, the seventh is
                        // Config, and the eighth is LinkRendererFactory.
@@ -363,8 +362,8 @@ class Parser {
                                $this->mConf['preprocessorClass'] = self::getDefaultPreprocessorClass();
                        }
                        $this->svcOptions = new ServiceOptions( self::$constructorOptions,
-                               $this->mConf,
-                               func_num_args() > 6 ? func_get_arg( 6 ) : $services->getMainConfig()
+                               $this->mConf, func_num_args() > 6
+                                       ? func_get_arg( 6 ) : MediaWikiServices::getInstance()->getMainConfig()
                        );
                        $linkRendererFactory = func_num_args() > 7 ? func_get_arg( 7 ) : null;
                        $nsInfo = func_num_args() > 8 ? func_get_arg( 8 ) : null;
@@ -386,14 +385,16 @@ class Parser {
                        self::EXT_LINK_URL_CLASS . '*)\p{Zs}*([^\]\\x00-\\x08\\x0a-\\x1F\\x{FFFD}]*?)\]/Su';
 
                $this->magicWordFactory = $magicWordFactory ??
-                       $services->getMagicWordFactory();
+                       MediaWikiServices::getInstance()->getMagicWordFactory();
 
-               $this->contLang = $contLang ?? $services->getContentLanguage();
+               $this->contLang = $contLang ?? MediaWikiServices::getInstance()->getContentLanguage();
 
-               $this->factory = $factory ?? $services->getParserFactory();
-               $this->specialPageFactory = $spFactory ?? $services->getSpecialPageFactory();
-               $this->linkRendererFactory = $linkRendererFactory ?? $services->getLinkRendererFactory();
-               $this->nsInfo = $nsInfo ?? $services->getNamespaceInfo();
+               $this->factory = $factory ?? MediaWikiServices::getInstance()->getParserFactory();
+               $this->specialPageFactory = $spFactory ??
+                       MediaWikiServices::getInstance()->getSpecialPageFactory();
+               $this->linkRendererFactory = $linkRendererFactory ??
+                       MediaWikiServices::getInstance()->getLinkRendererFactory();
+               $this->nsInfo = $nsInfo ?? MediaWikiServices::getInstance()->getNamespaceInfo();
                $this->logger = $logger ?: new NullLogger();
        }
 
@@ -468,8 +469,7 @@ class Parser {
         */
        public function clearState() {
                $this->firstCallInit();
-               $this->mOutput = new ParserOutput;
-               $this->mOptions->registerWatcher( [ $this->mOutput, 'recordOption' ] );
+               $this->resetOutput();
                $this->mAutonumber = 0;
                $this->mIncludeCount = [];
                $this->mLinkHolders = new LinkHolderArray( $this );
@@ -512,6 +512,14 @@ class Parser {
                Hooks::run( 'ParserClearState', [ &$parser ] );
        }
 
+       /**
+        * Reset the ParserOutput
+        */
+       public function resetOutput() {
+               $this->mOutput = new ParserOutput;
+               $this->mOptions->registerWatcher( [ $this->mOutput, 'recordOption' ] );
+       }
+
        /**
         * Convert wikitext to HTML
         * Do not call this function recursively.
@@ -1177,6 +1185,15 @@ class Parser {
                return $this->mStripList;
        }
 
+       /**
+        * Get the StripState
+        *
+        * @return StripState
+        */
+       public function getStripState() {
+               return $this->mStripState;
+       }
+
        /**
         * Add an item to the strip state
         * Returns the unique tag which must be inserted into the stripped text
@@ -3742,21 +3759,22 @@ class Parser {
                // Defaults to Parser::statelessFetchTemplate()
                $templateCb = $this->mOptions->getTemplateCallback();
                $stuff = call_user_func( $templateCb, $title, $this );
-               // We use U+007F DELETE to distinguish strip markers from regular text.
+               $rev = $stuff['revision'] ?? null;
                $text = $stuff['text'];
                if ( is_string( $stuff['text'] ) ) {
+                       // We use U+007F DELETE to distinguish strip markers from regular text
                        $text = strtr( $text, "\x7f", "?" );
                }
                $finalTitle = $stuff['finalTitle'] ?? $title;
-               if ( isset( $stuff['deps'] ) ) {
-                       foreach ( $stuff['deps'] as $dep ) {
-                               $this->mOutput->addTemplate( $dep['title'], $dep['page_id'], $dep['rev_id'] );
-                               if ( $dep['title']->equals( $this->getTitle() ) ) {
-                                       // Self-transclusion; final result may change based on the new page version
-                                       $this->setOutputFlag( 'vary-revision', 'Self transclusion' );
-                               }
+               foreach ( ( $stuff['deps'] ?? [] ) as $dep ) {
+                       $this->mOutput->addTemplate( $dep['title'], $dep['page_id'], $dep['rev_id'] );
+                       if ( $dep['title']->equals( $this->getTitle() ) && $rev instanceof Revision ) {
+                               // Self-transclusion; final result may change based on the new page version
+                               $this->setOutputFlag( 'vary-revision-sha1', 'Self transclusion' );
+                               $this->getOutput()->setRevisionUsedSha1Base36( $rev->getSha1() );
                        }
                }
+
                return [ $text, $finalTitle ];
        }
 
@@ -3782,6 +3800,7 @@ class Parser {
                $text = $skip = false;
                $finalTitle = $title;
                $deps = [];
+               $rev = null;
 
                # Loop to fetch the article, with up to 1 redirect
                for ( $i = 0; $i < 2 && is_object( $title ); $i++ ) {
@@ -3817,13 +3836,15 @@ class Parser {
                        $deps[] = [
                                'title' => $title,
                                'page_id' => $title->getArticleID(),
-                               'rev_id' => $rev_id ];
+                               'rev_id' => $rev_id
+                       ];
                        if ( $rev && !$title->equals( $rev->getTitle() ) ) {
                                # We fetched a rev from a different title; register it too...
                                $deps[] = [
                                        'title' => $rev->getTitle(),
                                        'page_id' => $rev->getPage(),
-                                       'rev_id' => $rev_id ];
+                                       'rev_id' => $rev_id
+                               ];
                        }
 
                        if ( $rev ) {
@@ -3857,9 +3878,11 @@ class Parser {
                        $title = $content->getRedirectTarget();
                }
                return [
+                       'revision' => $rev,
                        'text' => $text,
                        'finalTitle' => $finalTitle,
-                       'deps' => $deps ];
+                       'deps' => $deps
+               ];
        }
 
        /**
@@ -4857,11 +4880,15 @@ class Parser {
         * @param ParserOptions $options
         * @param int $outputType
         * @param bool $clearState
+        * @param int|null $revId
         */
        public function startExternalParse( Title $title = null, ParserOptions $options,
-               $outputType, $clearState = true
+               $outputType, $clearState = true, $revId = null
        ) {
                $this->startParse( $title, $options, $outputType, $clearState );
+               if ( $revId !== null ) {
+                       $this->mRevisionId = $revId;
+               }
        }
 
        /**
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 9cae73c..3e65f6c 100644 (file)
@@ -146,7 +146,7 @@ class ExtensionRegistry {
         *  be loaded then).
         */
        public function loadFromQueue() {
-               global $wgVersion, $wgDevelopmentWarnings;
+               global $wgVersion, $wgDevelopmentWarnings, $wgObjectCaches;
                if ( !$this->queued ) {
                        return;
                }
@@ -169,10 +169,9 @@ class ExtensionRegistry {
                // We use a try/catch because we don't want to fail here
                // if $wgObjectCaches is not configured properly for APC setup
                try {
-                       // Don't use MediaWikiServices here to prevent instantiating it before extensions have
-                       // been loaded
+                       // Avoid MediaWikiServices to prevent instantiating it before extensions have loaded
                        $cacheId = ObjectCache::detectLocalServerCache();
-                       $cache = ObjectCache::newFromId( $cacheId );
+                       $cache = ObjectCache::newFromParams( $wgObjectCaches[$cacheId] );
                } catch ( InvalidArgumentException $e ) {
                        $cache = new EmptyBagOStuff();
                }
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..d308d50 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;
        }
@@ -1014,7 +1015,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * Keeps track of all used files and adds them to localFileRefs.
         *
         * @since 1.22
-        * @since 1.27 Added $context paramter.
+        * @since 1.27 Added $context parameter.
         * @throws Exception If less.php encounters a parse error
         * @param string $fileName File path of LESS source
         * @param ResourceLoaderContext $context Context in which to generate script
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 6a69cd4..a2f6a75 100644 (file)
@@ -61,10 +61,6 @@ class SearchEngineFactory {
                                return SearchMySQL::class;
                        case 'postgres':
                                return SearchPostgres::class;
-                       case 'mssql':
-                               return SearchMssql::class;
-                       case 'oracle':
-                               return SearchOracle::class;
                        default:
                                return SearchEngineDummy::class;
                }
index 2579942..8f0db44 100644 (file)
@@ -74,8 +74,8 @@ class SearchHighlighter {
                        3 => "/(\n\\{\\|)|(\n\\|\\})/" ]; // table
 
                // @todo FIXME: This should prolly be a hook or something
-               // instead of hardcoding a class name from the Cite extension
-               if ( class_exists( 'Cite' ) ) {
+               // instead of hardcoding the name of the Cite extension
+               if ( \ExtensionRegistry::getInstance()->isLoaded( 'Cite' ) ) {
                        $spat .= '|(<ref>)'; // references via cite extension
                        $endPatterns[4] = '/(<ref>)|(<\/ref>)/';
                }
diff --git a/includes/search/SearchMssql.php b/includes/search/SearchMssql.php
deleted file mode 100644 (file)
index 3c0675f..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-<?php
-/**
- * Mssql search engine
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Search
- */
-
-use MediaWiki\MediaWikiServices;
-use Wikimedia\Rdbms\IResultWrapper;
-
-/**
- * Search engine hook base class for Mssql (ConText).
- * @ingroup Search
- */
-class SearchMssql extends SearchDatabase {
-       /**
-        * Perform a full text search query and return a result set.
-        *
-        * @param string $term Raw search term
-        * @return SqlSearchResultSet|null
-        */
-       protected function doSearchTextInDB( $term ) {
-               $dbr = $this->lb->getConnectionRef( DB_REPLICA );
-               $resultSet = $dbr->query( $this->getQuery( $this->filter( $term ), true ) );
-
-               return new SqlSearchResultSet( $resultSet, $this->searchTerms );
-       }
-
-       /**
-        * Perform a title-only search query and return a result set.
-        *
-        * @param string $term Raw search term
-        * @return SqlSearchResultSet|null
-        */
-       protected function doSearchTitleInDB( $term ) {
-               $dbr = $this->lb->getConnectionRef( DB_REPLICA );
-               $resultSet = $dbr->query( $this->getQuery( $this->filter( $term ), false ) );
-
-               return new SqlSearchResultSet( $resultSet, $this->searchTerms );
-       }
-
-       /**
-        * Return a partial WHERE clause to limit the search to the given namespaces
-        *
-        * @return string
-        */
-       private function queryNamespaces() {
-               $namespaces = implode( ',', $this->namespaces );
-               if ( $namespaces == '' ) {
-                       $namespaces = '0';
-               }
-               return 'AND page_namespace IN (' . $namespaces . ')';
-       }
-
-       /**
-        * Return a LIMIT clause to limit results on the query.
-        *
-        * @param string $sql
-        *
-        * @return string
-        */
-       private function queryLimit( $sql ) {
-               $dbr = $this->lb->getConnectionRef( DB_REPLICA );
-
-               return $dbr->limitResult( $sql, $this->limit, $this->offset );
-       }
-
-       /**
-        * Does not do anything for generic search engine
-        * subclasses may define this though
-        *
-        * @param string $filteredTerm
-        * @param bool $fulltext
-        * @return string
-        */
-       function queryRanking( $filteredTerm, $fulltext ) {
-               return ' ORDER BY ftindex.[RANK] DESC'; // return ' ORDER BY score(1)';
-       }
-
-       /**
-        * Construct the full SQL query to do the search.
-        * The guts shoulds be constructed in queryMain()
-        *
-        * @param string $filteredTerm
-        * @param bool $fulltext
-        * @return string
-        */
-       private function getQuery( $filteredTerm, $fulltext ) {
-               return $this->queryLimit( $this->queryMain( $filteredTerm, $fulltext ) . ' ' .
-                       $this->queryNamespaces() . ' ' .
-                       $this->queryRanking( $filteredTerm, $fulltext ) . ' ' );
-       }
-
-       /**
-        * Picks which field to index on, depending on what type of query.
-        *
-        * @param bool $fulltext
-        * @return string
-        */
-       function getIndexField( $fulltext ) {
-               return $fulltext ? 'si_text' : 'si_title';
-       }
-
-       /**
-        * Get the base part of the search query.
-        *
-        * @param string $filteredTerm
-        * @param bool $fulltext
-        * @return string
-        */
-       private function queryMain( $filteredTerm, $fulltext ) {
-               $match = $this->parseQuery( $filteredTerm, $fulltext );
-               $dbr = $this->lb->getMaintenanceConnectionRef( DB_REPLICA );
-               $page = $dbr->tableName( 'page' );
-               $searchindex = $dbr->tableName( 'searchindex' );
-
-               return 'SELECT page_id, page_namespace, page_title, ftindex.[RANK]' .
-                       "FROM $page,FREETEXTTABLE($searchindex , $match, LANGUAGE 'English') as ftindex " .
-                       'WHERE page_id=ftindex.[KEY] ';
-       }
-
-       /** @todo document
-        * @param string $filteredText
-        * @param bool $fulltext
-        * @return string
-        */
-       private function parseQuery( $filteredText, $fulltext ) {
-               $lc = $this->legalSearchChars( self::CHARS_NO_SYNTAX );
-               $this->searchTerms = [];
-
-               # @todo FIXME: This doesn't handle parenthetical expressions.
-               $m = [];
-               $q = [];
-
-               if ( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
-                       $filteredText, $m, PREG_SET_ORDER ) ) {
-                       foreach ( $m as $terms ) {
-                               $q[] = $terms[1] . MediaWikiServices::getInstance()->getContentLanguage()->
-                                       normalizeForSearch( $terms[2] );
-
-                               if ( !empty( $terms[3] ) ) {
-                                       $regexp = preg_quote( $terms[3], '/' );
-                                       if ( $terms[4] ) {
-                                               $regexp .= "[0-9A-Za-z_]+";
-                                       }
-                               } else {
-                                       $regexp = preg_quote( str_replace( '"', '', $terms[2] ), '/' );
-                               }
-                               $this->searchTerms[] = $regexp;
-                       }
-               }
-
-               $dbr = $this->lb->getConnectionRef( DB_REPLICA );
-               $searchon = $dbr->addQuotes( implode( ',', $q ) );
-               $field = $this->getIndexField( $fulltext );
-
-               return "$field, $searchon";
-       }
-
-       /**
-        * Create or update the search index record for the given page.
-        * Title and text should be pre-processed.
-        *
-        * @param int $id
-        * @param string $title
-        * @param string $text
-        * @return bool|IResultWrapper
-        */
-       function update( $id, $title, $text ) {
-               // We store the column data as UTF-8 byte order marked binary stream
-               // because we are invoking the plain text IFilter on it so that, and we want it
-               // to properly decode the stream as UTF-8.  SQL doesn't support UTF8 as a data type
-               // but the indexer will correctly handle it by this method.  Since all we are doing
-               // is passing this data to the indexer and never retrieving it via PHP, this will save space
-               $dbr = $this->lb->getMaintenanceConnectionRef( DB_MASTER );
-               $table = $dbr->tableName( 'searchindex' );
-               $utf8bom = '0xEFBBBF';
-               $si_title = $utf8bom . bin2hex( $title );
-               $si_text = $utf8bom . bin2hex( $text );
-               $sql = "DELETE FROM $table WHERE si_page = $id;";
-               $sql .= "INSERT INTO $table (si_page, si_title, si_text) VALUES ($id, $si_title, $si_text)";
-               return $dbr->query( $sql, 'SearchMssql::update' );
-       }
-
-       /**
-        * Update a search index record's title only.
-        * Title should be pre-processed.
-        *
-        * @param int $id
-        * @param string $title
-        * @return bool|IResultWrapper
-        */
-       function updateTitle( $id, $title ) {
-               $dbr = $this->lb->getMaintenanceConnectionRef( DB_MASTER );
-               $table = $dbr->tableName( 'searchindex' );
-
-               // see update for why we are using the utf8bom
-               $utf8bom = '0xEFBBBF';
-               $si_title = $utf8bom . bin2hex( $title );
-               $sql = "DELETE FROM $table WHERE si_page = $id;";
-               $sql .= "INSERT INTO $table (si_page, si_title, si_text) VALUES ($id, $si_title, 0x00)";
-               return $dbr->query( $sql, 'SearchMssql::updateTitle' );
-       }
-}
diff --git a/includes/search/SearchOracle.php b/includes/search/SearchOracle.php
deleted file mode 100644 (file)
index d0869bc..0000000
+++ /dev/null
@@ -1,286 +0,0 @@
-<?php
-/**
- * Oracle search engine
- *
- * Copyright © 2004 Brion Vibber <brion@pobox.com>
- * https://www.mediawiki.org/
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup Search
- */
-
-use MediaWiki\MediaWikiServices;
-
-/**
- * Search engine hook base class for Oracle (ConText).
- * @ingroup Search
- */
-class SearchOracle extends SearchDatabase {
-       private $reservedWords = [
-               'ABOUT' => 1,
-               'ACCUM' => 1,
-               'AND' => 1,
-               'BT' => 1,
-               'BTG' => 1,
-               'BTI' => 1,
-               'BTP' => 1,
-               'FUZZY' => 1,
-               'HASPATH' => 1,
-               'INPATH' => 1,
-               'MINUS' => 1,
-               'NEAR' => 1,
-               'NOT' => 1,
-               'NT' => 1,
-               'NTG' => 1,
-               'NTI' => 1,
-               'NTP' => 1,
-               'OR' => 1,
-               'PT' => 1,
-               'RT' => 1,
-               'SQE' => 1,
-               'SYN' => 1,
-               'TR' => 1,
-               'TRSYN' => 1,
-               'TT' => 1,
-               'WITHIN' => 1,
-       ];
-
-       /**
-        * Perform a full text search query and return a result set.
-        *
-        * @param string $term Raw search term
-        * @return SqlSearchResultSet|null
-        */
-       protected function doSearchTextInDB( $term ) {
-               if ( $term == '' ) {
-                       return null;
-               }
-
-               $dbr = $this->lb->getConnectionRef( DB_REPLICA );
-               $resultSet = $dbr->query( $this->getQuery( $this->filter( $term ), true ) );
-               return new SqlSearchResultSet( $resultSet, $this->searchTerms );
-       }
-
-       /**
-        * Perform a title-only search query and return a result set.
-        *
-        * @param string $term Raw search term
-        * @return SqlSearchResultSet|null
-        */
-       protected function doSearchTitleInDB( $term ) {
-               if ( $term == '' ) {
-                       return null;
-               }
-
-               $dbr = $this->lb->getConnectionRef( DB_REPLICA );
-               $resultSet = $dbr->query( $this->getQuery( $this->filter( $term ), false ) );
-               return new SqlSearchResultSet( $resultSet, $this->searchTerms );
-       }
-
-       /**
-        * Return a partial WHERE clause to limit the search to the given namespaces
-        * @return string
-        */
-       private function queryNamespaces() {
-               if ( is_null( $this->namespaces ) ) {
-                       return '';
-               }
-               if ( $this->namespaces === [] ) {
-                       $namespaces = '0';
-               } else {
-                       $dbr = $this->lb->getConnectionRef( DB_REPLICA );
-                       $namespaces = $dbr->makeList( $this->namespaces );
-               }
-               return 'AND page_namespace IN (' . $namespaces . ')';
-       }
-
-       /**
-        * Return a LIMIT clause to limit results on the query.
-        *
-        * @param string $sql
-        *
-        * @return string
-        */
-       private function queryLimit( $sql ) {
-               $dbr = $this->lb->getConnectionRef( DB_REPLICA );
-
-               return $dbr->limitResult( $sql, $this->limit, $this->offset );
-       }
-
-       /**
-        * Does not do anything for generic search engine
-        * subclasses may define this though
-        *
-        * @param string $filteredTerm
-        * @param bool $fulltext
-        * @return string
-        */
-       function queryRanking( $filteredTerm, $fulltext ) {
-               return ' ORDER BY score(1)';
-       }
-
-       /**
-        * Construct the full SQL query to do the search.
-        * The guts shoulds be constructed in queryMain()
-        * @param string $filteredTerm
-        * @param bool $fulltext
-        * @return string
-        */
-       private function getQuery( $filteredTerm, $fulltext ) {
-               return $this->queryLimit( $this->queryMain( $filteredTerm, $fulltext ) . ' ' .
-                       $this->queryNamespaces() . ' ' .
-                       $this->queryRanking( $filteredTerm, $fulltext ) . ' ' );
-       }
-
-       /**
-        * Picks which field to index on, depending on what type of query.
-        * @param bool $fulltext
-        * @return string
-        */
-       private function getIndexField( $fulltext ) {
-               return $fulltext ? 'si_text' : 'si_title';
-       }
-
-       /**
-        * Get the base part of the search query.
-        *
-        * @param string $filteredTerm
-        * @param bool $fulltext
-        * @return string
-        */
-       function queryMain( $filteredTerm, $fulltext ) {
-               $match = $this->parseQuery( $filteredTerm, $fulltext );
-
-               $dbr = $this->lb->getMaintenanceConnectionRef( DB_REPLICA );
-               $page = $dbr->tableName( 'page' );
-               $searchindex = $dbr->tableName( 'searchindex' );
-
-               return 'SELECT page_id, page_namespace, page_title ' .
-                       "FROM $page,$searchindex " .
-                       'WHERE page_id=si_page AND ' . $match;
-       }
-
-       /**
-        * Parse a user input search string, and return an SQL fragment to be used
-        * as part of a WHERE clause
-        * @param string $filteredText
-        * @param bool $fulltext
-        * @return string
-        */
-       private function parseQuery( $filteredText, $fulltext ) {
-               $lc = $this->legalSearchChars( self::CHARS_NO_SYNTAX );
-               $this->searchTerms = [];
-
-               # @todo FIXME: This doesn't handle parenthetical expressions.
-               $m = [];
-               $searchon = '';
-               if ( preg_match_all( '/([-+<>~]?)(([' . $lc . ']+)(\*?)|"[^"]*")/',
-                               $filteredText, $m, PREG_SET_ORDER ) ) {
-                       foreach ( $m as $terms ) {
-                               // Search terms in all variant forms, only
-                               // apply on wiki with LanguageConverter
-                               $temp_terms = MediaWikiServices::getInstance()->getContentLanguage()->
-                                       autoConvertToAllVariants( $terms[2] );
-                               if ( is_array( $temp_terms ) ) {
-                                       $temp_terms = array_unique( array_values( $temp_terms ) );
-                                       foreach ( $temp_terms as $t ) {
-                                               $searchon .= ( $terms[1] == '-' ? ' ~' : ' & ' ) . $this->escapeTerm( $t );
-                                       }
-                               } else {
-                                       $searchon .= ( $terms[1] == '-' ? ' ~' : ' & ' ) . $this->escapeTerm( $terms[2] );
-                               }
-                               if ( !empty( $terms[3] ) ) {
-                                       $regexp = preg_quote( $terms[3], '/' );
-                                       if ( $terms[4] ) {
-                                               $regexp .= "[0-9A-Za-z_]+";
-                                       }
-                               } else {
-                                       $regexp = preg_quote( str_replace( '"', '', $terms[2] ), '/' );
-                               }
-                               $this->searchTerms[] = $regexp;
-                       }
-               }
-
-               $dbr = $this->lb->getConnectionRef( DB_REPLICA );
-               $searchon = $dbr->addQuotes( ltrim( $searchon, ' &' ) );
-               $field = $this->getIndexField( $fulltext );
-
-               return " CONTAINS($field, $searchon, 1) > 0 ";
-       }
-
-       private function escapeTerm( $t ) {
-               $t = MediaWikiServices::getInstance()->getContentLanguage()->normalizeForSearch( $t );
-               $t = isset( $this->reservedWords[strtoupper( $t )] ) ? '{' . $t . '}' : $t;
-               $t = preg_replace( '/^"(.*)"$/', '($1)', $t );
-               $t = preg_replace( '/([-&|])/', '\\\\$1', $t );
-               return $t;
-       }
-
-       /**
-        * Create or update the search index record for the given page.
-        * Title and text should be pre-processed.
-        *
-        * @param int $id
-        * @param string $title
-        * @param string $text
-        */
-       function update( $id, $title, $text ) {
-               $dbw = $this->lb->getMaintenanceConnectionRef( DB_MASTER );
-               $dbw->replace( 'searchindex',
-                       [ 'si_page' ],
-                       [
-                               'si_page' => $id,
-                               'si_title' => $title,
-                               'si_text' => $text
-                       ], 'SearchOracle::update' );
-
-               // Sync the index
-               // We need to specify the DB name (i.e. user/schema) here so that
-               // it can work from the installer, where
-               //     ALTER SESSION SET CURRENT_SCHEMA = ...
-               // was used.
-               $dbw->query( "CALL ctx_ddl.sync_index(" .
-                       $dbw->addQuotes( $dbw->getDBname() . '.' . $dbw->tableName( 'si_text_idx', 'raw' ) ) . ")" );
-               $dbw->query( "CALL ctx_ddl.sync_index(" .
-                       $dbw->addQuotes( $dbw->getDBname() . '.' . $dbw->tableName( 'si_title_idx', 'raw' ) ) . ")" );
-       }
-
-       /**
-        * Update a search index record's title only.
-        * Title should be pre-processed.
-        *
-        * @param int $id
-        * @param string $title
-        */
-       function updateTitle( $id, $title ) {
-               $dbw = $this->lb->getConnectionRef( DB_MASTER );
-               $dbw->update( 'searchindex',
-                       [ 'si_title' => $title ],
-                       [ 'si_page' => $id ],
-                       'SearchOracle::updateTitle',
-                       [] );
-       }
-
-       public function legalSearchChars( $type = self::CHARS_ALL ) {
-               $searchChars = parent::legalSearchChars( $type );
-               if ( $type === self::CHARS_ALL ) {
-                       $searchChars = "\"" . $searchChars;
-               }
-               return $searchChars;
-       }
-}
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 cd79259..cad69a5 100644 (file)
@@ -466,6 +466,10 @@ abstract class BaseTemplate extends QuickTemplate {
         * @return string
         */
        function makeListItem( $key, $item, $options = [] ) {
+               // In case this is still set from SkinTemplate, we don't want it to appear in
+               // the HTML output (normally removed in SkinTemplate::buildContentActionUrls())
+               unset( $item['redundant'] );
+
                if ( isset( $item['links'] ) ) {
                        $links = [];
                        foreach ( $item['links'] as $linkKey => $link ) {
index 6bcf1c3..c031c4c 100644 (file)
@@ -131,7 +131,7 @@ abstract class QuickTemplate {
         * @param string $msgKey
         */
        function msgWiki( $msgKey ) {
-               // TODO: Add wfDeprecated( __METHOD__, '1.33' ) after 1.33 got released
+               wfDeprecated( __METHOD__, '1.33' );
                global $wgOut;
 
                $text = wfMessage( $msgKey )->plain();
index 5fd9f1f..af7ec29 100644 (file)
@@ -62,12 +62,10 @@ class SkinTemplate extends Skin {
         * roughly equivalent to PHPTAL 0.7.
         *
         * @param string $classname
-        * @param bool|string $repository Subdirectory where we keep template files
-        * @param bool|string $cache_dir
         * @return QuickTemplate
         * @private
         */
-       function setupTemplate( $classname, $repository = false, $cache_dir = false ) {
+       function setupTemplate( $classname ) {
                return new $classname( $this->getConfig() );
        }
 
@@ -179,7 +177,7 @@ class SkinTemplate extends Skin {
                $user = $this->getUser();
                $title = $this->getTitle();
 
-               $tpl = $this->setupTemplate( $this->template, 'skins' );
+               $tpl = $this->setupTemplate( $this->template );
 
                $this->thispage = $title->getPrefixedDBkey();
                $this->titletxt = $title->getPrefixedText();
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..2fa8fab 100644 (file)
@@ -1503,13 +1503,20 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                if ( $opts[ 'namespace' ] !== '' ) {
                        $namespaces = explode( ';', $opts[ 'namespace' ] );
 
+                       $namespaces = $this->expandSymbolicNamespaceFilters( $namespaces );
+
                        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 ) );
                        }
@@ -1943,4 +1950,21 @@ abstract class ChangesListSpecialPage extends SpecialPage {
        public function getDefaultDays() {
                return floatval( $this->getUser()->getOption( static::$daysPreferenceName ) );
        }
+
+       private function expandSymbolicNamespaceFilters( array $namespaces ) {
+               $nsInfo = MediaWikiServices::getInstance()->getNamespaceInfo();
+               $symbolicFilters = [
+                       'all-contents' => $nsInfo->getSubjectNamespaces(),
+                       'all-discussions' => $nsInfo->getTalkNamespaces(),
+               ];
+               $additionalNamespaces = [];
+               foreach ( $symbolicFilters as $name => $values ) {
+                       if ( in_array( $name, $namespaces ) ) {
+                               $additionalNamespaces = array_merge( $additionalNamespaces, $values );
+                       }
+               }
+               $namespaces = array_diff( $namespaces, array_keys( $symbolicFilters ) );
+               $namespaces = array_merge( $namespaces, $additionalNamespaces );
+               return array_unique( $namespaces );
+       }
 }
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 034e569..9e49684 100644 (file)
@@ -38,6 +38,7 @@ class SpecialApiSandbox extends SpecialPage {
                $out->addJsConfigVars( 'apihighlimits', $this->getUser()->isAllowed( 'apihighlimits' ) );
                $out->addModuleStyles( [
                        'mediawiki.special',
+                       'mediawiki.hlist',
                ] );
                $out->addModules( [
                        'mediawiki.special.apisandbox',
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 9f7381c..b3d2358 100644 (file)
@@ -45,6 +45,7 @@ class SpecialBlockList extends SpecialPage {
        public function execute( $par ) {
                $this->setHeaders();
                $this->outputHeader();
+               $this->addHelpLink( 'Help:Blocking_users' );
                $out = $this->getOutput();
                $out->setPageTitle( $this->msg( 'ipblocklist' ) );
                $out->addModuleStyles( [ 'mediawiki.special' ] );
index 2d62d8f..7f075ed 100644 (file)
@@ -69,6 +69,7 @@ class SpecialBotPasswords extends FormSpecialPage {
        function execute( $par ) {
                $this->getOutput()->disallowUserJs();
                $this->requireLogin();
+               $this->addHelpLink( 'Manual:Bot_passwords' );
 
                $par = trim( $par );
                if ( strlen( $par ) === 0 ) {
index 84d1f7c..77c7b86 100644 (file)
@@ -37,6 +37,7 @@ class SpecialCategories extends SpecialPage {
        public function execute( $par ) {
                $this->setHeaders();
                $this->outputHeader();
+               $this->addHelpLink( 'Help:Categories' );
                $this->getOutput()->allowClickjacking();
 
                $from = $this->getRequest()->getText( 'from', $par );
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 99e6dde..7f32719 100644 (file)
@@ -155,6 +155,13 @@ class EmailConfirmation extends UnlistedSpecialPage {
                        return;
                }
 
+               // rate limit email confirmations
+               if ( $user->pingLimiter( 'confirmemail' ) ) {
+                       $this->getOutput()->addWikiMsg( 'actionthrottledtext' );
+
+                       return;
+               }
+
                $user->confirmEmail();
                $user->saveSettings();
                $message = $this->getUser()->isLoggedIn() ? 'confirmemail_loggedin' : 'confirmemail_success';
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 );
                        }
index 8c137aa..50a909f 100644 (file)
@@ -111,7 +111,7 @@ class SpecialJavaScriptTest extends SpecialPage {
                $qunitConfig = 'QUnit.config.autostart = false;'
                        . 'if (window.__karma__) {'
                        // karma-qunit's use of autostart=false and QUnit.start conflicts with ours.
-                       // Hack around this by replacing 'karma.loaded' with a no-op and perfom its duty of calling
+                       // Hack around this by replacing 'karma.loaded' with a no-op and perform its duty of calling
                        // `__karma__.start()` ourselves. See <https://github.com/karma-runner/karma-qunit/issues/27>.
                        . 'window.__karma__.loaded = function () {};'
                        . '}';
index 4c847e9..c7430cc 100644 (file)
@@ -100,6 +100,11 @@ class ListDuplicatedFilesPage extends QueryPage {
                return $msg->parse();
        }
 
+       public function execute( $par ) {
+               $this->addHelpLink( 'Help:Managing_files' );
+               parent::execute( $par );
+       }
+
        protected function getGroupName() {
                return 'media';
        }
index e6e1048..94f4753 100644 (file)
@@ -29,6 +29,7 @@ class SpecialListFiles extends IncludableSpecialPage {
        public function execute( $par ) {
                $this->setHeaders();
                $this->outputHeader();
+               $this->addHelpLink( 'Help:Managing_files' );
 
                if ( $this->including() ) {
                        $userName = $par;
index e8e5ea0..d6ace1d 100644 (file)
@@ -163,6 +163,7 @@ class MIMEsearchPage extends QueryPage {
        }
 
        public function execute( $par ) {
+               $this->addHelpLink( 'Help:Managing_files' );
                $this->mime = $par ?: $this->getRequest()->getText( 'mime' );
                $this->mime = trim( $this->mime );
                list( $this->major, $this->minor ) = File::splitMime( $this->mime );
index 161b41a..da34d81 100644 (file)
@@ -419,9 +419,7 @@ class MovePageForm extends UnlistedSpecialPage {
                                        'name' => 'wpMovesubpages',
                                        'id' => 'wpMovesubpages',
                                        'value' => '1',
-                                       # Don't check the box if we only have talk subpages to
-                                       # move and we aren't moving the talk page.
-                                       'selected' => $this->moveSubpages && ( $this->oldTitle->hasSubpages() || $this->moveTalk ),
+                                       'selected' => true, // T222953 Always check the box
                                ] ),
                                [
                                        'label' => new OOUI\HtmlSnippet(
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 c1409ff..50867dd 100644 (file)
@@ -83,6 +83,11 @@ class SpecialRedirect extends FormSpecialPage {
                        // Message: redirect-not-exists
                        return Status::newFatal( $this->getMessagePrefix() . '-not-exists' );
                }
+               if ( $user->isHidden() && !MediaWikiServices::getInstance()->getPermissionManager()
+                       ->userHasRight( $this->getUser(), 'hideuser' )
+               ) {
+                       throw new PermissionsError( null, [ 'badaccess-group0' ] );
+               }
                $userpage = Title::makeTitle( NS_USER, $username );
 
                return Status::newGood( $userpage->getFullURL( '', false, PROTO_CURRENT ) );
index 1afbb5e..e8eb004 100644 (file)
@@ -39,6 +39,7 @@ class SpecialTrackingCategories extends SpecialPage {
        function execute( $par ) {
                $this->setHeaders();
                $this->outputHeader();
+               $this->addHelpLink( 'Help:Categories' );
                $this->getOutput()->allowClickjacking();
                $this->getOutput()->addModuleStyles( 'jquery.tablesorter.styles' );
                $this->getOutput()->addModules( 'jquery.tablesorter' );
index 2cd74b7..3c5de64 100644 (file)
@@ -102,6 +102,7 @@ class UnwatchedpagesPage extends QueryPage {
        public function execute( $par ) {
                parent::execute( $par );
                $this->getOutput()->addModules( 'mediawiki.special.unwatchedPages' );
+               $this->addHelpLink( 'Help:Watchlist' );
        }
 
        /**
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 368c6d1..7703e20 100644 (file)
@@ -155,7 +155,7 @@ class ActiveUsersPager extends UsersPager {
                                'user_id' => 'user_id',
                                'recentedits' => 'COUNT(rc_id)'
                        ],
-                       'options' => [ 'GROUP BY' => [ 'qcc_title' ] ],
+                       'options' => [ 'GROUP BY' => [ 'qcc_title', 'user_id' ] ],
                        'conds' => $conds,
                        'join_conds' => $jconds,
                ];
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 5021a1c..3bd66d4 100644 (file)
@@ -62,7 +62,8 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
        protected $nsInfo;
 
        /**
-        * @param Language $language The language object to use for localizing namespace names.
+        * @param Language $language The language object to use for localizing namespace names,
+        *   capitalization, etc.
         * @param GenderCache $genderCache The gender cache for generating gendered namespace names
         * @param string[]|string $localInterwikis
         * @param InterwikiLookup|null $interwikiLookup
@@ -185,6 +186,40 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
                );
        }
 
+       /**
+        * Given a namespace and title, return a TitleValue if valid, or null if invalid.
+        *
+        * @param int $namespace
+        * @param string $text
+        * @param string $fragment
+        * @param string $interwiki
+        *
+        * @return TitleValue|null
+        */
+       public function makeTitleValueSafe( $namespace, $text, $fragment = '', $interwiki = '' ) {
+               if ( !$this->nsInfo->exists( $namespace ) ) {
+                       return null;
+               }
+
+               $canonicalNs = $this->nsInfo->getCanonicalName( $namespace );
+               $fullText = $canonicalNs == '' ? $text : "$canonicalNs:$text";
+               if ( strval( $interwiki ) != '' ) {
+                       $fullText = "$interwiki:$fullText";
+               }
+               if ( strval( $fragment ) != '' ) {
+                       $fullText .= '#' . $fragment;
+               }
+
+               try {
+                       $parts = $this->splitTitleString( $fullText );
+               } catch ( MalformedTitleException $e ) {
+                       return null;
+               }
+
+               return new TitleValue(
+                       $parts['namespace'], $parts['dbkey'], $parts['fragment'], $parts['interwiki'] );
+       }
+
        /**
         * @see TitleFormatter::getText()
         *
@@ -433,8 +468,8 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
                # and [[Foo]] point to the same place.  Don't force it for interwikis, since the
                # other site might be case-sensitive.
                $parts['user_case_dbkey'] = $dbkey;
-               if ( $parts['interwiki'] === '' ) {
-                       $dbkey = Title::capitalize( $dbkey, $parts['namespace'] );
+               if ( $parts['interwiki'] === '' && $this->nsInfo->isCapitalized( $parts['namespace'] ) ) {
+                       $dbkey = $this->language->ucfirst( $dbkey );
                }
 
                # Can't make a link to a namespace alone... "empty" local links can only be
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 8569735..0ce5ece 100644 (file)
@@ -43,4 +43,16 @@ interface TitleParser {
         * @return TitleValue
         */
        public function parseTitle( $text, $defaultNamespace = NS_MAIN );
+
+       /**
+        * Given a namespace and title, return a TitleValue if valid, or null if invalid.
+        *
+        * @param int $namespace
+        * @param string $text
+        * @param string $fragment
+        * @param string $interwiki
+        *
+        * @return TitleValue|null
+        */
+       public function makeTitleValueSafe( $namespace, $text, $fragment = '', $interwiki = '' );
 }
index 722e5ef..7abe21b 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,17 @@ 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 !== '' ||
+                               ( $namespace === NS_MAIN && ( $fragment !== '' || $interwiki !== '' ) ),
+                       '$title',
+                       'should not be empty unless namespace is main and fragment or interwiki 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 3089341..60f54e2 100644 (file)
        "createacct-another-continue-submit": "مواصلة إنشاء الحساب",
        "createacct-benefit-heading": "{{SITENAME}} موقع يساهم فيه أشخاص مثلك.",
        "createacct-benefit-body1": "{{PLURAL:$1|تحريرا|تحريرات}}",
-       "createacct-benefit-body2": "{{PLURAL:$1|صفحة}}",
+       "createacct-benefit-body2": "{{PLURAL:$1|مقالة}}",
        "createacct-benefit-body3": "آخر {{PLURAL:$1|مساهم|مساهمين}}",
        "badretype": "كلمات السر التي أدخلتها لا تتطابق.",
        "usernameinprogress": "إن عملية إنشاء حساب لاسم المستخدم هذا جارية بالفعل. برجاء الانتظار.",
        "changecontentmodel": "تغيير نموذج المحتوى لصفحة",
        "changecontentmodel-legend": "غير نموذج المحتوى",
        "changecontentmodel-title-label": "عنوان الصفحة",
-       "changecontentmodel-current-label": "نموذج المحتوى الحالي",
+       "changecontentmodel-current-label": "نموذج المحتوى الحالي:",
        "changecontentmodel-model-label": "نموذج محتوى جديد",
        "changecontentmodel-reason-label": "السبب:",
        "changecontentmodel-submit": "تغيير",
        "move-subpages": "انقل الصفحات الفرعية (حتى $1)",
        "move-talk-subpages": "انقل الصفحات الفرعية لصفحة النقاش (حتى $1)",
        "movepage-page-exists": "الصفحة $1 موجودة بالفعل ولا يمكن الكتابة عليها تلقائياً.",
+       "movepage-source-doesnt-exist": "الصفحة $1 غير موجودة ولا يمكن نقلها.",
        "movepage-page-moved": "نقلت صفحة $1 إلى $2 بنجاح.",
        "movepage-page-unmoved": "لم يمكن نقل صفحة $1 إلى $2.",
        "movepage-max-pages": "تم نقل الحد الأقصى وهو {{PLURAL:$1|صفحة واحدة|صفحتان|$1 صفحات|$1 صفحة}} ولن يتم نقل المزيد تلقائيا.",
        "delete_and_move_reason": "حُذِفت لإفساح مجال لنقل \"[[$1]]\"",
        "selfmove": "العنوان هو نفسه؛\nلا يمكن نقل صفحة على نفسها.",
        "immobile-source-namespace": "غير قادر على نقل الصفحات في النطاق \"$1\"",
+       "immobile-source-namespace-iw": "لا يمكن نقل الصفحات على الويكيات الأخرى من هذه الويكي.",
        "immobile-target-namespace": "غير قادر على نقل الصفحات إلى النطاق \"$1\"",
        "immobile-target-namespace-iw": "وصلة الإنترويكي ليست هدفاً صالحاً لنقل صفحة.",
        "immobile-source-page": "هذه الصفحة غير قابلة للنقل.",
        "immobile-target-page": "غير قادر على النقل إلى العنوان الوجهة هذا.",
+       "movepage-invalid-target-title": "الاسم المطلوب غير صحيح.",
        "bad-target-model": "الوجهة المطلوبة تستخدم نموذج محتوى مختلف. لا يمكن تحويل من $1 إلى $2.",
        "imagenocrossnamespace": "لا يمكن نقل الملف إلى نطاق غير نطاق الملفات",
        "nonfile-cannot-move-to-file": "لا يمكن نقل غير الملفات إلى نطاق الملفات",
        "permanentlink": "وصلة دائمة",
        "permanentlink-revid": "معرف المراجعة",
        "permanentlink-submit": "الذهاب إلى المراجعة",
+       "newsection": "قسم جديد",
+       "newsection-page": "الصفحات المستهدفة",
+       "newsection-submit": "انتقل إلى صفحة",
        "dberr-problems": "عذرا! هذا الموقع يعاني من صعوبات تقنية.",
        "dberr-again": "جرب الانتظار بضع دقائق وإعادة التحميل.",
        "dberr-info": "(لا يمكن الوصول إلى قاعدة البيانات: $1)",
index c4273e9..75f17de 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आप कय कवनो प्रश्न में कृपया ई कुल जानकारी शामिल होएक चाही।",
+       "systemblockedtext": "आपका यूज़र नेम या आईपी का पता स्वचालित रूप से MediaWiki द्वारा अवरुद्ध कर दिया गया है।\nकारण दिया है:\n:<em>$2</em>\n\n* ब्लॉक का प्रारंभ: $8\n* ब्लॉक की समय सीमा समाप्त: $6\n* इरादा : $7\n\nआपका वर्तमान आईपी पता $3 है।\nआप किसी भी प्रश्न में सभी जानकारी भी शामिल करें।",
        "blockednoreason": "कवनो कारण नाइ दिहा है",
+       "blockedtext-composite": "आपका यूज़र नेम या आईपी का पता स्वचालित रूप से MediaWiki द्वारा अवरुद्ध कर दिया गया है।\nकारण दिया है:\n:<em>$2</em>\n\n* ब्लॉक का प्रारंभ: $8\n* ब्लॉक की समय सीमा समाप्त: $6\n* $5\n\nआपका वर्तमान आईपी पता $3 है।\nआप किसी भी प्रश्न में सभी जानकारी भी शामिल करें।",
+       "blockedtext-composite-ids": "Relevant block IDs: $1 (your IP address may also be blacklisted)",
+       "blockedtext-composite-no-ids": "Your IP address appears in multiple blacklists",
+       "blockedtext-composite-reason": "There are multiple blocks against your account and/or IP address",
        "whitelistedittext": "पन्ना संपादन करेक लिये आप कय $1 करेक परि।",
        "confirmedittext": "संपादन करय से पहिले आपन ई-मेल प्रमाणित करब आवश्यक है।\nकृपया आपन [[Special:Preferences|सदस्य वरीयता]] में जाईकय आपन ई-मेल ठाँव दिहा जाय अव ओका प्रमाणित करा जाय।",
        "nosuchsectiontitle": "अईसन कवनो अनुभाग शीर्षक नाई है",
        "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}}\" बटन कय प्रयोग करा जाय।",
+       "userjsonyoucanpreview": "<strong>टिप:</strong> संजोने से पहले अपनी नई JSON को जाँचने के लिये \"{{int:showpreview}}\" बटन का प्रयोग करें।",
        "userjsyoucanpreview": "'''टिप''': सहेजय से पहिले आपन नँवा जावास्क्रिप्ट जाँचय खर्तिन \"{{int:showpreview}}\" बटन कय प्रयोग करा जाय।",
        "usercsspreview": "'''ध्यान दिहा जाय कि आप आपन सी॰एस॰एस कय झलक देखा जात है।'''\n'''इ अभीन तक नाई सहेजा है!'''",
+       "userjsonpreview": "<strong>ध्यान दें कि आप अपनी सदस्य JSON कॉन्फिग की झलक देख रहे हैं।\nयह अभी तक संजोई नहीं गई है!</strong>",
        "userjspreview": "'''ध्यान दिहा जाय कि आप आपन जावास्क्रिप्ट  कय झलक देखा जात है।'''\n'''इ अभीन तक नाई सहेजा है!'''",
        "sitecsspreview": "'''ध्यान दिहा जाय कि आप ई सी॰एस॰एस कय झलक देखा जात है।'''\n'''इ अभीन तक नाई सहेजा है!'''",
+       "sitejsonpreview": "<strong>ध्यान दें कि आप इस JSON कॉन्फिग की झलक देख रहे हैं।\nयह अभी तक संजोई नहीं गई है!</strong>",
        "sitejspreview": "'''ध्यान दिहा जाय कि आप ई जावास्क्रिप्ट कय झलक देखा जात है।'''\n'''इ अभीन तक नाई सहेजा है!'''",
        "userinvalidconfigtitle": "'''चेतावनी:''' \"$1\" नाव कय कवनो त्वचा नाइ है।\nबदलल .css औ .js पन्नन कय शीर्षक नीचे स्तर कय लिपि (lowercase) कय प्रयोग करत है। उदाहरण: {{ns:user}}:Foo/vector.css नाई की {{ns:user}}:Foo/Vector.css",
        "updated": "(अपडेट करल)",
        "yourtext": "आप कय पाठ",
        "storedversion": "सहेज़ल अवतरण",
        "editingold": "'''चेतावनी: आप इ पन्ना कय पुरान(Out of Date) अवतरण संपादित करा जात है।'''\nअगर आप एका सहेजा जाइ , तव इ अवतरण कय बाद करल कुल बदलाव नष्ट होइ जाइ।",
+       "unicode-support-fail": "ऐसा प्रतीत होता है कि आपका ब्राउज़र यूनिकोड का समर्थन नहीं करता है पृष्ठों को संपादित करना आवश्यक है, इसलिए आपका संपादन सहेजा नहीं गया था।",
        "yourdiff": "अंतर",
        "copyrightwarning": "कृपया ध्यान दिहा जाय कि {{SITENAME}} मे करल कुल योगदान $2 शर्त कय निचे होंइ (ढेर जानकारी कय लिये $1 देखा जाय)।\nयदि आप आपन योगदान कय लगातार बदलत अव फिर से बटत़ नाइ देखय चाहा जात है तव यँह योगदान ना करा जाय।<br />\nआप इहो भी प्रमाणित करा जात है कि इ आप अपने से लिखा गा है या सार्वजनिक क्षेत्र या कवनो समान मुक्त स्रोत से प्रतिलिपित करा गा है।\n'''कॉपीराइट सुरक्षित काम कय बिना अनुमति कय यहँ ना करा जाय!'''",
        "copyrightwarning2": "{{SITENAME}} पे करल कवनो भी योगदान अउर सदस्य लोग बदलि या हटाइ सकत हैँ ।\nयदि आप आपन योगदान कय लगातार बदलत अव फिर से बटत़ नाइ देखय चाहा जात है तव यँह योगदान ना करा जाय।<br />\nआप इहो भी प्रमाणित करा जात है कि इ आप अपने से लिखा गा है या सार्वजनिक क्षेत्र या कवनो समान मुक्त स्रोत से प्रतिलिपित करा गा है।\n'''कॉपीराइट सुरक्षित काम कय बिना अनुमति कय यहँ ना करा जाय!'''",
+       "editpage-cannot-use-custom-model": "इस पृष्ठ का मुख्य सामग्री परिवर्तित नहीं हुआ।",
        "longpageerror": "'''त्रुटि: आप कय दिहा पाठ {{PLURAL:|$1 किलोबाइट|$1 किलोबाइट}} लंमा है, जवन {{PLURAL:|$2 किलोबाइट|$2 किलोबाइट}} कय सीमा से बहरे है।\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|साँचा}}:",
        "permissionserrors": "अनुमति त्रुटि",
        "permissionserrorstext": "निचे दिहा {{PLURAL:$1|कारण|कारणन्}} कय नाते आप कय ऐसन करे कय अनुमति नाइ है:",
        "permissionserrorstext-withaction": "आप कय $2 कय अनुमति नाई है,निचे दिहा {{PLURAL:$1|कारण|कारणन्}} कय नाते से:",
+       "contentmodelediterror": "आप इस पृष्ठ का इतिहास में सम्पादन नहीं कर सकते हैं क्योंकि इसका सामग्री <code>$1</code>, जो की वर्तमान सामग्री से <code>$2</code> अलग है।",
        "recreate-moveddeleted-warn": "'''चेतावनी: आप एक्ठु अइसन पन्ना बनावे जावा जात है जवन पहिले मेटावा रहा।'''\n\nआप विचार करा जाय कि का इ पन्ना कय संपादन करब उचित रही।\nसुविधा कय लिये इ पन्ना कय हटावे या घुस्कावे कय लॉग इहै है:",
        "moveddeleted-notice": "ई पन्ना मेटावा है।\nसंदर्भ कय खरतिन पन्ना कय मेटावे औ घुस्कावे कय लॉग नीचे दिहा है।",
+       "moveddeleted-notice-recent": "क्षमा करें, यह पृष्ठ हाल ही में हटा दिया गया था (पिछले 24 घंटों के भीतर)। पृष्ठ के लिए हटाने, सुरक्षा, और कदम लॉग संदर्भ के लिए नीचे दिए गए हैं।",
        "log-fulllog": "पूरा लॉग देखा जाय",
        "edit-hook-aborted": "फंदा से संपादन बीचवे मे छोड दिहा है।\nउ कवनो कारण नाई बताए है।",
        "edit-gone-missing": "पन्ना अद्यतित(अपडेट) नाई कई सका जात है।\nलागत है एका मेटाई दिहा है।",
        "edit-conflict": "संपादन अंतर्विरोध",
        "edit-no-change": "आप कवनो बदलाव नाई करा गा है,इहीकै नाते आप कय इ संपादन कय अनदेखा कै गा है।",
+       "edit-slots-cannot-add": "ये {{PLURAL:$1|स्लॉट|स्लॉटें}} यहाँ पर सपोर्टेड नहीं हैं: $2।",
+       "edit-slots-cannot-remove": "निम्नलिखित {{PLURAL:$1|स्लॉट}} आवश्यक है और हटाया नहीं जा सकता: $2।",
+       "edit-slots-missing": "निम्न {{PLURAL:$1|स्लॉट}} लापता है: $2।",
        "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 टैग कय उपयोग करय वाले पृष्ठ",
+       "deprecated-self-close-category-desc": "इस पृष्ठ में स्वयं-बंद ऍचटीएमएल चिप्पियाँ समाहित हैं जैसे <code>&lt;b/></code> अथवा <code>&lt;span/></code> आदि। इनका व्यवहार जल्दी ही ऍचटीएमएल५ विनिर्देशों के अनुरूप परिवर्तित हो जायेगा अतः विकि-पाठ में इनके प्रयोग को न करने की सलाह दी जाती है।",
+       "duplicate-args-warning": "<strong>चेतावनी:</strong> [[:$1]] प्राचल \"$3\" के लिए [[:$2]] को एक से अधिक बार काम में ले रहा है। केवल अन्त में दिया गया मान ही काम में लिया जायेगा।",
        "duplicate-args-category": "टेम्पलेट कॉल में डुप्लिकेट तर्क का उपयोग करते हुए पन्ने",
        "duplicate-args-category-desc": "पेज जैसे तर्कों के डुप्लिकेट का उपयोग करने वाले टेम्पलेट कॉल, जैसे <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> और <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
        "expensive-parserfunction-warning": "'''चेतावनी:''' इ पन्ना पे बहुत ढेर संख्या में कीमती पार्सर फ़ंक्शनों कय प्रयोग कई गा है।\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": "सम्बंधित",
+       "search-invalid-sort-order": "Sort order of $1 is unrecognized, default sorting will be applied. Valid sort orders are: $2",
+       "search-unknown-profile": "Search profile of $1 is unrecognized, default search profile will be applied.",
        "searchrelated": "सम्बंधित",
        "searchall": "कुल",
        "showingresults": "नीचे क्रमांक '''$2''' से सुरु कै कय सबसे ढेर '''$1''' परिणाम {{PLURAL:$1|देखाइ गा है}}।",
+       "showingresultsinrange": "क्रम संख्या #<strong>$2</strong> से #<strong>$3</strong> के बीच के अधिकतम {{PLURAL:$1|<strong>1</strong> परिणाम|<strong>$1</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": "चुना जाय:",
        "search-external": "बाहरी खोज",
        "searchdisabled": "{{SITENAME}} पे खोज अक्षम है।\nआप गूगल से खोज कै सका जात है।\nध्यान रक्खा जाय कि वनकय {{SITENAME}} समानन् कय सूची पुरान होइ सकत है।",
        "search-error": "खोजत समय अईसन त्रुटि उत्पन्न होइ गय: $1",
+       "search-warning": "खोजते समय निम्न त्रुटि उत्पन्न हुई है: $1",
        "preferences": "हमार पसंद",
        "mypreferences": "हमार पसंद",
        "prefs-edits": "सम्पादन गिन्ती",
        "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|दिन}}",
        "recentchangescount": "मूल रूप से केतना संपादन देखावा जाय:",
        "prefs-help-recentchangescount": "एहमा नँवा बदलाव, पन्ना इतिहास अव लॉग शामिल है।",
        "prefs-help-watchlist-token2": "ई आपकय ध्यानसूची कय वेब फ़ीड कय गोपनीय कुंजी होय।\nइ जेकरे लगे होइ उहय आपकय ध्यानसूची पढ़ि पाइ,इहिक नाते केहुक साथे ना बांटा जाइ।\n[[Special:ResetTokens|एका रीसेट करय खत्तिर हिँया क्लिक किन जाय]]।",
+       "prefs-help-tokenmanagement": "आप अपने खाते के लिए गुप्त कुंजी देख और रीसेट कर सकते हैं जो आपकी वॉचलिस्ट की वेब फ़ीड तक पहुंच सकता है। जो भी कुंजी जानता है वह आपकी वॉचलिस्ट को पढ़ने में सक्षम होगा, इसलिए इसे साझा न करें।",
        "savedprefs": "आप कय पसंद सहेजि गय ।",
+       "savedrights": "सदस्य {{GENDER:$1|$1}} का सदस्य अधिकार सहेजा गया।",
        "timezonelegend": "समयमंडल:",
        "localtime": "स्थानीय समय:",
        "timezoneuseserverdefault": "विकी डिफ़ॉल्ट कय उपयोग कीन जाय ($1)",
        "timezoneuseoffset": "अउर कौनो(समयांतर निर्दिष्ट करा जाय)",
+       "timezone-useoffset-placeholder": "उदाहरण मान: \"-07:00\" या \"01:00\"",
        "servertime": "सर्वर कय समय:",
        "guesstimezone": "ब्राउज़र से भरा जाय",
        "timezoneregion-africa": "अफ्रिका",
        "timezoneregion-indian": "हिंद महासागर",
        "timezoneregion-pacific": "प्रशांत महासागर",
        "allowemail": "अउर सदस्यन् से ई-मेल सक्षम करा जाय",
+       "email-allow-new-users-label": "एकदम नवा उपयोगकर्तऽन् का ईमेल कय अनुमति दियैं",
+       "email-blacklist-label": "इन उपयोगकर्तऽन् का हमय ईमेल भेजय से रोका:",
        "prefs-searchoptions": "खोजा जाय",
        "prefs-namespaces": "नामस्थान",
        "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-cannot-shorten-expiry": "आप \"$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-editsitejs": "Sitewide JavaScript संपादित करैं",
        "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|चिप्पियाँ]] बनायें और हटायें",
+       "right-applychangetags": "प्रयोग में लाइये [[Special:Tags|tags]] किसी के बदलाव के साथ।",
+       "right-changetags": "जमा करो और हटाओ स्वतंत्र [[Special:Tags|टैग]] व्यक्तिगत अवतरणों और लॉग प्रविक्तियों पर",
+       "right-deletechangetags": "डेटाबेस से [[Special:Tags|चिप्पियाँ]] हटाएँ",
+       "grant-generic": "\"$1\" अधिकार संग्रह",
+       "grant-group-page-interaction": "पृष्ठऽन् से जुड़ैं",
+       "grant-group-file-interaction": "मीडिया से जुड़ैं",
+       "grant-group-watchlist-interaction": "ध्यानसूची से जड़ैं",
+       "grant-group-email": "ईमेल पठवा जाय",
+       "grant-group-high-volume": "उच्च कार्य गतिविधि करैं",
+       "grant-group-customization": "पसंद अउर तय",
+       "grant-group-administration": "प्रबंधकीय कार्य करैं",
+       "grant-group-private-information": "अपने बारे मा निजी जानकारी देखैं",
+       "grant-group-other": "अन्य गतिविधि",
+       "grant-blockusers": "प्रतिबंधित अउर अप्रतिबंधित करब",
+       "grant-createaccount": "खाता बनावा जाय",
+       "grant-createeditmovepage": "निर्माण, सम्पादन, अउर घुस्काउब",
+       "grant-delete": "लेख, अवतरण अउर लॉग हटाउब",
+       "grant-editinterface": "मीडियाविकि नामस्थान अउर sitewide/सदस्य JSON का संपादित करब",
+       "grant-editmycssjs": "आपन सदस्य CSS/JSON/JavaScript सम्पादित करैं",
+       "grant-editmyoptions": "अपने सदस्य पसंद अउर जेएसओएन संरचना का संपादित करैं",
+       "grant-editmywatchlist": "अपने ध्यानसूची कय सम्पादन करैं",
+       "grant-editsiteconfig": "sitewide तथा सदस्य CSS/JS सम्पादित करैं",
+       "grant-editpage": "मौजूदा पन्नऽन् का संपादित करैं",
+       "grant-editprotected": "सुरक्षित पन्ना संपादित करैं",
+       "grant-highvolume": "खोब तेज सम्पादन",
+       "grant-oversight": "सदस्यऽन् का छुपाउब अउर अवतरण हटाउब",
+       "grant-patrol": "पन्नऽन् मा गश्ती बदलाव करा",
+       "grant-privateinfo": "निजी जानकारी देखैं",
+       "grant-protect": "पृष्ठऽन् का सुरक्षित अउर असुरक्षित करा",
+       "grant-rollback": "पृष्ठ से सम्पादन वापिस लेब",
+       "grant-sendemail": "अउर सदस्यन् का ई-मेल पठवा",
+       "grant-uploadeditmovefile": "फ़ाइल अपलोड, बदलना, अउर घुस्काउब",
+       "grant-uploadfile": "नई फाइल अपलोड करा",
+       "grant-basic": "सामान्य अधिकार",
+       "grant-viewdeleted": "हटायी गय फ़ाइल अउर पन्ना देखैं",
+       "grant-viewmywatchlist": "आपन ध्यानसूची देखा जाय",
+       "grant-viewrestrictedlogs": "प्रतिबंधित प्रविष्टि लॉग देखैं",
        "newuserlogpage": "सदस्य खाता बनावे कय लॉग",
        "newuserlogpagetext": "ई सदस्य खाता बनावे कय लॉग होय।",
        "rightslog": "सदस्य अधिकार लॉग",
        "action-createpage": "पन्ना बनावा जाय",
        "action-createtalk": "बातचीत पन्ना बनावा जाय",
        "action-createaccount": "ई सदस्य खाता बनावा जाय",
+       "action-autocreateaccount": "स्वतः ही बाहरी सदस्य खाता बनायें",
        "action-history": "इ पन्ना कय इतिहास देखेक",
        "action-minoredit": "ई बदलाव छोट होय",
        "action-move": "ई पन्ना घुस्कावा जाय",
        "action-writeapi": "लेखन ए॰पी॰आई कय प्रयोग करे कय",
        "action-delete": "ई पन्ना मेटावे कय",
        "action-deleterevision": "इ अवतरण कय हटावे कय",
+       "action-deletelogentry": "लॉग प्रविष्टियऽन् का हटावा",
        "action-deletedhistory": "इ पन्ना कय मेटावल इतिहास कय देखे कय",
+       "action-deletedtext": "हटावा गवा अवतरण कय पाठ देखैं",
        "action-browsearchive": "हटावल पन्ना खोजे कय",
        "action-undelete": "ई पन्ना कय पुनर्स्थापित करे कय",
        "action-suppressrevision": "इ लुकुआवल अवतरण कय देखे कय अव पुनर्स्थापित करे कय",
        "action-userrights-interwiki": "अउर विकिन् पे सदस्य अधिकार बदले कय",
        "action-siteadmin": "डाटाबेस कय ताला लगावा जाय या खोला जाय",
        "action-sendemail": "ईमेल पठवा जाय",
+       "action-editmyoptions": "आपन पसंद संपादित करैं",
        "action-editmywatchlist": "ध्यानसूची सम्पादन करा जाय",
        "action-viewmywatchlist": "आपन ध्यानसूची देखा जाय",
        "action-viewmyprivateinfo": "आपन व्यक्तिगत जानकारी देखा जाय",
        "action-editmyprivateinfo": "आपन व्यक्तिगत जानकारी बदला जाय",
        "action-editcontentmodel": "पन्ना कय सामग्री नमुना कय बदला जाय",
        "action-managechangetags": "डेटाबेस से चिप्पि बनायें और हटायें",
+       "action-applychangetags": "अपने बदलाव के साथे टैग जोड़ैं।",
+       "action-changetags": "जमा करें और हटाएँ स्वतंत्र टैग व्यक्तिगत अवतरणों और लॉग प्रविक्तियों पर",
+       "action-deletechangetags": "डेटाबेस से चिप्पि हटावैं",
+       "action-purge": "पृष्ठ ताजा करैं",
+       "action-apihighlimits": "API पुँचताँछ में ऊँच सीमा प्रयोग करा जाय",
+       "action-autoconfirmed": "आई॰पी ठहर आधारित रेट लिमिट्स से बेअसर होई जाय",
+       "action-bigdelete": "ढेर इतिहास वाले पन्नन् का हटावा जाय",
+       "action-blockemail": "यक सदस्य का ईमेल करै से रोका जाय",
+       "action-bot": "यक स्वचलित प्रणाली माना जाय",
+       "action-editprotected": "अइसन सुरक्षित पन्नन कय सम्पादन करा जाय जवने कय सम्पादन कय \"{{int:protect-level-sysop}}",
+       "action-editsemiprotected": "अइसन पन्नन् कय सम्पादन करा जाय जवने कय सुरक्षा स्तर होय \"{{int:protect-level-autoconfirmed}}\"",
+       "action-editinterface": "उपयोगकर्ता इंटरफ़ेस सम्पादित करा जाय",
+       "action-editusercss": "अउर सदस्यन् कय सी॰एस॰एस फ़ाइल कय सम्पादन करैं",
+       "action-edituserjson": "अउर सदस्यन् कय JSON फाइल कय सम्पादन करैं",
+       "action-edituserjs": "अउर सदस्यन् कय जावास्क्रिप्ट पन्ना कय सम्पादन करा जाय",
+       "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": "कौनो भी उपयोगकर्ता से लुकुवावा गवा संशोधन देखॅंय",
+       "action-hideuser": "सदस्यनाँव ब्लॉक करा जाय औ ओका मनईन से लुकुआवा जाय",
+       "action-ipblock-exempt": "आइ॰पी ब्लॉक्स, ऑटो-ब्लॉक्स अव रेंज ब्लॉक्स कय अनदेखा करा जाय",
+       "action-unblockself": "अपने आप कय अनावरुद्ध करा जाय",
+       "action-noratelimit": "रेट लिमिट्स से बेअसर होइ जाय",
+       "action-reupload-own": "आपन अपलोड करल फ़ाइल पे फिर से लिखा जाय",
+       "action-nominornewtalk": "नए संदेशऽन् का हाली  ट्रिगर करय वाले पृष्ठऽन् पय चर्चा करय बरे मामूली संपादन न होय",
+       "action-markbotedits": "वापिस लेवे में होए वाला संपादनन् कय बॉट सम्पादन चिन्हित करा जाय",
+       "action-patrolmarks": "नँवा बदलाव में परीक्षण चिन्ह देखा जाय",
+       "action-override-export-depth": "पन्ना निर्यात करा जाय, पाँच स्तर कय गहराई तक जुड़ल पन्ना लइकय",
+       "action-suppressredirect": "पन्ना घुस्कावत कय समय पुनर्निर्देश ना छोड़ा जाय",
        "nchanges": "$1 {{PLURAL:$1|बदलाव}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|अंतिम दाइ देखय कय बाद से}}",
        "enhancedrc-history": "इतिहास",
        "recentchanges-legend": "नँवा बदलाव से सम्बंधीत विकल्प",
        "recentchanges-summary": "इ विकि पे करल नँवा बदलाव इ पन्ना पे देख सका जात अहै।",
        "recentchanges-noresult": "इ अवधि कय दौरान इ मापदंडन् कय पूरा कईकय कवनो बदलाव नाइ कै गा है।",
+       "recentchanges-timeout": "इस खोज का समय समाप्त हो गया है आप विभिन्न खोज मापदंडों की कोशिश करना चाहेंगे।",
+       "recentchanges-network": "तकनीकी त्रुटि के कारण, कोई भी परिणाम लोड नहीं किया जा सकता। कृपया पृष्ठ को रिफ्रेश करते रहें।",
+       "recentchanges-notargetpage": "उस पृष्ठ से संबंधित ऊपर परिवर्तन देखने के लिए पृष्ठ का नाम डालें|",
        "recentchanges-feed-description": "इ विकि पे करल नँवा बदलाव इ फिड मे देख सका जात अहै।",
        "recentchanges-label-newpage": "ई सम्पादन से नँवा पन्ना बना",
        "recentchanges-label-minor": "ई छोट सम्पादन होय ।",
        "recentchanges-label-plusminus": "पन्ना कय आकार इ बाइट संख्या से बदला",
        "recentchanges-legend-heading": "<strong>कुंजी:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|नवा पन्नन् कय सूची]] कय भी देखा जाय)",
+       "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-activefilters-hide-tooltip": "सक्रिय फ़िल्टर क्षेत्र लुकुवावा",
+       "rcfilters-activefilters-show-tooltip": "सक्रिय फ़िल्टर क्षेत्र देखावा",
+       "rcfilters-advancedfilters": "उन्नत फ़िल्टर",
+       "rcfilters-limit-title": "देखावै वाले परिणाम",
+       "rcfilters-limit-and-date-label": "{{PLURAL:$1|बदलाव|$1 परिवर्तन}}, $2",
+       "rcfilters-date-popup-title": "खोजय बरे समय अवधि",
+       "rcfilters-days-title": "अबहिनै कय दीन",
+       "rcfilters-hours-title": "अबहिनय कय घंटा",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|day|दिन}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|hour|घंटे}}",
+       "rcfilters-highlighted-filters-list": "पय प्रकाश डारा:$1",
+       "rcfilters-quickfilters": "फ़िल्टर सहेजा जाय",
+       "rcfilters-quickfilters-placeholder-title": "कउनो फ़िल्टर अबहीं तक सहेजा नहीं गयें",
+       "rcfilters-quickfilters-placeholder-description": "अपने फ़िल्टर सेटिंग को सहेजने और बाद में उपयोग करने के लिए नीचे दिये बूकमार्क छवि पर क्लिक करें।",
+       "rcfilters-savedqueries-defaultlabel": "सहेजे फ़िल्टर",
+       "rcfilters-savedqueries-rename": "नाँव बदला जाय",
+       "rcfilters-savedqueries-setdefault": "मूल के रूप मा रक्खैं",
+       "rcfilters-savedqueries-unsetdefault": "मूल के रूप से हटावैं",
+       "rcfilters-savedqueries-remove": "मिटावा",
+       "rcfilters-savedqueries-new-name-label": "नाँव",
+       "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-savedqueries-already-saved": "ये फ़िल्टर पहले ही सुरक्षित कर लिए गए हैं| नए सुरक्षित फ़िल्टर बनाने के लिए अपनी सेटिंग बदले|",
+       "rcfilters-restore-default-filters": "मूलभूत फिल्टर पुनर्स्थापित करे",
+       "rcfilters-clear-all-filters": "सगरौ फिल्टर हटावैं",
+       "rcfilters-show-new-changes": "View new changes since $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-highlightmenu-help": "एह खासियत पय अंजोर डारय बरे एक रंग चुनैं",
+       "rcfilters-filterlist-noresults": "कउनो छनना नही मिला",
+       "rcfilters-noresults-conflict": "कोई भी परिणाम नहीं मिला क्योंकि खोज मापदंड संघर्ष में है",
+       "rcfilters-state-message-subset": "इस फिल्टर का कोई प्रभाव नहीं है क्योंकि इसका परिणाम निम्न, व्यापक {{PLURAL: $2 |फ़िल्टर|फिल्टर}} के साथ शामिल है (इसे भेद करने के लिए हाइलाइट करने की कोशिश करें): $1",
+       "rcfilters-state-message-fullcoverage": "किसी समूह में सभी फ़िल्टर चुनना कोई भी नहीं चुनने के समान है, इसलिए इस फ़िल्टर का कोई प्रभाव नहीं है, समूह में शामिल हैं: $1",
+       "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": "पंजीकृत संपादकों, जिनके कम से कम 10 संपादन या 4 दिन की गतिविधि हो।",
+       "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": "500 संपादन और 30 दिन की गतिविधि से अधिक वाले पंजीकृत संपादक।",
+       "rcfilters-filtergroup-automated": "स्वचालित योगदान",
+       "rcfilters-filter-bots-label": "बॉट",
+       "rcfilters-filter-bots-description": "स्वचालित औजारों से किए सम्पादन।",
+       "rcfilters-filter-humans-label": "मानव (बॉट नहीं)",
+       "rcfilters-filter-humans-description": "मानव संपादक द्वारा किए गए संपादन।",
+       "rcfilters-filtergroup-reviewstatus": "पुनरीक्षण स्थिति",
+       "rcfilters-filter-reviewstatus-unpatrolled-description": "सम्पादन स्वचालित अथवा मैन्युअली रूप से परीक्षित चिह्नित नहीं किये जा सके।",
+       "rcfilters-filter-reviewstatus-unpatrolled-label": "अपरीक्षित",
+       "rcfilters-filter-reviewstatus-manual-description": "सम्पादन मैन्युअली जाँचा पुनरीक्षित किया गया",
+       "rcfilters-filter-reviewstatus-manual-label": "मैन्युअली पुनरीक्षित",
+       "rcfilters-filter-reviewstatus-auto-description": "उन्नत सदस्यों द्वारा किये गये सम्पादन जिनके काम स्वचालित रूप से परीक्षित चिह्नित हो जाते हैं।",
+       "rcfilters-filter-reviewstatus-auto-label": "स्वपरिक्षित",
+       "rcfilters-filtergroup-significance": "महत्व",
+       "rcfilters-filter-minor-label": "छोट संपादन",
+       "rcfilters-filter-minor-description": "लेखक का संपादन छोटा संपादन के रूप में लेबल किया गया है।",
+       "rcfilters-filter-major-label": "गैर-मामूली संपादन",
+       "rcfilters-filter-major-description": "छोटा चिन्हित न किए सम्पादन।",
+       "rcfilters-filtergroup-watchlist": "देखा जाय चुका पन्ना",
+       "rcfilters-filter-watchlist-watched-label": "ध्यानसूची मा",
+       "rcfilters-filter-watchlist-watched-description": "आपके ध्यानसूची पय पन्नऽन् मा परिवर्तन",
+       "rcfilters-filter-watchlist-watchednew-label": "नया ध्यानसूची बदलाव",
+       "rcfilters-filter-watchlist-watchednew-description": "ध्यानसूची पृष्ठों में किए गए परिवर्तन, जिन आपने परिवर्तनों के बाद से देखा नहीं है।",
+       "rcfilters-filter-watchlist-notwatched-label": "ध्यानसूची मा नही",
+       "rcfilters-filter-watchlist-notwatched-description": "आपके ध्यानसूची पृष्ठों में परिवर्तन के अलावा सब कुछ",
+       "rcfilters-filtergroup-watchlistactivity": "ध्यानसूची क्रियाकलाप",
+       "rcfilters-filter-watchlistactivity-unseen-label": "अनदेखे परिवर्तन",
+       "rcfilters-filter-watchlistactivity-unseen-description": "उन प्रष्ठों में परिवर्तन जिन की जांच आपने परिवर्तनों के बाद से नहीं की है।",
+       "rcfilters-filter-watchlistactivity-seen-label": "देखा गवा बदलाव",
+       "rcfilters-filter-watchlistactivity-seen-description": "परिवर्तन होने के बाद से आपके द्वारा जांचे गए पृष्ठों में परिवर्तन।",
+       "rcfilters-filtergroup-changetype": "बदलाव कय प्रकार:",
+       "rcfilters-filter-pageedits-label": "पृष्ठ संपादन",
+       "rcfilters-filter-pageedits-description": "विकि सामग्री, चर्चा, श्रेणी विवरणों कय संपादन ....",
+       "rcfilters-filter-newpages-label": "पृष्ठ कृतियों",
+       "rcfilters-filter-newpages-description": "संपादन जेहसे नवा पन्ना बना।",
+       "rcfilters-filter-categorization-label": "श्रेणी परिवर्तन",
+       "rcfilters-filter-categorization-description": "श्रेणियों से पृष्ठों के रिकॉर्ड्स को जोड़ा या निकाला जा सकता है",
+       "rcfilters-filter-logactions-label": "लॉग करी गय कार्रवाई",
+       "rcfilters-filter-logactions-description": "प्रबंधकीय कार्रवाई, खाता निर्माण, पृष्ठ विलोपन, अपलोड ....",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "\"लघु संपादन\" फ़िल्टर एक या एक से अधिक प्रकार के परिवर्तन फ़िल्टर के साथ संघर्ष करता है, क्योंकि कुछ प्रकार के परिवर्तन को \"लघु\" के रूप में निर्दिष्ट नहीं किया जा सकता है। परस्पर विरोधी फिल्टर ऊपर सक्रिय फिल्टर क्षेत्र में चिह्नित हैं।",
+       "rcfilters-hideminor-conflicts-typeofchange": "कुछ प्रकार के परिवर्तन को \"लघु\" के रूप में निर्दिष्ट नहीं किया जा सकता है\", इसलिए यह फ़िल्टर निम्न प्रकार के परिवर्तन फिल्टर के साथ संघर्ष करता है: $1",
+       "rcfilters-typeofchange-conflicts-hideminor": "इस प्रकार का परिवर्तन फ़िल्टर \"लघु संपादन\" फ़िल्टर के साथ संघर्ष करता है। कुछ प्रकार के परिवर्तन को \"लघु\" के रूप में निर्दिष्ट नहीं किया जा सकता है।",
+       "rcfilters-filtergroup-lastrevision": "नया अवतरण",
+       "rcfilters-filter-lastrevision-label": "नया अवतरण",
+       "rcfilters-filter-lastrevision-description": "पृष्ठ का सबसे हाल में हुआ बदलाव",
+       "rcfilters-filter-previousrevision-label": "पहले के अवतरण",
+       "rcfilters-filter-previousrevision-description": "सभी परिवर्तन जो \"नवीनतम संशोधन\" नहीं हैं",
+       "rcfilters-filter-excluded": "अपवर्जित",
+       "rcfilters-tag-prefix-namespace-inverted": " $1 <strong>:नहीं</strong>",
+       "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": "मुख्य फ़िल्टर मेनू पय लौटें",
+       "rcfilters-view-tags-help-icon-tooltip": "टैग किए गए संपादन के बारे में और जानें",
+       "rcfilters-liveupdates-button": "सजीव अद्यतन",
+       "rcfilters-liveupdates-button-title-on": "जीवंत अद्यतन बंद करें",
+       "rcfilters-liveupdates-button-title-off": "नये परिवर्तन प्रदर्शित करें जैसे ही वे घटित होते हैं",
+       "rcfilters-watchlist-markseen-button": "देखे गए के रूप में सभी परिवर्तनों को चिह्नित करें",
+       "rcfilters-watchlist-edit-watchlist-button": "देखे गए पन्नों की सूची को संपादित करें",
+       "rcfilters-watchlist-showupdated": "उन पन्नों में परिवर्तन जिनपर आप परिवर्तन के बाद से नहीं गए हैं, ठोस चिन्ह के साथ <strong>bold</strong> दिखाए गए हैं।",
+       "rcfilters-preference-label": "ग़ैर-जावास्क्रिप्ट इंटरफेस का प्रयोग करें",
+       "rcfilters-preference-help": "बगैर कार्यात्मक रूप से प्रकाश डाले अथवा फ़िल्टर खोज के हाल में हुए बदलाव लोड करें।",
+       "rcfilters-watchlist-preference-label": "गैर-जावास्क्रिप्ट इन्टरफेस का प्रयोग करें",
+       "rcfilters-watchlist-preference-help": "बगैर कार्यात्मक रूप से प्रकाश डाले अथवा फ़िल्टर खोज के ध्यानसूची लोड करें।",
+       "rcfilters-filter-showlinkedfrom-label": "जुड़े पृष्ठों पर से परिवर्तन दिखाएं",
+       "rcfilters-filter-showlinkedfrom-option-label": "<strong>से जुड़े पृष्ठ</strong> चयनित पृष्ठ",
+       "rcfilters-filter-showlinkedto-label": "लिंक करने वाले पृष्ठों पर परिवर्तन दिखाएं",
+       "rcfilters-filter-showlinkedto-option-label": "<strong>से जुड़ने वाले पृष्ठ</strong> चयनित पृष्ठ",
+       "rcfilters-target-page-placeholder": "पृष्ठ(अथवा श्रेणी) का नाम भरें",
        "rcnotefrom": "नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) {{PLURAL:$5|हुआ बदलाव दर्शाया गया है|हुए बदलाव दर्शाए गये हैं}}।",
+       "rclistfromreset": "चुने दिनांक पहले जैसा करें",
        "rclistfrom": "$3 $2 से नँवा बदलाव देखावा जाय",
        "rcshowhideminor": "छोट बदलाव $1",
        "rcshowhideminor-show": "देखावा जाय",
        "rcshowhidemine": "हमार बदलाव $1",
        "rcshowhidemine-show": "देखावा जाय",
        "rcshowhidemine-hide": "लुकुआवा जाय",
+       "rcshowhidecategorization": "$1 पृष्ठ श्रेणीकरण",
+       "rcshowhidecategorization-show": "देखावा",
+       "rcshowhidecategorization-hide": "लुकुवावा",
        "rclinks": "पिछला $2 दिन में करल $1 बदलाव देखावा जाय",
        "diff": "अंतर",
        "hist": "इतिहास",
        "recentchangeslinked-summary": "ई पन्ना कवनो विशिष्ट पन्ना से जोडान पन्नन् (या कवनो श्रेणी में श्रेणीबद्ध पन्नन्) में नँवा बदलाव कय सूची देखावत है।\n[[Special:Watchlist|आप कय ध्यानसूची]] में मौजूद पन्ना '''मोट''' अक्षर में बीलगाई।",
        "recentchangeslinked-page": "पन्ना कय नाँव:",
        "recentchangeslinked-to": "इसके बदले में दिये हुए पृष्ठसे जुडे पन्नोंके बदलाव दर्शायें",
+       "recentchanges-page-added-to-category": "[[:$1]] श्रेणी में जुड़ा",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] श्रेणी में जोड़ा गया, [[Special:WhatLinksHere/$1|यह पेज अन्य पृष्ठों में शामिल है]]",
+       "recentchanges-page-removed-from-category": "[[:$1]] श्रेणी से हटा",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] श्रेणी से हटाया गया, [[Special:WhatLinksHere/$1|यह पेज अन्य पृष्ठों में शामिल है]]",
+       "autochange-username": "मीडियाविकि स्वतः परिवर्तन",
        "upload": "फ़ाइल अपलोड करा जाय",
        "uploadbtn": "फ़ाइल अपलोड करा जाय",
        "reuploaddesc": "अपलोड रद्द करा जाय अव फिरसे अपलोड फ़ॉर्म पे जावा जाय",
        "upload-tryagain": "संशोधित फ़ाइल विवरण भेजा जाय",
+       "upload-tryagain-nostash": "पुनः अपलोड की गई फ़ाइल और संशोधित विवरण सबमिट करें",
        "uploadnologin": "लाग इन नाई करा गा है",
        "uploadnologintext": "फाइल अपलोड करेक लिए $1 करब आवश्यक है",
        "upload_directory_missing": "अपलोड डाइरेक्टरी ($1) मौजूद नाई है, अउर वेबसर्वर एकर निर्माण नाई कई पाय।",
        "file-thumbnail-no": "इ फ़ाइल कय नाँव <strong>$1</strong> से शुरू होत है।\nइ आकार घटावाल ''(अंगूठाकार)'' होइ सकत है।\nअगर इ चित्र अपने मूल आकार में है तव एका अपलोड करा जाय, नाइ तव फ़ाइल बदला जाय।",
        "fileexists-forbidden": "इ नाँव कय फ़ाइल पहिलवे से मौजूद है, अउर एकरे जगही अउर नाइ अपलोड कै सका जात है।\nतब्बव यदि आप इ फ़ाइल कय अपलोड करय चाहा जात है, तव कृपया वापस जाइ कय एकरे लिए कवनो अउर नाँव चुना जाय।\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "इ नाँव कय फ़ाइल साझा फ़ाइल भंडार में पहिलवे से मौजूद है।\nतब्बो यदि आप इ फ़ाइल कय अपलोड करय चाहा जात है, तव कृपया वापिस जाइ कय एकरे खत्तीर कवनो दुसर नाँव चुना जाय।\n[[File:$1|thumb|center|$1]]",
+       "fileexists-no-change": "अपलोड <strong>[[:$1]]</strong> के वर्तमान संस्करण का सटीक प्रतिलिपि है।",
+       "fileexists-duplicate-version": "अपलोड <strong>[[:$1]]</strong> के  {{PLURAL:$2|पुराने संस्करणों}} का सटीक प्रतिलिपि है",
        "file-exists-duplicate": "यह फ़ाइल निम्नलिखित {{PLURAL:$1|फ़ाइल|फ़ाइलों}} की प्रति है:",
        "file-deleted-duplicate": "इसी फ़ाइल ([[:$1]]) से हूबहू मेल खाती एक फ़ाइल पहले हटाई जा चुकी है।\nइसे फिर से अपलोड करने से पहले आपको पुरानी फ़ाइल का हटाने के इतिहास देख लेना चाहिए।",
        "file-deleted-duplicate-notitle": "इससे पहले इस फ़ाइल के समान एक फ़ाइल को हटाया गया है, और शीर्षक छिपा दिया गया है।\nइसे फिर से अपलोड करने से पहले आप किसी ऐसे व्यक्ति से स्थिति की समीक्षा करने के लिए कहें जिसके पास छिपी फ़ाइल का डाटा देखने की क्षमता है।",
        "uploadwarning": "अपलोड चेतावनी",
        "uploadwarning-text": "फ़ाइल विवरण कय मिलाई कय फिर कोशिश करा जाय।",
+       "uploadwarning-text-nostash": "कृपया फ़ाइल को फिर से अपलोड करें, नीचे विवरण को संशोधित करें और पुनः प्रयास करें।",
        "savefile": "फ़ाइल सहेजा जाय",
        "uploaddisabled": "अपलोड प्रतिबंधित हैं।",
        "copyuploaddisabled": "यू॰आर॰एल द्वारा अपलोड अक्षम हैं।",
        "uploaddisabledtext": "फ़ाइल अपलोड अक्षम हैं।",
        "php-uploaddisabledtext": "पी॰एच॰पी में फ़ाइल अपलोड बंद है।\nकृपया file_uploads जमाव कय जाँच करा जाय।",
        "uploadscripted": "इ फ़ाइल में एच॰टी॰एम॰एल या स्क्रिप्ट कोड है, जवन वेब ब्राउज़र गलत पढि सकत है।",
+       "upload-scripted-pi-callback": "उस फाइल को अपलोड नहीं किया जा सकता जिसमें एक्सएमएल-स्टाइलशीट प्रसंस्करण निर्देश समाविष्ट हैं।",
+       "upload-scripted-dtd": "SVG फ़ाइलों को अपलोड नहीं किया जा सकता जिसमें एक गैर-मानक DTD की घोषणा हो।",
+       "uploaded-script-svg": "अपलोड की गयी एसवीजी फ़ाइल में स्क्रीप्ट अवयव \"$1\" पाया गया।",
+       "uploaded-hostile-svg": "अपलोड की गयी एसवीजी फाइल के शैली अवयव में असुरक्षित सीएसएस पायी गयी।",
+       "uploaded-event-handler-on-svg": "सेटिंग ईवेंट हैंडलर (आयोजन प्रबन्धनकर्ता वरियता) <code>$1=\"$2\"</code> एसवीजी फ़ाइल में अनुमत नहीं है।",
+       "uploaded-href-attribute-svg": "<a> तत्व केवल डेटा से लिंक किया जा सकता है: (अंतःस्थापित दस्तावेज), http:// or https://, या टुकड़ा (#, समरूप दस्तावेज) लक्ष्य| अन्य तत्वों के लिए, जैसे <image>, केवल डेटा: और टुकड़ों की अनुमति है| अपने एसवीजी को निर्यात करते समय छवियों को अंतःस्थापित करने का प्रयास करें| मिला <code> &lt;$1 $2=\"$3\"&gt;</code>।",
+       "uploaded-href-unsafe-target-svg": "अपलोड की गयी फ़ाइल में असुरक्षित लक्ष्य <code>&lt;$1 $2=\"$3\"&gt;</code> पाये गए।",
+       "uploaded-animate-svg": "चिप्पि \"animate\" पायी गई जिससे href परिवर्तित हो सकता है, अपलोड की गयी फ़ाइल में \"from\" विशेषता <code>&lt;$1 $2=\"$3\"&gt;</code> काम में ली जा रही है।",
+       "uploaded-setting-event-handler-svg": "विकल्प आयोजन-संभालने वाला अवरोधित है, एसवीजी फ़ाइल में मिला <code>&lt;$1 $2=\"$3\"&gt;</code> है।",
+       "uploaded-setting-href-svg": "\"set\" का उपयोग कर \"href\" जोड़ना अवरोधित है।",
+       "uploaded-wrong-setting-svg": "\"set\" का उपयोग कर किसी अन्य डाटा, लिपि से कार्य अवरोधित है। एसवीजी फ़ाइल में मिला <code>&lt;set to=\"$1\"&gt;</code> है।",
+       "uploaded-setting-handler-svg": "एसवीजी जो \"handler\" जोड़ता है, अवरोधित है। उससे मिला <code>$1=\"$2\"</code> है।",
+       "uploaded-remote-url-svg": "एसवीजी जो रिमोट पते द्वारा शैली तय करता है, अवरोधित है। उससे <code>$1=\"$2\"</code> मिला है।",
+       "uploaded-image-filter-svg": "पते के साथ छवि छन्नी मिला: <code>&lt;$1 $2=\"$3\"&gt;</code> एसवीजी फ़ाइल में।",
        "uploadscriptednamespace": "इ एस॰वी॰जी फ़ाइल में अमान्य नामजगह \"<nowiki>$1</nowiki>\" है।",
        "uploadinvalidxml": "अपलोड करल फ़ाइल कय XML पार्स नाइ होई।",
        "uploadvirus": "इ फ़ाइल में भाईरस हैं!ढेर जानकारी: $1",
        "upload-options": "अपलोड विकल्प",
        "watchthisupload": "इ फ़ाइल पे ध्यान रक्खा जाय",
        "filewasdeleted": "इस नाम की एक फ़ाइल पहले भी अपलोड होने के बाद हटाई जा चुकी है।\nफिरसे अपलोड करने से पहले आप $1 को अच्छी तरह से जाँचे।",
+       "filename-thumb-name": "यह एक थंबनेल शीर्षक की तरह लग रहा है। कृपया थंबनेल  वापस विकि पर अपलोड न करें। अन्यथा, कृपया फ़ाइल नाम ठीक करें।",
        "filename-bad-prefix": "आप जो फ़ाइल अपलोड कर रहे हैं उसका नाम '''\"$1\"''' से शुरू होता है, जो डिजिटल कैमेरे द्वारा दिया गया नाम है।\nकृपया इस फ़ाइल के लिये कोई दूसरा अधिक जानकारीयुक्त नाम चुनें।",
        "upload-proto-error": "गलत प्रोटोकॉल",
        "upload-proto-error-text": "रिमोट अपलोड कय लिये यू॰आर॰एल कय नाँव <code>http://</code> या <code>ftp://</code> से शुरू होब आवश्यक है।",
        "upload-too-many-redirects": "इ यू॰आर॰एल में ढेर कुल पुनर्निर्देशन हैं",
        "upload-http-error": "एकठु एच॰टी॰टी॰पी त्रुटि आई गय: $1",
        "upload-copy-upload-invalid-domain": "कॉपी अपलोड इ डोमेन से उपलब्ध नाई हैं।",
+       "upload-foreign-cant-upload": "यह विकि अन्य फ़ाइल संग्रह में अपलोड हेतु तय नहीं किया गया है।",
+       "upload-foreign-cant-load-config": "फ़ाइल अपलोड के लिए कॉन्फ़िगरेशन को विदेशी फ़ाइल रिपॉजिटरी में लोड करने में विफल।",
+       "upload-dialog-disabled": "इस बॉक्स का उपयोग कर फ़ाइल अपलोड इस विकी पर अक्षम हैं।",
+       "upload-dialog-title": "फाइल अपलोड करा",
+       "upload-dialog-button-cancel": "रद्द करा जाय",
+       "upload-dialog-button-back": "पाछे जावा जाय",
+       "upload-dialog-button-done": "होइ गवा",
+       "upload-dialog-button-save": "सहेजा",
+       "upload-dialog-button-upload": "अपलोड",
+       "upload-form-label-infoform-title": "विवरण",
+       "upload-form-label-infoform-name": "नाँव",
+       "upload-form-label-infoform-name-tooltip": "एक अनोखा विवरण शीर्षक इस फ़ाइल हेतु डालें, जी इसे फ़ाइल के रूप में दिखाये। आप इसके लिए साधारण भाषा और रिक्त स्थान का उपयोग कर सकते हैं। फ़ाइल प्रारूप को न जोड़ें। \\",
+       "upload-form-label-infoform-description": "विवरण",
+       "upload-form-label-infoform-description-tooltip": "छोटे रूप में बतायें इस के उलेखनीयता के बारे में। \n चित्र हेतु, जो मुख्य वस्तु नहीं दिखाया गया है आदि के स्थान।",
+       "upload-form-label-usage-title": "उपयोग",
+       "upload-form-label-usage-filename": "फ़ाइल नांव",
+       "upload-form-label-own-work": "ई हमाय आपन काम होय",
+       "upload-form-label-infoform-categories": "श्रेणियां",
+       "upload-form-label-infoform-date": "तारीख",
+       "upload-form-label-own-work-message-generic-local": "मैं यह सत्यापित करता हूँ कि मेरे द्वारा डाला गया फ़ाइल {{SITENAME}} सेवा के शर्तों और अधिकार नियम के अनुकूल है।",
+       "upload-form-label-not-own-work-message-generic-local": "यदि आप {{SITENAME}} के नियमों के अंतर्गत फ़ाइल नहीं डाल सकते, तो आप इसे हटा कर किसी दूसरे विधि का उपयोग करें। नम",
+       "upload-form-label-not-own-work-local-generic-local": "आप [[Special:Upload|मूल डालने वाले पृष्ठ]] का भी उपयोग कर सकते हो।",
+       "upload-form-label-own-work-message-generic-foreign": "मैं यह समझता हूँ कि यहाँ सभी फ़ाइल सांझा होते हैं। मैं यह सत्यापित करता हूँ कि में सेवा के शर्तों और नियम के अनुरूप ही कार्य कर रहा हूँ।",
+       "upload-form-label-not-own-work-message-generic-foreign": "यदि आप इस नियम के अंतर्गत फ़ाइल नहीं डालना चाहते तो अभी इसे बन्द कर दें और कोई दूसरे विधि को खोजें।",
+       "upload-form-label-not-own-work-local-generic-foreign": "यदि आप चाहें तो आप [[Special:Upload|{{SITENAME}} के पृष्ठ]] पर फ़ाइल डाल सकते हैं, यदि यह फ़ाइल वहाँ के नियम के अंतर्गत हो तो।",
        "backend-fail-stream": "फ़ाइल $1 स्ट्रीम नाई होई पाई।",
        "backend-fail-backup": "फ़ाइल $1 बैकअप नाई होई पाई।",
        "backend-fail-notexists": "फ़ाइल $1 मौजूद नाई है।",
        "uploadstash-badtoken": "इ काम असफल रहा ,लागत है आप कय सम्पादन प्रमाणपत्र कय अवधि खतम होइ गवा है ।",
        "uploadstash-errclear": "फाइल कय साफ करब असफल रहा ।",
        "uploadstash-refresh": "फाइल कय सुची रिफ्रेश करा जाय ।",
+       "uploadstash-thumbnail": "छवि देखैं",
+       "uploadstash-exception": "गुप्त कोष में अपलोड स्टोर नहीं किया जा सका ($1): \"$2\".",
+       "uploadstash-bad-path": "पथ मौजद नाइ हय।",
+       "uploadstash-bad-path-invalid": "अमान्य रस्ता",
+       "uploadstash-bad-path-unknown-type": "अज्ञात प्रकार \"$1\"",
+       "uploadstash-bad-path-unrecognized-thumb-name": "अपरिचित अंगूठे का नाम|",
+       "uploadstash-bad-path-no-handler": "फ़ाइल $2 में से $1 के लिए कोई प्रहस्तक नहीं मिला|",
+       "uploadstash-bad-path-bad-format": "कुंजी \"$1\" एक उचित प्रारूप में नहीं है|",
+       "uploadstash-file-not-found": "छिपाने की जगह में कुंजी \"$1\" नहीं मिली।",
+       "uploadstash-file-not-found-no-thumb": "थंबनेल प्राप्त नहीं किया जा सका|",
+       "uploadstash-file-not-found-no-local-path": "स्केल की गयी वस्तु के लिए कोई स्थानीय पथ नहीं है|",
+       "uploadstash-file-not-found-no-object": "थंबनेल के लिए स्थानीय फ़ाइल ऑब्जेक्ट नहीं बना सके।",
+       "uploadstash-file-not-found-no-remote-thumb": "थंबनेल प्राप्त करना विफल: $1\nयूआरएल = $2",
+       "uploadstash-file-not-found-missing-content-type": "सामग्री प्रकार हैडर अनुपलब्ध|",
+       "uploadstash-file-not-found-not-exists": "पथ नहीं मिल सकता, न ही सादी फाइल|",
+       "uploadstash-file-too-large": "$1 बाइट्स से बड़ी फ़ाइल नहीं दे सकता|",
+       "uploadstash-not-logged-in": "कोई भी उपयोगकर्ता लॉग इन नहीं है, फाइल उपयोगकर्ताओं से संबंधित होनी चाहिए।",
+       "uploadstash-wrong-owner": "यह फ़ाइल ($1) वर्तमान उपयोगकर्ता से संबंधित नहीं है|",
+       "uploadstash-no-such-key": "ऐसी कोई भी कुंजी ($1), नहीं हटा सकते हैं|",
+       "uploadstash-no-extension": "खाली एक्सटेंशन",
+       "uploadstash-zero-length": "फ़ाइल शून्य लंबाई की है|",
        "invalid-chunk-offset": "अग्राह्य चंक ऑफ़सेट",
        "img-auth-accessdenied": "पहुँच अस्वीकार",
        "img-auth-nopathinfo": "PATH_INFO मौजूद नाइ है।\nआप कय सर्वर मा इ जानकारी भेजय खत्तीर जमाव नाइ है।\nइ सी॰जी॰आई-आधारित होइ सकत है औ img_auth कय स्वीकार नाइ करत है।\nhttps://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization देखें।",
        "http-timed-out": "एच॰टी॰टी॰पी अनुरोध कय समय खतम (टाइम आउट)",
        "http-curl-error": "यू॰आर॰एल $1 पावे में त्रुटि",
        "http-bad-status": "एच॰टी॰टी॰पी अनुरोध कय समय समस्या रहा: $1 $2",
+       "http-internal-error": "आन्तरिक HTTP त्रुटि",
        "upload-curl-error6": "यू॰आर॰एल तक नाई पहुँच मिला।",
        "upload-curl-error6-text": "दिहल यू॰आर॰एल तक नाई पहुँचि मिला।\nकृपया एक दाइ फिर से जाँच लिहा जाय कि यू॰आर॰एल सही है औ उ साइट चलत है।",
        "upload-curl-error28": "अपलोड टाइम‍आउट",
        "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": "दिहल समय से मिलए वाला इ फ़ाइल कय कवनो पुरान अवतरण नाइ है।",
+       "filerevert-identical": "फ़ाइल का वर्तमान संस्करण पहले से ही चयनित एक जैसा है।",
        "filedelete": "$1 मिटावा जाय",
        "filedelete-legend": "फ़ाइल मिटावा जाय",
        "filedelete-intro": "आप फ़ाइल '''[[Media:$1|$1]]''' इतिहास सहित हटावे जावा जात है।",
        "randomincategory-nopages": "[[:Category:$1|$1]] श्रेणी में कवनो पन्ना नाई है।",
        "randomincategory-category": "श्रेणी:",
        "randomincategory-legend": "श्रेणी में कवनो एक (रैंडम) पन्ना",
+       "randomincategory-submit": "जावा जाय",
        "randomredirect": "कवनो एक पुनर्निर्देशन पे जावा जाय",
        "randomredirect-nopages": "नामस्थान \"$1\" में कवनो पुनर्निर्देशन नाइ है।",
        "statistics": "आँकड़ा:",
        "pageswithprop-legend": "पन्ना जवनन में पन्ना गुण है",
        "pageswithprop-text": "इ पन्ना पन्नन कय गुण कय उपयोग करय वाले पन्नन कय सुचिबद्ध करत है ।",
        "pageswithprop-prop": "गुण कय नाँव:",
+       "pageswithprop-reverse": "उल्टे क्रम में क्रमबद्ध करें",
+       "pageswithprop-sortbyvalue": "संपत्ति मूल्य के आधार पर क्रमबद्ध करें",
        "pageswithprop-submit": "खोजा जाय",
        "pageswithprop-prophidden-long": "लम्मा पाठ गुण मान लुकुआवा है ($1)",
        "pageswithprop-prophidden-binary": "बाइनरी पाठ गुण मान लुकुआवा है ($1)",
        "uncategorizedcategories": "अश्रेणीकृत श्रेणि",
        "uncategorizedimages": "अश्रेणीकृत फ़ाइल",
        "uncategorizedtemplates": "अश्रेणीकृत साँचा",
+       "uncategorized-categories-exceptionlist": " # इसमें श्रेणियों की एक सूची है, जिसका विशेष:श्रेणीहीन_श्रेणियाँ उल्लेख नहीं किया जाना चाहिए। प्रति पंक्ति एक, \"*\" से शुरू. दूसरे वर्ण (व्हाइटस्पेस सहित) के साथ शुरू होने वाली पंक्तिओं को नजरअंदाज कर दिया जाता है। टिप्पणियों के लिए \"#\" का उपयोग करें।",
        "unusedcategories": "अप्रयुक्त श्रेणि",
        "unusedimages": "अप्रयुक्त फ़ाइल",
        "wantedcategories": "जवन श्रेणि चाहि",
        "wantedpages": "जवन पन्ना चाहिँ",
+       "wantedpages-summary": "जिसअनुपस्थित पृष्ठों की सूचीमें उनसे जुड़े अधिकांश कड़ियाँ हैं सिवाय उन पृष्ठों के जिनमें केवल अनुप्रेषित कड़ियाँ जुड़ती हों। अनुपस्थित पृष्ठों की सूची के लिए जिनमें केवल अनुप्रेषित कड़ियाँ जुड़ती हों, [[{{#special:BrokenRedirects}}|टूटे हुये पुनर्निर्देशों की सूची]] देखें।",
        "wantedpages-badtitle": "परिणामन् में अवैध शीर्षक: $1",
        "wantedfiles": "जवन फाइल चाहिँ",
        "wantedfiletext-cat": "निम्न फ़ाइलें प्रयुक्त हैं पर मौजूद नहीं हैं। बाहरी भंडारों की फ़ाइलें मौजूद होने के बावजूद सूची में हो सकती हैं। ऐसी कोई भी गलत प्रविष्टियाँ <del>काटी हुई</del> होंगी। साथ ही, जो पृष्ठ ऐसी फ़ाइलों का प्रयोग करते हैं जो मौजूद नहीं हैं, उनकी सूची [[:$1]] में है।",
+       "wantedfiletext-cat-noforeign": "निम्न लिखित फ़ाइल प्रयोग में हैं पर मौजूद नहीं है। इसके अतिरिक्त, पृष्ठ जो इन ग़ैर-मौजूद फ़ाइलों को सजोए हुए हैं उनकी सूची [[:$1]] में है।",
        "wantedfiletext-nocat": "निम्न फ़ाइलें प्रयुक्त हैं पर मौजूद नहीं हैं। बाहरी भंडारों की फ़ाइलें मौजूद होने के बावजूद सूची में हो सकती हैं। ऐसी कोई भी गलत प्रविष्टियाँ <del>काटी हुई</del> होंगी।",
        "wantedfiletext-nocat-noforeign": "इ कुल फाइल कय इस्तेमाल कै गा है लेकिन मौजुद नाइ है ।",
        "wantedtemplates": "जवन साँचा चाहिँ",
        "mostrevisions": "सबसे ढेर अवतरण वाला पन्ना",
        "prefixindex": "उपसर्ग अनुसार पन्ना",
        "prefixindex-namespace": "उपसर्ग वाले कुल पन्ना ($1 नामस्थान)",
+       "prefixindex-submit": "देखावा",
        "prefixindex-strip": "सूची में उपसर्ग लुकुआवा जाय",
        "shortpages": "छोट पन्ना",
        "longpages": "लम्मा पन्ना",
        "deadendpages": "बंद सिरा पन्ना",
        "deadendpagestext": "नीचे दिहल पन्ना {{SITENAME}} कय अउर पन्नन् से नाइ जोडान है।",
        "protectedpages": "सुरक्षित पन्ना",
+       "protectedpages-filters": "फिल्टर",
        "protectedpages-indef": "खालि अनिश्चितकालीन सुरक्षा",
+       "protectedpages-summary": "यह पृष्ठ उन सभी पृष्ठों की सूची देता है जो अब सुरक्षित हैं। उन सभी शीर्षकों की सूची जानने के लिए जो बनाने से सुरक्षित किए गए हैं, देखिए [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] ।",
        "protectedpages-cascade": "कास्केडिङ सुरक्षा खालि",
        "protectedpages-noredirect": "पुनर्निदेश लुकुआवा जाय",
        "protectedpagesempty": "इ पारामिटर मे कवनो सुरक्षित पन्ना नाइ है ।",
        "protectedpages-performer": "सुरक्षित करय वाला सदस्य",
        "protectedpages-params": "सुरक्षा प्राचल",
        "protectedpages-reason": "कारण",
+       "protectedpages-submit": "पन्ना देखावा",
        "protectedpages-unknown-timestamp": "अज्ञात",
        "protectedpages-unknown-performer": "अज्ञात सदस्य",
        "protectedtitles": "सुरक्षित शीर्षक",
        "protectedtitles-summary": "इ पन्ना अइसन पन्ना शीर्षकन् कय सूची देत है जवने कय अभीन बनावै से सुरक्षित कई गा है। सुरक्षित पन्नन कय सूची देखेक खर्तिन [[{{#special:ProtectedPages}}|{{int:protectedpages}}]] देखा जाय।",
        "protectedtitlesempty": "इ नियमन् द्वारा कवनो भी शीर्षक सुरक्षित नाइ है।",
+       "protectedtitles-submit": "शीर्षक देखावा",
        "listusers": "सदस्य सूची",
        "listusers-editsonly": "अइसन सदस्य देखावा जाय जवन संपादन कै चुका हैँ ।",
+       "listusers-temporarygroupsonly": "केवल अस्थायी सदस्य समूह के सदस्यों को दिखायें",
        "listusers-creationsort": "बनावै कय तिथि कय आधार पे क्रमांकन करा जाय",
        "listusers-desc": "घटे कय क्रम मे मिलावा जाय",
        "usereditcount": "$1 {{PLURAL:$1|सम्पादन}}",
        "usercreated": "$1 कय $2 बजे बनाइ गय, सदस्यनाँव $3 होय",
        "newpages": "नँवा पन्ना",
+       "newpages-submit": "देखावा",
        "newpages-username": "सदस्यनाँव:",
        "ancientpages": "सबसे पुरान पन्ना",
        "move": "घुस्कावा जाय",
        "movethispage": "ई पन्ना कय नाँव बदला जाय",
        "unusedimagestext": "निम्न फ़ाइलें मौजूद हैं, पर किसी भी पृष्ठ में प्रयुक्त नहीं हैं।\nकृपया ध्यान दें कि अन्य वेब साइट एक सीधी कड़ी से फ़ाइल से जुड़ी हो सकती हैं, और सक्रिय उपयोग में होने के बावजूद यहाँ दिखाई जा सकती है।",
+       "unusedimagestext-categorizedimgisused": "निम्नोक्त फ़ाइल अस्तित्व में तो है मगर किसी पृष्ठ से जुड़ा नहीं है। श्रेणीबद्ध चित्र को प्रयुक्त ही माना जाता है भले ही वह किसी पृष्ठ से न जुड़े हों।\nकृपया ध्यान दें कि अन्य वेबसाइटें सीधे इस फ़ाइल से जुड़ी हो सकती हैं, और कई अन्य भी यहाँ सूचीबद्ध हो सकती हैं भले ही वह वर्तमान प्रयोग में न हों।",
        "unusedcategoriestext": "निचे दिहा श्रेणी पन्ना मौजूद है लेकिन कवनो भी पन्ना या अउर श्रेणि एकर प्रयोग नाँइ करत हैं।",
        "notargettitle": "लक्ष्य नाइ",
        "notargettext": "इ काम कय करेक लिये आप लक्ष्य पन्ना या सदस्य नाइ बतावा गा है।",
        "apihelp": "API सहयोग",
        "apihelp-no-such-module": "मोड्युल \"$1\" नाइ मिला ।",
        "apisandbox": "एपीआई प्रयोगस्थल",
+       "apisandbox-jsonly": "एपीआई प्रयोगपृष्ठ का उपयोग करने हेतु जावास्क्रिप्ट अनिवार्य है।",
        "apisandbox-api-disabled": "इ साइट पे ए.पी.आइ अक्षम है ।",
+       "apisandbox-intro": "इस पृष्ठ का उपयोग <strong>मीडियाविकि वेब एपीआई</strong> के लिए करें। इसके उपयप्ग हेतु देखें: [[mw:API:Main page|एपीआई प्रलेखन]] उदाहरण: [https://www.mediawiki.org/wiki/API#A_simple_example मुख्यपृष्ठ के सामग्री हेतु]",
        "apisandbox-submit": "अनुरोध करा जाय",
        "apisandbox-reset": "स्पष्ट",
+       "apisandbox-retry": "फिर कोशिश करा",
+       "apisandbox-loading": "एपीआई मॉड्यूल के द्वारा जानकारी लोड कर रहा \"$1\"...",
+       "apisandbox-load-error": "एपीआई मॉड्यूल के जानकारी लोड करते समय त्रुटि हुई \"$1\": $2",
+       "apisandbox-no-parameters": "इस एपीआई मॉड्यूल का कोई प्राचल नहीं है।",
+       "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": "This [[Special:ApiHelp/main#main/templatedparams|templated parameter]] is offered based on the {{PLURAL:$1|value|values}} of $2.",
+       "apisandbox-deprecated-parameters": "प्राचल पुराना हो चुका है",
+       "apisandbox-fetch-token": "टोकन स्वतः भरें",
+       "apisandbox-add-multi": "जोड़ा",
+       "apisandbox-submit-invalid-fields-title": "कुछ जगह अमान्य है",
+       "apisandbox-submit-invalid-fields-message": "कृपया चिन्हित जगह को ठीक कर दुबारा प्रयास करें।",
        "apisandbox-results": "परिणाम",
+       "apisandbox-sending-request": "एपीआई अनुरोध भेज रहा...",
+       "apisandbox-loading-results": "एपीआई परिणाम ले रहा...",
+       "apisandbox-results-error": "एपीआई के समय कोई त्रुटि हुई: $1",
+       "apisandbox-results-login-suppressed": "यह अनुरोध लॉग-आउट उपयोगकर्ता के रूप में संसाधित किया गया है क्योंकि यह ब्राउज़र समान-मूल सुरक्षा बायपास करने के लिए इस्तेमाल किया जा सकता है। ध्यान दें कि एपीआई सैंडबॉक्स का स्वचालित टोकन हैंडलिंग ऐसे अनुरोधों के साथ ठीक से काम नहीं करता है, कृपया उन्हें मैन्युअल रूप से भरें।",
+       "apisandbox-request-selectformat-label": "अनुरोध डेटा को इस रूप में दिखाएं:",
+       "apisandbox-request-format-url-label": "यूआरएल क्वेरी स्ट्रिंग",
        "apisandbox-request-url-label": "अनुरोध URL:",
-       "apisandbox-request-time": "अनुरोध समय: $1",
+       "apisandbox-request-json-label": "JSON अनुरोध:",
+       "apisandbox-request-time": "अनुरोध समय: {{PLURAL:$1|$1 मि}}",
+       "apisandbox-results-fixtoken": "टोकन सही करें और दोबारा भेजें।",
+       "apisandbox-results-fixtoken-fail": "टोकन \"$1\" डालने में विफल",
+       "apisandbox-alert-page": "इस पृष्ठ के जगह अमान्य है।",
+       "apisandbox-alert-field": "जगह में डाला गया जानकारी अमान्य है।",
+       "apisandbox-continue": "जारी रखें",
+       "apisandbox-continue-clear": "खाली करें",
+       "apisandbox-continue-help": "{{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries continue] अंतिम अनुरोध होगा; {{int:apisandbox-continue-clear}} निरंतरता-संबंधित मानदंडों को साफ करेगा।",
+       "apisandbox-param-limit": "अधिकतम सीमा का उपयोग करने के लिए <kbd>अधिकतम</kbd> दर्ज करें।",
+       "apisandbox-multivalue-all-namespaces": "$1 (सभी नामस्थान)",
+       "apisandbox-multivalue-all-values": "$1 (सभी मूल्य)",
        "booksources": "किताबीन कय स्रोत",
        "booksources-search-legend": "किताबीन कय स्रोत खोजा जाय",
        "booksources-search": "खोजा जाय",
        "booksources-text": "निचँवा पुरान व नँवा किताब बेचय वाले वेबसाइट कय एड्रेस हैं,जवने मा आप कय खोजल किताबिन् कय बारे मे ढेर जानकारी मिलि सकत है :",
        "booksources-invalid-isbn": "इ ISBN सही नाइ लागत है ,मुल स्रोत से नकल करत कय कवनो गल्ती होइ गा होइ ,जाँचा लीन जाय ।",
+       "magiclink-tracking-rfc": "RFC जादू लिंक का उपयोग कर रहे पेज",
+       "magiclink-tracking-rfc-desc": "यह पृष्ठ आरएफसी जादू लिंक का उपयोग करता है। कैसे माइग्रेट करें [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] पर देखें।",
+       "magiclink-tracking-pmid": "पीएमआईडी जादू लिंक का उपयोग कर रहे पेज",
+       "magiclink-tracking-pmid-desc": "यह पृष्ठ पीएमआईडी जादू लिंक का उपयोग करता है। कैसे माइग्रेट करें [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] पर देखें।",
+       "magiclink-tracking-isbn": "आईएसबीएन के जादुई कड़ियों का उपयोग करने वाले पृष्ठ",
+       "magiclink-tracking-isbn-desc": "यह पृष्ठ आईएसबीएन जादू लिंक का उपयोग करता है। कैसे माइग्रेट करें [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] पर देखें।",
        "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": "लॉग",
+       "logeventslist-submit": "देखावा",
+       "logeventslist-more-filters": "और अधिक लॉग दिखायें",
+       "logeventslist-patrol-log": "परीक्षण लॉग",
+       "logeventslist-tag-log": "टैग लॉग",
        "all-logs-page": "कुल सार्वजनिक लॉग",
        "alllogstext": "{{SITENAME}} की सभी उपलब्ध लॉगों की प्रविष्टियों का मिला-जुला प्रदर्शन।\nआप और बारीकी के लिए लॉग का प्रकार, सदस्य नाम (लघु-दीर्घ-अक्षर संवेदी), या प्रभावित पृष्ठ (लघु-दीर्घ-अक्षर संवेदी) चुन सकते हैं।",
        "logempty": "लॉग में अइसन कवनो चिज नाइ है।",
        "log-title-wildcard": "इ पाठ से शुरू होय वाला शीर्षक खोजा जाय",
        "showhideselectedlogentries": "चुनल लाग प्रविष्टि देखावा जाय/लुकुआवा जाय",
+       "log-edit-tags": "चुने गए लॉग प्रविक्तियों एक सम्पादन टैग",
+       "checkbox-select": "चुनें: $1",
+       "checkbox-all": "सगरौ",
+       "checkbox-none": "कुछ नाइ",
+       "checkbox-invert": "बदलें",
        "allpages": "कुल पन्ना",
        "nextpage": "अगला पन्ना ($1)",
        "prevpage": "पहिलका पन्ना ($1)",
        "cachedspecial-viewing-cached-ts": "आप इ पन्ना कय कैश करल अवतरण देखा जात है ,जवन कि पुरै सही नाइ होइ सकत है ।",
        "cachedspecial-refresh-now": "हालिए कय देखा जाय ।",
        "categories": "श्रेणी",
-       "categoriespagetext": "निम्नोक्त {{PLURAL:$1|श्रेणी|श्रेणि}} मा पन्ना या मीडिया है।\nजवन श्रेणिन् कय [[Special:UnusedCategories|अप्रयुक्त श्रेणि]] यहँ नाइ देखाई गा हैं।\n[[Special:WantedCategories|वांछित श्रेणि]] भी देखा जाय।",
+       "categories-submit": "देखावा",
+       "categoriespagetext": "निम्नोक्त {{PLURAL:$1|श्रेणी|श्रेणियों}} में पृष्ठ या मीडिया है और यह अप्रयुक्त नहीं भी हो सकती है।\n[[Special:WantedCategories|वांछित श्रेणियाँ]] भी देखें।",
        "categoriesfrom": "इ अक्षर से शुरु होय वाला श्रेणी देखावा जाय:",
        "deletedcontributions": "हटावल सदस्य योगदान",
        "deletedcontributions-title": "हटावल सदस्य योगदान",
        "activeusers-intro": "इ सक्रिय सदस्यन् कय सूची होय जे पिछला $1 {{PLURAL:$1|दिन}} में कुछ काम करें है।",
        "activeusers-count": "$1 {{PLURAL:$1|काम}} पिछला $3 {{PLURAL:$3|दिन}} में",
        "activeusers-from": "इ अक्षर से शुरु होय वाले सदस्य देखावा जाय:",
+       "activeusers-groups": "इस समूह के सदस्यों को दिखाएँ:",
+       "activeusers-excludegroups": "इस समूह के सदस्यों को न दिखाएँ:",
        "activeusers-noresult": "कवनो सदस्य नाइ मिलें ।",
+       "activeusers-submit": "सक्रिय सदस्यों को दिखायें",
        "listgrouprights": "सदस्य समूह अधिकार",
        "listgrouprights-summary": "नीचे इ विकि खर्तीन परिभाषित सदस्य समूहन् कय सूची होय, सथवे में हर समूह से जोड़ान अधिकारो है।\nहर अधिकार कय बारे में [[{{MediaWiki:Listgrouprights-helppage}}|ढेर जानकरीओ]] उपलब्ध है।",
        "listgrouprights-key": "* <span class=\"listgrouprights-granted\">दिहल अधिकार</span>\n* <span class=\"listgrouprights-revoked\">हटावल अधिकार</span>",
        "listgrouprights-namespaceprotection-header": "नामस्थान पाबंदी",
        "listgrouprights-namespaceprotection-namespace": "नामस्थान",
        "listgrouprights-namespaceprotection-restrictedto": "अइसन अधिकार जवन संपादन करय देत हैं",
+       "listgrants": "प्रदान",
+       "listgrants-summary": "यह प्रदान की गई सूची है। सदस्य अपने खाते को अनुपयोग के द्वारा उपयोग कर सकते हैं, लेकिन केवल कुछ सीमित अधिकार तक ही। यह अधिकार सदस्य द्वारा दिया गया अधिकार तक ही सीमित रहता है। यहाँ [[{{MediaWiki:Listgrouprights-helppage}}|अन्य जानकारी]] भी है, जो एक अधिकार के बारे में बताता है। \\",
+       "listgrants-grant": "अधिकार",
+       "listgrants-rights": "अधिकार",
        "trackingcategories": "ट्रैक करय वाले श्रेणी",
+       "trackingcategories-summary": "इस पृष्ठ पर उन जोड़ने वाली श्रेणियों की सूची मिलती है जो स्वतः रूप से मीडियाविकि सॉफ़्टवेयर द्वारा बनते हैं। उनके नाम सम्बंधित प्रणालि सन्देश को बदलने से {{ns:8}} नामस्थान में बदले जा सकते हैं।",
        "trackingcategories-msg": "ट्रैक करय वाले श्रेणी",
        "trackingcategories-name": "सनेशा कय नाँव",
        "trackingcategories-desc": "श्रेणी राखेक क्राइटेरिया",
+       "restricted-displaytitle-ignored": "नजरअंदाज कर दिया प्रदर्शन शीर्षक वाले पृष्ठ",
+       "restricted-displaytitle-ignored-desc": "पृष्ठ पर ध्यान नहीं दिया गया है।<code><nowiki>{{DISPLAYTITLE}}</nowiki></code> क्योंकि यह पृष्ठ के वास्तविक शीर्षक के बराबर नहीं है।",
+       "noindex-category-desc": "यह पृष्ठ रोबॉटों द्वारा सूचीबद्ध नहीं है क्योंकि इसमें जादूई शब्द <code><nowiki>__NOINDEX__</nowiki></code> है और ऐसे स्थान पर है जहाँ उस झंडी की अनुमति है।",
+       "index-category-desc": "इस पृष्ठ का एक <code><nowiki>__INDEX__</nowiki></code> उस पर है (ऐसे स्थान पर है जहाँ उस झंडी की अनुमति है), और इसलिए इसे रोबॉटों द्वारा सूचीबद्ध है जबकि साधारणतः ऐसा नहीं होता है।",
+       "post-expand-template-inclusion-category-desc": "पृष्ठ का साइज़ <code>$wgMaxArticleSize</code> से बढ़कर है। सभी साँचों के फैलाने के बाद कुछ साँचों को फैलाया नहीं जा सकता है।",
+       "post-expand-template-argument-category-desc": "यह पृष्ठ <code>$wgMaxArticleSize</code>  से बढ़कर है जबकि साँचों के आंतरिक पाठ को बढ़ाया गया हो (तिगुणी ब्रेस के रूप में जैसे <code>{{{Foo}}}</code>) ।",
+       "expensive-parserfunction-category-desc": "इस पृष्ठ में कई फैले हुए कार्यों को प्रयोग में लाया गया है (जैसे <code>#ifexist</code>). देखिए [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "इस पृष्ठ में फ़ाइल की टूटी हुई कड़ी शामिल है  (एक कड़ी जिससे एक ऐसे फ़ाइल को जोड़े जाने का प्रयास है जो मौजूद नहीं है) ।",
+       "hidden-category-category-desc": "इस श्रेणी में <code><nowiki>__HIDDENCAT__</nowiki></code> के पृष्ठ पाठ है, जो पूर्व निर्धारित रूप से पृष्ठों में श्रेणी कड़ियों के सन्दूक में दिखाई देने से उसे रोकती है।",
        "trackingcategories-nodesc": "कवनो ढेर जानकारी नाइ है ।",
        "trackingcategories-disabled": "श्रेणी अक्षम करा है",
        "mailnologin": "कवनो पठवे वाला ठहर नाइ है",
        "watchnologin": "लॉग इन नाइ करा गा है",
        "addwatch": "ध्यानसूची में जोड़ा जाय",
        "addedwatchtext": "आप कय [[Special:Watchlist|ध्यानसूची]] मा \"[[:$1]]\" पन्ना जोड़ाइ गय।\nभविष्य मा इ पन्ना अव एकर बातचीत पन्ना मा होवै वाला बदलाव आप कय ध्यानसूची मा देखाइ।",
+       "addedwatchtext-talk": "\"[[:$1]]\" और उससे जुड़े पन्ने आपके [[Special:Watchlist|ध्यानसूची]] में जोड़ दिये गए हैं।",
        "addedwatchtext-short": "\"$1\" कय आप कय धियान सुची मा डारी गय ।",
        "removewatch": "ध्यानसूची से हटावा जाय",
        "removedwatchtext": "\"[[:$1]]\" नाँव कय पन्ना कय आपकय [[Special:Watchlist|ध्यानसूची]] से हटाय दिहा गा है।",
+       "removedwatchtext-talk": "\"[[:$1]]\" और उससे जुड़े पन्ने आपके [[Special:Watchlist|ध्यानसूची]] से हटा दिये गए हैं।",
        "removedwatchtext-short": "\"$1\" कय आप कय धियान सुची से निकारि गय ।",
        "watch": "ध्यान रक्खा जाय",
        "watchthispage": "इ पन्ना पे ध्यान रक्खा जाय",
        "wlheader-showupdated": "पन्ना जवन आपकय द्वारा देखय जाएक बाद बदलि गा है '''बोल्ड''' मे देखाइ।",
        "wlnote": "$3 को $4 बजे तक पिछले <strong>$2</strong> {{PLURAL:$2|घंटे|घंटों}} में {{PLURAL:$1|हुआ एक|हुए <strong>$1</strong>}} परिवर्तन निम्न {{PLURAL:$1|है|हैं}}।",
        "wlshowlast": "पिछला $1 घंटा $2 दिन  देखा जाय",
+       "watchlist-hide": "लुकुवावा",
+       "watchlist-submit": "देखावा",
+       "wlshowtime": "अंतिम दिखाएँ:",
+       "wlshowhideminor": "छोट संपादन",
+       "wlshowhidebots": "बॉट",
+       "wlshowhideliu": "पंजीकृत सदस्य",
+       "wlshowhideanons": "अनाम प्रयोक्ता",
+       "wlshowhidepatr": "परीक्षित सम्पादन",
+       "wlshowhidemine": "मेरा संपादन",
+       "wlshowhidecategorization": "पृष्ठ श्रेणीकरण",
        "watchlist-options": "ध्यानसूची विकल्प",
        "watching": "ध्यान देत हँय...",
        "unwatching": "ध्यानसूची से हटत है...",
        "enotif_lastdiff": "इ बदलाव देखय खत्तिर $1 देखा जाय।",
        "enotif_anon_editor": "अज्ञात  प्रयोगकर्ता  $1",
        "enotif_body": "प्रिय $WATCHINGUSERNAME जी,\n\n$PAGEINTRO $NEWPAGE\n\nसम्पादन सारांश: $PAGESUMMARY $PAGEMINOREDIT\n\nसंपादक से संपर्क करें:\nई-मेल: $PAGEEDITOR_EMAIL\nविकि: $PAGEEDITOR_WIKI\n\nजब तक आप इस पृष्ठ पर लॉगिन कर के फिर से नहीं जाते, तब तक और बदलाव होने पर भी आपको फिर से सूचना नहीं भेजी जाएगी।\nआप चाहें तो अपनी ध्यानसूची में मौजूद सभी पन्नों के लिए सूचना चिन्ह को भी बदल सकते हैं।\n\nआपकी सहायिका, {{SITENAME}} की सूचक प्रणाली\n\n--\nअपनी ई-मेल सूचना के जमाव बदलने के लिये देखें\n{{canonicalurl:{{#special:Preferences}}}}\n\nअपनी ध्यानसूची के जमाव बदलने के लिए देखें\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nइस पृष्ठ को अपनी ध्यानसूची से हटाने के लिये देखें\n$UNWATCHURL\n\nराय देने या अधिक सहायता पाने के लिए:\n$HELPPAGE",
+       "enotif_minoredit": "यह एक छोटा बदलाव है",
        "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": "मेटावा जाय",
        "historywarning": "<strong>चेतावनी:<strong> आप जो पृष्ठ हटाने जा रहे हैं उसके इतिहास में $1 {{PLURAL:$1|अवतरण}} हैं:",
+       "historyaction-submit": "Show revisions",
        "confirmdeletetext": "आप एकठु पन्ना कय अव ओकरे कुल अवतरण सहित हटावे जावा जात है।\nजाँच लीन जाय कि आप इ करय चाहा जात है, आप एकरे परिणाम कय जाना जात है, औ आप इ [[{{MediaWiki:Policy-url}}|नीति]] कय अनुसार करा जात है।",
        "actioncomplete": "काम पुरा होइ गवा",
        "actionfailed": "काम असफल",
        "dellogpage": "हटावे कय लॉग",
        "dellogpagetext": "नीचे हालिए में हटावल पन्नन कय सूची है।",
        "deletionlog": "हटावे कय लॉग",
+       "log-name-create": "पृष्ठ निर्माण लॉग",
+       "log-description-create": "नीचे हाल में बनाये गये पृष्ठों की सूची है।",
+       "logentry-create-create": "$1 ने $3 पृष्ठ {{GENDER:$2|बनाया}}",
        "reverted": "पुरान अवतरण कय पहिले जैसन कै गय",
        "deletecomment": "कारण:",
        "deleteotherreason": "अउर/दुसर कारण:",
        "delete-warning-toobig": "इ पन्ना कय संपादन इतिहास $1 से ढेर {{PLURAL:$1|अवतरण}} होएक  नाते से बहुत बड़ा है।\nएका हटावे से {{SITENAME}} कय डाटाबेस कय गतिविधिन् में व्यवधान आइ सकत है;\nकृपया सोच समझ कर आगे बढ़ें।",
        "deleteprotected": "आप इ पन्ना कय नाइ मिटाइ सका जात है काहे से इ पन्ना सुरक्षित है ।",
        "deleting-backlinks-warning": "'''चेतावनी:''' जवन पन्ना आप हटावे जावा जात है ओसे [[Special:WhatLinksHere/{{FULLPAGENAME}}|अउर पन्ना]] जुड़त है या ओसे ट्रांसक्लूड करत है।",
+       "deleting-subpages-warning": "<strong>चेतावनी:</strong>आप जिस प्रष्ठ को हटाना चाहते हैं,\nरखता है [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|a subpage|$1 subpages|51=over 50 subpages}}]].",
        "rollback": "संपादन वापिस लिहा जाय",
+       "rollback-confirmation-confirm": "Please confirm:",
+       "rollback-confirmation-yes": "वापिस लिहा जाय",
+       "rollback-confirmation-no": "खारिज",
        "rollbacklink": "वापिस लिहा जाय",
        "rollbacklinkcount": "$1 {{PLURAL:$1|सम्पादन}} वापिस लिहा जाय",
        "rollbacklinkcount-morethan": "$1 से ढेर {{PLURAL:$1|सम्पादन}} वापिस लिहा जाय",
        "rollbackfailed": "वापिस लेब असफल रहा",
+       "rollback-missingparam": "अनुरोध पर अपेक्षित पैरामीटर गायब हैं।",
+       "rollback-missingrevision": "अवतरण डाटा दिखाने में असमर्थ।",
        "cantrollback": "पुरान अवतरण कय पहिले जैसन नाइ कै सका जात है ; इ पन्ना कय आखिरी योगदानकर्ता खालि इ लेख कय लिखे हैं ।",
        "alreadyrolled": "[[User:$2|$2]] ([[User talk:$2|बातचीत]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) द्वारा किए गए  [[:$1]] के पिछले संपादन को वापिस पुरानी स्थिति पर नहीं लाया जा सकता है;\nकिसी और ने इस बीच या तो इस पृष्ठ को फिर से संपादित कर दिया है या पहले ही पृष्ठ पुरानी स्थिति पर लाया जा चुका है।\n\nइस पृष्ठ का अन्तिम संपादन [[User:$3|$3]] ([[User talk:$3|बातचीत]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) ने किया है।",
        "editcomment": "संपादन सारांश रहा: <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कृपया पीछे जाएँ और पृष्ठ को पुनः लोड करें, तब दुबारा कोशिश करें।",
+       "changecontentmodel": "पन्ने का सामग्री प्रारूप बदलें",
+       "changecontentmodel-legend": "पृष्ठ सामग्री का नमूना",
+       "changecontentmodel-title-label": "पृष्ठ शीर्षक",
+       "changecontentmodel-current-label": "Current content model:",
+       "changecontentmodel-model-label": "नयि सामग्री का नमूना",
+       "changecontentmodel-reason-label": "कारण:",
+       "changecontentmodel-submit": "बदला",
+       "changecontentmodel-success-title": "सामगरि का नामुने मे बदलाव हुुुाा हेेे",
+       "changecontentmodel-success-text": "[[:$1]] के सामग्री का प्रकार परिवर्तित हुआ।",
+       "changecontentmodel-cannot-convert": "[[:$1]] की सामग्री का प्रकार $2 में नहीं बदल सकता है।",
+       "changecontentmodel-nodirectediting": "$1 सामग्री सीधे सम्पादन समर्थित नहीं करता है",
+       "changecontentmodel-emptymodels-title": "कोई सामग्री प्रारूप उपलब्ध नहीं",
+       "changecontentmodel-emptymodels-text": "[[:$1]] में सामग्री किसी और प्रकार में परिवर्तित नहीं हो सकती।",
+       "log-name-contentmodel": "सामाग्री परिवर्तन लॉग",
+       "log-description-contentmodel": "यह पृष्ठ, पृष्ठों के सामग्री मॉडल और प्रारम्भिक के अतिरिक्त सामग्री मॉडल द्वारा निर्मित पृष्ठों के परिवर्तनों की सूची रखता है।",
+       "logentry-contentmodel-new": "$1 ने  $3 पृष्ठ का {{GENDER:$2|निर्माण}} किया बिना मूल सामग्री प्रारूप के \"$5\"",
+       "logentry-contentmodel-change": "$1 ने $3 पृष्ठ का सामग्री \"$4\" से \"$5\" {{GENDER:$2|परिवर्तित किया}}",
+       "logentry-contentmodel-change-revertlink": "पहिले जैसन करा जाय",
+       "logentry-contentmodel-change-revert": "पहिले जैसन करा जाय",
        "protectlogpage": "सुरक्षा लॉग",
        "protectlogtext": "नीचे पन्ना सुरक्षा कय बदलाव कय सूची है।\nवर्तमान सुरक्षित पन्नन कय सूची कय लिए [[Special:ProtectedPages|सुरक्षित पन्ना कय सूची]] देखा जाय।",
        "protectedarticle": "\"[[$1]]\" कय सुरक्षित कै गय",
        "modifiedarticleprotection": "\"[[$1]]\" कय सुरक्षा-स्तर बदलि गय",
        "unprotectedarticle": "\"[[$1]]\" से सुरक्षा हटाइ गय",
        "movedarticleprotection": "सुरक्षा स्तर \"[[$2]]\" से बदलि कय  \"[[$1]]\" कै गय",
+       "protectedarticle-comment": "\"[[$1]]\" {{GENDER:$2|सुरक्षित किया गया।}}",
+       "modifiedarticleprotection-comment": "\"[[$1]]\" हेतु {{GENDER:$2|सुरक्षा स्तर बदला गया}}",
+       "unprotectedarticle-comment": "\"[[$1]]\" से {{GENDER:$2|सुरक्षा हटाया गया}}",
        "protect-title": "\"$1\" कय सुरक्षा स्तर बदला जाय",
        "protect-title-notallowed": "\"$1\" कय सुरक्षा स्तर देखा जाय",
        "prot_1movedto2": "[[$1]] कय नाँव बदलि कय [[$2]] कै गय",
        "undeletehistorynoadmin": "ई पन्ना हटाई दिहा गा है।\nहटावै  कय कारन नीचे सारांश में दिहा है, अउर साथय उ सदस्यन् कय बारे में विस्तार भी दिहा है, जे हटावै से पहिले इ पन्ना कय संपादित करे रहें।\nइ हटावल अवतरण कय पाठ केवल प्रबंधकन् कय लगे है।",
        "undelete-revision": "$1 ($4 कय $5 बजे $3 बनाइन रहा) कय मेटावल संस्करण:",
        "undeleterevision-missing": "अमान्य अथवा अनुपस्थित अवतरण।\nया तो आप ग़लत कड़ी प्रयोग कर रहे हैं, या यह अवतरण पुनर्स्थापित किया जा चुका है, अथवा इसे लेखागार से हटा दिया गया है।",
+       "undeleterevision-duplicate-revid": "{{PLURAL:$1|One revision|$1संशोधन}} को पुनर्स्थापित नहीं किया जा सका, क्योंकि {{PLURAL:$1|यह|अपने}} <code>rev_id</code> पहले से ही उपयोग में है।",
        "undelete-nodiff": "कवनो पुरान अवतरण नाँइ मिला।",
        "undeletebtn": "वापस लै आवा जाय",
        "undeletelink": "देखा जाय/शुरु कय जैसन करा जाय",
        "undelete-search-title": "हटावल पन्ना खोजा जाय",
        "undelete-search-box": "हटावल पन्ना खोजा जाय",
        "undelete-search-prefix": "शुरूआती शब्द कय अनुसार पन्ना खोजा जाय:",
+       "undelete-search-full": "शीर्षक युक्त प्रष्ठ दिखाएं",
        "undelete-search-submit": "खोजा जाय",
        "undelete-no-results": "हटावल पन्नन कय लेखागार में मिलत जुलत कवनो पन्ना नाइ मिला।",
        "undelete-filename-mismatch": "$1 कय फ़ाइल कय हटावल अवतरण पुनर्स्थापित नाइ कै सका जात है: फ़ाइल कय नाँव मिलत जुलत नाइ है ।",
        "namespace": "नामस्थान:",
        "invert": "चुनाव उल्टा करा जाय",
        "tooltip-invert": "चयनित नामस्थान (और संबद्ध नामस्थान यदि जाँच) के भीतर पृष्ठों में किए गए परिवर्तन छुपाने के लिए इस बक्से को चिह्नित करें",
+       "tooltip-whatlinkshere-invert": "चुने गए नामस्थान की पृष्ठों से कड़ियों को छिपाने के लिए इस सन्दूक को चिन्हित कीजिए",
        "namespace_association": "सम्बद्ध नामस्थान",
        "tooltip-namespace_association": "भी बात या विषय नाम स्थान चयनित नाम स्थान के साथ जुड़े को शामिल करने के लिए इस बक्से को चिह्नित करें।",
        "blanknamespace": "(मुख्य)",
        "contributions": "{{GENDER:$1|सदस्य}} योगदान",
        "contributions-title": "$1 कय योगदान",
        "mycontris": "योगदान",
+       "anoncontribs": "योगदान",
        "contribsub2": "{{GENDER:$3|$1}} ($2) कय खर्तीन",
+       "contributions-subtitle": "{{GENDER:$3|$1}} कय खर्तीन",
        "contributions-userdoesnotexist": "सदस्य \"$1\" पंजीकृत नाइ है।",
+       "negative-namespace-not-supported": "Namespaces with negative values are not supported.",
        "nocontribs": "इन कसौटियों से मिलनेवाले बदलाव मिले नहीं।",
        "uctop": "अबहिनै कय",
        "month": "इ महिन्नासे (औ पुरान):",
        "year": "इ सालसे (औ पुरान):",
+       "date": "दिनांक से (प्रारम्भ)",
        "sp-contributions-newbies": "खालि नँवा सदस्यन् कय योगदान देखावा जाय",
        "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": "योगदान कय खर्तीन खोज",
        "sp-contributions-username": "आईपी एड्रेस या सदस्यनाँव:",
        "sp-contributions-toponly": "केवल उन सम्पादनों को दिखाएँ जो नवीनतम संशोधन हैं",
        "sp-contributions-newonly": "केवल वे सम्पादन दिखाएँ जिनसे पृष्ठ निर्मित हुए हों",
+       "sp-contributions-hideminor": "छोटे सम्पादन छुपाएँ",
        "sp-contributions-submit": "खोजा जाय",
+       "sp-contributions-outofrange": "कोई भी परिणाम दिखने में असफल। अनुरोधित आईपी की रेंज सीआईडीआर सीमा से अधिक है $1।",
        "whatlinkshere": "हिँया का जोडान अहै",
        "whatlinkshere-title": "$1 से जोडान पन्ना",
        "whatlinkshere-page": "पन्ना:",
        "whatlinkshere-hidelinks": "$1 कड़ि",
        "whatlinkshere-hideimages": "$1 फ़ाइल लिंक",
        "whatlinkshere-filters": "छनना",
+       "whatlinkshere-submit": "जा",
        "autoblockid": "अपने आप अवरोध #$1",
        "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** सदस्यों को तंग करना",
        "ipb-disableusertalk": "इ सदस्य कय अवरुद्ध होए पे आपन बातचीत पन्ना सम्पादन करै से रोका जाय",
        "ipb-change-block": "इ सेटिङ कय इस्तेमाल कै कय सदस्य कय अवरोधित करा जाय",
        "ipb-confirm": "अवरोधण कय पुष्टि करा जाय",
+       "ipb-sitewide": "सम्पूर्ण साइट",
+       "ipb-partial": "आंशिक",
+       "ipb-sitewide-help": "Every page on the wiki and all other contribution actions.",
+       "ipb-partial-help": "Specific pages or namespaces.",
+       "ipb-pages-label": "पन्ना",
+       "ipb-namespaces-label": "नामस्थान",
        "badipaddress": "अमान्य आईपी ठहर।",
        "blockipsuccesssub": "अवरोधन सफल ।(संपादन करय से रोक दिहा गा है)",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]] को ब्लॉक किया जा चुका है।<br />\nब्लॉकों की समीक्षा के लिए [[Special:BlockList|ब्लॉक लॉग]] देखें।",
        "ipb-blockingself": "आप खुद को अवरोधित कर रहे हैं! क्या आप वाकई ऐसा करना चाहते हैं?",
+       "ipb-confirmhideuser": "आप एक ऐसे उपयोगकर्ता पर प्रतिबंध लगाने जा रहे हैं जिसके पास \"उपयोगकर्ता छिपाओ\" का विकल्प मौजूद है। इससे इस उपयोगकर्ता का नाम सभी सूचियों और लॉग प्रविष्टियों में नहीं दिखेगा। क्या आप विश्वासपूर्ण रूप से ऐसा करना चाहते हैं?",
+       "ipb-confirmaction": "यदि आप विश्वासपूर्ण रूप से यही करना चाहते हैं, तो कृपया \"{{int:ipb-confirm}}\" की फ़ील्ड को नीचे से चुनिए।",
        "ipb-edit-dropdown": "ब्लॉक कारण संपादित करा जाय",
        "ipb-unblock-addr": "$1 कय अनब्लॉक करा जाय",
        "ipb-unblock": "सदस्य या आईपी एड्रेस कय अनब्लॉक करा जाय",
        "ipb-blocklist": "सद्य ब्लॉक देखा जाय",
        "ipb-blocklist-contribs": "{{GENDER:$1|$1}} कय योगदान",
+       "ipb-blocklist-duration-left": "$1 बाकी",
+       "block-actions": "अवरोध कार्यवाही:",
        "block-expiry": "समाप्ति:",
+       "block-options": "अतिरिक्त विकल्प:",
+       "block-prevent-edit": "संपादन",
+       "block-reason": "कारण:",
+       "block-target": "सदस्यनाम या आईपी पता:",
        "unblockip": "सदस्य कय अवरोध हटावा जाय।",
        "unblockiptext": "पहले ब्लॉक किये हुए आईपी एड्रेस या सदस्यनाम को अनब्लॉक करने के लिये नीचे दिया गया फार्म भरें।",
        "ipusubmit": "इ अवरोध हटावा जाय",
        "unblocked-id": "अवरोध $1 निकारि दिहा गा है",
        "unblocked-ip": "[[Special:Contributions/$1|$1]] कय ब्लाक कै गय",
        "blocklist": "अवरोधित उपयोक्ता",
+       "autoblocklist": "स्वतःअवरोध",
+       "autoblocklist-submit": "खोजा जाय",
+       "autoblocklist-legend": "स्वतः अवरोध सूची",
+       "autoblocklist-localblocks": "स्थानीय {{PLURAL:$1|स्वतः अवरोध}}",
+       "autoblocklist-total-autoblocks": "स्वतःअवरोध की कुल संख्या: $1",
+       "autoblocklist-empty": "स्वतः अवरोध सूची खाली है।",
+       "autoblocklist-otherblocks": "अन्य {{PLURAL:$1|स्वतःअवरोध}}",
        "ipblocklist": "अवरोधित आईपी ठहर या सदस्यनाँव",
        "ipblocklist-legend": "अवरोधित सदस्य कय खोजा जाय",
        "blocklist-userblocks": "खाता कय अवरोध लुकुआवा जाए",
        "blocklist-tempblocks": "अस्थाई अवरोध लुकुआवा जाए",
        "blocklist-addressblocks": "एक्ठु आईपी अवरोध लुकुआवा जाए",
+       "blocklist-type": "प्रकार:",
+       "blocklist-type-opt-all": "सगरौ",
+       "blocklist-type-opt-sitewide": "सम्पूर्ण साइट",
+       "blocklist-type-opt-partial": "आंशिक",
        "blocklist-rangeblocks": "श्रेणी अवरोध लुकुआवा जाए",
        "blocklist-timestamp": "समय मोहर",
        "blocklist-target": "लक्ष्य",
        "createaccountblock": "खाता बनावै कय रोक लगाए दिहा गा हैं",
        "emailblock": "ईमेल अवरोधित",
        "blocklist-nousertalk": "आपन बातचीत पन्ना भी संपादन नाइ कै सकत हैँ ।",
+       "blocklist-editing": "संपादन",
+       "blocklist-editing-sitewide": "सम्पादन (सम्पूर्ण साइट)",
+       "blocklist-editing-page": "पन्ना",
+       "blocklist-editing-ns": "नामस्थान",
        "ipblocklist-empty": "ब्लॉक सूची खाली है।",
        "ipblocklist-no-results": "पूछल आईपी एड्रेस / सदस्यनाँव पे ब्लॉक नाइ है।",
        "blocklink": "अवरोधित करा जाय",
        "unblocklink": "अवरोध हटावा जाय",
        "change-blocklink": "विभाग बदला जाय",
+       "empty-username": "(no username available)",
        "contribslink": "योगदान",
        "emaillink": "ईमेल पठवा जाय",
        "autoblocker": "आपका आइ॰पी पता स्वतः अवरुद्ध है, चूँकि इसे हाल ही में \"[[User:$1|$1]]\" द्वारा प्रयोग किया गया है।\n$1 को अवरोधित करने का कारण है: \"$2\"",
        "block-log-flags-angry-autoblock": "उन्नत स्व-अवरोध लागू",
        "block-log-flags-hiddenname": "सदस्य नाँव लुकुआवा है",
        "range_block_disabled": "प्रबंधकन कय अब रेंज ब्लॉक करेक अनुमति नाइ है।",
+       "ipb-prevent-user-talk-edit": "Editing their own talk page must be allowed for a partial block, unless it includes a restriction on the User Talk namespace.",
        "ipb_expiry_invalid": "अवैध समाप्ति कालावधी।",
+       "ipb_expiry_old": "समाप्ती समय बीत चुका है।",
        "ipb_expiry_temp": "छुपायें हुए सदस्यनाम ब्लॉक्स हमेशा के लिये होने चाहिये।",
        "ipb_hide_invalid": "इस खाते को छिपा नहीं पाए; इस से {{PLURAL:$1|एक सम्पादन किया गया है|$1 सम्पादन किये गये हैं}}।",
+       "ipb_hide_partial": "छुपे सदस्यनाम अवरोध साइटवाइड अवरोध होने चाहिये।",
        "ipb_already_blocked": "\"$1\" पहिलवे से ब्लॉक हैं",
        "ipb-needreblock": "$1 पहले ही अवरोधित है।\nक्या आप अवरोध के जमाव बदलना चाहेंगे?",
        "ipb-otherblocks-header": "अउर {{PLURAL:$1|ब्लॉक}}",
        "ipb_blocked_as_range": "गलती: $1 यह आइपी सीधे बाधित नहीं है और अबाध्य नहीं किया जा सकता।\nफिर भी, $2 प्रकार को बाध्य किया जा सकता है, जिनको अबाध्य किया जा सकता है।",
        "ip_range_invalid": "गलत आईपी रेंज",
        "ip_range_toolarge": "/$1 से अधिक बड़े रेञ्ज ब्लॉकों की अनुमति नहीं है।",
+       "ip_range_exceeded": "आईपी श्रेणी इसकी अधिकतम सीमा से अधिक है अनुमत रेंज: / $1",
+       "ip_range_toolow": "आईपी रेंज प्रभावी रूप से अनुमति नहीं है",
        "proxyblocker": "प्रॉक्सी ब्लॉकर",
        "proxyblockreason": "आपका IP पता बाधित किया जा चुका है क्योंकि यह एक मुक्त प्रतिनिधि है।\nकृपया आप अपने इंटरनेट सेवा प्रदान करने वाले से या तकनीकी सहायक से सम्पर्क करें अथवा उन्हें इस भयावह सुरक्षा समस्या के बारे में सूचित करें।",
        "sorbsreason": "{{SITENAME}} द्वारा इस्तेमालमें लाये जाने वाले DNSBL में आपके आईपी एड्रेसको ओपन प्रॉक्सीमें दर्शाया गया हैं।",
        "sorbs_create_account_reason": "{{SITENAME}} के DNSBL ने आपका आईपी एड्रेस ओपन प्रोक्सी करके सूचित किया हैं। आप खाता खोल नहीं सकतें।",
+       "softblockrangesreason": "आपके आईपी ($1) के द्वारा बिना खाता के सम्पादन नहीं हो सकता है। कृपया खाते में लॉग इन करें।",
+       "xffblockreason": "एक आई०पी० पता जो X-Forwarded-For हेडर में मौजूद है, या तो आपका है या उस प्रौक्सी सरवर का है जिसका आप प्रयोग कर रहे हैं और उस पर प्रतिबंध लगा दिया गया है। वास्तविक कारण था: $1",
        "cant-see-hidden-user": "जिस सदस्य को आप अवरोधित करने की कोशिश कर रहे हैं उसे पहले ही अवरोधित कर के छुपाया जा चुका है।\nचूँकि आपके पास hideuser अधिकार नहीं है, आप इस सदस्य का अवरोधन ना देख सकते हैं और ना ही सम्पादित कर सकते हैं।",
        "ipbblocked": "आप अन्य प्रयोक्ताओं को अवरोधित या अनवरोधित नहीं कर सकते, क्योंकि आप स्वयं अवरोधित हैं",
        "ipbnounblockself": "आपको स्वयं को अनवरोधित करने की अनुमति नहीं है",
        "lockdbsuccesstext": "डाटाबेस को ताला लगाया गया हैं।<br />\nआपके द्वारा मेंटेनन्स पूरा होने के बाद [[Special:UnlockDB|ताला खोलना]] याद रखें।",
        "unlockdbsuccesstext": "डाटाबेसका ताला खोल दिया गया हैं।",
        "lockfilenotwritable": "डाटाबेस के लॉक फ़ाईलमें लिख नहीं पा रहें हैं।\nडाटाबेस का ताला लगाने या खोलनेके लिये, इस फ़ाईलपर लिखा जाना जरूरी हैं।",
+       "databaselocked": "डाटाबेस पहले से बंद है।",
        "databasenotlocked": "डाटाबेस को ताला नहीं लगाया गया हैं।",
        "lockedbyandtime": "(से {{GENDER:$1|$1}} पे $2 यँह $3)",
        "move-page": "$1 कय घुस्कावा जाय",
        "move-page-legend": "पन्ना घुसकावा जाय",
        "movepagetext": "निचे दिहा फारम पन्ना कय नाँव बदल दी अव ओकर इतिहास नँवा नाँव से देखाए लागि ।\nपुरान शिर्षक कय नँवा नाँव मे पुनर्निर्देशन कै जाइ।\nमूल शीर्षक की ओर ले जाने वाले पुनार्निर्देशों को आप स्वचालित रूप से बदल सकते हैं।\nयदि आप ऐसा नहीं करते हैं तो कृपया [[Special:DoubleRedirects|दोहरे पुनर्निर्देशन]] या [[Special:BrokenRedirects|टूटे पुनर्निर्देशन]] के लिए ज़रूर जाँच करें।\nकड़ियाँ सही जगह इंगित करती रहें, यह सुनिश्चित करना आपकी ज़िम्मेदारी है।\n\nअगर नये शीर्षक का लेख पहले से है तो स्थानांतरण '''नहीं''' होगा। पर अगर नये शीर्षक वाला लेख कहीं और अनुप्रेषित करता है और साथ ही उसके पुराने संस्करण नहीं हैं तो स्थानांतरण हो जायेगा।\nइसका मतलब कि यदि आपसे गलती हो जाए तो आप वापस पुराने नाम पर इस पृष्ठ का स्थानांतरण कर सकेंगे, और साथ ही आप किसी मौजूदा पृष्ठ के बदले यह स्थानांतरण नहीं कर सकते हैं।\n\n'''चेतावनी!'''\nयदि पृष्ठ काफ़ी लोकप्रिय है तो उसके लिए यह एक बहुत बड़ा व अकस्मात् परिवर्तन हो सकता है;\nआगे बढ़ने से पहले इसका अंजाम अच्छी तरह समझ लें।",
        "movepagetext-noredirectfixer": "नीचे दिया हुआ पर्चा पृष्ठ का नाम बदल देगा, उसका सारा इतिहास भी नए नाम से दिखना शुरू हो जाएगा।\nपुराना शीर्षक नये नाम को अनुप्रेषित करेगा ।\nमूल शीर्षक की ओर ले जाने वाले अग्रेषणों को आप स्वचालित रूप से बदल सकते हैं।\nयदि आप ऐसा नहीं करते हैं तो कृपया [[Special:DoubleRedirects|दोहरे]] पुनर्निर्देशण या [[Special:BrokenRedirects|टूटे पुनर्निर्देशन]] के लिए ज़रूर जाँच करें।\nकड़ियाँ सही जगह इंगित करती रहें, यह सुनिश्चित करना आपकी जिम्मेदारी है।\n\nअगर नये शीर्षक का लेख पहले से है तो स्थानांतरण '''नहीं''' होगा। पर अगर नये शीर्षक वाला लेख खाली है अथवा कहीं और अनुप्रेषित करता है और साथ ही उसके पुराने संस्करण नहीं हैं तो स्थानांतरण हो जायेगा ।\nइसका मतलब कि यदि आपसे गलती हो जाए तो आप वापस पुराने नाम पर इस पृष्ठ का स्थानांतरण कर सकेंगे, और साथ ही आप किसी मौजूदा पृष्ठ के बदले यह स्थानांतरण नहीं कर सकते हैं।\n\n'''चेतावनी!'''\nयदि पृष्ठ काफ़ी लोकप्रिय है तो उसके लिए यह एक बहुत बड़ा व अकस्मात् परिवर्तन हो सकता है;\nआगे बढ़ने से पहले इसका अंजाम अच्छी तरह समझ लें।\n\n'''सूचना!'''\nस्थानांतरण करनेसे कोई भी महत्वपूर्ण लेख में अनपेक्षित बदलाव हो सकते है ।\nआपसे अनुरोध है कि आप इसके परिणाम जान लें ।",
+       "movepagetext-noredirectsupport": "Using the form below will rename a page, moving all of its history to the new name.\nYou are responsible for making sure that links continue to point where they are supposed to go.\n\nNote that the page will <strong>not</strong> be moved if there is already a page at the new title.\nThis means that you can rename a page back to where it was renamed from if you make a mistake, and you cannot overwrite an existing page.\n\n<strong>Note:</strong>\nThis can be a drastic and unexpected change for a popular page;\nplease be sure you understand the consequences of this before proceeding.",
        "movepagetalktext": "संबंधित वार्ता पृष्ठ इसके साथ स्थानांतरीत नहीं होगा '''अगर:'''\n* आप पृष्ठ दुसरे नामस्थान में स्थानांतरीत कर रहें है\n* इस नाम का वार्ता पृष्ठ पहलेसे बना हुवा है, या\n* नीचे दिया हुआ चेक बॉक्स आपने निकाल दिया है ।\n\nइन मामलोंमे आपको स्वयं यह पृष्ठ जोडने पड़ सकते है ।",
        "moveuserpage-warning": "<strong>चेतावनी:</strong> आप एकठु सदस्य पन्ना कय नाँव बदलय जावा जात है।तनि ध्यान दिहा जाय कि खालि पन्ना कय नाँव बदल जाइ औ सदस्यनाँव <em>नाई</em> बदलि।",
+       "movecategorypage-warning": "<strong>चेतावनी:</strong> आप एक श्रेणी पृष्ठ को स्थानांतरित करने जा रहे हैं। याद रखिए कि केवल वह पृष्ठ स्थानांतरित होगा और पुरानी श्रेणी में शामिल पृष्ठ नई श्रेणी के अंतरगत <em>नहीं</em> आएँगे।",
        "movenologintext": "लेख स्थानान्तरित करने के लिये आपका [[Special:UserLogin|लॉग इन]] किया होना आवश्यक हैं।",
        "movenotallowed": "आप कय इ पन्ना घुस्कावे कय अनुमति नाई है ।",
        "movenotallowedfile": "आप कय फाइल घुस्कावे कय अनुमति नाई है ।",
        "cant-move-to-user-page": "आप कय कवनो पन्नन कय सदस्य पन्ना पय लैजाएक अनुमति नाइ है (सिवाय सदस्य उप पन्नन कय)",
        "cant-move-category-page": "आप कय श्रेणी पन्ना घुस्कावे कय अनुमति नाई है ।",
        "cant-move-to-category-page": "आप कय कवनो पन्ना कय श्रेणी पन्ना पे घुस्कावे कय अनुमति नाई है ।",
+       "cant-move-subpages": "आपको उपपृष्ठों को स्थानांतरित करने की अनुमति नहीं है।",
+       "namespace-nosubpages": "\"$1\" नामस्थान उपपृष्ठ की अनुमति नहीं देता है।",
        "newtitle": "नवा शिर्षक पे :",
        "move-watch": "स्रोत पन्ना अव टार्गेट पन्ना पे ध्यान रक्खा जाय",
        "movepagebtn": "पन्ना घुसकावा जाय",
        "pagemovedsub": "पन्ना घुस्काइ गय",
+       "cannotmove": "निम्न {{PLURAL:$1|कारण|कारणों}} से पृष्ठ स्थानांतरित नहीं किया जा सका:",
        "movepage-moved": "<strong>\"$1\" कय \"$2\" पे घुस्काइ गय</strong>",
        "movepage-moved-redirect": "एक्ठु पुनर्निर्देशन बनाइ गय।",
        "movepage-moved-noredirect": "पुनर्निर्देशन निर्माण दबाइ गय",
+       "movepage-delete-first": "पृष्ठ बदलाव का हिस्सा होने के कारण लक्षित पृष्ठ पर बहुत से बदलाव हटाने योग्य हैं। कृपया पहले मैन्युअली पृष्ठ को हटाये, फिर पुनः प्रयास करें।",
        "articleexists": "इ नाँव कय पन्ना पहिल्वे से मौजुद है या तव आप कवनो गलत नावँ चुना गा है। कवनो दुसर नाँव चुना जाय",
        "cantmove-titleprotected": "नँवा पन्ना बनावै से रोक होएक नाते आप कय इ जगही कवनो दुसर पन्ना घुस्कावै कय अनुमति नाइ है ।",
        "movetalk": "सम्बंधित बातचित पन्ना घुस्कावा जाय",
        "movelogpagetext": "निचे घुस्कावल पन्नन् कय सुची हय",
        "movesubpage": "{{PLURAL:$1|उप-पन्ना}}",
        "movesubpagetext": "नीचे $1 {{PLURAL:$1|पृष्ठ दिखाया गया है, जो इस पृष्ठ का उप पृष्ठ है|पृष्ठ दिखाया गया है, जो इस पृष्ठ के उप पृष्ठ हैं}}।",
+       "movesubpagetalktext": "{{PLURAL:$1|उप-पृष्ठ}} में संबंधित वार्ता पृष्ठ नीचे दिखाए गए हैं",
        "movenosubpage": "इ पन्ना कय कवनो उप-पन्ना नाइ है ।",
        "movereason": "कारण:",
        "revertmove": "पहिले जैसन करा जाय",
        "immobile-target-namespace-iw": "अंतर विकि कड़ी पन्ना लई जाय खत्तीर उचित लक्ष्य नाइ है।",
        "immobile-source-page": "ई पन्ना नाइ घुस्की ।",
        "immobile-target-page": "इ गन्तव्य शिर्षक पय नाइ लैजाय सका जात अहै ।",
+       "bad-target-model": "वाञ्छित स्थान भिन्न सामग्री नमूने का प्रयोग करता है। $1 को बदलकर $2 नहीं किया जा सकता है।",
        "imagenocrossnamespace": "फाइल कय बिना-फाइल नेमस्पेस मा नाइ घुस्काय सका जात है",
        "nonfile-cannot-move-to-file": "बिना-फाइल कय फाइल नेमस्पेस मा नाइ घुस्काय सका जात है ।",
        "imagetypemismatch": "नँवा फाइल एक्सटेन्सन फाइल कय प्रकार से मेल नाइ खात है",
        "export-download": "फ़ाइल रुप में सहेजा जाय",
        "export-templates": "टेम्प्लेटस भी जोडा जाय",
        "export-pagelinks": "जिन पन्नों के हवाले यहाँ हैं, उन्हें भी इस गहराई तक शामिल करें:",
+       "export-manual": "स्वयं से पृष्ठ जोड़ें:",
        "allmessages": "व्यवस्था संदेश",
        "allmessagesname": "नाँव",
        "allmessagesdefault": "सनेशा कय डिफ़ॉल्ट पाठ",
        "djvu_page_error": "DjVu पन्ना रेंज कय बहरे है",
        "djvu_no_xml": "DjVu फ़ाईल कय खत्तीर XML नाइ मिला",
        "thumbnail-temp-create": "अस्थायी थम्बनेल फ़ाइल बनावै में असफल",
+       "thumbnail-dest-create": "थंबनेल को इस स्थान पर सुरक्षित नहीं किया जा सका।",
        "thumbnail_invalid_params": "अमान्य थम्बनेल पैरामीटर",
        "thumbnail_toobigimagearea": "$1 से बडा फाइल",
        "thumbnail_dest_directory": "गन्तव्य निर्देशिका बनावै में असमर्थ",
        "thumbnail_image-type": "चित्र कय प्रकार समर्थित नाइ है",
        "thumbnail_gd-library": "अवैध जीडी लाइब्रेरी जमाव: कार्यसमूह $1 मौजूद नहीं है",
+       "thumbnail_image-size-zero": "चित्र का आकार शून्य प्रतीत हो रहा है",
        "thumbnail_image-missing": "लागत है फाइल नामौजूद है: $1",
+       "thumbnail_image-failure-limit": "हाल के समय में इस थंबनेल को दूसरा रूप देने के कई असफल प्रयास हुए हैं ($1 या उससे अधिक) । कृपया फिर से प्रयास कुछ समय बाद कीजिए।",
        "import": "पन्ना आयात करा जाय",
        "importinterwiki": "ट्रान्सविकि आयात",
        "import-interwiki-text": "आयात करने के लिये एक विकि और एक पृष्ठ चुनें।\nअवतरण दिनांक और संपादक नाम ज्यों-के-त्यों रखे जाएँगे।\nसभी ट्रान्सविकि आयात क्रियाएँ [[Special:Log/import|आयात लॉग]] में डाली जाती हैं।",
        "import-interwiki-history": "इस पृष्ठ के सभी इतिहास अवतरण कॉपी करें",
        "import-interwiki-templates": "कुल साँचा शामिल करा जाय",
        "import-interwiki-submit": "आयात",
+       "import-mapping-default": " पूर्व निर्धारित स्थानों पर आयात करें",
+       "import-mapping-namespace": "किसी नामस्थान पर आयात करें",
+       "import-mapping-subpage": "निम्न लिखित पृष्ठ के उपपृष्ठ के रूप में आयात करें:",
        "import-upload-filename": "फ़ाइल कय नाँव",
+       "import-upload-username-prefix": "इंटरविकी उपसर्ग:",
+       "import-assign-known-users": "स्थानीय उपयोगकर्ताओं को संपादन नियुक्त करें जहां नामित उपयोगकर्ता स्थानीय स्तर पर मौजूद है",
        "import-comment": "टिप्पणी:",
        "importtext": "कृपया स्रोत विकि से संचिका निर्यातित करने के लिए [[Special:Export|निर्यात सुविधा]] का इस्तेमाल करें।\nइसे अपने संगणक पर सँजो के यहाँ चढ़ा दें।",
        "importstart": "पन्ना आयात होत है...",
        "imported-log-entries": "आयातित $1 {{PLURAL:$1|लॉग प्रविष्टि|लॉग प्रविष्टियाँ}}.\nजब कभी कोई फाइल आपको import करनी हो",
        "importfailed": "आयात विफल होइ गवा: <nowiki>$1</nowiki>",
        "importunknownsource": "अज्ञात आयात स्रोत प्रकार",
+       "importnoprefix": "कोई इंटरविकी उपसर्ग नहीं दिया गया था",
        "importcantopen": "आयात फ़ाइल खोल नाई खुला।",
        "importbadinterwiki": "अवैध अन्तरविकि कड़ी",
        "importsuccess": "आयात सफल होइ गवा!",
        "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-error-edit": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि आपको उसे संपादित करने की अनुमति नहीं हैं।",
+       "import-error-create": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि आपको उसे बनाने की अनुमति नहीं हैं।",
+       "import-error-interwiki": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि इसका नाम अंतरविकी कड़ियाँ बनाने के लिए आरक्षित है।",
+       "import-error-special": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि यह एक ऐसे विशेष नामस्थान के अंतर्गत आता है जिसमें पृष्ठ नहीं बनाए जा सकते हैं।",
+       "import-error-invalid": "पृष्ठ \"$1\" आयात नहीं किया गया है क्योंकि इसका आयात पश्चात जो नाम होता वह इस विकी पर अमान्य है।",
+       "import-error-unserialize": "पृष्ठ \"$1\" के संशोधन $2 को क्रम से हटाया नहीं जा सका। संशोधन के बारे में बताया गया है कि सामग्री नमूना $3 को क्रम $4 के रूप प्रयोग में लाया गया था।",
+       "import-error-bad-location": "संअशोधन $2 जिसमें सामग्री नमूने $3 का प्रयोग किया गया है, को इस विकि के \"$1\" पर जमा नहीं किया जा सकता, क्यों वह नमूना उस पृष्ठ के नमूने से भिन्न है।",
        "import-options-wrong": "गलत {{PLURAL:$2|विकल्प}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "दिहल उपसर्ग पन्ना शीर्षक अमान्य है।",
        "import-rootpage-nosubpage": "दिए गए उपसर्ग पृष्ठ \"$1\" के नामस्थान में उप-पृष्ठ नहीं बनाए जा सकते।",
        "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-anoncontribs": "इस आईपी पते से संपादन की सूची",
        "tooltip-pt-login": "आप कय खाता प्रवेश खत्तिर प्रोत्साहित कै जात है, लेकिन ई अनिवार्य नाई है",
+       "tooltip-pt-login-private": "इस विकि का उपयोग करने हेतु लॉगिन (प्रवेश) करें",
        "tooltip-pt-logout": "बहरे निकरा जाय",
        "tooltip-pt-createaccount": "हमारा सुझाव है की आप खाता बनाएँ और लॉगिन करें, परन्तु यह अनिवार्य नहीं है",
        "tooltip-ca-talk": "सामग्री पन्ना कय बारे में बात-चीत",
        "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": "कुल विशेष पन्नन कय सूची",
        "tooltip-ca-nstab-category": "श्रेणी पन्ना  देखा जाय",
        "tooltip-minoredit": "एहपे छोट संपादन कय चिन्हा लगावा जाय",
        "tooltip-save": "आपन बदलाव सहेजा जाय",
+       "tooltip-publish": "आपके परिवर्तक प्रकाशित करें",
        "tooltip-preview": "आप कय करल बदलाव कय झलक देखा जाय, सहेजय से पहिले एकर इस्तेमाल करा जाय!",
        "tooltip-diff": "इ पाठ मे आप कय करल बदलाव देखा जाय",
        "tooltip-compareselectedversions": "इ पन्ना कय चुनल अवतरणन् में अन्तर देखा जाय।",
        "tooltip-undo": "\"पुरानी स्थिति पर लाएँ\" इस बदलाव को वापस ले जा के संपादन पर्चे को झलक रीति में दिखलाता है।\nइसके जरिए सारांश में पुरानी स्थिति में लाने का कारण लिखा जा सकता है।",
        "tooltip-preferences-save": "पसंद सहेजा जाय",
        "tooltip-summary": "छोट सारांश लिखा जाय",
+       "common.json": "/* Any JSON here will be loaded for all users on every page load. */",
        "anonymous": "{{SITENAME}} कय {{PLURAL:$1||}} बेनामी सदस्य",
        "siteuser": "विकिपीडिया सदस्य  $1",
        "anonuser": "{{SITENAME}} अज्ञात उपयोगकर्ता $1",
        "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": "मूल जानकारी",
        "pageinfo-display-title": "प्रदर्शन शिर्षक",
        "pageinfo-default-sort": "डिफ़ॉल्ट सॉर्ट की",
        "pageinfo-length": "पन्ना आकार (बाइट्स में)",
+       "pageinfo-namespace": "नामस्थान",
        "pageinfo-article-id": "पन्ना आइ॰डी",
        "pageinfo-language": "पन्ना सामग्री भाषा",
+       "pageinfo-language-change": "बदला जाय",
        "pageinfo-content-model": "पन्ना सामग्री नमुना",
+       "pageinfo-content-model-change": "बदला जाय",
        "pageinfo-robot-policy": "सर्च इंजन बॉट से अनुक्रमण",
        "pageinfo-robot-index": "अनुमतित",
        "pageinfo-robot-noindex": "अनुमतित नाइ है",
        "pageinfo-watchers": "पन्ना पे नजर राखय वालें कय गिन्ती",
+       "pageinfo-visiting-watchers": "पृष्ठ देखने वालों की संख्या जो हाल के संपादनों में आए।",
        "pageinfo-few-watchers": "$1 से कम ध्यान देवै {{PLURAL:$1|वाला|वाले}}",
+       "pageinfo-few-visiting-watchers": "हो सकता है या नहीं भी कि कोई इस हाल के सम्पादन द्वारा कोई प्रयोक्ता आया हो।",
        "pageinfo-redirects-name": "इ पन्ना पे कुल पुनर्निर्देश कय गिन्ती",
        "pageinfo-subpages-name": "इ पन्ना कय उपपन्ना",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|पुनर्निर्देश}}; $3 {{PLURAL:$3|ग़ैर-पुनर्निर्देश}})",
        "pageinfo-redirectsto-info": "जानकारी",
        "pageinfo-contentpage": "सामग्री पन्नन मा गिन जात अहै",
        "pageinfo-contentpage-yes": "हाँ",
+       "pageinfo-protect-cascading": "सुरक्षा-विकल्प यहाँ से व्यापक हो रहे हैं",
        "pageinfo-protect-cascading-yes": "हाँ",
+       "pageinfo-protect-cascading-from": "सुरक्षा-विकल्प व्यापक हो रहे हैं स्थान-से",
        "pageinfo-category-info": "श्रेणी जानकारी",
        "pageinfo-category-total": "कुल सदस्य गिन्ती",
        "pageinfo-category-pages": "पन्नन कय सङ्ख्या",
        "pageinfo-category-subcats": "उपश्रेणिन कय गिन्ती",
        "pageinfo-category-files": "फाइल कय गिन्ती",
+       "pageinfo-user-id": "सदस्य पता",
+       "pageinfo-file-hash": "हैश मान",
+       "pageinfo-view-protect-log": "इस पृष्ठ का सुरक्षा लॉग देखें।",
        "markaspatrolleddiff": "जाँचल चिन्हीत करा जाय",
        "markaspatrolledtext": "इ पन्ना कय जाँचल चिन्हीत करा जाय",
+       "markaspatrolledtext-file": "इस फ़ाइल संस्करण को जांचा हुआ चिन्हित करें",
        "markedaspatrolled": "जाँचल चिन्हीत करा जाय",
        "markedaspatrolledtext": "[[:$1]] कय चयनित अवतरण जाँचल चिन्हित कै गय।",
        "rcpatroldisabled": "नँवा बदलाव कय परीक्षण अक्षम है",
        "markedaspatrollederrornotify": "जाँचा हुआ चिन्हित करना असफल रहा।",
        "patrol-log-page": "परीक्षण लॉग",
        "patrol-log-header": "यह परीक्षित अवतरणों की लॉग है।",
+       "confirm-markpatrolled-button": "ठीक है",
+       "confirm-markpatrolled-top": "$2 के $3 संशोधन को परीक्षित चिन्ह्नत करे?",
        "deletedrevision": "पुरान अवतरण $1 हटाय दिहा गा है",
        "filedeleteerror-short": "फ़ाईल हटावै मा समस्या: $1",
        "filedeleteerror-long": "फ़ाइल हटावै में आवा गल्ती:\n\n$1",
        "svg-long-error": "अमान्य एस॰वी॰जी फ़ाइल: $1",
        "show-big-image": "मूल फ़ाइल",
        "show-big-image-preview": "इ पूर्वावलोकन कय आकार:  $1 ।",
+       "show-big-image-preview-differ": "पूर्वावलोकन $3 का आकार $2 फ़ाइल: $1",
        "show-big-image-other": "अउर  {{PLURAL:$2| resolution|resolutions}}:  $1 ।",
        "show-big-image-size": "$1 × $2  पिक्सेल",
        "file-info-gif-looped": "चक्रित",
        "newimages-summary": "यह विशेष पृष्ठ हाल ही में अपलोड की गयी फ़ाइलें दिखाता है।",
        "newimages-legend": "छनना",
        "newimages-label": "फाइल नाँव (या ओकर अंश):",
+       "newimages-user": "आईपी पता या सदस्यनाम",
+       "newimages-newbies": "केवल नये खातों के योगदान दिखायें",
        "newimages-showbots": "बाट कय अपलोड देखावा जाय",
+       "newimages-hidepatrolled": "जाँचा हुआ अपलोड छुपाएँ",
+       "newimages-mediatype": "मीडिया प्रकार:",
        "noimages": "देखेक खत्तीर कुछ नाइ है",
+       "gallery-slideshow-toggle": "टॉगल थंबनेल",
        "ilsubmit": "खोजा जाय",
        "bydate": "मिती कय अनुसार",
        "sp-newimages-showfrom": "$2, $1 कय बाद कय फ़ाईलें देखावा जाय",
        "confirmemail_body_set": "किसी ने, शायद आपने ही, आई॰पी पते $1 से,\n{{SITENAME}} पर \"$2\" सदस्य खाते का ई-मेल पता यह ईमेल पता निर्दिष्ट किया है।\n\nइस बात की पुष्टि करने के लिए कि यह सदस्य खाता आपका ही है,\nऔर {{SITENAME}} पर ईमेल सुविधाएँ शुरू करने के लिए निम्न लिंक अपने ब्राउज़र में खोलें:\n\n$3\n\nयदि यह सदस्य खाता आपका नहीं है, ई-मेल पुष्टि रद्द करने के लिए निम्न लिंक पर जाएँ:\n\n$5\n\nयह पुष्टिकरण लिंक $6 को $7 के बाद काम नहीं करेंगे।",
        "confirmemail_invalidated": "इ-मेल एड्रेस प्रमाणिकरण रद्द कै गय",
        "invalidateemail": "इ-मेल प्रमाणिकरण रद्द करा जाय",
+       "notificationemail_subject_changed": "{{SITENAME}} पंजीकृत ईमेल खाता बदला गया।",
+       "notificationemail_subject_removed": "{{SITENAME}} पंजीकृत ईमेल खाता हटाया गया।",
+       "notificationemail_body_changed": "आप या किसी और व्यक्ति ने $1 आईपी पते से,\n{{SITENAME}} में आपके खाते का ईमेल पता \"$2\" से बदल कर \"$3\" कर दिया है। \n\nयदि यह आपने नहीं किया है, तो कृपया तुरंत प्रबन्धकों को इसकी सूचना दें।",
+       "notificationemail_body_removed": "आप या किसी और व्यक्ति ने $1 आईपी पते से,\n{{SITENAME}} में आपके खाते से ईमेल पता \"$2\" को हटा दिया है।\n\nयदि यह आपने नहीं किया है, तो कृपया तुरंत प्रबन्धकों को इसकी सूचना दें।",
        "scarytranscludedisabled": "[आंतरविकि ट्रान्स्क्लुडिंग बंद है]",
        "scarytranscludefailed": "[$1 कय लिये साँचा नाइ मङाइ मिला]",
        "scarytranscludefailed-httpstatus": "[$1 कय लिये साँचा नाइ मँगाइ मिला, त्रुटि: HTTP $2]",
        "confirmrecreate": "सदस्य [[User:$1|$1]] ([[User talk:$1|वार्ता]]) ने आपके द्वारा संपादन शुरू होने के बाद यह पृष्ठ निम्नलिखित कारण देकर हटाया हैं:\n: ''$2''\nक्या आप इसे फिरसे बनाना चाहतें हैं, इसकी निश्चिती करें।",
        "confirmrecreate-noreason": "जब आपने इस पृष्ठ का सम्पादन शुरू किया था, उसके बाद से सदस्य [[User:$1|$1]] ([[User talk:$1|talk]]) ने इसे हटा दिया है।  कृपया पुष्टि करें कि आप इस पृष्ठ को पुनः बनाना चाहते हैं।",
        "recreate": "फिरसे बनावा जाय",
+       "confirm-purge-title": "पृष्ठ ताजा करें",
        "confirm_purge_button": "ठीक है",
        "confirm-purge-top": "पन्ना कय कैश साफ करा जाय ?",
+       "confirm-purge-bottom": "किसी पृष्ठ को मिटाने से संचिका साफ़ हो जाती है और इस वजह से ताज़ातरीन संस्करण प्रकट हो जाता है।",
        "confirm-watch-button": "ठीक है",
        "confirm-watch-top": "इ पन्ना कय अपने ध्यान सुचि मा डारा जाय",
        "confirm-unwatch-button": "ठीक है",
        "confirm-unwatch-top": "इ पन्ना कय अपने ध्यानसूची से हटावा जाय ?",
+       "confirm-rollback-button": "ठीक है",
+       "confirm-rollback-top": "इस पृष्ठ के सम्पादन पूर्ववत करें?",
+       "confirm-rollback-bottom": "This action will instantly rollback the selected changes to this page.",
+       "confirm-mcrrestore-title": "अवतरण पुरानी स्थिति पर लाएँ",
+       "confirm-mcrundo-title": "परिवर्तन पूर्ववत करें",
+       "mcrundofailed": "वापस लेना असफल रहा",
+       "mcrundo-missingparam": "अनुरोध पर अपेक्षित प्राचल गायब हैं।",
+       "mcrundo-changed": "आपके परिवर्तन देखने के बाद पृष्ठ बदल चुका है। कृपया नये परिवर्तनों का पुनरीक्षण करें।",
+       "mcrundo-parse-failed": "नये अवतरण की व्याख्या असफल रही: $1",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← पिछला पन्ना",
        "imgmultipagenext": "अगला पन्ना →",
        "imgmultigo": "जावा जाय",
        "imgmultigoto": "पन्ना $1 पे जावा जाय",
        "img-lang-default": "(डिफ़ॉल्ट भाषा)",
+       "img-lang-info": "इस चित्र को $1. $2 में ढालें",
        "img-lang-go": "जावा जाय",
        "ascending_abbrev": "asc",
        "descending_abbrev": "desc",
        "autosumm-blank": "पन्ना कय खाली कै गय",
        "autosumm-replace": "पन्ना कय '$1' से बदलि जात है।",
        "autoredircomment": "[[$1]] पे अनुप्रेषित",
+       "autosumm-removed-redirect": "हटाया गया रीडायरेक्ट [[$1]] के लिए",
+       "autosumm-changed-redirect-target": "[[$1]] से [[$2]] तक पुन्नः प्रेषित लक्ष्य बदल गया|",
        "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|रॉ ध्यानसूची का संपादन]] भी कर सकते हैं।",
        "watchlistedit-clear-legend": "अवलोकन सूची खाली कीन जाय",
        "watchlistedit-clear-explain": "आपकी ध्यानसूची से सभी पृष्ठ हटा दिये जायेंगे",
        "watchlistedit-clear-titles": "शिर्षक",
+       "watchlistedit-clear-submit": "ध्यानसूची को हटाएँ (यह स्थाई है!)",
        "watchlistedit-clear-done": "आपकी ध्यानसूची खाली कर दी गयी है।",
+       "watchlistedit-clear-jobqueue": "आपकी ध्यानसूची की साफ हो रही है। इसे पूर्ण होने में कुछ समय लग सकता है!",
        "watchlistedit-clear-removed": "$1 पृष्ठ{{PLURAL:$1|हटाया गया|हटाये गए}}:",
        "watchlistedit-too-many": "यहाँ दर्शाने के लिए अत्यधिक पृष्ठ हैं।",
        "watchlisttools-clear": "अवलोकन सूची खाली कीन जाय",
        "watchlisttools-edit": "ध्यानसूची देखा जाय अव संपादित कीन जाय",
        "watchlisttools-raw": "रॉ ध्यानसूची देखा जाय अव संपादित कीन जाय",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|वार्ता]])",
+       "timezone-local": "स्थानीय",
        "duplicate-defaultsort": "'''Warning:''' पुरानी मूल क्रमांकन कुंजी \"$1\" के बजाय अब मूल क्रमांकन कुंजी \"$2\" होगी।",
+       "duplicate-displaytitle": "<strong>चेतावनी:</strong> शीर्षक दिखाएँ \"$2\" पूर्व दिखाए गए शीर्षक \"$1\" पर छा रहा है।",
+       "restricted-displaytitle": "<strong>चेतावनी :</strong> प्रदर्शित शीर्षक \"$1\" को नजरअंदाज किया गया है, क्योंकि यह वास्तविक शीर्षक से मिलता नहीं है।",
+       "invalid-indicator-name": "<strong>त्रुटि:</strong> पृष्ठ स्थिति सांकेतक <code>नाम</code> गुण खाली नहीं रहना चाहिए।",
        "version": "संस्करण",
        "version-extensions": "इन्स्टॉल करल एक्स्टेंशन",
        "version-skins": "इन्स्टॉल करल त्वचा",
        "version-specialpages": "खाश पन्ना",
        "version-parserhooks": "पार्सर हूक",
        "version-variables": "चल राशी(variables)",
+       "version-editors": "सम्पादक",
        "version-antispam": "स्प्याम रोकथाम",
        "version-other": "अउर",
        "version-mediahandlers": "मीडिया संचालक",
        "version-poweredby-others": "अउर",
        "version-poweredby-translators": "translatewiki.net अनुवादक",
        "version-credits-summary": "हम निम्न व्यक्तियों द्वारा [[Special:Version|मीडियाविकि]] में किये गए योगदानों को सराहते हैं।",
+       "version-license-info": "मीडियाविकि मुक्त सॉफ़्टवेयर है; आप उसका पुनः वितरण कर सकते हैं और/अथवा उसे जे०एन०यू० साधारण सार्वजनिक लाइसेंस के अंतरगत संशोधित कर सकते हैं, जैसा की फ़्री लाइसेंस फ़ाउन्डेशन द्वारा प्रकाशित किया गया था; या तो लाइसेंस का अवतरण २, या (आपके विकल्प के अनुसार) उसके बाद के कोई भी अन्य अवतरण।\n\nमीडियाविकि इस आशा के साथ वितरित किया गया है कि यह उपयुक्त है, पर वारंटी के बिना; जिसमें व्यापारिक मापदंड वाली वारंटी भी नहीं है और न ही किसी लक्ष्य के लिए पर्याप्त होने का प्रावधान है। अधिक जानकारी के लिए जे०एन०यू० साधारण सार्वजनिक लाइसेंस देखिये।\n\nआपको इस प्रोग्राम के साथ [{{SERVER}}{{SCRIPTPATH}}/COPYING जे०एन०यू० साधारण सार्वजनिक लाइसेंस की एक प्रति] मिल चुकी होगी; यदि नहीं तो सम्पर्क कीजिए फ़्री लाइसेंस फ़ाउन्डेशन, इंक., 51 फ़्रैंकलिन स्ट्रीट, पाँचवीं मंज़िल, बॉस्टन, एम०ए० 02110-1301, यू०एस०ए० या [//www.gnu.org/licenses/old-licenses/gpl-2.0.html इसे ऑनलाइन पढ़ें].",
        "version-software": "इन्स्टॉल करल प्रणाली",
        "version-software-product": "प्रोडक्ट",
        "version-software-version": "संस्करण",
        "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]]।",
+       "version-libraries-license": "लाइसेंस",
+       "version-libraries-description": "विवरण",
+       "version-libraries-authors": "लेखक",
+       "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": "मूल्य:",
        "redirect-page": "पन्ना आइ॰डी",
        "redirect-revision": "पन्ना अवतरण संख्या",
        "redirect-file": "फ़ाइल कय नाँव",
+       "redirect-logid": "प्रवेश आईडी",
        "redirect-not-exists": "मुल्य नाइ मिला",
+       "redirect-not-numeric": "मान संख्यात्मक नहीं है",
        "fileduplicatesearch": "डुप्लिकेट फाइल खोजा जाय",
        "fileduplicatesearch-summary": "हैश वैल्यू कय अनुसार डुप्लिकेट फाइल खोजा जाय ।",
        "fileduplicatesearch-filename": "फ़ाइल कय नाँव",
        "specialpages-group-developer": "डेवलपर औजार",
        "blankpage": "खाली पन्ना",
        "intentionallyblankpage": "इ पन्ना जानबुझी कय खाली छोडा है ।",
+       "disabledspecialpage-disabled": "यह पृष्ठ सिस्टम प्रबंधक के द्वारा अक्षम किया गया है।",
        "external_image_whitelist": " #यह लाइन जैसी है वैसी ही छोड़ दें<pre>\n #नीचे रेगुलर एक्सप्रेशन के टुकड़े लिखें(बस वही हिस्सा जो // के बीच में आता है)\n #इन एक्सप्रेशन का बाहरी (hotlinked) छवियों के यू॰आर॰एल के साथ मिलान किया जाएगा\n #जो छवियाँ मिलान करेंगी, उन्हें प्रदर्शित किया जाएगा, अन्यथा केवल छवि की कड़ी दिखायी जाएगी\n # # से शुरू होने वाली लाइनें टिप्पणी मानी जाती हैं\n # इस केस-असंवेदी है\n\n #सब रेगुलर एक्सप्रेशन टुकड़े इस लाइन से ऊपर रखें। यह लाइन जैसी है वैसी ही छोड़ दें</pre>",
        "tags": "वैध बदलाव चिप्पि",
        "tag-filter": "[[Special:Tags|चिप्पी]] छननी:",
        "tag-filter-submit": "फिल्टर",
        "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|टैग}}]]: $2",
+       "tag-mw-contentmodelchange": "सामग्री मॉडल परिवर्तन",
+       "tag-mw-contentmodelchange-description": "पृष्ठ [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel सामग्री मॉडल को परिवर्तित करें] के संपादन।",
+       "tag-mw-new-redirect": "नया अनुप्रेषण",
+       "tag-mw-new-redirect-description": "बदलाव जो एक नया रीडायरेक्ट बनाते हैं या पुनर्निर्देशन के लिए एक पृष्ठ बदलते हैं",
+       "tag-mw-removed-redirect": "हटाया गया पुनर्निर्देशन",
+       "tag-mw-removed-redirect-description": "संपादन जो किसी मौजूदा रीडायरेक्ट को गैर रीडायरेक्ट में बदलता है",
+       "tag-mw-changed-redirect-target": "रीडायरेक्ट लक्ष्य बदल गया",
+       "tag-mw-changed-redirect-target-description": "संपादन जो रीडायरेक्ट लक्ष्य को बदलते हैं",
+       "tag-mw-blank": "रिक्त",
+       "tag-mw-blank-description": "सम्पादन जो पृष्ट को खाली कर देता है",
+       "tag-mw-replace": "बदला गया",
+       "tag-mw-replace-description": "संपादन जिसने 90% से अधिक पृष्ट की सामग्री को हटा दिया",
+       "tag-mw-rollback": "प्रत्यापन्न",
+       "tag-mw-rollback-description": "संपादन जो रोलबैक लिंक का उपयोग करके पिछला संपादन वापस रोल करता है",
+       "tag-mw-undo": "पहिले जैसन करा जाय",
+       "tag-mw-undo-description": "संपादन जो पिछले लिंक का उपयोग करके पिछले संपादन को पूर्वत करता है",
        "tags-title": "चिप्पि",
        "tags-intro": "यह पृष्ठ अर्थ सहित वह चिप्पियाँ दर्शाता है जिनका कोई तंत्रांश किसी संपादन पर निशान लगाने के लिए इस्तेमाल कर सकता है।",
        "tags-tag": "चिप्पी कय नाँव",
        "tags-activate": "सक्रिय करें",
        "tags-deactivate": "निष्क्रिय करें",
        "tags-hitcount": "$1 {{PLURAL:$1|बदलाव|बदलाव}}",
+       "tags-manage-no-permission": "आपको बदलाव टैग के प्रबंधन की अनुमति नहीं है।",
+       "tags-manage-blocked": "आप प्रतिबंधित रहते समय टैग में कोई जोड़ना या हटाने का कार्य नहीं कर {{GENDER:$1|सकते|सकती}} हैं।",
        "tags-create-heading": "नवाँ ट्याग बनावा जाय",
+       "tags-create-explanation": "पुनः निर्धारित रूप से, नवनिर्मित टैग उपयोगकर्ताओं और बॉट के लिए मौजूद रहेंगे।",
        "tags-create-tag-name": "ट्याग नाम:",
        "tags-create-reason": "कारण:",
        "tags-create-submit": "बनावा जाय",
        "tags-create-no-name": "आपको एक चिप्पि का नाम निर्दिष्ट करना चाहिए।",
+       "tags-create-invalid-chars": "चिप्पियों के नाम में कोमा (<code>,</code>) अथवा आगे के स्लैश (<code>/</code>) नहीं होने चाहिये।",
+       "tags-create-invalid-title-chars": "टैग नामों में ऐसे कैरेक्टर नहीं होने चाहिए जो पृष्ठ के शीर्षक में नहीं इस्तेमाल हो सकते हैं।",
+       "tags-create-already-exists": "फ़ाइल $1 पहिलवे से मौजूद है।",
+       "tags-create-warnings-above": "निम्न लिखित {{PLURAL:$2|चेतावनी देखी गई है|चेतावनियाँ देखी गई हैं}}  जब टैग \"$1\" बनाने का प्रयास किया गया था:",
+       "tags-create-warnings-below": "क्या आप इस टैग को बनाना जारी रखना चाहते हैं?",
        "tags-delete-title": "चिप्पि हटायें",
+       "tags-delete-explanation-initial": "आप टैग \"$1\" को डाटाबेस से हटाने जा रहे हैं।",
+       "tags-delete-explanation-in-use": "टैग को {{PLURAL:$2|$2 संशोधन या लॉग प्रविष्टि|सभी $2 संशोधन और/या लॉग प्रविष्टियों}} से हटाया जाएगा जहाँ अब उसका प्रयोग किया जा रहा है।",
+       "tags-delete-explanation-warning": "यह क्रिया <strong>अपरिवर्तनीय</strong> है और <strong>उसे बदला नहीं जा सकता है</strong>, डाटाबेस प्रबंधक भी इस मामले में कुछ नहीं कर सकते। विश्वासपूर्ण रूप से तय कीजिए कि आप इसी टैग को हटाना चाहते हैं।",
+       "tags-delete-explanation-active": "<strong>टैग \"$1\" अब भी सक्रिय है, और इसका प्रयोग भविष्य में भी जारी रहेगा।</strong> इसे रोकने के लिए, उन स्थान/स्थानों पर जाइये जहाँ इस टैग का प्रयोग किया जा रहा है, और वहाँ उसे असक्षम कीजिए।",
        "tags-delete-reason": "कारण:",
+       "tags-delete-submit": "अपरिवर्तनीय रूप से इस टैग को हटाएँ",
+       "tags-delete-not-allowed": "विस्तार के द्वारा विवरण किए गए टैग हटाए नहीँ जा सकते जब तक कि विस्तार ही में इसके लिए प्रावधान न हो।",
+       "tags-delete-not-found": "चिप्पी \"$1\" मौजूद नाई है।",
+       "tags-delete-too-many-uses": "टैग \"$1\" का प्रयोग $2 के {{PLURAL:$2|संशोधन|संशोधनों}} से अधिक है, जिसका अर्थ यह है कि उसे हटाया नहीं जा सकता है।",
+       "tags-delete-warnings-after-delete": "टैग \"$1\" को सफलतापूर्वक हटाया गया, परन्तु निम्न लिखित {{PLURAL:$2|चेतावनी|चेतावनियाँ}} पाई गई:",
+       "tags-delete-no-permission": "आपको बदलाव टैग हटाने की अनुमति नहीं है।",
        "tags-activate-title": "चिप्पी शुरु करा जाय",
+       "tags-activate-question": "आप टैग \"$1\" को सक्रिय करने जा रहे हैं।",
        "tags-activate-reason": "कारण:",
+       "tags-activate-not-allowed": "टैग \"$1\" को सक्रिय करना सम्भव नहीं है।",
        "tags-activate-not-found": "चिप्पी \"$1\" मौजूद नाई है।",
        "tags-activate-submit": "चालु करा जाय",
        "tags-deactivate-title": "बन्द करा जाय",
+       "tags-deactivate-question": "आप टैग \"$1\" को असक्रिय करने जा रहे हैं।",
        "tags-deactivate-reason": "कारण:",
+       "tags-deactivate-not-allowed": "टैग \"$1\" को असक्रिय करना सम्भव नहीं है।",
        "tags-deactivate-submit": "निष्क्रिय करें",
+       "tags-apply-no-permission": "आपको अनुमति नहीं है कि बदलाव टैगों को अपने बदलावों से जोड़ें।",
+       "tags-apply-blocked": "आप प्रतिबंधित रहते समय टैग में कोई बदलाव नहीं कर {{GENDER:$1|सकते|सकती}} हैं।",
+       "tags-apply-not-allowed-one": "टैग \"$1\" मानवीय रूप से जोड़े जाने की अनुमति नहीं है।",
+       "tags-apply-not-allowed-multi": "निम्न लिखित {{PLURAL:$2|टैग की अनुमति नहीं है|टैगों की अनुमति नहीं है}} कि उसे मानवीय रूप से प्रयोग में लाया जाए: $1",
+       "tags-update-no-permission": "आपको व्यक्तिगत संशोधनों या लॉग प्रविष्टियों से बदलाव टैग जोड़ने या उन्हें हटाने की अनुमति नहीं है।",
+       "tags-update-blocked": "आप प्रतिबंधित रहते समय टैग में कोई जोड़ना या हटाने का कार्य नहीं कर {{GENDER:$1|सकते|सकती}} हैं।",
+       "tags-update-add-not-allowed-one": "टैग \"$1\" मानवीय रूप से जोड़े जाने की अनुमति नहीं है।",
+       "tags-update-add-not-allowed-multi": "निम्न लिखित {{PLURAL:$2|टैग की अनुमति नहीं है|टैगों की अनुमति नहीं है}} कि उसे मानवीय रूप से प्रयोग में लाया जाए: $1",
+       "tags-update-remove-not-allowed-one": "टैग \"$1\" को हटाए जाने की अनुमति नहीं है।",
+       "tags-update-remove-not-allowed-multi": "निम्न लिखित {{PLURAL:$2|टैग|कई टैग}} मानवीय रूप से हटाए नहीं जा सकते: $1",
        "tags-edit-title": "चिप्पी सम्पादन करा जाय",
        "tags-edit-manage-link": "चिप्पी मिलावा जाए",
        "tags-edit-revision-selected": "[[:$2]] {{PLURAL:$1|कय}} चयनित अवतरण:",
        "tags-edit-logentry-selected": "{{PLURAL:$1|चुनल}} लॉग इवेंट:",
+       "tags-edit-revision-legend": "टैगों को {{PLURAL:$1|इस संशोधन|सभी $1 संशोधनों}} से जोड़िये या हटाइये।",
+       "tags-edit-logentry-legend": "टैगों को {{PLURAL:$1|इस लॉग प्रविष्टि|सभी $1 लॉग प्रविष्टियों}} से जोड़िए या हटाइये।",
        "tags-edit-existing-tags": "मौजुद चिप्पी:",
        "tags-edit-existing-tags-none": "''कवनो नाइ''",
        "tags-edit-new-tags": "नवाँ चिप्पी",
        "tags-edit-chosen-placeholder": "कुछ चिप्पी चुना जाए",
        "tags-edit-chosen-no-results": "कवनो चिप्पी नाइ मिला",
        "tags-edit-reason": "कारण:",
+       "tags-edit-revision-submit": "बदलाव जोड़िए {{PLURAL:$1|इस अवतरण|$1 अवतरण}}",
+       "tags-edit-logentry-submit": "बदलाव जोड़िए {{PLURAL:$1|इस लौग प्रवक्ति|$1 लॉग प्रवक्तियाँ}}",
+       "tags-edit-success": "बदलाव सफलता लागू हुई।",
+       "tags-edit-failure": "बदलाव नहीं जोडे जा सके हैं: $1",
        "tags-edit-nooldid-title": "अमान्य लक्ष्य अवतरण",
+       "tags-edit-nooldid-text": "या तो आपने किसी लक्षित संशोधन का विवरण नहीं दिया है जहाँ इस कार्य को सम्पन्न करना है, या विवरण किया गया संशोधन है ही नहीं।",
+       "tags-edit-none-selected": "कृपया कम से कम एक टैग चुनिये ताकि उसे जोड़ा जाए या हटाया जाए",
        "comparepages": "पन्ना दाँजा जाय",
        "compare-page1": "पन्ना १",
        "compare-page2": "पन्ना २",
        "compare-invalid-title": "आप कय दिहा शिर्षक अमान्य है ।",
        "compare-title-not-exists": "आप कय दिहा शिर्षक नाइ है ।",
        "compare-revision-not-exists": "आप कय दिहा संशोधन नाइ है ।",
+       "diff-form": "अंतर",
+       "diff-form-oldid": "पुराना संशोधन (वैकल्पिक)",
+       "diff-form-revid": "अंतर का संशोधन आईडी",
+       "diff-form-submit": "अंतर दिखाएँ",
+       "permanentlink": "स्थायी कड़ी",
+       "permanentlink-revid": "संशोधन आईडी",
+       "permanentlink-submit": "संशोधन में जाएँ",
+       "newsection": "नवाँ श्रेणी",
+       "newsection-page": "टारगेट पेज",
+       "newsection-submit": "पन्ना पे जावा जाय",
        "dberr-problems": "क्षमा करें! इस जालस्थल को कुछ तकनीकी परेशानियों का सामना करना पड़ रहा है।",
        "dberr-again": "कुछ मिन रुकि कय फिरसे लोड किन जाय",
        "dberr-info": "(डाटाबेस से संपर्क नहीं हो पा रहा: $1)",
        "htmlform-chosen-placeholder": "एक्ठु विकल्प चुना जाय",
        "htmlform-cloner-create": "अउर जोडा जाय",
        "htmlform-cloner-delete": "हटावा जाय",
+       "htmlform-cloner-required": "कम से कम एक मूल्य की आवश्यकता है।",
+       "htmlform-date-placeholder": "वववव-मम-दद",
+       "htmlform-time-placeholder": "घघ:मम:सस",
+       "htmlform-datetime-placeholder": "वववव-मम-दद हह:मम:सस",
+       "htmlform-date-invalid": "आपने जो मान डाला है, उसे दिनांक के रूप में नहीं पहचान पा रहा है। YYYY-MM-DD के प्रारूप में प्रयास करें।",
+       "htmlform-time-invalid": "आपने जो मान डाला है, उसे समय के रूप में नहीं पहचान पा रहा है। HH:MM:SS के प्रारूप में प्रयास करें।",
+       "htmlform-datetime-invalid": "आपने जो मान डाला है, उसे दिनांक और समय के रूप में नहीं पहचान पा रहा है। YYYY-MM-DD HH:MM:SS के प्रारूप में प्रयास करें।",
+       "htmlform-date-toolow": "आपके द्वारा निर्दिष्ट मान $1 की आरंभिक तिथि से पहले है",
+       "htmlform-date-toohigh": "आपके द्वारा निर्दिष्ट मान $1 की नवीनतम अनुमत तिथि के बाद है",
+       "htmlform-time-toolow": "आपके द्वारा निर्दिष्ट मान $1 के आरंभिक समय से पहले है।",
+       "htmlform-time-toohigh": "आपके द्वारा निर्दिष्ट मान $1 के नवीनतम अनुमत समय के बाद है।",
+       "htmlform-datetime-toolow": "आपके द्वारा उल्लिखित मूल्य $1 की आरंभिक तिथि और समय से पहले है।",
+       "htmlform-datetime-toohigh": "आपके द्वारा निर्दिष्ट मूल्य $1 की नवीनतम अनुमति तिथि और समय के बाद है।",
+       "htmlform-title-badnamespace": "[[:$1]] अभी \"{{ns:$2}}\" नामस्थान में नहीं है।",
+       "htmlform-title-not-creatable": "\"$1\" निर्माण करने लायक शीर्षक नहीं है।",
+       "htmlform-title-not-exists": "$1 नहीं बना है।",
+       "htmlform-user-not-exists": "<strong>$1</strong> मौजूद नहीं है।",
+       "htmlform-user-not-valid": "<strong>$1</strong> मान्य सदस्य नाम नहीं है।",
        "logentry-delete-delete": "$1 ने पृष्ठ $3 {{GENDER:$2|हटा}} दिहा गय",
-       "logentry-delete-restore": "$1 ने पृष्ठ $3 कय {{GENDER:$2|पुनर्स्थापित}} कै गय",
+       "logentry-delete-delete_redir": "$1 ने $3 से पुनर्निर्देशन {{GENDER:$2|हटाकर}} अन्य जानकारी डाल दी।",
+       "logentry-delete-restore": "$1 ने पृष्ठ $3($4) कय {{GENDER:$2|पुनर्स्थापित}} कै गय",
+       "logentry-delete-restore-nocount": "$1 $3 पृष्ठ {{GENDER:$2|को बहाल किया}}",
+       "restore-count-revisions": "{{PLURAL:$1|1 संशोधन|$1 संशोधन}}",
+       "restore-count-files": "{{PLURAL:$1|1 फ़ाइल|$1 फ़ाइल}}",
        "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|बदली}}",
        "revdelete-uname-unhid": "सदस्य नाँव देखावा है",
        "revdelete-restricted": "प्रबंधक पे प्रतिबंध लागू",
        "revdelete-unrestricted": "प्रबंधक कय प्रबंधन हटावा जाय",
+       "logentry-block-block": "$1 ने {{GENDER:$4|$3}} को $5 के लिए {{GENDER:$2|अवरोधित}} कर दिया। $6",
+       "logentry-block-unblock": "$1 {{GENDER:$2|प्रतिबंधित}} {{GENDER:$4|$3}}",
+       "logentry-block-reblock": "$1 ने {{GENDER:$4|$3}} के अवरोध में {{GENDER:$2|बदलाव}} कर दिया और यह अवरोध $5 रहेगा। $6",
+       "logentry-partialblock-block-page": "{{PLURAL:$1|पृष्ठ}} $2",
+       "logentry-partialblock-block-ns": "{{PLURAL:$1|नामस्थान}} $2",
+       "logentry-partialblock-block": "$1 ने {{GENDER:$4|$3}} को $7 सम्पादित करने से $5 $6 समय तक {{GENDER:$2|अवरोधित कर दिया है}}",
+       "logentry-partialblock-reblock": "$1 ने {{GENDER:$4|$3}} की $7 पर अवरोध सेटिंग में {{GENDER:$2|बदलाव कर दिया है}}। अब यह प्रतिबन्ध $5 $6 समय तक रहेगा।",
+       "logentry-non-editing-block-block": "$1 ने {{GENDER:$4|$3}} को विशेष गैर-सम्पादन कार्यों से $5 $6 समय तक {{GENDER:$2|अवरोधित कर दिया है}}",
+       "logentry-non-editing-block-reblock": "$1 ने {{GENDER:$4|$3}} की विशेष गैर-सम्पादन कार्यों की अवरोध सेटिंग में {{GENDER:$2|बदलाव कर दिया है}}। अब यह प्रतिबन्ध $5 $6 समय तक रहेगा।",
+       "logentry-suppress-block": "$1 ने {{GENDER:$4|$3}} को $5 के लिए {{GENDER:$2|अवरोधित}} कर दिया। $6",
+       "logentry-suppress-reblock": "$1 ने {{GENDER:$4|$3}} के अवरोध में {{GENDER:$2|बदलाव}} कर दिया और यह अवरोध $5 रहेगा। $6",
+       "logentry-import-upload": "$1 {{GENDER:$2|आयात किया गया}} $3 फ़ाइल अपलोड के माध्यम से",
+       "logentry-import-upload-details": "$1 ने फ़ाइल अपलोड से $3 के ($4 {{PLURAL:$4|अवतरण|अवतरणों}}) को {{GENDER:$2|आयात}} किया।",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|आयात किया गया}} $3 किसी और विकि से",
+       "logentry-import-interwiki-details": "$1 ने $3 के ($4 {{PLURAL:$4|अवतरण|अवतरणों}}) को $5 से {{GENDER:$2|आयात}} किया।",
+       "logentry-merge-merge": "$1 {{GENDER:$2|विलय किया गया}} $3 को $4 में (संशोधन $5 तक)",
        "logentry-move-move": "$1 ने $3 पृष्ठ $4 पर {{GENDER:$2|स्थानांतरित}} कै गय",
        "logentry-move-move-noredirect": "$1 ने $3 पर पुनर्निर्देश छोड़े बिना उसे $4 पर {{GENDER:$2|स्थानांतरित}} किया",
        "logentry-move-move_redir": "$1 ने $4 से पुनर्निर्देश हटाकर $3 को उसपर {{GENDER:$2|स्थानांतरित}} किया",
        "logentry-newusers-create2": "सदस्य खाता $3 $1 द्वारा {{GENDER:$2|बनाया}} गया था",
        "logentry-newusers-byemail": "$1 द्वारा सदस्य खाता $3 {{GENDER:$2|बनाया}} गया एवं पासवर्ड ई-मेल द्वारा भेजा गया था",
        "logentry-newusers-autocreate": "खाते $1 स्वचालित रूप से {{GENDER:$2|बनाया}} गया था",
+       "logentry-protect-move_prot": "$1 ने सुरक्षा व्यवस्था $4 से {{GENDER:$2|स्थानांतरित}} कर $3 में कर दिया।",
+       "logentry-protect-unprotect": "$1 ने $3 से सुरक्षा {{GENDER:$2|हटाया}}",
+       "logentry-protect-protect": "$1 ने $3 $4 {{GENDER:$2|सुरक्षित}} किया।",
+       "logentry-protect-protect-cascade": "$1 ने $3 $4 {{GENDER:$2|सुरक्षित किया}} [व्यापक]",
+       "logentry-protect-modify": "$1 ने $3 $4 का सुरक्षा स्तर {{GENDER:$2|परिवर्तित किया}}",
+       "logentry-protect-modify-cascade": "$1 ने $3 $4 का सुरक्षा स्तर {{GENDER:$2|परिवर्तित किया}} [व्यापक]",
        "logentry-rights-rights": "$1 ने $3 के सदस्य समूह $4 से बदलकर $5 {{GENDER:$2|किये}}",
        "logentry-rights-rights-legacy": "$1 ने $3 के सदस्य समूह {{GENDER:$2|बदले}}",
        "logentry-rights-autopromote": "$1 के सदस्य समूह स्वतः $4 से बदलकर $5 {{GENDER:$2|किये}} गए",
        "logentry-upload-upload": "$1 {{GENDER:$2|ने}} $3 अपलोड किया",
+       "logentry-upload-overwrite": "$1 {{GENDER:$2|अपलोड कीन गा}} $3 कय एक नवा अवतरण",
+       "logentry-upload-revert": "$1 {{GENDER:$2|reverted}} $3 to an old version",
+       "log-name-managetags": "समय प्रबंधन लॉग",
+       "log-description-managetags": "इस पृष्ठ में उन प्रबंधन कार्यों की सूची है जो [[Special:Tags|टैगों]] से सम्बंधित हैं। लॉग में केवल वही क्रियाओं को बयान किया गया है जो मानवीय रूप से किसी प्रबंधक द्वारा पूरा किया गया हो। टैगों को विकि सॉफ़्टवेयर द्वारा बनाया या हटाया जा सकता है जिसकी प्रविष्टि लॉग में होना आवश्यक नहीं है।",
+       "logentry-managetags-create": "$1 {{GENDER:$2|बनाया गया}} टैग \"$4\"",
+       "logentry-managetags-delete": "$1 {{GENDER:$2|हटाया गया}} टैग \"$4\" ($5 से हटाया गया {{PLURAL:$5|संशोधन या लॉग प्रविष्टि|संशोधन या लॉग प्रविष्टियाँ }})",
+       "logentry-managetags-activate": "टैग \"$4\" उपयोगकर्ताओं और बॉटों के प्रयोग के लिए $1 {{GENDER:$2|सक्रिय किया गया}}",
+       "logentry-managetags-deactivate": "टैग \"$4\" उपयोगकर्ताओं और बॉटों के प्रयोग के लिए $1 {{GENDER:$2|असक्रिय किया गया}}",
+       "log-name-tag": "टैग लॉग",
+       "log-description-tag": "इस पृष्ठ पर देखा जा सकता है कि उपयोगकर्ता कब व्यक्तिगत संशोधनों और लॉग प्रविष्टियों से [[Special:Tags|टैग]] जोड़ चुके हैं या हटा चुके हैं। लॉग से टैगिंग कार्यों की सूची नहीं मिलती कि वह कब सम्पादन, हटाए जाने या ऐसे किसी काम का हिस्सा बने।",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|जोड़ दिया गया}} {{PLURAL:$7|टैग|टैग-समूह}} $6 के संशोधन $4  $3 पृष्ठ पर",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|जोड़ दिया गया}} {{PLURAL:$7|टैग|टैग-समूह}} $6 लॉग प्रविष्टि $5 $3 पृष्ठ पर",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|हटा दिया गया}} {{PLURAL:$9|टैग|टैग-समूह}} $8 $4 संशोधन से  $3 पृष्ठ पर",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|हटा दिया गया}} {{PLURAL:$9|टैग|टैग-समूह}} $8 $5 संशोधन से  $3 पृष्ठ पर",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|उद्यतन किए गए}} टैग संशोधन $4 पर पृष्ठ $3 के ({{PLURAL:$7|जोड़ दिए गए}} $6; {{PLURAL:$9|हटाए गए}} $8)",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|उद्यतन किए गए}} टैग संशोधन $5 पर पृष्ठ $3 के ({{PLURAL:$7|जोड़ दिए गए}} $6; {{PLURAL:$9|हटाए गए}} $8)",
        "rightsnone": "(कउनो नाहीं)",
+       "rightslogentry-temporary-group": "$1 (अस्थाई, $2 तक)",
        "feedback-adding": "पृष्ठ पे प्रतिक्रिया जोडत है ...",
        "feedback-back": "पीछे",
        "feedback-bugcheck": "शानदार! जांच ले कहीं ये [ $1 known bugs] पहले से ही न हो ।",
        "feedback-bugornote": "यदि आप किसी तकनीकी परेशानी को विस्तार से समझाने के लिये तैयार हैं तो कृपया [$1 बग फ़ाइल करें]।\nयदि नहीं, तो आप नीचे दिये सरल फ़ॉर्म का प्रयोग कर सकते हैं। आपकी टिप्पणी आपके सदस्य नाम और आपके ब्राउज़र के नाम के सहित \"[$3 $2]\" पृष्ठ में जोड़ दी जाएगी।",
        "feedback-cancel": "रद्द करा जाय",
        "feedback-close": "होइ गवा",
+       "feedback-external-bug-report-button": "तकनीकी कार्य को जोड़ना",
        "feedback-dialog-title": "प्रतिक्रिया भेजा जाय",
+       "feedback-dialog-intro": "आप नीचे दिए गए सरल फ़ॉर्म का प्रयोग करके अपनी प्रतिपुष्टि भेज सकते हैं। आपकी टिप्पणी पृष्ठ \"$1\" से आपके सदस्यनाम के आगे जोड़ दी जाएगी।",
        "feedback-error1": "त्रुटि: न पहचाना गया परिणाम एपीआई से",
        "feedback-error2": "त्रुटि: संपादन विफल रहा है",
        "feedback-error3": "त्रुटि: एपीआई से कोई प्रतिक्रिया नहीं",
+       "feedback-error4": "त्रुटि: दिए गए प्रतिपुष्टि शीर्षक के आगे सन्देश नहीं जोड़ा जा सका",
        "feedback-message": "सनेशा:",
        "feedback-subject": "विषय:",
        "feedback-submit": "जमा करा जाय",
        "feedback-thanks": "धन्यवाद! आपकी प्रतिक्रिया पृष्ठ में नियुक्त किया गया है \"[ $2  $1 ]\"।",
        "feedback-thanks-title": "धन्यवाद!",
        "feedback-useragent": "प्रयोगकर्ता एजेन्ट:",
-       "searchsuggest-search": "खोज",
+       "searchsuggest-search": "{{SITENAME}} में खोजा जाय",
        "searchsuggest-containing": "...से युक्त",
        "api-error-badtoken": "आंतरिक त्रुटि: खराब टोकन।",
        "api-error-emptypage": "नँवा अव खाली पन्ना बनावै कय अनुमति नाइ है",
        "duration-decades": "$1 {{PLURAL:$1|दशक}}",
        "duration-centuries": "$1 {{PLURAL:$1|शताब्दी}}",
        "duration-millennia": "$1 {{PLURAL:$1|सहस्राब्दी}}",
+       "rotate-comment": "चित्र को $1 {{PLURAL:$1|डिग्री|डिग्रियों}} से दक्षिणावर्त घुमाया गया था",
        "limitreport-title": "पार्सर प्रोफाइलिङ डाटा",
        "limitreport-cputime": "सि.पि.यु समय खपत",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|सॅकेंड}}",
        "limitreport-walltime": "असली समय खपत",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|सॅकेंड}}",
+       "limitreport-ppvisitednodes": "प्रिप्रोसेसर जा चुकी नोड की गिनती",
+       "limitreport-ppgeneratednodes": "प्रिप्रोसेसर द्वारा जारी नोड की गिनती",
        "limitreport-postexpandincludesize": "विस्तार उपरांत विकिपाठ आकार",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|बाइट}}",
        "limitreport-templateargumentsize": "साँचा प्राचल आकार",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|बाइट}}",
        "limitreport-expansiondepth": "उच्चतम विस्तार गहराई",
        "limitreport-expensivefunctioncount": "महंगा पार्सर फंक्शन कय संख्या",
+       "limitreport-unstrip-depth": "Unstrip recursion depth",
+       "limitreport-unstrip-size": "Unstrip post-expand size",
+       "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|बाइट|बाइट्स}}",
        "expandtemplates": "साँचा विस्तार",
        "expand_templates_intro": "यह विशेष पृष्ठ पाठ इनपुट लेता है और सभी साँचों को विस्तृत करता है।\nयह <code><nowiki>{{</nowiki>#language:…}}</code> जैसे पार्सर फंक्शनों और\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code> जैसे वेरियेबलों को भी विस्तृत करता है।\nयह दोहरे कोष्ठकों में दिया लगभग सब कुछ विस्तृत करता है।",
        "expand_templates_title": "कन्टेक्स्ट शीर्षक, जैसय {{FULLPAGENAME}} आदि कय लिए:",
        "expand_templates_generate_xml": "XML कय पार्स (parse) वृक्ष देखावा जाय",
        "expand_templates_generate_rawhtml": "सुद्ध HTML देखावा जाय",
        "expand_templates_preview": "झलक",
+       "expand_templates_preview_fail_html": "<strong>अगर यह वैध पूर्ववावलोकन प्रयास है, तो फिर से प्रयास कीजिए।</strong>\nअगर इससे काम न बने तो [[Special:UserLogout|सत्रांत होकर]] पुनः से लॉग इन करें और जाँच करें की आपका ब्राउज़र इस साइट पर कुकीज को अनुमत करता है।",
+       "expand_templates_preview_fail_html_anon": "<em>चूँकि {{SITENAME}} सीधे-साधे रूप से एचटीएमएल-सक्षम है और आप लॉग्ड इन नहीं है, पूर्वावलोकन छिपा हुआ है ताकि सम्भावित जावास्क्रिप्ट हमले को रोका सके।</em>\n\n<strong>अगर यह वैध पूर्वावलोकन प्रयास है तो कृपया [[Special:UserLogin|लॉग इन करके]] फिर से प्रयास कीजिए।</strong>",
+       "expand_templates_input_missing": "आपको कम से कम कुछ विकीपाठ्य प्रदान करने पड़ेंगे।",
        "pagelanguage": "पृष्ठ भाषा चुनाव",
        "pagelang-name": "पन्ना",
        "pagelang-language": "भाषा",
        "pagelang-use-default": "डिफ़ॉल्ट भाषा इस्तेमाल कीन जाय",
        "pagelang-select-lang": "भाषा चुना जाय",
+       "pagelang-reason": "कारण",
+       "pagelang-submit": "भेजो",
+       "pagelang-nonexistent-page": "$1 पन्ना अभी बना नहीं है।",
+       "pagelang-unchanged-language": "$1 की भाषा पहले ही $2 तय की गई है।",
+       "pagelang-unchanged-language-default": "$1 पृष्ठ में विकि की मूल भाषा पहले से तय कर दी गई है।",
+       "pagelang-db-failed": "डेटाबेस पृष्ठ भाषा को बदलने में विफल रहा।",
        "right-pagelang": "पन्ना कय भाषा चुना जाय",
        "action-pagelang": "पन्ना कय भाषा बदला जाय",
        "log-name-pagelang": "भाषा लाग बदला जाय",
        "log-description-pagelang": "यह पृष्ठ भाषाओं में परिवर्तन का लॉग है।",
+       "logentry-pagelang-pagelang": "$1 {{GENDER:$2|बदल दिया गया}} पृष्ठ भाषा को $3 के लिए $4 से $5।",
+       "default-skin-not-found": "ओह! आपकी विकि का पूर्व निर्धारित चमड़ा जैसा कि <code dir=\"ltr\">$wgDefaultSkin</code> में बताया गया है<code>$1</code>, उपलब्ध नहीं है।\n\nआपका इन्स्टालेशन इन चमड़ो को सम्मिलित करता है {{PLURAL:$4|चमड़ा|चमड़े}}। देखिए [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: चमड़ो का सम्मित करना] ताकि आपको जानकारी मिले कि कैसे {{PLURAL:$4|उसे|उनको सम्मिलित किया जाए और निर्धारित को तय करें}}.\n\n$2\n\n; अगर आपने अभी मीडियाविकि इन्स्टाल किया है:\n: आपने शायद गिट से इन्स्टाल किया है, या सीधे स्रोत कोड से किया है जिसके लिए कोई और तरीक़े का प्रयोग किया है। यह तो आशा के अनुरूप है। कोशिश कीजिए कि कुछ चमड़े [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's अमीडिया-विकि के चमड़े वाली डाइरेक्ट्री से डाउन्लोड करें], जिसके लिए आप:\n:* डाउनलोड कीजिए [https://www.mediawiki.org/wiki/Download तारबॉल इन्स्टालर], जो कई चमड़ों और विस्तारों में मौजूद है। आप चमड़ों का कोड <code>skins/</code> उसकी डाइरेक्ट्री से कॉपी-पेस्ट कर सकते हैं। \n:* डाउनलोड कीजिए व्यक्तिगत चमड़े के तारबॉल [https://www.mediawiki.org/wiki/Special:SkinDistributor मीडिया विकि] से।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins गिट का प्रयोग करके डाउलोड कर सकते हैं].\n: ऐसा करने के दौरान आपकी गिट-रिपॉज़िटरी को कुछ नहीं होना चाहिए यदि आप विकासकर्ता हो। \n; अगर आपने मीडियाविकि को अभी अपग्रेड किया है:\n: मीडियाविकि 1.24 और इसके नवीन रूप स्वतः रूप से चमड़ों को सक्षम नहीं करते (देखिए [https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: चमड़ो की स्वतः खोज]). आप निम्न लिखित को पेस्ट कर सकते हैं: {{PLURAL:$5|लाइन|लाइनें}}  <code>LocalSettings.php</code> में ताकि {{PLURAL:$5|वह|सभी}} सक्षम हों जैसा कि इन्स्टाल किए गए {{PLURAL:$5|चमड़े|चमड़ों}} का मामला है:\n\n<pre dir=\"ltr\">$3</pre>\n\n; अगर आपने अभी बदलाव किए हैं<code>LocalSettings.php</code>:\n: डबल-क्लिक करें चमड़े नामों  के आगे ताकि आपको विभिन्न प्रकारों के विकल्प मिलें।",
+       "default-skin-not-found-no-skins": "ओह! आपकी विकि का पूर्व निर्धारित चमड़ा जैसा कि <code dir=\"ltr\">$wgDefaultSkin</code> में बताया गया है<code>$1</code>, उपलब्ध नहीं है। \n\nआपके पास कोई इन्स्टाल किया गया चमड़ा नहीं है। \n\n; अगर आपने अभी मीडियाविकि इन्स्टाल किया है या उसका उद्यतन किया है:\n: आपने शायद गिट से इन्स्टाल किया है, या सीधे स्रोत कोड से किया है जिसके लिए कोई और तरीक़े का प्रयोग किया है। यह तो आशा के अनुरूप है। कोशिश कीजिए कि कुछ चमड़े [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org's मीडिया-विकि के चमड़े वाली डाइरेक्ट्री से डाउन्लोड करें], जिसके लिए आप:\n:* डाउनलोड कीजिए [https://www.mediawiki.org/wiki/Download तारबॉल इन्स्टालर], जो कई चमड़ों और विस्तारों में मौजूद है। आप चमड़ों का कोड <code>skins/</code> उसकी डाइरेक्ट्री से कॉपी-पेस्ट कर सकते हैं। \n:* डाउनलोड कीजिए व्यक्तिगत चमड़े के तारबॉल [https://www.mediawiki.org/wiki/Special:SkinDistributor मीडिया विकि] से।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins गिट का प्रयोग करके डाउलोड कर सकते हैं].\n: ऐसा करने के दौरान आपकी गिट-रिपॉज़िटरी को कुछ नहीं होना चाहिए यदि आप विकासकर्ता हो।",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (सक्षम)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>अक्षम</strong>)",
        "mediastatistics": "मीडिया कय आँकड़ा",
+       "mediastatistics-summary": "अपलोड किए गए फ़ाइल प्रकारों के आंकड़े। इसमें केवल नवीनतम फ़ाइल के अवतरण शामिल हैं। पुराने या हटाए गए फ़ाइलों के अवतरणों को अलग रखा गया है।",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 बाईट}} ($2; $3%)",
+       "mediastatistics-bytespertype": "इस अनुभाग का कुल फ़ाइल आकार : {{PLURAL:$1|$1 बाइट|$1 बाइट्स}} ($2; $3%)",
+       "mediastatistics-allbytes": "सभी फ़ाइल का कुल फ़ाइल आकार : {{PLURAL:$1|$1 बाइट|$1 बाइट्स}} ($2)",
        "mediastatistics-table-mimetype": "MIME प्रकार",
        "mediastatistics-table-extensions": "संभावित एक्श्टेंशन",
        "mediastatistics-table-count": "फाइल कय गिन्ती",
        "mediastatistics-table-totalbytes": "कुल साइज",
        "mediastatistics-header-unknown": "अज्ञात",
        "mediastatistics-header-bitmap": "बिटमैप चित्र",
+       "mediastatistics-header-drawing": "उतारे गए चित्र (वेक्टर चित्र)",
        "mediastatistics-header-audio": "आडियो",
        "mediastatistics-header-video": "वीडियो",
+       "mediastatistics-header-multimedia": "उच्च-प्रारूप माध्यम",
        "mediastatistics-header-office": "आफिस",
        "mediastatistics-header-text": "शाब्दिक",
+       "mediastatistics-header-executable": "निष्पादन योग्य",
+       "mediastatistics-header-archive": "संकुचित प्रारूप",
+       "mediastatistics-header-total": "सभी फ़ाइल",
+       "json-warn-trailing-comma": "$1 पीछे रह रहा {{PLURAL:$1|कॉमा को| कॉमाओं को}} जे०एस०ओ०एन० से हटाया गया",
        "json-error-unknown": "JSON से समस्या रहा । गल्ती: $1",
+       "json-error-depth": "स्टैक की अधिकतम गहराई बढ़ चुकी है।",
+       "json-error-state-mismatch": "अवैध या बुरी शक्ल में बना जे०एस०ओ०एन",
+       "json-error-ctrl-char": "कंट्रोल कैरेक्टर त्रुटि, सम्भतः अशुद्ध रूप से एनकोड किया गया है",
        "json-error-syntax": "सिन्टॅक्स त्रुटि",
+       "json-error-utf8": "बुरी शक्ल में बना यू०टी०एफ़-८ कैरेक्टर, जिसे सम्भवतः अशुद्ध रूप से इनकोड किया गया है",
+       "json-error-recursion": "एनकोडिंग वाले मूल्य में एक या उससे अधिक पुनरावर्ती वाले सन्दर्भ शामिल हैं",
+       "json-error-inf-or-nan": "एक या उससे अधिल एन०ए०एन या आई०एन०एफ़ मूल्य एनकोडिंग किए जाने वाले मूल्य में शामिल हैं।",
+       "json-error-unsupported-type": "एक ऐसे प्रकार का मूल्य दिया गया था जिसे एनकोड नहीं किया जा सकता है",
        "headline-anchor-title": "इस अनुभाग की कड़ी",
        "special-characters-group-latin": "लाटिन",
        "special-characters-group-latinextended": "लाटिन विस्तारित",
        "special-characters-group-ipa": "आइपीए",
        "special-characters-group-symbols": "प्रतीक",
        "special-characters-group-greek": "ग्रीक",
+       "special-characters-group-greekextended": "ग्रीक विस्तृत",
        "special-characters-group-cyrillic": "सिरिलिक",
        "special-characters-group-arabic": "अरबी",
        "special-characters-group-arabicextended": "अरबी विस्तारित",
        "special-characters-group-thai": "थाई",
        "special-characters-group-lao": "लाओ",
        "special-characters-group-khmer": "खमेर",
+       "special-characters-group-canadianaboriginal": "कनाडाई एबोरिजिनल",
        "special-characters-title-endash": "डैश",
        "special-characters-title-emdash": "बड्का डैश",
        "special-characters-title-minus": "माइनस चिन्ह",
+       "mw-widgets-abandonedit": "क्या आप सचमुच सहेजे बिना सम्पादन मोड से बाहर आना चाहते हैं?",
+       "mw-widgets-abandonedit-discard": "संपादन रद्द करें",
+       "mw-widgets-abandonedit-keep": "संपादन जारी रखें",
+       "mw-widgets-abandonedit-title": "क्या आपको यकीन है?",
+       "mw-widgets-copytextlayout-copy": "प्रतिलिपि बनावा जाय",
+       "mw-widgets-copytextlayout-copy-fail": "Failed to copy to clipboard.",
+       "mw-widgets-copytextlayout-copy-success": "Copied to clipboard.",
+       "mw-widgets-dateinput-no-date": "कवनो नाइ चुना गय",
+       "mw-widgets-mediasearch-input-placeholder": "मीडिया हेतु खोजें",
+       "mw-widgets-mediasearch-noresults": "कवनो नतिजा नाई मिला",
+       "mw-widgets-titleinput-description-new-page": "पृष्ठ अभी मौजूद नहीं है",
+       "mw-widgets-titleinput-description-redirect": "$1 को अनुप्रेषित",
+       "mw-widgets-categoryselector-add-category-placeholder": "श्रेणी जोड़ें...",
+       "mw-widgets-usersmultiselect-placeholder": "और जोड़ें...",
+       "mw-widgets-titlesmultiselect-placeholder": "अधिक जोड़ें...",
+       "date-range-from": "दिनांक से (शुरू):",
+       "date-range-to": "दिनांक तक (समाप्त):",
+       "sessionmanager-tie": "एक साथ कई अनुरोध को नहीं मिला सकता: $1",
+       "sessionprovider-generic": "$1 सत्र",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "कुकी-आधारित सत्र",
+       "sessionprovider-nocookies": "हो सकता है कि कुकी निष्क्रिय है। कृपया देखें कि और सक्रिय करें।",
+       "randomrootpage": "कउनो भी मूल पन्ना",
+       "log-action-filter-block": "अवरोध के प्रकार:",
+       "log-action-filter-contentmodel": "सामग्री मॉडल परिवर्तन का प्रकार:",
+       "log-action-filter-delete": "हटाने के प्रकार:",
+       "log-action-filter-import": "आयात के प्रकार:",
+       "log-action-filter-managetags": "टैग प्रबंधन कार्रवाई का प्रकार:",
+       "log-action-filter-move": "स्थानांतरण के प्रकार:",
+       "log-action-filter-newusers": "खाता निर्माण के प्रकार:",
+       "log-action-filter-patrol": "परीक्षण के प्रकार:",
+       "log-action-filter-protect": "सुरक्षा के प्रकार:",
+       "log-action-filter-rights": "अधिकार बदलाव के प्रकार:",
+       "log-action-filter-suppress": "दमन के प्रकार:",
+       "log-action-filter-upload": "अपलोड के प्रकार:",
+       "log-action-filter-all": "सगरौ",
+       "log-action-filter-block-block": "ब्लॉक",
+       "log-action-filter-block-reblock": "अवरोध परिवर्तन",
+       "log-action-filter-block-unblock": "अवरोध हटावा जाय",
+       "log-action-filter-contentmodel-change": "सामग्री मॉडल में बदलाव",
+       "log-action-filter-contentmodel-new": "गैर-डिफ़ॉल्ट सामग्री मॉडल वाले पृष्ठ का निर्माण",
+       "log-action-filter-delete-delete": "पृष्ठ हटाना",
+       "log-action-filter-delete-delete_redir": "पुननिर्देशित ओवरराइट",
+       "log-action-filter-delete-restore": "पृष्ठ न हटाना",
+       "log-action-filter-delete-event": "पृष्ठ हटाने का लॉग",
+       "log-action-filter-delete-revision": "अवतरण हटाना",
+       "log-action-filter-import-interwiki": "अंतरविकि आयात",
+       "log-action-filter-import-upload": "एक्सएमएल अपलोड द्वारा आयात",
+       "log-action-filter-managetags-create": "चिप्पि निर्मित",
+       "log-action-filter-managetags-delete": "टैग हटाना",
+       "log-action-filter-managetags-activate": "टैग सक्रियण",
+       "log-action-filter-managetags-deactivate": "टैग निष्क्रियकरण",
+       "log-action-filter-move-move": "पुननिर्देशों को ओवरराईट किये बिना स्थान्तरण करे",
+       "log-action-filter-move-move_redir": "पुननिर्देशों को ओवरराईट किये स्थान्तरण करे",
+       "log-action-filter-newusers-create": "अज्ञात सदस्य द्वारा निर्मित",
+       "log-action-filter-newusers-create2": "पंजीकृत सदस्य द्वारा निर्मित",
+       "log-action-filter-newusers-autocreate": "स्वतः निर्मित",
+       "log-action-filter-newusers-byemail": "पासवर्ड ईमेल द्वारा भेजा गया के साथ निर्मित",
+       "log-action-filter-patrol-patrol": "सदस्य द्वारा परीक्षित",
+       "log-action-filter-patrol-autopatrol": "स्वतः पुनरीक्षण",
+       "log-action-filter-protect-protect": "सुरक्षा",
+       "log-action-filter-protect-modify": "सुरक्षा परिवर्तन",
+       "log-action-filter-protect-unprotect": "असुरक्षा",
+       "log-action-filter-protect-move_prot": "सुरक्षा स्थानांतरण",
+       "log-action-filter-rights-rights": "मैनुअल परिवर्तन",
+       "log-action-filter-rights-autopromote": "स्वतः परिवर्तन",
+       "log-action-filter-suppress-event": "लॉग अवरोध",
+       "log-action-filter-suppress-revision": "संशोधन अवरोध",
+       "log-action-filter-suppress-delete": "पृष्ठ अवरोध",
+       "log-action-filter-suppress-block": "ब्लॉक द्वारा युजर अवरोध",
+       "log-action-filter-suppress-reblock": "पुन: ब्लॉक द्वारा युजर अवरोध",
+       "log-action-filter-upload-upload": "नवा अपलोड",
+       "log-action-filter-upload-overwrite": "फिर से अपलोड",
+       "log-action-filter-upload-revert": "पहिले जैसन करा जाय",
+       "authmanager-authn-not-in-progress": "प्रमाणीकरण प्रगति में नहीं है या सत्र डेटा खो गया है। कृपया शुरुआत से फिर से शुरू करें",
+       "authmanager-authn-no-primary": "आपूर्ति किए गए क्रेडेंशियल्स को प्रमाणित नहीं किया जा सका।",
+       "authmanager-authn-no-local-user": "दिए गए क्रेडेंशियल इस विकी पर किसी भी उपयोगकर्ता से जुड़े नहीं हैं।",
+       "authmanager-authn-no-local-user-link": "दिए गए क्रेडेंशियल्स मान्य हैं लेकिन इस विकी पर किसी भी उपयोगकर्ता से जुड़े नहीं हैं। किसी अन्य तरीके से लॉगिन करें, या एक नया उपयोगकर्ता बनाएं, और आपके पास उस खाते में अपने पिछले क्रेडेंशियल को लिंक करने का विकल्प होगा।",
+       "authmanager-authn-autocreate-failed": "किसी स्थानीय खाते के स्वत:-निर्माण विफल हुआ:$1",
+       "authmanager-change-not-supported": "आपूर्ति की गई क्रेडेंशियल्स को बदला नहीं जा सकता, क्योंकि उनका उपयोग उनको नहीं होगा।",
+       "authmanager-create-disabled": "खाता बनावै कय रोक लगाए दिहा गा हैं।",
+       "authmanager-create-from-login": "अपना खाता बनाने के लिए नीचे दिये जगहों को भर दें।",
+       "authmanager-create-not-in-progress": "खाता निर्माण प्रगति में नहीं है या सत्र डेटा खो गया है। कृपया शुरुआत से फिर से शुरू करें",
+       "authmanager-create-no-primary": "खाता निर्माण के लिए आपूर्ति की गई क्रेडेंशियल्स का उपयोग नहीं किया जा सका।",
+       "authmanager-link-no-primary": "खाता लिंकिंग के लिए आपूर्ति की गई क्रेडेंशियल का उपयोग नहीं किया जा सका।",
+       "authmanager-link-not-in-progress": "खाता लिंक प्रगति में नहीं है या सत्र डेटा खो गया है। कृपया शुरुआत से फिर से शुरू करें",
+       "authmanager-autocreate-noperm": "स्वचालित खाता निर्माण की अनुमति नहीं है।",
+       "authmanager-autocreate-exception": "स्वचालित खाता निर्माण को पहले के कुछ त्रुटियों के कारण कुछ समय के लिए निष्क्रिय किया गया है।",
+       "authmanager-userdoesnotexist": "सदस्य खाता \"$1\" पंजीकृत नहीं है।",
+       "authmanager-userlogin-remembermypassword-help": "क्या पासवर्ड को सत्र की लंबाई से अधिक समय तक याद रखना चाहिए।",
+       "authmanager-username-help": "प्रमाणीकरण के लिए सदस्य नाम",
+       "authmanager-password-help": "प्रमाणीकरण के लिए पासवर्ड",
+       "authmanager-domain-help": "बाह्य प्रमाणीकरण के लिए डोमेन",
+       "authmanager-retype-help": "फिर पासवर्ड डालें।",
+       "authmanager-email-label": "ईमेल",
+       "authmanager-email-help": "ईमेल पता",
+       "authmanager-realname-label": "वास्तविक नांव",
+       "authmanager-realname-help": "सदस्य कय वास्तविक नांव",
+       "authmanager-provider-password": "पासवर्ड-आधारित प्रमाणीकरण",
+       "authmanager-provider-password-domain": "पासवर्ड- अउर डोमेन-आधारित प्रमाणीकरण",
+       "authmanager-provider-temporarypassword": "अस्थाई पासवर्ड",
+       "authprovider-confirmlink-message": "आपके हाल के लॉगिन प्रयासों के आधार पर, निम्न खाते  आपके विकी खाते से जोड़ा जा सकता है। उन्हें जोड़ने से उन खातों के माध्यम से लॉगिंग सक्षम हो जाता है कृपया चुनें कि कौन सा लिंक होना चाहिए।",
+       "authprovider-confirmlink-request-label": "खाते जो जोड़ने हैं।",
+       "authprovider-confirmlink-success-line": "$1 : सफलतापूर्वक जुड़ा।",
+       "authprovider-confirmlink-failed": "खाता जोड़ने का काम पूरी तरह से नहीं हो पाया : $1",
+       "authprovider-confirmlink-ok-help": "लिंकिंग विफलता संदेशों को प्रदर्शित करने के बाद जारी रखें।",
+       "authprovider-resetpass-skip-label": "छोड़ा",
+       "authprovider-resetpass-skip-help": "पासवर्ड का रीसेट करय का छोड़ द्या।",
+       "authform-nosession-login": "प्रमाणीकरण सफल था, लेकिन आपका ब्राउज़र \"याद\" नहीं किया जा सकता है।\n\n$1",
+       "authform-nosession-signup": "खाता तो बन चुका है, लेकिन आपका ब्राउज़र \"याद\" नहीं रखा है कि आपने लॉगिन (प्रवेश) कर लिया है। \n\n$1",
+       "authform-newtoken": "टोकन लापता है $1",
+       "authform-notoken": "टोकन लापता अहय",
+       "authform-wrongtoken": "गलत टोकन",
+       "specialpage-securitylevel-not-allowed-title": "अनुमति नाइ हय",
+       "specialpage-securitylevel-not-allowed": "क्षमा करें, आप इस पृष्ठ का उपयोग नहीं कर सकते हैं, क्योंकि आपकी जानकारी सत्यापित नहीं है।",
+       "authpage-cannot-login": "लॉगिन शुरू करय मा असमर्थ।",
+       "authpage-cannot-login-continue": "लॉग इन करने में अक्षम, हो सकता है कि आपका सत्र समय समाप्त हो गया।",
+       "authpage-cannot-create": "खाता निर्माण में अक्षम है।",
+       "authpage-cannot-create-continue": "खाता निर्माण में अक्षम है। हो सकता है कि आपका सत्र समाप्त हो गया हो।",
+       "authpage-cannot-link": "खाता जोड़ना शुरू नहीं कर सकते।",
+       "authpage-cannot-link-continue": "खाता जोड़ने में विफल रहा। हो सकता है कि आपका सत्र समय समाप्त हो गया।",
+       "cannotauth-not-allowed-title": "अनुमति नहीं मिली।",
+       "cannotauth-not-allowed": "आपको इस पृष्ठ के उपयोग की अनुमति नहीं है।",
+       "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": "खाता अनलिंक भवा",
+       "authenticationdatachange-ignored": "प्रमाणीकरण डेटा परिवर्तन का संचालन नहीं किया गया था। शायद कोई प्रदाता कॉन्फ़िगर नहीं हुआ था?",
+       "userjsispublic": "ध्यान दें: जावास्क्रिप्ट के उपपृष्ठ में कोई भी निजी जानकारी नहीं होनी चाहिए, क्योंकि इसे कोई भी देख सकता है।",
+       "userjsonispublic": "कृपया ध्यान दें:जेएसओएन उपपृष्ठों में गोपनीय डाटा नहीं होने चाहिये क्योंकि वे अन्य सदस्यों द्वारा दृश्य हैं।",
+       "usercssispublic": "ध्यान दें: सी॰एस॰एस उपपृष्ठों में कोई भी निजी जानकारी नहीं होनी चाहिए, क्योंकि इसे कोई भी देख सकता है।",
+       "restrictionsfield-badip": "अमान्य आईपी पते या सीमा: $1",
+       "restrictionsfield-label": "अनुमत आईपी सीमा:",
+       "restrictionsfield-help": "एक आईपी पता या सीडीआरएल सीमा प्रति पंक्ति में लिखें। सभी को सक्रिय करने के लिए <pre>0.0.0.0/0::/0</pre> का उपयोग करें।",
+       "edit-error-short": "त्रुटि: $1",
+       "edit-error-long": "त्रुटि:\n\n$1",
+       "specialmute": "आवाज़ बंद करा जाय",
+       "specialmute-success": "Your mute preferences have been updated. See all muted users in [[Special:Preferences|your preferences]].",
+       "specialmute-submit": "निश्चित करा जाय",
+       "specialmute-label-mute-email": "Mute emails from this user",
+       "specialmute-header": "Please select your mute preferences for user <b>{{BIDI:[[User:$1|$1]]}}</b>.",
+       "specialmute-error-invalid-user": "The username requested could not be found.",
+       "specialmute-error-no-options": "Mute features are unavailable. This might be because: you haven't confirmed your email address or the wiki administrator has disabled email features and/or email blacklist for this wiki.",
+       "specialmute-email-footer": "To manage email preferences for user {{BIDI:$2}} please visit <$1>.",
+       "specialmute-login-required": "आपन पसंद बदलेक खत्तिर लाग इन करा जाय",
+       "mute-preferences": "पसंद सहेजा जाय",
+       "revid": "अवतरण $1",
+       "pageid": "पेज आईडी $1",
+       "interfaceadmin-info": "$1\n\nPermissions for editing of sitewide CSS/JS/JSON files were recently separated from the <code>editinterface</code> right. If you do not understand why you are getting this error, see [[mw:MediaWiki_1.32/interface-admin]].",
+       "rawhtml-notallowed": "&lt;html&gt; टैग का उपयोग सामान्य पन्नों के बाहर नहीं किया जा सकता है।",
+       "gotointerwiki": "आप {{SITENAME}} से बाहर जा रहे हैं।",
+       "gotointerwiki-invalid": "दिया गया शीर्षक अमान्य है।",
+       "gotointerwiki-external": "[[$2]] एक बाहरी वेबसाइट है, जिसमें जाने के लिए आप {{SITENAME}} को छोड़ रहे हैं।\n\n[$1 $1 पर जाने के लिए इस पर क्लिक करें]।",
+       "undelete-cantedit": "आप इस पन्ने को वापस नहीं ला सकते, क्योंकि आपको इस पन्ने पर सम्पादन की अनुमति नहीं है।",
+       "undelete-cantcreate": "आप इस पन्ने को वापस नहीं ला सकते, क्योंकि यह पन्ना इस नाम से है ही नहीं और आपको इस पन्ने के निर्माण की अनुमति भी नहीं है।",
+       "pagedata-title": "पृष्ठ आँकड़े",
+       "pagedata-text": "यह पृष्ठ पृष्ठों के लिए एक डेटा इंटरफ़ेस प्रदान करता है। कृपया उपपृष्ठ सिंटैक्स का उपयोग करके यूआरएल में पेज शीर्षक प्रदान करें।\n* कन्टैंट वार्ता आपके क्लाइंट के एसेडर हेडर के आधार पर लागू होती है। इसका मतलब यह है कि पेज डेटा को आपके क्लाइंट द्वारा पसंदीदा प्रारूप में प्रदान किया जाएगा।",
+       "pagedata-not-acceptable": "कोई अनुकूल प्रारूप नहीं मिला। सुमेलित ऍमआइऍमई प्रकार: $1",
+       "pagedata-bad-title": "अमान्य शीर्षक: $1",
+       "unregistered-user-config": "सुरक्षा कारणों से अपंजीकृत सदस्यों के लिये जावास्क्रिप्ट, सीएसएस और जेएसओएन सदस्य उपपृष्ठ लोड नहीं किये जा सके।",
+       "passwordpolicies": "पासवर्ड नीतियाँ",
+       "passwordpolicies-summary": "यह इस विकि पर परिभाषित सदस्य समूह के लिये प्रभावी पासवर्ड नीति है।",
+       "passwordpolicies-group": "समूह",
+       "passwordpolicies-policies": "पॉलिसी",
+       "passwordpolicies-policy-minimalpasswordlength": "आपका कूटशब्द कम से कम {{PLURAL:$1|1 कैरेक्टर|$1 कैरेक्टरों}} का होना चाहिये।",
+       "passwordpolicies-policy-minimumpasswordlengthtologin": "लॉगिन हेतु पासवर्ड कम से कम $1 {{PLURAL:$1|अक्षर}} लम्बा होना चाहिये",
+       "passwordpolicies-policy-passwordcannotmatchusername": "पासवर्ड सदस्यनाम के समान नहीं हो सकता",
+       "passwordpolicies-policy-passwordcannotmatchblacklist": "पासवर्ड विशेष कालीसूची में डाले गये पासवर्डों के समान नहीं हो सकता",
+       "passwordpolicies-policy-maximalpasswordlength": "पासवर्ड $1 {{PLURAL:$1|अक्षर|अक्षरों}} से कम लम्बा होना चाहिये",
+       "passwordpolicies-policy-passwordcannotbepopular": "पासवर्ड {{PLURAL:$1|सामान्य रूप से प्रयोग होने वाले पासवर्ड में|$1 सामान्य पासवर्डों की सूची में}} नहीं हो सकता।",
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "पासवर्ड सामान्य रूप से उपयोग होने वाले 1,00,000 पासवर्डों की सूची में नहीं हो सकता।",
+       "passwordpolicies-policyflag-forcechange": "must change on login",
+       "passwordpolicies-policyflag-suggestchangeonlogin": "suggest change on login",
+       "mycustomjsredirectprotected": "You do not have permission to edit this JavaScript page because it is a redirect and it does not point inside your userspace.",
+       "easydeflate-invaliddeflate": "Content provided is not properly deflated",
+       "unprotected-js": "सुरक्षा कारणों से जावास्क्रिप्ट असुरक्षित पन्नों से लोड नहीं किया जा सका। कृपया जावास्क्रिप्ट केवल मीडियाविकि में बनाये:नामस्थान या सदस्य उपपृष्ठ",
        "userlogout-continue": "का आप लॉग आउट करा चाहत अहैं?"
 }
index 51c9ffc..e2a4fe8 100644 (file)
        "history": "Səhifənin tarixçəsi",
        "history_short": "Tarixçə",
        "history_small": "tarixçə",
-       "updatedmarker": "son dəfə mən nəzərdən keçirəndən sonra yenilənib",
+       "updatedmarker": "son dəfə nəzərdən keçirəndən sonra yenilənib",
        "printableversion": "Çap variantı",
        "permalink": "Daimi bağlantı",
        "print": "Çap",
        "virus-scanfailed": "Yoxlama başa çatmadı (kod $1)",
        "virus-unknownscanner": "naməlum antivirus",
        "logouttext": "<strong>Sistemdən çıxdınız.</strong>\n\nVeb-brauzerin keş yaddaşını təmizləyənədək bəzi səhifələr hələ də sistemdəymişsiniz kimi görünə bilər.",
+       "logging-out-notify": "Sistemdən çıxdınız, xahiş edirik gözləyin.",
+       "logout-failed": "Çıxış etmək mümkün olmadı: $1",
        "cannotlogoutnow-title": "Çıxış etmək mümkün olmadı",
        "cannotlogoutnow-text": "$1 istifadə edərkən çıxış etmək mümkün deyil.",
        "welcomeuser": "Xoş gəldin $1!",
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 4c81857..23a3b89 100644 (file)
        "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:",
        "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.",
        "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.",
        "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",
        "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",
        "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",
        "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",
        "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.",
        "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",
        "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",
        "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",
        "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-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",
        "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-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-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",
        "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",
        "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.",
        "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-nopreview": "(Mayong patânaw)",
        "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",
        "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-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",
        "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 [[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-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",
+       "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",
        "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",
        "watchnologin": "Mayô sa laog",
        "addwatch": "Idagdag sa bantay-listahan",
        "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",
        "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-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:''' [[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}}",
        "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",
        "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",
        "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",
        "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": "Mayong bagat na nahiling sa IP o ngaran nin paragamit.",
        "blocklink": "bagáton",
        "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 {{PLURAL:$1|one edit|$1 pagliliwat}}.",
        "ipb_already_blocked": "An \"$1\" pinagkubkob na",
        "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).",
+       "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",
        "import": "Ilaog an mga páhina",
        "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...",
        "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-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",
        "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]",
        "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-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)",
        "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-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...",
        "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",
+       "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",
-       "revid": "rebisyon $1"
+       "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 52d5c06..d8e0cb1 100644 (file)
@@ -75,7 +75,7 @@
        "sat": "Sap",
        "january": "Januari",
        "february": "Pibuari",
-       "march": "Marit",
+       "march": "Marat",
        "april": "April",
        "may_long": "Mai",
        "june": "Juni",
        "history": "Riwayat halaman",
        "history_short": "Sajarah",
        "history_small": "riwayat",
-       "updatedmarker": "Dihanyari tumatan ilangan pauncitan ulun",
+       "updatedmarker": "dihanyari tumatan ilangan pauncitan pian",
        "printableversion": "Nang kawa dicitak",
        "permalink": "Tautan tatap",
        "print": "Citak",
        "passwordreset-domain": "Dumain:",
        "passwordreset-email": "Alamat suril:",
        "passwordreset-emailtitle": "Rarincian akun pada {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuting pangingat rarincian akun Pian gasan {{SITENAME}} ($4). Pamakai barikut {{PLURAL:$3|akun|akun}}\ntarait awan suril:\n\n$2\n\n{{PLURAL:$3|katasunduk pahadangan ngini|kakatasunduk pahadangan ngini}} akan kadaluarsa dalam {{PLURAL:$5|sahari|$5 hari}}.\nPian parlu babuat log wan mamilih katasunduk hanyar wayah ni jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada maharung pasan ngini wan manyambung mamuruk katasunduk lawas Pian.",
-       "passwordreset-emailtext-user": "Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuting pangingat hagan rarincian akun Pian gasan {{SITENAME}} ($4). Pamakai barikut {{PLURAL:$3|akun|akun}}\ntarait awan suril:\n\n$2\n\n{{PLURAL:$3|katasunduk pahadangan ngini|kakatasunduk pahadangan ngini}} akan kadaluarsa dalam {{PLURAL:$5|asa hari|$5 hari}}.\nPian parlu babuat log wan mamilih katasunduk hanyar wayah ini jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ngini wan manyambung mamuruk katasunduk lawas Pian.",
+       "passwordreset-emailtext-ip": "Ada urang (pinanya Pian, matan alamat IP $1) maminta sabuting katasunduk Pian baasa gasan {{SITENAME}} ($4). Pamakai barikut {{PLURAL:$3|akun}}\ntarait awan suril:\n\n$2\n\n{{PLURAL:$3|katasunduk pahadangan ngini|kakatasunduk pahadangan ngini}} akan kadaluarsa dalam {{PLURAL:$5|sahari|$5 hari}}.\nPian parlu babuat log wan mamilih katasunduk hanyar wayah ni jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada maharung pasan ngini wan manyambung mamuruk katasunduk lawas Pian.",
+       "passwordreset-emailtext-user": "Pamakai $1 di {{SITENAME}} maminta sabuting katasunduk Pian baasa gasan {{SITENAME}} ($4). Pamakai barikut {{PLURAL:$3|akun}}\ntarait awan suril:\n\n$2\n\n{{PLURAL:$3|katasunduk pahadangan ngini|kakatasunduk pahadangan ngini}} akan kadaluarsa dalam {{PLURAL:$5|sahari|$5 hari}}.\nPian parlu babuat log wan mamilih katasunduk hanyar wayah ini jua. Amun urang lain nang maminta ngini, atawa amun Pian sudah paingatan awan katasunduk Pian, wan Pian kada handak maubahnya, Pian kawa kada mahuwal pasan ngini wan manyambung mamuruk katasunduk lawas Pian.",
        "passwordreset-emailelement": "Ngaran pamakai: \n$1\n\nKatasunduk pahadangan: \n$2",
        "passwordreset-emailsentemail": "Amun alamat suril ngini barait lawan akun pian, maka suril gasan mambulikakan katasunduk pacangan dikirim.",
        "changeemail": "Babak atawa hapus alamat suril",
        "semiprotectedpagewarning": "'''Catatan:''' Tungkaran ngini sudah dilindungi nang akibatnya pamakai tadaptar haja nang kawa mambabak.\nLog masuk pauncitnya disadiakan di bawah gasan rujukan:",
        "cascadeprotectedwarning": "<strong>Paringatan:</strong> Halaman ngini dilindungi jadinya pamakai lawan [[Special:ListGroupRights|hak aksis batantu]] wara nang kawa mambabaknya maraga ditransklusiakan dalam {{PLURAL:$1|halaman}} nang dilindungi barinting.",
        "titleprotectedwarning": "'''Paringatan: Tungkaran ngini sudah dilindungi nang akibatnya [[Special:ListGroupRights|hak khas]] diparluakan hagan maulah ngini.'''\nLog masuk pauncitnya disadiakan di bawah gasan rujukan:",
-       "templatesused": "{{PLURAL:$1|Citakan|Citakan}} nang dipakai di halaman ngini:",
+       "templatesused": "{{PLURAL:$1|Citakan}} nang dipakai di halaman ngini:",
        "templatesusedpreview": "{{PLURAL:$1|Citakan|Cicitakan}} nang dipakai di titilikan ngini:",
        "templatesusedsection": "{{PLURAL:$1|Citakan|Cicitakan}} nang diguna'akan di hagian ini:",
        "template-protected": "(dilindungi)",
        "mergehistory-go": "Tampaiakan bababakan nang kawa digabungakan",
        "mergehistory-submit": "Gabungakan raralatan",
        "mergehistory-empty": "Kadada raralatan nang kawa digabungakan",
-       "mergehistory-done": "$3 {{PLURAL:$3|ralatan|raralatan}} matan $1 ruhui digabungakan ka [[:$2]].",
+       "mergehistory-done": "$3 {{PLURAL:$3|ralatan|raralatan}} matan $1 {{PLURAL:$3|ruhui}} digabungakan ka [[:$2]].",
        "mergehistory-fail": "Kada kawa manggabungakan halam, muhun pariksa pulang tungkaran wan parameter wayah.",
        "mergehistory-no-source": "Tungkaran asal mula $1 kadada.",
        "mergehistory-no-destination": "Tungkaran tatuju $1 kadada.",
        "gender-female": "Inya (binian) mambabak halaman wiki",
        "prefs-help-gender": "Paraturan katujuan ngini opsional.\nParangkat lambik mamakai nilainya gasan maarahakan pian wan manyambat pian ka sabarataan pamakaian mamakai hiauan janis kalamin.\nInformasi nginji pacangan publik.",
        "email": "Suril",
-       "prefs-help-realname": "Ngaran bujur adalah pilihan haja.\nAmun Pian mamilih manyadiakan ini, ini akan dipuruk gasan paminanduan kulihan gawian Pian.",
+       "prefs-help-realname": "Ngaran bujur adalah pilihan haja.\nAmun disadiaakan, ngini kawa gasan paminanduan kulihan gawian Pian.",
        "prefs-help-email": "Alamat suril adalah opsional, tagal pun parlu gasan mambulikakan setelan katasunduk, amunai Pian kada ingatan.",
        "prefs-help-email-others": "Pian kawa jua maijinakan urang mangiau Pian lung tungkaran pamakai atawa pamandiran Pian kada parlu manampaiakan identitas Pian.",
        "prefs-help-email-required": "Alamat suril diparluakan.",
        "prefs-signature": "Tandatangan",
        "prefs-dateformat": "Purmat tanggal",
        "prefs-timeoffset": "Setélan waktu",
-       "prefs-advancedediting": "Pilihan harat",
+       "prefs-advancedediting": "Pilihan umum",
        "prefs-advancedrc": "Pilihan harat",
        "prefs-advancedrendering": "Pilihan harat",
        "prefs-advancedsearchoptions": "Pilihan harat",
        "prefs-displayrc": "Pilihan tampilan",
        "prefs-displaywatchlist": "Pilihan tampilan",
        "prefs-diffs": "Bida",
-       "userrights": "Pangalulaan hak-hak pamuruk",
-       "userrights-lookup-user": "Mangalula gagalambang pamuruk",
+       "userrights": "Hak-hak pamakai",
+       "userrights-lookup-user": "Pilih saurang pamakai",
        "userrights-user-editname": "Masukakan ngaran pamakai:",
-       "editusergroup": "Babak galambang pamuruk",
-       "editinguser": "Ma-ubah hak ungkai pamuruk '''[[User:$1|$1]]''' $2",
-       "userrights-editusergroup": "Babak galambang pamuruk",
-       "saveusergroups": "Simpan galambang pamuruk",
+       "editusergroup": "Muat garumbungan pamakai",
+       "editinguser": "Ma-ubah hak {{GENDER:$1|pamakai}} <strong>[[User:$1|$1]]</strong> $2",
+       "userrights-editusergroup": "Babak garumbung {{GENDER:$1|pamakai}}",
+       "saveusergroups": "Simpan garumbung {{GENDER:$1|pamakai}}",
        "userrights-groupsmember": "Angguta matan:",
        "userrights-groupsmember-auto": "Angguta tasirat matan:",
-       "userrights-groups-help": "Pian kawa maubah galambang pamuruk ngini:\n* Kutak awan tanda cek artnya galambang pamuruk nang basangkutan\n* Kutak kada batanda cek artinya pamuruk ngini lainan angguta galambang ngitu\n* Tanda * manandai bahwasa Pian kada kawa mawalangi galambang ngitu amun Pian sudah manambahinya, atawa kabalikannya.",
+       "userrights-groups-help": "Pian kawa maubah garumbung pamakai ngini:\n* Kutak awan tanda cek artinya garumbung pamakai nang basangkutan\n* Kutak kada batanda cek artinya pamakai ngini lainan angguta garumbung ngitu\n* Tanda * manandai bahwasa Pian kada kawa mawalangi garumbung ngitu amun Pian sudah manambahinya, atawa kabalikannya.\n* Tanda # manandai pian kawa mambulikakan waktu kadaluarsa gasan garumbung pamakai ngini; pian kada kawa mamajuakannya.",
        "userrights-reason": "Alasan:",
        "userrights-no-interwiki": "Pian kada baisi hak gasan maubah hak pamakai di wiki nang lain.",
        "userrights-nodatabase": "Basis data $1 kadada atawa lainan lukal.",
        "group-bot": "Bot",
        "group-sysop": "Pambakal",
        "group-bureaucrat": "Birukrat",
-       "group-suppress": "Pangawas",
+       "group-suppress": "Panindas",
        "group-all": "(samunyaan)",
        "group-user-member": "{{GENDER:$1|pamakai}}",
        "group-autoconfirmed-member": "{{GENDER:$1|pamakai utumatis diyakinakan}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|pambakal}}",
        "group-bureaucrat-member": "{{GENDER:$1|birukrat}}",
-       "group-suppress-member": "{{GENDER:$1|pangawas}}",
+       "group-suppress-member": "{{GENDER:$1|panindas}}",
        "grouppage-user": "{{ns:project}}: Pamakai",
        "grouppage-autoconfirmed": "{{ns:project}}:Pamakai takunfirmasi utumatis",
        "grouppage-bot": "{{ns:project}}:Bot",
        "grouppage-bureaucrat": "{{ns:project}}:Birukrat",
        "grouppage-suppress": "{{ns:project}}:Pangawas",
        "right-read": "Mambaca tungkaran",
-       "right-edit": "Mambaiki tungkaran",
+       "right-edit": "Mambabaķ tungkaran",
        "right-createpage": "Ulah tutungkaran (nang lainan tutungkaran pamandiran)",
        "right-createtalk": "Maulah tutungkaran pamandiran",
        "right-createaccount": "Ulah akun pamakai hanyar",
        "filehist-comment": "Ulasan",
        "imagelinks": "Tautan barakas",
        "linkstoimage": "{{PLURAL:$1|Halaman|$1 halaman}} nangini mamakai barakas ngini:",
-       "linkstoimage-more": "Labih daripada $1 {{PLURAL:$1|pamakaian halaman|pamakaian halaman}} ka barakas ngini.\nDaptar barikut manampaiakan {{PLURAL:$1|halaman panambaian|$1 halaman panambaian}} nang mamakai barakas ngini haja.\nSabuting [[Special:WhatLinksHere/$2|daptar hibak]] tasadia.",
+       "linkstoimage-more": "Labih daripada $1 {{PLURAL:$1|pamakaian halaman}} ka barakas ngini.\nDaptar barikut manampaiakan {{PLURAL:$1|halaman panambaian|$1 halaman panambaian}} nang mamakai barakas ngini haja.\nSabuting [[Special:WhatLinksHere/$2|daptar hibak]] tasadia.",
        "nolinkstoimage": "Kadada tutungkaran nang mamakai barakas ngini.",
        "morelinkstoimage": "Tiringi [[Special:WhatLinksHere/$1|tautan lagi]] ka barakas ngini.",
        "linkstoimage-redirect": "$1 (barakas paugahan) $2",
        "pageinfo-few-watchers": "Kurang matan $1 {{PLURAL:$1|pa-ilang}}",
        "pageinfo-redirects-name": "Jumlah paugahan ka halaman ngini",
        "pageinfo-subpages-name": "Subtungkaran tungkaran ngini",
-       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|paugahan|paugahan}}; $3 {{PLURAL:$3|non-paugahan|non-paugahan}})",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|paugahan}}; $3 {{PLURAL:$3|non-paugahan}})",
        "pageinfo-firstuser": "Pa-ulah tungkaran",
        "pageinfo-firsttime": "Tanggal paulahan tungkaran",
        "pageinfo-lastuser": "Pambabak pauncitnya",
        "pageinfo-recent-edits": "Jumlah babakan damini (dalam $1 pauncitnya)",
        "pageinfo-recent-authors": "Jumlah panulis nang babida damini",
        "pageinfo-magic-words": "{{PLURAL:$1|Kata|Kata-kata}} ajaib ($1)",
-       "pageinfo-hidden-categories": "{{PLURAL:$1|Pilah|Pilah}} tatukup ($1)",
+       "pageinfo-hidden-categories": "{{PLURAL:$1|Tumbung}} tatukup ($1)",
        "pageinfo-templates": "{{PLURAL:$1|Citakan|Cicitakan}} nang ditransklusi ($1)",
        "pageinfo-transclusions": "{{PLURAL:$1|Tungkaran|Tutungkaran}} ditransklusikan pada ( $1 )",
        "pageinfo-toolboxlink": "Panjalasan halaman",
index cd0cacf..a315d3f 100644 (file)
        "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": "অনুচ্ছেদ পাওয়া যায়নি",
        "search-interwiki-more": "(আরও)",
        "search-interwiki-more-results": "আরও ফলাফল",
        "search-relatedarticle": "সম্পর্কিত",
+       "search-invalid-sort-order": "$1-এর বাছাইয়ের ক্রম অজানা, পূর্বনির্ধারিত বাছাই প্রয়োগ হবে। বৈধ বাছাইয়ের ক্রমগুলি হল: $2",
        "searchrelated": "সম্পর্কিত",
        "searchall": "সমস্ত",
        "showingresults": "নিচে '''$2''' নং থেকে শুরু করে {{PLURAL:$1|'''1''' ফলাফল|'''$1''' ফলাফলসমূহ}} দেখানো হল।",
        "blocklink": "বাধা দাও",
        "unblocklink": "বাধা তুলুন",
        "change-blocklink": "বাধা পরিবর্তন করুন",
+       "empty-username": "(কোনও ব্যবহারকারীর নাম উপলব্ধ নেই)",
        "contribslink": "অবদান",
        "emaillink": "ই-মেইল পাঠাও",
        "autoblocker": "আপনাকে স্বয়ংক্রিয়ভাবে বাধা দেওয়া হয়েছে, কারণ আপনার আইপি ঠিকানাটি সম্প্রতি \"[[User:$1|$1]]\" ব্যবহার করেছেন। $1-কে বাধাদানের কারণ \"$2\"",
        "permanentlink": "স্থায়ী সংযোগ",
        "permanentlink-revid": "সংশোধন আইডি",
        "permanentlink-submit": "এই সংশোধনে যান",
+       "newsection": "নতুন অনুচ্ছেদ",
+       "newsection-page": "লক্ষ্য পাতা",
        "dberr-problems": " দুঃখিত! এই সাইটটি বর্তমানে কারীগরী অসুবিধার মুখোমুখি হয়েছে।",
        "dberr-again": "কয়েক মিনিট পর পুনরায় পরিদর্শনের চেষ্টা করুন।",
        "dberr-info": "(ডেটাবেজ প্রবেশ করা সম্ভব হয়নি: $1)",
index 6d19937..df0716f 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",
        "prefs-watchlist": "Spisak praćenja",
        "prefs-editwatchlist": "Uređivanje spiska praćenja",
        "prefs-editwatchlist-label": "Uređivanje spiska:",
-       "prefs-editwatchlist-edit": "vidi i ukloni naslove sa spiska praćenja",
-       "prefs-editwatchlist-raw": "uredi sirov spisak praćenja",
-       "prefs-editwatchlist-clear": "očisti spisak praćenja",
+       "prefs-editwatchlist-edit": "Prikaži i ukloni naslove sa spiska praćenja",
+       "prefs-editwatchlist-raw": "Uredi sirovi spisak praćenja",
+       "prefs-editwatchlist-clear": "Očisti spisak praćenja",
        "prefs-watchlist-days": "Broj dana za prikaz u spisku praćenja:",
        "prefs-watchlist-days-max": "Najviše $1 {{PLURAL:$1|dan|dana}}",
        "prefs-watchlist-edits": "Najviše prikazanih izmjena na spisku praćenja:",
        "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 839a5dc..714df0f 100644 (file)
        "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]]:",
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 4da930e..0fcfa49 100644 (file)
        "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",
index 0d88510..10d1709 100644 (file)
        "autoblockedtext": "Din IP-adresse er blevet blokeret automatisk fordi den blev brugt af en anden bruger som er blevet blokeret af $1.\nDen givne begrundelse er:\n\n:<em>$2</em>\n\n* Blokeringen starter: $8\n* Blokeringen udløber: $6\n* Blokeringen er rettet mod: $7\n\nDu kan kontakte $1 eller en af de andre [[{{MediaWiki:Grouppage-sysop}}|administratorer]] for at diskutere blokeringen.\n\nBemærk at du ikke kan bruge funktionen \"{{int:emailuser}}\" medmindre du har en gyldig e-mailadresse registreret i dine [[Special:Preferences|brugerindstillinger]] og du ikke er blevet blokeret fra at bruge den.\n\nDin nuværende IP-adresse er $3, og blokerings-id'et er #$5.\nAngiv venligst alle de ovenstående detaljer ved eventuelle henvendelser.",
        "systemblockedtext": "Dit brugernavn eller din IP-adresse er automatisk blokeret af MediaWiki.\nBegrundelsen for det er:\n\n:<em>$2</em>\n\n* Blokeringsperiodens start: $8\n* Blokeringen udløber: $6\n* Blokeringen er ment for: $7\n\nDin nuværende IP-adresse er $3.\nAngiv venligst alle de ovenstående detaljer ved eventuelle henvendelser.",
        "blockednoreason": "ingen begrundelse givet",
+       "blockedtext-composite-no-ids": "Din IP-adresse findes i flere sortlister",
        "whitelistedittext": "Du skal $1 for at kunne redigere sider.",
        "confirmedittext": "Du skal bekræfte din e-mailadresse, før du kan redigere sider. Udfyld og bekræft din e-mailadresse i dine [[Special:Preferences|bruger indstillinger]].",
        "nosuchsectiontitle": "Kan ikke finde afsnittet",
        "blocklink": "blokér",
        "unblocklink": "ophæv blokering",
        "change-blocklink": "ændring af blokering",
+       "empty-username": "(intet tilgængeligt brugernavn)",
        "contribslink": "bidrag",
        "emaillink": "send e-mail",
        "autoblocker": "Du er automatisk blokeret, fordi din IP-adresse for nylig er blevet brugt af \"[[User:$1|$1]]\".\nBegrundelsen for blokeringen af $1 er \"$2\".",
        "immobile-target-namespace-iw": "En side kan ikke flyttes til en interwiki-henvisning.",
        "immobile-source-page": "Denne side kan ikke flyttes.",
        "immobile-target-page": "Kan ikke flytte til det navn.",
+       "movepage-invalid-target-title": "Det ønskede navn er ugyldigt.",
        "bad-target-model": "Den ønskede destination bruger en anden indholdsmodel. Kan ikke konvertere fra $1 til $2.",
        "imagenocrossnamespace": "Filer kan ikke flyttes til et navnerum der ikke indeholder filer",
        "nonfile-cannot-move-to-file": "Kan ikke flytte ikke-filer til fil-navnerummet",
        "permanentlink": "Permanent link",
        "permanentlink-revid": "Versions-ID",
        "permanentlink-submit": "Gå til version",
+       "newsection": "Nyt afsnit",
+       "newsection-submit": "Gå til side",
        "dberr-problems": "Undskyld! Siden har tekniske problemer.",
        "dberr-again": "Prøv at vente et par minutter og opdater så siden igen.",
        "dberr-info": "(Kan ikke tilgå databasen: $1)",
        "mw-widgets-abandonedit-discard": "Kasser redigeringer",
        "mw-widgets-abandonedit-keep": "Fortsæt med at redigere",
        "mw-widgets-abandonedit-title": "Er du sikker?",
+       "mw-widgets-copytextlayout-copy": "Kopiér",
        "mw-widgets-dateinput-no-date": "Ingen dato valgt",
        "mw-widgets-dateinput-placeholder-day": "ÅÅÅÅ-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "ÅÅÅÅ-MM",
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..8988419 100644 (file)
        "rcfilters-filter-showlinkedto-label": "Show changes on pages linking to",
        "rcfilters-filter-showlinkedto-option-label": "<strong>Pages linking to</strong> the selected page",
        "rcfilters-target-page-placeholder": "Enter a page name (or category)",
+       "rcfilters-allcontents-label": "All contents",
+       "rcfilters-alldiscussions-label": "All discussions",
        "rcnotefrom": "Below {{PLURAL:$5|is the change|are the changes}} since <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
        "rclistfromreset": "Reset date selection",
        "rclistfrom": "Show new changes starting from $2, $3",
        "filehist-filesize": "File size",
        "filehist-comment": "Comment",
        "imagelinks": "File usage",
-       "linkstoimage": "The following {{PLURAL:$1|page uses|$1 pages uses}} this file:",
+       "linkstoimage": "The following {{PLURAL:$1|page uses|$1 pages use}} this file:",
        "linkstoimage-more": "More than $1 {{PLURAL:$1|page uses|pages use}} this file.\nThe following list shows the {{PLURAL:$1|first page|first $1 pages}} that use this file only.\nA [[Special:WhatLinksHere/$2|full list]] is available.",
        "nolinkstoimage": "There are no pages that use this file.",
        "morelinkstoimage": "View [[Special:WhatLinksHere/$1|more links]] to this file.",
        "move-subpages": "Move subpages (up to $1)",
        "move-talk-subpages": "Move subpages of talk page (up to $1)",
        "movepage-page-exists": "The page $1 already exists and cannot be automatically overwritten.",
+       "movepage-source-doesnt-exist": "The page $1 doesn't exist and cannot be moved.",
        "movepage-page-moved": "The page $1 has been moved to $2.",
        "movepage-page-unmoved": "The page $1 could not be moved to $2.",
        "movepage-max-pages": "The maximum of $1 {{PLURAL:$1|page|pages}} has been moved and no more will be moved automatically.",
        "delete_and_move_reason": "Deleted to make way for move from \"[[$1]]\"",
        "selfmove": "The title is the same;\ncannot move a page over itself.",
        "immobile-source-namespace": "Cannot move pages in namespace \"$1\".",
+       "immobile-source-namespace-iw": "Pages on other wikis cannot be moved from this wiki.",
        "immobile-target-namespace": "Cannot move pages into namespace \"$1\".",
        "immobile-target-namespace-iw": "Interwiki link is not a valid target for page move.",
        "immobile-source-page": "This page is not movable.",
        "immobile-target-page": "Cannot move to that destination title.",
+       "movepage-invalid-target-title": "The requested name is invalid.",
        "bad-target-model": "The desired destination uses a different content model. Cannot convert from $1 to $2.",
        "imagenocrossnamespace": "Cannot move file to non-file namespace.",
        "nonfile-cannot-move-to-file": "Cannot move non-file to file namespace.",
        "version-db-mariadb-url": "https://mariadb.org/",
        "version-db-percona-url": "http://www.percona.com/software/percona-server",
        "version-db-postgres-url": "http://www.postgresql.org/",
-       "version-db-oracle-url": "http://www.oracle.com/database/",
        "version-db-sqlite-url": "https://www.sqlite.org/",
-       "version-db-mssql-url": "https://www.microsoft.com/sql/",
        "version-entrypoints": "Entry point URLs",
        "version-entrypoints-header-entrypoint": "Entry point",
        "version-entrypoints-header-url": "URL",
        "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 93c5f93..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",
        "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 ebc2405..814e6d7 100644 (file)
        "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": "Existen múltiples bloqueos 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-block": "Bloquear a otros usuarios para que no editen",
        "right-blockemail": "Bloquear a un usuario para que no pueda mandar correos electrónicos",
        "right-hideuser": "Bloquear un nombre de usuario, haciéndolo invisible",
-       "right-ipblock-exempt": "Evitar bloqueos de IP, bloqueos automáticos y bloqueos de rango",
+       "right-ipblock-exempt": "Evitar bloqueos a IP, automáticos y por intervalos",
        "right-unblockself": "Desbloquearse a sí mismo",
        "right-protect": "Cambiar niveles de protección y editar páginas protegidas en cascada",
        "right-editprotected": "Editar páginas protegidas como «{{int:protect-level-sysop}}»",
        "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 bloqueos de IP, bloqueos automáticos y bloqueos de rango",
+       "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",
        "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 8d4fd7d..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 است.",
        "revdelete-unsuppress": "حذف محدودیت‌ها در بازبینی‌های ترمیم‌شده",
        "revdelete-log": "دلیل:",
        "revdelete-submit": "اعمال بر {{PLURAL:$1|نسخهٔ|نسخه‌های}} انتخاب شده",
-       "revdelete-success": "Ù¾Û\8cداÛ\8cÛ\8c Ù\86سخÙ\87 Ø±Ù\88زآÙ\85د شد.",
+       "revdelete-success": "Ù¾Û\8cداÛ\8cÛ\8c Ù\86سخÙ\87 Ø¨Ù\87â\80\8cرÙ\88ز شد.",
        "revdelete-failure": "'''پیدایی نسخه‌ها قابل به روز کردن نیست:'''\n$1",
        "logdelete-success": "تغییر پیدایی مورد انجام شد.",
        "logdelete-failure": "'''پیدایی سیاهه‌ها قابل تنظیم نیست:'''\n$1",
index f1c9830..27ac340 100644 (file)
        "right-move-categorypages": "Renommer des pages de catégorie",
        "right-movefile": "Renommer des fichiers",
        "right-suppressredirect": "Ne pas créer de redirection depuis le titre d’origine en renommant les pages",
-       "right-upload": "Importer des fichiers",
+       "right-upload": "Téléverser des fichiers",
        "right-reupload": "Écraser un fichier existant",
        "right-reupload-own": "Écraser un fichier que l'on a soi-même importé",
        "right-reupload-shared": "Écraser localement des fichiers présents sur un dépôt partagé",
        "action-move-rootuserpages": "renommer la page principale d'un utilisateur",
        "action-move-categorypages": "renommer des pages de catégorie",
        "action-movefile": "renommer ce fichier",
-       "action-upload": "importer ce fichier",
+       "action-upload": "téléverser ce fichier",
        "action-reupload": "écraser ce fichier existant",
        "action-reupload-shared": "outrepasser localement ce fichier présent sur un dépôt partagé",
        "action-upload_by_url": "importer ce fichier à partir d'une adresse URL",
        "recentchanges-page-removed-from-category": "[[:$1]] supprimé de la catégorie",
        "recentchanges-page-removed-from-category-bundled": "[[:$1]] supprimée de la catégorie, [[Special:WhatLinksHere/$1|cette page est incluse dans d’autres]]",
        "autochange-username": "Modification automatique de MediaWiki",
-       "upload": "Importer un fichier",
+       "upload": "Téléverser un fichier",
        "uploadbtn": "Importer le fichier",
        "reuploaddesc": "Annuler l'importation et retourner au formulaire d'import",
        "upload-tryagain": "Envoyer la description du fichier modifiée",
        "savefile": "Sauvegarder le fichier",
        "uploaddisabled": "Désolé, l’import de fichiers est désactivé.",
        "copyuploaddisabled": "Import de fichier par URL désactivé.",
-       "uploaddisabledtext": "L’import de fichiers est désactivé sur ce wiki.",
+       "uploaddisabledtext": "Le téléversement de fichiers est désactivé sur ce wiki.",
        "php-uploaddisabledtext": "L'import de fichiers est désactivé en PHP. Vérifiez l'option de configuration file_uploads.",
        "uploadscripted": "Ce fichier contient du code HTML ou un script qui pourrait être interprété de façon incorrecte par un navigateur web.",
        "upload-scripted-pi-callback": "Impossible de charger un fichier qui contient des instructions de traitement de feuille de style XML.",
        "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",
        "move-subpages": "Renommer les sous-pages (maximum $1)",
        "move-talk-subpages": "Renommer les sous-pages de la page de discussion (maximum $1)",
        "movepage-page-exists": "La page $1 existe déjà et ne peut pas être écrasée automatiquement.",
+       "movepage-source-doesnt-exist": "La page $1 n’existe pas et n’a pas pu être supprimée.",
        "movepage-page-moved": "La page $1 a été renommée en $2.",
        "movepage-page-unmoved": "La page $1 n'a pas pu être renommée en $2.",
        "movepage-max-pages": "Le maximum de $1 {{PLURAL:$1|page renommée|pages renommées}} a été atteint et aucune autre page ne sera renommée automatiquement.",
        "delete_and_move_reason": "Page supprimée pour permettre le renommage depuis « [[$1]] »",
        "selfmove": "Le titre est le même ;\nimpossible de renommer une page sur elle-même.",
        "immobile-source-namespace": "Vous ne pouvez pas renommer les pages dans l'espace de noms « $1 »",
+       "immobile-source-namespace-iw": "Les pages sur d’autres wikis ne peuvent être déplacées depuis ce wiki.",
        "immobile-target-namespace": "Vous ne pouvez pas renommer des pages vers l’espace de noms « $1 ».",
        "immobile-target-namespace-iw": "Un lien interwiki n’est pas une cible valide pour un renommage de page.",
        "immobile-source-page": "Cette page n'est pas renommable.",
        "immobile-target-page": "Il n'est pas possible de renommer la page vers ce titre.",
+       "movepage-invalid-target-title": "Le nom demandé n’est pas valide.",
        "bad-target-model": "La destination souhaitée utilise un autre modèle de contenu. Impossible de convertir de $1 vers $2.",
        "imagenocrossnamespace": "Impossible de renommer un fichier vers un espace de noms autre que fichier.",
        "nonfile-cannot-move-to-file": "Impossible de renommer quelque chose d'autre qu’un fichier vers l’espace de noms fichier.",
        "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)",
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 ceb8e3a..16d0ab9 100644 (file)
@@ -16,7 +16,8 @@
                        "唐吉訶德的侍從",
                        "飞舞回堂前",
                        "Macofe",
-                       "Ruthven"
+                       "Ruthven",
+                       "Tacsipacsi"
                ]
        },
        "tog-underline": "Lièn-chiap kâ-tái sien:",
        "recreate": "重建",
        "confirm_purge_button": "做得",
        "confirm-purge-top": "Chhîn-chhù pún-chông chhòng-chhùn?",
+       "colon-separator": ":&#32;",
        "imgmultipageprev": "← sông yit-chông",
        "imgmultipagenext": "hâ yit-chông →",
        "imgmultigo": "確定!",
index 6e8339a..ebca6ef 100644 (file)
        "systemblockedtext": "שם המשתמש או כתובת ה־IP שלך נחסמו באופן אוטומטי על־ידי תוכנת מדיה־ויקי.\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": "×\9e×\96×\94×\99 ×\94×\97ס×\99×\9e×\95ת ×\94ר×\9c×\95×\95× ×\98×\99×\99×\9d: $1 (×\92×\9d ×\9bת×\95×\91ת ×\94Ö¾IP ×©×\9c×\9a ×\99×\9b×\95×\9c×\94 ×\9c×\94×\99×\95ת ×\91רש×\99×\9e×\94 ×\94שחורה)",
-       "blockedtext-composite-no-ids": "כתובת ה־IP שלך מופיעה במספר רשימות שחורות",
+       "blockedtext-composite-ids": "×\94×\9eספר×\99×\9d ×\94×\9e×\96×\94×\99×\9d ×©×\9c ×\94×\97ס×\99×\9e×\95ת ×\94ר×\9c×\95×\95× ×\98×\99×\95ת: $1 (×\91× ×\95סף, ×\99×\99ת×\9b×\9f ×©×\9bת×\95×\91ת ×\94Ö¾IP ×©×\9c×\9a × ×\9eצ×\90ת ×\91רש×\99×\9e×\94 שחורה)",
+       "blockedtext-composite-no-ids": "נר×\90×\94 ×©×\9bת×\95×\91ת ×\94Ö¾IP ×©×\9c×\9a ×\9e×\95פ×\99×¢×\94 ×\91×\9eספר ×¨×©×\99×\9e×\95ת ×©×\97×\95ר×\95ת",
        "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": "פר×\95פ×\99×\9c ×\97×\99פ×\95ש ×©×\9c $1 ×\90×\99× ×\95 ×\9e×\95×\9bר, ×\99×\97×\95×\9c ×\94ס×\93ר ×©×\9e×\95×\92×\93ר ×\9cפ×\99 ברירת המחדל.",
+       "search-invalid-sort-order": "סדר המיון \"$1\" אינו חוקי; תוצאות החיפוש יסודרו בהתאם לברירת המחדל. סדרי המיון החוקיים הם: $2",
+       "search-unknown-profile": "ס×\95×\92 ×\94×\97×\99פ×\95ש \"$1\" ×\90×\99× ×\95 ×\97×\95ק×\99; ×\94×\97×\99פ×\95ש ×\99ת×\91צע ×\91×\94ת×\90×\9d ×\9cברירת המחדל.",
        "searchrelated": "קשור",
        "searchall": "הכול",
        "showingresults": "{{PLURAL:$1|מוצגת תוצאה <strong>אחת</strong>|מוצגות עד <strong>$1</strong> תוצאות}} החל ממספר <strong>$2</strong>:",
        "right-editmyusercss": "עריכת קובצי CSS של המשתמש עצמו",
        "right-editmyuserjson": "עריכת קובצי JSON של המשתמש עצמו",
        "right-editmyuserjs": "עריכת קובצי JavaScript של המשתמש עצמו",
-       "right-editmyuserjsredirect": "ער×\99×\9bת ×\93פ×\99 JavaScript ×©×\9c×\9a שהם הפניות",
+       "right-editmyuserjsredirect": "ער×\99×\9bת ×§×\95×\91צ×\99 JavaScript ×©×\9c ×\94×\9eשת×\9eש ×¢×¦×\9e×\95 שהם הפניות",
        "right-viewmywatchlist": "צפייה ברשימת המעקב של המשתמש עצמו",
        "right-editmywatchlist": "עריכת רשימת המעקב של המשתמש עצמו. מספר פעולות יוסיפו דפים גם ללא הרשאה זו.",
        "right-viewmyprivateinfo": "צפייה במידע הפרטי של המשתמש עצמו (כגון: כתובת דוא\"ל, שם אמיתי)",
        "action-editmyusercss": "לערוך קובצי CSS של עצמך",
        "action-editmyuserjson": "לערוך קובצי JSON של עצמך",
        "action-editmyuserjs": "לערוך קובצי JavaScript של עצמך",
-       "action-editmyuserjsredirect": "×\9cער×\95×\9a ×\90ת ×\93פ×\99 ×\94Ö¾JavaScript ×©×\9cך שהם הפניות",
+       "action-editmyuserjsredirect": "×\9cער×\95×\9a ×§×\95×\91צ×\99 JavaScript ×©×\9c ×¢×¦×\9eך שהם הפניות",
        "action-viewsuppressed": "לצפות בגרסאות שהוסתרו מכל המשתמשים",
        "action-hideuser": "לחסום שם משתמש תוך הסתרתו מהציבור",
        "action-ipblock-exempt": "לעקוף חסימות של כתובות IP, חסימות אוטומטיות וחסימות טווחים",
        "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": "ער×\99×\9bת ×\93×£ ×\94×\9eשת×\9eש ×¦×¨×\99×\9b×\94 ×\9c×\94×\99×\95ת ×\9e×\95תרת ×\91×\97ס×\99×\9e×\94 ×\97×\9cק×\99ת, ×\90×\9c×\90 ×\90×\9d ×\9b×\9f ×\94×\99×\90 ×\9b×\95×\9c×\9cת ×\94×\92×\91×\9c×\94 ×\91×\9eר×\97×\91 ×©×\99×\97ת ×\9eשת×\9eש.",
+       "ipb-prevent-user-talk-edit": "×\97ס×\99×\9e×\94 ×\97×\9cק×\99ת ×\97×\99×\99×\91ת ×\9c×\94ת×\99ר ×\9c×\9eשת×\9eש ×\90ת ×¢×¨×\99×\9bת ×\93×£ ×\94ש×\99×\97×\94 ×©×\9c ×¢×¦×\9e×\95, ×\90×\9c×\90 ×\90×\9d ×\9b×\9f ×\94×\97ס×\99×\9e×\94 ×\9b×\95×\9c×\9cת ×\94×\92×\91×\9c×\94 ×¢×\9c ×\9eר×\97×\91 ×\94ש×\9d \"ש×\99×\97ת ×\9eשת×\9eש\".",
        "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": "ש×\99×\9e×\95ש ×\91×\98×\95פס ×\9c×\94×\9c×\9f ×\99שנ×\94 ×\90ת ×\94ש×\9d ×©×\9c ×\94×\93×£ ×\95×\99×¢×\91×\99ר ×\90ת ×\9b×\9c ×\94×\99ס×\98×\95ר×\99×\99ת ×\94×\92רס×\90×\95ת ×©×\9c×\95 ×\9cש×\9d ×\94×\97×\93ש.\n×\91×\90×\97ר×\99×\95ת×\9a ×\9c×\94×\91×\98×\99×\97 ×©×\9b×\9c ×\94ק×\99ש×\95ר×\99×\9d ×\90×\9c×\99×\95 ×\99×\9eש×\99×\9b×\95 ×\9c×\94צ×\91×\99×¢ ×\9c×\9eק×\95×\9d ×©×\94×\9d ×\90×\9e×\95ר×\99×\9d ×\9c×\94×\92×\99×¢ ×\90×\9c×\99×\95.\n\n×\99ש ×\9cש×\99×\9d ×\9c×\91 ×\9c×\9b×\9a ×©×\94×\93×£ <strong>×\9c×\90</strong> ×\99×\95×¢×\91ר ×\90×\9d ×\9b×\91ר ×\99ש ×\93×£ ×\91×\9b×\95תרת ×\94×\97×\93ש×\94.\n×\96×\94 ×\90×\95×\9eר ×©×\91×\90פשר×\95ת×\9a ×\9cשנ×\95ת ×©×\9d ×©×\9c ×\93×£ ×\97×\96ר×\94 ×\9cש×\9d ×©×\9e×\9e× ×\95 ×\94×\95×\90 ×\94×\95×¢×\91ר ×\91×\9eקר×\94 ×©×\9c ×\98×¢×\95ת, ×\95ש×\90×\99Ö¾×\90פשר ×\9c×\93ר×\95ס ×\93×£ ×§×\99×\99×\9d.\n\n<strong>×\9cתש×\95×\9eת ×\9c×\91×\9a:</strong>\n×\96×\94 ×\99×\9b×\95×\9c ×\9c×\94×\99×\95ת ×©×\99× ×\95×\99 ×§×\99צ×\95× ×\99 ×\95×\91×\9cת×\99־צפ×\95×\99 ×¢×\91×\95ר ×\93×£ ×¤×\95פ×\95×\9cר×\99;\n× ×\90 ×\9c×\95×\95×\93×\90 ×©×\94×\91נת ×\90ת ×\94×\94ש×\9c×\9b×\95ת ×©×\9c ×\96×\94 ×\9cפנ×\99 ×\94×\9eש×\9a ×\94פע×\95×\9cה.",
+       "movepagetext-noredirectsupport": "× ×\99ת×\9f ×\9c×\94שת×\9eש ×\91×\98×\95פס ×©×\9c×\94×\9c×\9f ×\9b×\93×\99 ×\9cשנ×\95ת ×\90ת ×\94ש×\9d ×©×\9c ×\94×\93×£ ×\94×\96×\94 ×\95×\9c×\94×¢×\91×\99ר ×\90ת ×\9b×\9c ×\94×\99ס×\98×\95ר×\99×\99ת ×\94ער×\99×\9b×\95ת ×©×\9c×\95 ×\9cש×\9d ×\94×\97×\93ש.\n×\91×\90×\97ר×\99×\95ת×\9a ×\9c×\95×\95×\93×\90 ×©×\9b×\9c ×\94ק×\99ש×\95ר×\99×\9d ×\99×\9eש×\99×\9b×\95 ×\9cקשר ×\9c×\9eק×\95×\9e×\95ת ×©×\90×\9c×\99×\94×\9d ×\94×\9d ×\90×\9e×\95ר×\99×\9d ×\9cקשר.\n\n×\99ש ×\9cש×\99×\9d ×\9c×\91 ×\9c×\9b×\9a ×©×\94×\93×£ <strong>×\9c×\90</strong> ×\99×\95×¢×\91ר ×\90×\9d ×\9b×\91ר ×\99ש ×\93×£ ×ª×\97ת ×\94ש×\9d ×\94×\97×\93ש.\n×\96×\94 ×\90×\95×\9eר ×©× ×\99ת×\9f ×\99×\94×\99×\94 ×\9c×\94×\97×\96×\99ר ×\90ת ×\94×\93×£ ×\9cש×\9d ×\94×\9eק×\95ר×\99 ×\91×\9eקר×\94 ×©×ª×\99עש×\94 ×\98×¢×\95ת, ×\90×\91×\9c ×\9c×\90 × ×\99ת×\9f \"×\9c×\93ר×\95ס\" ×\93×£ ×§×\99×\99×\9d.\n\n<strong>×\9cתש×\95×\9eת ×\9c×\91×\9a:</strong>\n×\94×¢×\91ר×\94 ×\96×\95 ×¢×\9c×\95×\9c×\94 ×\9c×\94×\99×\95ת ×©×\99× ×\95×\99 ×\93רס×\98×\99 ×\95×\9e×\94×\95ת×\99 ×\9c×\93×£ ×¤×\95פ×\95×\9cר×\99;\n×\99ש ×\9cק×\97ת ×\91×\97ש×\91×\95×\9f ×\90ת ×\94ת×\95צ×\90×\95ת ×©×\9c ×\94פע×\95×\9c×\94 ×\94×\96×\90ת ×\9cפנ×\99 ×\91×\99צ×\95×¢ ×\94×\94×¢×\91רה.",
        "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)",
        "linkaccounts": "קישור חשבונות",
        "linkaccounts-success-text": "החשבון קושר.",
        "linkaccounts-submit": "קישור החשבונות",
-       "cannotunlink-no-provider-title": "×\90×\99×\9f ×\97ש×\91×\95× ×\95ת ×\9eק×\95שר×\99×\9d ×©×\90פשר לבטל את הקישור שלהם",
-       "cannotunlink-no-provider": "×\90×\99×\9f ×\97ש×\91×\95× ×\95ת ×\9eק×\95שר×\99×\9d ×©×\94ק×\99ש×\95ר ×©×\9c×\94×\9d ×\99×\9b×\95×\9c ×\9c×\94×\99×\95ת ×\9e×\91×\95×\98×\9c.",
+       "cannotunlink-no-provider-title": "×\90×\99×\9f ×\97ש×\91×\95× ×\95ת ×\9eק×\95שר×\99×\9d ×©× ×\99ת×\9f לבטל את הקישור שלהם",
+       "cannotunlink-no-provider": "×\90×\99×\9f ×\97ש×\91×\95× ×\95ת ×\9eק×\95שר×\99×\9d ×©× ×\99ת×\9f ×\9c×\91×\98×\9c ×\90ת ×\94ק×\99ש×\95ר ×©×\9c×\94×\9d.",
        "unlinkaccounts": "ביטול הקישור בין חשבונות",
        "unlinkaccounts-success": "קישור החשבון בוטל.",
        "authenticationdatachange-ignored": "השינוי בנתוני האימות לא הצליח. ייתכן שלא הוגדר ספק.",
        "specialmute-label-mute-email": "השתקת הודעות דואר אלקטרוני מהמשתמש הזה",
        "specialmute-header": "נא לבחור את העדפות ההשתקה שלך עבור המשתמש <b>{{BIDI:[[User:$1|$1]]}}</b>.",
        "specialmute-error-invalid-user": "שם המשתמש המבוקש לא נמצא.",
-       "specialmute-error-no-options": "×\90פשר×\95×\99×\95ת ×\94×\94שתק×\94 ×\90×\99× ×\9f ×\96×\9e×\99× ×\95ת. ×\99×\99ת×\9b×\9f ×©×\96×\94 ×§×\95ר×\94 ×\9b×\99: ×\9c×\90 ×¢×©×\99ת ×\90×\99×\9e×\95ת ×\9bת×\95×\91ת ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\90×\95 ×©×\9e× ×\94×\9c ×\94×\95×\95×\99ק×\99 ×\9b×\99×\91×\94 ×\90ת ×\90פשר×\95×\99×\95ת ×\94×\93×\95×\90ר ×\94×\90×\9cק×\98ר×\95× ×\99 ×\90×\95 ×\90ת ×\94רש×\99×\9e×\94 ×\94ש×\97×\95ר×\94 ×©×\9c ×\94×\93×\95×\90ר ×\94×\90×\9cק×\98ר×\95× ×\99 ×¢×\91×\95ר הוויקי הזה.",
+       "specialmute-error-no-options": "×\94×\90פשר×\95ת ×\9c×\94שתקת ×\9eשת×\9eש×\99×\9d ×\9eש×\9c×\99×\97ת ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×\90×\9c×\99×\9a ×\90×\99× ×\94 ×\9e×\95פע×\9cת. ×¡×\99×\91×\95ת ×\90פשר×\99×\95ת: ×\99×\99ת×\9b×\9f ×©×\9c×\90 ×\90×\99×\9eתת ×\90ת ×\9bת×\95×\91ת ×\94×\93×\95×\90ר ×\94×\90×\9cק×\98ר×\95× ×\99 ×©×\9c×\9a, ×\90×\95 ×©×\9e× ×\94×\9c ×\90תר ×\94×\95×\95×\99ק×\99 ×\9b×\99×\91×\94 ×\90ת ×\90פשר×\95ת ×©×\9c×\99×\97ת ×\94×\93×\95×\90ר ×\94×\90×\9cק×\98ר×\95× ×\99 ×\90×\95 ×\90ת ×\90פשר×\95ת ×\94שתקת ×\94×\9eשת×\9eש×\99×\9d ×\9eש×\9c×\99×\97ת ×\93×\95×\90ר ×\90×\9cק×\98ר×\95× ×\99 ×¢×\91×\95ר ×\90תר הוויקי הזה.",
        "specialmute-email-footer": "כדי לנהל את העדפות קבלת הדואר האלקטרוני שנשלח על־ידי המשתמש {{BIDI:$2}}, באפשרותך לבקר בדף <$1>.",
        "specialmute-login-required": "נדרשת כניסה לחשבון כדי לשנות את העדפות ההשתקה שלך.",
        "mute-preferences": "העדפות השתקה",
        "passwordpolicies-policy-passwordnotinlargeblacklist": "הסיסמה לא יכולה להיות ברשימת 100,000 הסיסמאות הנפוצות ביותר.",
        "passwordpolicies-policyflag-forcechange": "לדרוש שינוי בעת כניסה לחשבון",
        "passwordpolicies-policyflag-suggestchangeonlogin": "להציע שינוי בעת כניסה לחשבון",
-       "mycustomjsredirectprotected": "אין לך הרשאה לערוך את דף ה־JavaScript הזה כי זאת הפניה ואינה מצביעה לדף בתוך מרחב המשתמש שלך.",
+       "mycustomjsredirectprotected": "אין לך הרשאה לערוך את דף ה־JavaScript הזה, כיוון שהוא הפניה לדף שנמצא מחוץ למרחב המשתמש שלך.",
        "easydeflate-invaliddeflate": "התוכן שהועבר אינו דחוס כנדרש",
        "unprotected-js": "מסיבות אבטחה, לא ניתן לטעון JavaScript מדפים שאינם מוגנים. ניתן ליצור סקריפטי JavaScript רק במרחב השם \"מדיה ויקי:\" או בדפי משנה של דף המשתמש.",
        "userlogout-continue": "האם ברצונך לצאת מהחשבון?"
index 3c2da97..ae8a7da 100644 (file)
@@ -43,7 +43,8 @@
                        "Vlad5250",
                        "Zeljko.filipin",
                        "Anarhistička Maca",
-                       "Astrind"
+                       "Astrind",
+                       "Hmxhmx"
                ]
        },
        "tog-underline": "Podcrtavanje poveznica",
        "virus-unknownscanner": "nepoznati antivirus:",
        "logouttext": "<strong>Odjavljeni ste.</strong>\n\nNeke se stranice mogu prikazivati kao da ste još uvijek prijavljeni, sve dok ne očistite međuspremnik svog preglednika.",
        "logging-out-notify": "Odjavljujemo Vas, molimo pričekajte.",
+       "logout-failed": "Trenutačno Vas ne možemo odjaviti: $1",
        "cannotlogoutnow-title": "Odjava trenutno nije moguća",
        "cannotlogoutnow-text": "Odjava nije moguća tijekom uporabe $1.",
        "welcomeuser": "Dobrodošli, $1!",
        "passwordreset-emaildisabled": "Funkcija e-pošte je onemogućena na ovom wikiju.",
        "passwordreset-username": "Suradničko ime:",
        "passwordreset-domain": "Domena:",
-       "passwordreset-email": "E-mail adresa:",
+       "passwordreset-email": "Adresa e-pošte:",
        "passwordreset-emailtitle": "Pojedinosti o računu na {{SITENAME}}",
        "passwordreset-emailtext-ip": "Netko (vjerojatno Vi, s IP adrese $1) zatražio je podsjetnik za Vaše detalje računa\nza {{SITENAME}} ($4). Sljedeći {{PLURAL:$3|račun suradnika je|računi suradnika su}}\npovezani s ovom e-mail adresom:\n\n$2\n\n{{PLURAL:$3|Ova privremena zaporka|Ove privremene zaporke}} će isteći za {{PLURAL:$5|jedan dan|$5 dana}}.\nTrebate se prijaviti i odabrati novu zaporku. Ukoliko je netko drugi napravio ovaj\nzahtjev, ili ako ste se sjetili Vaše izvorne zaporke, a više je ne želite promijeniti, \nmožete zanemariti ovu poruku i nastavite koristiti staru zaporku.",
        "passwordreset-emailtext-user": "Suradnik $1 na {{SITENAME}} zatražio je podsjetnik o pojedinostima vašeg računa za {{SITENAME}}\n($4). Sljedeći {{PLURAL:$3|račun suradnika je|računi suradnika su}} povezani s ovom e-mail adresom:\n\n$2\n\n{{PLURAL:$3|Ova privremena zaporka|Ove privremene zaporke}} će isteći za {{PLURAL:$5|jedan dan|$5 dana}}.\nTrebate se prijaviti i odabrati novu zaporku. Ukoliko je netko drugi napravio ovaj\nzahtjev, ili ako ste se sjetili Vaše izvorne zaporke, a više je ne želite promijeniti, \nmožete zanemariti ovu poruku i nastavite koristiti staru zaporku.",
        "recentchanges-summary": "Na ovoj stranici možete pratiti nedavne promjene u wikiju.",
        "recentchanges-noresult": "U zadanom vremenu nema promjena za zadane kriterije.",
        "recentchanges-network": "Zbog tehničke poteškoće rezultati ne mogu biti učitani. Molimo probajte ponovno učitati stranicu.",
+       "recentchanges-notargetpage": "Gore unesite ime stranice da biste vidjeli izmjene vezane uz nju.",
        "recentchanges-feed-description": "Na ovoj stranici možete pratiti nedavne promjene u wikiju.",
        "recentchanges-label-newpage": "Ova izmjena stvorila je novu stranicu",
        "recentchanges-label-minor": "Manja izmjena",
        "ipb-blocklist": "Vidi postojeća blokiranja",
        "ipb-blocklist-contribs": "Doprinosi za {{GENDER:$1|$1}}",
        "ipb-blocklist-duration-left": "preostalo: $1",
+       "block-actions": "Blokirati radnje:",
        "block-expiry": "Rok (na engleskom)",
+       "block-options": "Dodatne mogućnosti:",
+       "block-prevent-edit": "Uređivanje",
+       "block-reason": "Razlog:",
+       "block-target": "Suradničko ime ili IP-adresa:",
        "unblockip": "Deblokiraj suradnika",
        "unblockiptext": "Ovaj se obrazac koristi za vraćanje prava na pisanje prethodno blokiranoj IP adresi.",
        "ipusubmit": "Ukloni ovaj blok",
        "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 fdbd336..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",
        "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 a8cfdb8..47cc213 100644 (file)
        "customcssprotected": "Դուք չեք կարող խմբագրել այս CSS էջը, քանի որ այն պարունակում է այլ մասնակցի անձնական նախընտրանքներ։",
        "customjsprotected": "Դուք չեք կարող խմբագրել այս ՋավաՍկրիպտ էջը, քանի որ այն պարունակում է այլ մասնակցի անձնական նախընտրանքներ։",
        "mycustomcssprotected": "Դուք բավարար իրավունքներ չունեք այս CSS էջը խմբագրելու համար։",
+       "mycustomjsonprotected": "Դուք այս JSON էջը խմբագրելու իրավունք չունեք։",
        "mycustomjsprotected": "Դուք բավարար իրավունքներ չունեք այս JavaScript էջը խմբագրելու համար։",
        "myprivateinfoprotected": "Դուք իրավասու չեք խմբագրել Ձեր անձնական տեղեկությունը:",
        "mypreferencesprotected": "Դուք բավարար իրավունքներ չունեք Ձեր նախընտրությունները խմբագրելու համար։",
        "botpasswords-deleted-title": "Բոտի գաղտնաբառը ջնջվեց",
        "botpasswords-deleted-body": "$2 մասնակցի $1 բոտի համար բոտի ծածկագիրը ջնջվել է:",
        "resetpass_forbidden": "Գաղտնաբառը չի կարող փոխվել",
+       "resetpass_forbidden-reason": "Գաղտնաբառերը չեն կարող փոխվել. $1",
        "resetpass-no-info": "Այս էջին ուղիղ դիմելու համար անհրաժեշտ է մտնել համակարգ։",
        "resetpass-submit-loggedin": "Փոխել գաղտնաբառը",
        "resetpass-submit-cancel": "Ետ գնալ",
        "userjsyoucanpreview": "'''Հուշում.''' Էջը հիշելուց առաջ օգտվեք «{{int:showpreview}}» կոճակից՝ ձեր նոր JS-նիշքը ստուգելու համար։",
        "usercsspreview": "'''Նկատի ունեցեք, որ դուք միայն նախադիտում եք ձեր մասնակցի CSS-նիշքը. այն դեռ հիշված չէ՛։'''",
        "userjspreview": "'''Նկատի ունեցեք, որ դուք միայն նախադիտում եք ձեր մասնակցի JavaScript-նիշքը. այն դեռ հիշված չէ՛։'''",
+       "sitecsspreview": "<strong>Նկատի ունեցեք, որ դուք միայն նախադիտում եք ձեր մասնակցի CSS-նիշքը. այն դեռ հիշված չէ՛։</strong>",
        "userinvalidconfigtitle": "'''Զգուշացում.''' «$1» տեսք չի գտնվել։ Նկատի ունեցեք, որ մասնակցային .css և .js էջերը ունեն փոքրատառ անվանումներ, օր.՝ «{{ns:user}}:Ոմն/vector.css», և ոչ թե «{{ns:user}}:Ոմն/Vector.css»։",
        "updated": "(Թարմացված)",
        "note": "'''Ծանուցում.'''",
        "revdelete-offender": "Էջի տարբերակի հեղինակ՝",
        "mergehistory-from": "Աղբյուր էջ.",
        "mergehistory-into": "Նպատակային էջ.",
+       "mergehistory-submit": "Ձուլել տարբերակները",
        "mergehistory-reason": "Պատճառ՝",
        "mergelog": "Ձուլման գրանցամատյան",
        "revertmerge": "Անջատել",
        "categories-submit": "Ցուցադրել",
        "categoriespagetext": "Հետևյալ կատեգորիաները պարունակում են էջեր կամ մեդիա.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
        "deletedcontributions": "Մասնակցի ջնջված ներդրում",
-       "deletedcontributions-title": "Մասնակիցի ջնջուած ներդրում",
+       "deletedcontributions-title": "Մասնակցի ջնջված ներդրումներ",
        "sp-deletedcontributions-contribs": "ներդրում",
        "linksearch": "Արտաքին հղումներ",
        "linksearch-ns": "Անվանատարածք.",
index 3e98fb7..8c3f51d 100644 (file)
        "pageinfo-hidden-categories": "Թաքուն {{PLURAL:$1|խմբաւորում|խմբաւորումներ}} ($1)",
        "pageinfo-templates": "Օգտագործուած {{PLURAL:$1|կաղապար|կաղապարներ}} ($1)",
        "pageinfo-toolboxlink": "‎Էջի մասին տեղեկութիւն",
-       "pageinfo-redirectsto": "Վերայղում է դեպի",
+       "pageinfo-redirectsto": "Կը վերայղուի դէպի",
        "pageinfo-contentpage": "Իբրեւ բովանդակութեան էջ հաշուըւած",
        "pageinfo-contentpage-yes": "Այո",
        "pageinfo-protect-cascading-yes": "Այո",
index 5db5e83..d2691d7 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",
        "block-log-flags-angry-autoblock": "peningkatan sistem pemblokiran otomatis telah diaktifkan",
        "block-log-flags-hiddenname": "nama pengguna tersembunyi",
        "range_block_disabled": "Kemampuan pengurus dalam membuat blokir blok IP dimatikan.",
+       "ipb-prevent-user-talk-edit": "Penyuntingan halaman pembicaraan sendiri harus diizinkan pada pemblokiran sebagian, kecuali ia memasukkan pembatasan pada ruangnama Pembicaraan Pengguna.",
        "ipb_expiry_invalid": "Waktu kedaluwarsa tidak sah.",
        "ipb_expiry_old": "Waktu kedaluwarsa adalah pada masa lampau.",
        "ipb_expiry_temp": "Pemblokiran atas nama pengguna yang disembunyikan harus permanen.",
        "permanentlink": "Pranala permanen",
        "permanentlink-revid": "ID revisi",
        "permanentlink-submit": "Tuju ke revisi",
+       "newsection": "Bagian baru",
+       "newsection-page": "Halaman tujuan",
+       "newsection-submit": "Tuju ke halaman",
        "dberr-problems": "Maaf! Situs ini mengalami masalah teknis.",
        "dberr-again": "Cobalah menunggu beberapa menit dan muat ulang.",
        "dberr-info": "(Tak dapat mengakses basis data: $1)",
        "linkaccounts": "Tautkan akun",
        "linkaccounts-success-text": "Akun telah ditautkan.",
        "linkaccounts-submit": "Tautkan akun",
+       "cannotunlink-no-provider-title": "Tidak ada akun tertaut untuk dilepastautkan",
        "cannotunlink-no-provider": "Tidak ada akun yang tertaut yang dapat dibatalkan tautannya.",
        "unlinkaccounts": "Lepastautkan akun",
        "unlinkaccounts-success": "Akun berikut telah dilepastautkan.",
        "edit-error-short": "Galat: $1",
        "edit-error-long": "Galat:\n\n$1",
        "specialmute": "Diam",
+       "specialmute-success": "Preferensi bisu Anda telah diperbarui. Lihat semua pengguna dibisukan dalam [[Special:Preferences|preferensi Anda]].",
        "specialmute-submit": "Konfirmasi",
+       "specialmute-label-mute-email": "Bisukan surel dari pengguna ini",
+       "specialmute-header": "Silakan pilih preferensi bisu untuk pengguna <b>{{BIDI:[[User:$1|$1]]}}</b>.",
+       "specialmute-error-invalid-user": "Nama pengguna yang diminta tidak dapat ditemukan.",
+       "specialmute-error-no-options": "Fitur bisu tidak tersedia. Ini mungkin terjadi karena: Anda belum mengonfirmasikan alamat surel Anda atau pengurus wiki ini mematikan fitur surel dan/atau daftar hitam surel pada wiki ini.",
+       "specialmute-email-footer": "Untuk mengatur preferensi surel untuk pengguna {{BIDI:$2}} silakan kunjungi <$1>.",
+       "specialmute-login-required": "Silakan masuk log untuk mengubah preferensi bisu Anda.",
+       "mute-preferences": "Preferensi bisu",
        "revid": "revisi $1",
        "pageid": "ID halaman $1",
+       "interfaceadmin-info": "$1\n\nHak akses untuk menyunting berkas CSS/JS/JSON di semua halaman telah dipisahkan dari hak akses <code>editinterface</code>. Apabila Anda tidak mengerti mengapa Anda mendapatkan galat ini, lihat [[mw:MediaWiki_1.32/interface-admin]].",
        "rawhtml-notallowed": "Tag &lt;html&gt; tidak dapat digunakan di luar halaman normal.",
        "gotointerwiki": "Meninggalkan {{SITENAME}}",
        "gotointerwiki-invalid": "Judul yang ditentukan tidak sah",
        "passwordpolicies-policy-passwordnotinlargeblacklist": "Kata sandi tidak boleh termasuk dalam daftar 100.000 kata sandi yang paling umum digunakan.",
        "passwordpolicies-policyflag-forcechange": "wajib diganti ketika masuk log",
        "passwordpolicies-policyflag-suggestchangeonlogin": "sarankan penggantian ketika masuk log",
+       "mycustomjsredirectprotected": "Anda tidak memiliki hak akses untuk menyunting halaman JavaScript karena merupakan halaman pengalihan dan tidak mengarah ke dalam halaman pengguna Anda.",
        "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..3b78ced 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",
        "preview": "Lètú",
        "showpreview": "Zìwe nkirimaàtụ̀",
        "showdiff": "Zi mgbanwè",
-       "anoneditwarning": "'''Kpàchákwá anya:''' Ị bághị bo.\nIP gi gí détụ na ákíkó mbu ihü a.",
+       "anoneditwarning": "'''ndụmodụ:''' Ịjighị aha gị banye. Onye ọbụla ga-ahụ akara IP gị ma ọbụrụ na-ime ndezi ebe a. Jiri aha gi banye ka ndezi niile i ga-eme gosi n'aha gi.",
        "missingcommenttext": "Biko tinyé ótù okwu na àlà nga.",
        "summary-preview": "Hutukwá mmẹkotá:",
        "subject-preview": "Ihe gbasara/Ishi ahiri I hütü ntakịrị:",
        "namespace": "Ahàm̀bara:",
        "invert": "Tụgha ǹke ǹhọ̀rọ",
        "blanknamespace": "(Ḿkpà)",
-       "contributions": "Ihe ọ'bànifé rürü",
+       "contributions": "atụmatụ metụrara Jenda.{{GENDER:$1|User}}",
        "contributions-title": "Orü ọ'bànifé nà $1",
        "mycontris": "Ịhem mètàrà",
        "anoncontribs": "Mmètàrà",
        "tags": "Ọdụ gbanwere di ndu",
        "tag-filter": "[[Special:Tags|Ọdọ]] nzata:",
        "tag-filter-submit": "Nzàtà",
+       "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Tag|Tags}}]]: $2",
        "tag-mw-undo": "Me la àzụ",
        "tags-title": "Ọdụ",
        "tags-tag": "Áhà ọdụ",
        "htmlform-selectorother-other": "Nke ozor",
        "restore-count-files": "{{PLURAL:$1|1 àfabà |àfabà $1}}",
        "revdelete-content-hid": "ihe zọ̀nàri",
+       "logentry-newusers-create": "akaụntụ $1 bụ {{GENDER:$2|created}}",
        "rightsnone": "(efù)",
        "feedback-cancel": "Hapụ̀",
        "feedback-close": "Ọméchá.",
index 52f01ef..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.}}",
        "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.",
        "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.",
        "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",
index 672027c..f797c29 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": "<strong>Sei {{GENDER:$1|stato connesso|stata connessa}} al server di {{SITENAME}} con il nome utente di «$1».</strong>",
        "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",
index 71aebe9..65f2f8e 100644 (file)
@@ -97,7 +97,8 @@
                        "Wat",
                        "Puntti ja",
                        "マツムシ",
-                       "神樂坂秀吉"
+                       "神樂坂秀吉",
+                       "Yuukin0248"
                ]
        },
        "tog-underline": "リンクの下線:",
        "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": "関連するブロックID: $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": "<strong>$2</strong> 件目以降の最大 {{PLURAL:$1|<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ブロック、自動ブロック、広域ブロックの回避",
        "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移動先の名前と同じ名前のページがある場合には、ページは移動<strong>されない</strong>ことにご注意ください。\nこれはつまり、元の名前のページに戻って違う名前に直せるということで、既存のページを上書きはできない、ということです。\n\n<strong>注意</strong>\nこの操作は大きな変更であり、すでに有名なページに意図せざる変更をもたらすことがあります。先に進む前に、この結果がどうなるかということについて十分に理解してください。",
        "movepagetalktext": "ここにチェックを付けると、関連付けられたトークページも一緒に、自動的に新しいページ名に移動されます。ただし、移動先に空ではないトークページが既に存在する場合を除きます。\n\nこの場合、手動でトークページを移動または統合する必要があります。",
        "moveuserpage-warning": "<strong>警告:</strong> 利用者ページを移動しようとしています。この操作ではページのみが移動され、利用者名は<em>変更されない</em>点に注意してください。",
        "movecategorypage-warning": "<strong>警告:</strong> カテゴリのページを移動させようとしています。カテゴリのページのみが移動するため、元のカテゴリに属していたどのページも新しいカテゴリには移動 <em>しない</em> ことにご注意ください。",
        "permanentlink": "固定リンク",
        "permanentlink-revid": "版 ID",
        "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": "認証データの変更は処理されませんでした。プロバイダーが設定されていない可能性があります。",
        "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>さんに対するミュートを個人設定で選択してください。",
        "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/JavaScriptの編集権限は、最近<code>editinterface</code> 権限から分離されました。なぜこのエラーが表示されたのかわからない場合は、[[mw:MediaWiki_1.32/interface-admin]]をご覧ください。",
index 8bf1a30..4b23cf2 100644 (file)
        "rcfilters-savedqueries-already-saved": "Saringan iki wis kasimpen. Ganti setèlané panjenengan saperlu nggawé Saringan Kasimpen kang anyar.",
        "rcfilters-restore-default-filters": "Pulihaké saringan gawan",
        "rcfilters-clear-all-filters": "Resiki kabèh saringan",
-       "rcfilters-show-new-changes": "Deleng owah-owahan anyar dhéwé",
+       "rcfilters-show-new-changes": "Deleng owah-owahan anyar kawit $1",
        "rcfilters-search-placeholder": "Owah-owahan saringan (anggo menu utawa golèk jeneng saringan)",
        "rcfilters-invalid-filter": "Saringan ora sah",
        "rcfilters-empty-filter": "Ora ana saringan kang aktif. Kabèh sumbangan katuduhaké.",
index 264e0c9..4f792d4 100644 (file)
@@ -78,6 +78,7 @@
        "tog-norollbackdiff": "ცვლილების გაუქმებისას არ მანახო ცვლილებათა განსხვავება",
        "tog-useeditwarning": "გამაფრთხილე, როდესაც დავტოვებ რედაქტირებად გვერდს, დაუმახსოვრებელი ცვლილებებით",
        "tog-prefershttps": "მუდამ უსაფრთხო კავშირის გამოყენება ავტორიზაციის შემდეგ",
+       "tog-showrollbackconfirmation": "დადასტურების მოთხოვნა გაუქმების ლინკზე დაჭერისას",
        "underline-always": "მუდამ",
        "underline-never": "არასდროს",
        "underline-default": "დამოკიდებული მომხმარებელზე ან ბრაუზერის არჩევანზე",
        "badarticleerror": "ეს მოქმედება ვერ შესრულდება ამ გვერდზე.",
        "cannotdelete": "გვერდის ან ფაილის „$1“ წაშლა შეუძლებელია.\nშესაძლოა, იგი უკვე წაშალა სხვა მომხმარებელმა.",
        "cannotdelete-title": "გვერდის „$1“ წაშლა შეუძლებელია",
+       "delete-scheduled": "დაგეგმილია გვერდის „$1“ წაშლა.\nგთხოვთ, მოითმინოთ.",
        "delete-hook-aborted": "შესწორება გაუქმებულია გადამჭერით.\nდამატებითი ახსნა არ ჩაწერილა.",
        "no-null-revision": "ვერ მოხერხდა ახალი ნულოვანი ცვლილების შექმნა გვერდისათვის „$1“",
        "badtitle": "არასწორი სათაური",
        "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 b4c04cc..0f789a0 100644 (file)
        "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 094b875..e6a72d4 100644 (file)
        "june-date": "Pûşper $1",
        "july-date": "Tîrmeh $1",
        "august-date": "$1 tebax",
-       "september-date": "Rezber $1",
-       "october-date": "Kewçêr $1",
-       "november-date": "Sermawez $1",
-       "december-date": "Berfanbar $1",
+       "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",
        "search-category": "(kategorî $1)",
        "search-file-match": "(bi naveroka dosye re lê te)",
        "search-suggest": "Gelo mebesta te ev bû: $1",
+       "search-rewritten": "Encamên lêgerînê yên ji $ tên nîşandan. Di şûna vê de li $2 bigere.",
        "search-interwiki-caption": "Netîceyên ji projeyên hevçeng",
        "search-interwiki-default": "Encamên ji $1:",
        "search-interwiki-more": "(bêhtir)",
        "deletepage": "Rûpelê jê bibe",
        "confirm": "Pesend bike",
        "excontent": "Naveroka berê: \"$1\"",
-       "excontentauthor": "Naveroka rûpelê ev bû: \"$1\", û tenê ya bikarhêner \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|talk]] 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 85f9d18..d990768 100644 (file)
        "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 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 70c07c3..a427820 100644 (file)
@@ -35,7 +35,7 @@
        "tog-hideminor": "Paslēpt maznozīmīgus labojumus pēdējo izmaiņu lapā",
        "tog-hidepatrolled": "Slēpt apstiprinātās izmaņas pēdējo izmaiņu sarakstā",
        "tog-newpageshidepatrolled": "Paslēpt pārbaudītās lapas jauno lapu sarakstā",
-       "tog-hidecategorization": "Paslēpt lapu kategorizēšanu",
+       "tog-hidecategorization": "Slēpt lapu kategorizēšanu",
        "tog-extendwatchlist": "Izvērst uzraugāmo lapu sarakstu, lai parādītu visas veiktās izmaiņas (ne tikai pašas svaigākās)",
        "tog-usenewrc": "Grupēt izmaiņas pēc lapas pēdējās izmaiņās un uzraugāmo lapu sarakstā",
        "tog-numberheadings": "Automātiski numurēt virsrakstus",
        "uploadinvalidxml": "Nevarēja apstrādāt augšupielādētā faila XML saturu.",
        "uploadvirus": "Šis fails satur vīrusu! Sīkāk: $1",
        "uploadjava": "Fails ir ZIP fails, kas satur Java .class failu.\nJava failu augšupielāde nav atļauta, jo tas var radīt iespējas apiet drošības ierobežojumus.",
-       "upload-source": "Augšuplādējamais fails",
+       "upload-source": "Augšupielādējamais fails",
        "sourcefilename": "Faila adrese:",
        "sourceurl": "Avota URL:",
        "destfilename": "Mērķa faila nosaukums:",
        "export-download": "Saglabāt kā failu",
        "export-templates": "Iekļaut veidnes",
        "export-manual": "Pievienot lapas manuāli:",
-       "allmessages": "Visi sistēmas paziņojumi",
+       "allmessages": "Sistēmas ziņojumi",
        "allmessagesname": "Nosaukums",
        "allmessagesdefault": "Noklusētais ziņojuma teksts",
        "allmessagescurrent": "Pašreizējais teksts",
        "diff-form-submit": "Parādīt atšķirības",
        "permanentlink": "Pastāvīgā saite",
        "permanentlink-revid": "Versijas ID",
+       "newsection": "Jauna sadaļa",
+       "newsection-page": "Mērķa lapa",
        "dberr-problems": "Atvainojiet!\nŠai vietnei ir radušās tehniskas problēmas.",
        "dberr-again": "Uzgaidiet dažas minūtes un pārlādējiet šo lapu.",
        "dberr-info": "(Nevar piekļūt datubāzei: $1)",
index 9f73d05..110841f 100644 (file)
        "morenotlisted": "Daftar ko mungkin indak langkok.",
        "mypage": "Laman",
        "mytalk": "Maota",
-       "anontalk": "Rundiang IP ko",
+       "anontalk": "Rundiang",
        "navigation": "Navigasi",
        "and": "&#32;jo",
        "faq": "FAQ",
        "history": "Riwayaik laman",
        "history_short": "Riwayaik",
        "history_small": "riwayaik",
-       "updatedmarker": "diubah samanjak kunjuangan tarakhia ambo",
+       "updatedmarker": "alah diubah samanjak kunjuangan tarakhia Sanak",
        "printableversion": "Versi cetak",
        "permalink": "Pautan parmanen",
        "print": "Cetak",
        "laggedslavemode": "Paringatan: Laman mungkin indak barisi parubahan tabaru.",
        "readonly": "Basis data dikunci",
        "enterlockreason": "Masuakkan alasan panguncian, tamasuak pakiraan bilo kunci akan dibuka",
-       "readonlytext": "Basis data sadang dikunci tahadok masuakan baru. Panguruih nan malakukan panguncian mamberikan panjalehan sabagai berikut: <p>$1",
+       "readonlytext": "Basis data sadang dikunci sainggo indak bisa ditambahan isi atau parubahan baru, kamungkinan untuak pambanahan basis data. Salapeh salasai, inyo akan baliak ka kaadaan nan samulo.\n\nManuruik panguruih sistem nan mangunci: <p>$1",
        "missing-article": "Basisdata indak dapek manamukan teks dari laman nan saharuihnyo ado, yaitu \"$1\" $2.\n\nHal ko biasonyo disababkan dek pautan usang ka pabaikkan tadahulu laman nan alah dihapuih.\n\nJikok bukan ko panyababnyo, Sanak mungkin alah manamukan sabuah bug dalam pakakeh lunak.\nSilakan laporkan hal iko ka [[Special:ListUsers/sysop|pangurus]], sarato manyabuikkan alamaik URL nan dituju.",
        "missingarticle-rev": "(revisi#: $1)",
        "missingarticle-diff": "(Bedo: $1, $2)",
        "viewsource": "Caliak sumber",
        "viewsource-title": "Caliak sumber untuak $1",
        "actionthrottled": "Tindakan tabateh",
-       "actionthrottledtext": "Sanak tabateh untuak malakuan tindakan ko banyak-banyak dalam wakatu singkek. Cubo lah laik satalah bara minit.",
+       "actionthrottledtext": "Untuak mancagah panyalahgunoan, Sanak dibatasi maambiak tindakan ko talalu banyak dalam wakatu nan terlalu singkek. Sanak alah malabiahi bateh nan ditetapkan. Mohon cubo liak dalam babarapo minik.",
        "protectedpagetext": "Laman ko alah dikunci untuak manghindari panyuntiangan.",
        "viewsourcetext": "Sanak dapek mancaliak atau manyalin sumber laman iko:",
-       "viewyourtext": "Sanak dapek mancaliak jo mangkopi sumber untuak \"suntiangan sanak\" ka laman ko",
+       "viewyourtext": "Sanak dapek mancaliak jo manyalin sumber <strong>suntiangan sanak</strong> pado laman ko",
        "protectedinterface": "Laman ko baisi teks antarmuko untuak digunoan dek parangkaik lunak di wiki ko sajo, dan alah dikunci untuak maindaan kasalahan. \nUntuak manambah atau maubah tajamahan di kasado wiki, harap gunoan [https://translatewiki.net/ translatewiki.net], yaitu proyek palokalan MediaWiki.",
        "editinginterface": "'''Paringatan:''' Sanak manyuntiang laman nan digunoan untuak manyadiokan teks antarmuko untuak parangkaik lunak.\nParubahan teks ko akan mampangaruhi tampilan pado antarmuko pangguno untuak pangguno lain.\nUntuak tajamahan, harap gunoan [https://translatewiki.net/wiki/Main_Page?setlang=min translatewiki.net], proyek palokalan MediaWiki.",
        "translateinterface": "Untuak manambah atau maubah sadolah wiki, mohon gunoan [https://translatewiki.net/ translatewiki.net], proyek palokalan MediaWiki.",
-       "cascadeprotected": "Laman iko alah dilindungi dari panyuntiangan karano disartokan di {{PLURAL:$1|laman}} barikuik nan alah dilindungi jo opsi \"runtun\":\n$2",
+       "cascadeprotected": "Laman ko dilinduangi dari panyuntiangan karano ditransklusi pado {{PLURAL:$1|halaman nan}} dilinduangi dan opsi \"runtun\"-nyo diiduikan:\n$2",
        "namespaceprotected": "Sanak indak mampunyoi hak akses untuak manyuntiang laman di ruang namo '''$1'''.",
        "customcssprotected": "Sanak indak mampunyoi izin untuak maubah laman CSS iko, karano manganduang pangaturan pribadi pangguno lain.",
        "customjsonprotected": "Sanak indak mampunyoi izin untuak maubah laman JSON ko karano barisi pangaturan pribadi pangguno lain.",
        "invalidtitle-knownnamespace": "↓Judul nan indak sah jo ruangnamo \"$2\" dan teks \"$3\"",
        "invalidtitle-unknownnamespace": "Judul nan tak sah jo nomor ruang namo indak diketahui $1 dan teks \"$2\"",
        "exception-nologin": "Indak masuak log",
-       "exception-nologin-text": "Laman ko hanyo dapek disuntiang dek pangguno nan mandaftar.",
+       "exception-nologin-text": "Untuak masuak ka dalam laman atau maambiak tindakan ko, mohon masuak log.",
        "exception-nologin-text-manual": "Silakan $1 untuak mangakses halaman atau tindakan ko.",
        "virus-badscanner": "Kasalahan konfigurasi: pamindai virus indak dikenal: ''$1''",
        "virus-scanfailed": "Pamindaian gagal (kode $1)",
        "virus-unknownscanner": "Antivirus indak dikenal:",
-       "logouttext": "'''Sanak alah kalua log dari sistem.'''\n\nSanak dapek taruih manggunoan {{SITENAME}} sacaro anonim, atau Sanak dapek <span class='plainlinks'>[$1 masuak log liak]</span> sabagai pangguno nan samo atau pangguno nan lain.\nParhatian bahawa bara laman mungkin masih taruih manunjukkan bahawa Sanak masih masuak log sampai Sanak mambarasihan singgahan panjelajah web Sanak.",
+       "logouttext": "<strong>Sanak alah kalua log</strong>\n\nMohon diingek kalau babarapo laman mungkin masih tampil cando Sanak alun kalua log. Silakan untuak mambarasiahan singgahan panjalajah web Sanak.",
        "cannotlogoutnow-title": "Indak bisa kalua kini",
        "cannotlogoutnow-text": "Indak bisa kalua katiko manggunoan $1.",
        "welcomeuser": "Salamaik datang, $1!",
        "createacct-emailoptional": "Alamaik surel (opsional)",
        "createacct-email-ph": "Masuakan alamaik surel Sanak",
        "createacct-another-email-ph": "Masuakan alamaik surel",
-       "createaccountmail": "Pakai kato sandi sumbarang samantaro, lalu kirim ka alamaik surel nan di bawah ko",
+       "createaccountmail": "Mohon pakai kato sandi samantaro dan kirim ka alamaik surek elektronik nan alah disabuikkan.",
        "createaccountmail-help": "Indak dapek digunoan untuak mambuek akun urang lain tanpa tau kato sandinyo.",
        "createacct-realname": "Namo asli (opsional)",
        "createacct-reason": "Alasan",
        "nocookiesfornew": "Akun pangguno indak dibuek karano kami indak dapek mamastian sumbernyo.\nPastian Sanak alah mangaktifan cokies, lalu muek ulang laman ko dan cubo baliak.",
        "createacct-loginerror": "Akun alah salasai dibuek tapi Sanak indak dapek langsuang masuak sacaro otomatis. Mohon taruihan ka [[Special:UserLogin|manual login]].",
        "noname": "Namo pangguno nan Sanak masuakan indak sah.",
-       "loginsuccesstitle": "Bahasil masuak log",
+       "loginsuccesstitle": "Alah masuak log",
        "loginsuccess": "'''Sanak kini lah masuak log di {{SITENAME}} sabagai \"$1\".'''",
-       "nosuchuser": "Indak ado pangguno jo namo \"$1\".\nNamo pangguno mambedoan kapitalisasi.\nPariso baliak ejaan Sanak, atau [[Special:CreateAccount|buek akun baru]].",
+       "nosuchuser": "Indak ado pangguno nan banamo \"$1\".\nNamo pangguno biasonyo mambedoan ijoan gadang-keteknyo.\nMohon tinjau ijoan Sanak, atau [[Special:CreateAccount|buek akun nan baru]].",
        "nosuchusershort": "Indak ado pangguno jo namo \"$1\".\nCubo pariso baliak ejaan Sanak.",
        "nouserspecified": "Sanak harus mamasuakan namo pangguno.",
        "login-userblocked": "Pangguno ko kanai sakek. Indak diizinan untuak masuak log.",
-       "wrongpassword": "Kato sandi nan Sanak masuakan salah. Cubolah baliak.",
+       "wrongpassword": "Kato sandi nan Sanak masuakkan salah. \nMohon ulang baliak.",
        "wrongpasswordempty": "Sanak indak mamasuakan kato sandi. Cubolah baliak.",
        "passwordtooshort": "Kato sandi paliang indak harus tadiri dari {{PLURAL:$1|$1 karakter}}.",
        "passwordtoolong": "Kato sandi indak buliah labiah dari {{PLURAL:$1|1 character|$1 characters}}.",
        "passwordinlargeblacklist": "Kato sandi yang dimasuakan adolah kato sandi yang umum. Mohon gunoan kato sandi yang labiah unik.",
        "password-name-match": "Kato sandi Sanak harus babedo dari namo pangguno Sanak.",
        "password-login-forbidden": "Panggunoan namo pangguno dan sandi ko alah dilarang.",
-       "mailmypassword": "Kirim kato sandi baru",
+       "mailmypassword": "Atua kato sandi nan baru",
        "passwordremindertitle": "Kato sandi samantaro untuak {{SITENAME}}",
-       "passwordremindertext": "Sasaurang (mungkin Sanak, dari alamaik IP $1) mamintak kato sandi baru untuak {{SITENAME}} ($4). Kato sandi samantaro untuak pangguno \"$2\" alah dibuekan dan diset manjadi \"$3\". Jikok memang Sanak nan mangajuan pamintaan ko, Sanak paralu masuak log dan mamilih kato sandi baru. Kato sandi samantaro Sanak akan habih maso dalam wakatu {{PLURAL:$5|$5 hari}}.\n\nJikok urang lain nan malakuan pamintaan ko, atau jikok Sanak alah maingek kato sandi Sanak dan ka manggunoan kato sandi tasabuik, abaikan sajo pasan ko dan gunoan kato sandi lamo tu.",
+       "passwordremindertext": "Urang lain (dari alamaik IP $1) mamintak kato sandi nan baru untuak {{SITENAME}} ($4). Kato sandi samantaro untuak pangguno \"$2\" alah dibuek dan diatua untuak \"$3\". Jikok iko kandak Sanak, mohon log masuak dan atua kato sandi nan baru kini. Kato sandi samantaro Sanak akan abih maso dalam wukatu {{PLURAL:$5|satu hari|$5 hari}}.\n\nKok urang lain nan mangajuan permintaan ko, atau kok Sanak taingek jo kato sandi nan lamo sainggo Sanak indak nio maubahnyo, padiakan sajo pasan ko dan taruihlah mamakai kato sandi nan lamo.",
        "noemail": "Indak ado alamaik surel nan tacatat untuak pangguno \"$1\".",
        "noemailcreate": "Sanak paralu manyadiokan alamaik surel nan sah",
        "passwordsent": "Kato sandi baru alah dikiriman ka alamaik surel nan didaftakan untuak \"$1\".\nSilakan masuak log baliak sasudah manarimo surel tasabuik.",
-       "blocked-mailpassword": "Alamaik IP Sanak diblokir dari panyuntingan dan karanonyo indak diizinan manggunokan fungsi pangingek kato sandi untuak mancegah panyalahgunoan.",
-       "eauthentsent": "Surel untuak konfirmasi alah dikirim ka alamaik surel Sanak.\nIkuti instruksi dalam surel tasabuik untuak malakuan konfirmasi jikok alamaik tasabuik adolah batua punyo Sanak. {{SITENAME}} indak akan mangaktifan fitur surel jikok langkah ko alun dilakuan.",
+       "blocked-mailpassword": "Sanak indak bisa manyuntiang manggunoan alamaik IP ko. Untuak mancagah panyalahgunoan, Sanak indak buliah mamakai pamuliahan kato sandi dari alamaik IP ko.",
+       "eauthentsent": "Surek elektronik untuak mangkonfirmasi alah dikirim ka alamaik ko. Sabalun surek-surek lain dikirim, mohon untuak maikuik'an patunjuak nan ado di surek tasabuik untuak mangkonfirmasi baso Sanaklah nan batua punyo akun tu.",
        "throttled-mailpassword": "Suatu pangingek kato sandi alah dikiriman dalam {{PLURAL:$1|$1 jam}} tarakhia.\nUntuak manghindari panyalahgunoan, hanyo ciek kato sandi nan ka dikirim satiok {{PLURAL:$1|$1 jam}}.",
        "mailerror": "Kasalahan dalam mangiriman surel: $1",
-       "acct_creation_throttle_hit": "Pangunjung wiki iko jo alamaik IP nan samo jo Sanak alah mambuek {{PLURAL:$1|$1 akun}} dalam sahari tarakhia, sampai jumlah maksimum nan diizinan.\nKaranonyo, pangunjuang jo alamaik IP ko indak dapek mambuek akun lain untuak samantaro.",
-       "emailauthenticated": "Alamaik surel Sanak lah dikonfirmasi pado $3, $2.",
-       "emailnotauthenticated": "Alamaik surel Sanak alun dikonfirmasi. Sabalun dikonfirmasi Sanak indak dapek manggunoan fitur surel.",
+       "acct_creation_throttle_hit": "Ado pangunjuang wiki nan mamakai alamaik IP sanak ko nan alah mambuek {{PLURAL:$1|1 akun|banyak akun}} dalam $2 taakhia, bateh minimum untuak wukatu ko. Pangujuang nan mamakai alamaik IP ko indak bisa mambuek akun baru untuak wukatu ko.",
+       "emailauthenticated": "Alamaik surel Sanak alah dikonfirmasi pado $3, $2.",
+       "emailnotauthenticated": "Alamaik surel Sanak alun dikonfirmasi. Indak ado surel nan bisa dikirim untuak pakakeh ko.",
        "noemailprefs": "Sanak harus mamasuakan alamaik surel di pangaturan Sanak untuak dapek manggunoan fitur-fitur ko.",
        "emailconfirmlink": "Konfirmasi alamaik surel Sanak",
        "invalidemailaddress": "Alamaik surel iko indak dapek ditarimo dek formatnyo indak sasuai.\nHarap masuakan alamaik surel dalam format nan bana atau kosoangan isian tasabuik.",
        "accountcreatedtext": "Akun pangguno untuak [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|maota]]) alah dibuek.",
        "createaccount-title": "Pambuatan akun untuak {{SITENAME}}",
        "createaccount-text": "Sasaurang alah mambuek sabuah akun untuak alamaik surel Sanak di {{SITENAME}} ($4) jo namo \"$2\" dan kato sandi \"$3\". Sanak dianjuakan untuak masuak log dan mangganti kato sandi Sanak kini.\n\nSanak dapek mangacuahkan pasan ko jikok akun ko dibuek dek ado kasalahan.",
-       "login-throttled": "Sanak alah bakali-kali mancubo masuak log.\nTunggulah sabanta sabalun mancubo baliak.",
-       "login-abort-generic": "Proses masuak Sanak indak barasil - Dibatalan",
+       "login-throttled": "Sanak alah talabiah banyak mancubo masuak log. Mohon tunggu $1 sabalun mancubo liak.",
+       "login-abort-generic": "Pacuboan masuak log Sanak gagal - Dibatalkan",
        "login-migrated-generic": "Akun sanak alah dipindahan, namo pangguno Sanak alah indak tadaftar ini wiki ko.",
        "loginlanguagelabel": "Baso: $1",
        "suspicious-userlogout": "Pamintaan Sanak untuak kalua log ditulak karano tampaknyo dikirim oleh paramban nan rusak atau proksi panyinggah.",
        "resetpass-no-info": "Sanak harus masuak log untuak mangakses laman iko sacara langsuang.",
        "resetpass-submit-loggedin": "Tuka kato sandi",
        "resetpass-submit-cancel": "Batalkan",
-       "resetpass-wrong-oldpass": "Kato sandi indak sah.\nSanak mungkin alah berhasil mangganti kato sandi Sanak atau alah maminto kato sandi samantaro nan baharu.",
+       "resetpass-wrong-oldpass": "Kato sandi samantaro atau nan kini indak sah. Sanak mungkin alah mangganti kato sandi atau mamintak kato sandi samantaro.",
        "resetpass-recycled": "Mohon ubah kato sandi Sanak jo nan lain dari kato sandi kini ko.",
        "resetpass-temp-emailed": "Sanak masuak log jo kode samantaro yang disurelan. Untuak manyalasaian masuak log, atur ulang kato sandi baru disiko:",
        "resetpass-temp-password": "Kato sandi samantaro:",
        "resetpass-validity-soft": "Kato sandi sanak indak sah:$1\n\nMohon piliah kato sandi baru, atau takan \"{{int:authprovider-resetpass-skip-label}}\" untuak maubah di wakatu nan lain.",
        "passwordreset": "Setel ulang kato sandi",
        "passwordreset-text-one": "Lengkapkan formulir ko untuak manuka baliak kato sandi Sanak.",
-       "passwordreset-text-many": "{{PLURAL:$1|Masuakan data di bawah ko untuak manuka baliak kato sandi Sanak.}}",
+       "passwordreset-text-many": "{{PLURAL:$1|Isi salah satu kotak di bawah ko untuak mandapekkan kato sandi samantaro malalui surel.}}",
        "passwordreset-disabled": "Pangubahan kato sandi alah dimatian di wiki iko.",
        "passwordreset-emaildisabled": "Fitur surel alah dimatian pado wiki iko.",
        "passwordreset-username": "Namo pangguno:",
        "selfredirect": "<strong>Paringatan:</strong> Sanak mangalihan halaman ko ka halaman samulo. Sanak bisa jadi maagiah tujuan pangalihan yang salah, atau manyuntiang halaman yang salah.\nJiko Sanak manakan \"$1\" baliak, halaman pangaliahan akan dibuek.",
        "missingcommenttext": "Masuakan komentar Sanak.",
        "missingcommentheader": "'''Paringatan:''' Sanak alun maagihan subjek atau judul untuak komenta Sanak. Jikok Sanak baliak manakan \"$1\", suntiangan Sanak akan disimpan tanpa komenta tasabuik.",
-       "summary-preview": "Ringkasan pratayang:",
-       "subject-preview": "Pratayang subyek/judul:",
+       "summary-preview": "Tinjauan awal untuak ringkasan suntiangan:",
+       "subject-preview": "Tinjauan awal untuak subyek ko:",
        "previewerrortext": "Ado yang salah wakatu manunjuakan pratayang parubahan Sanak.",
        "blockedtitle": "Pangguno diblokir",
        "blocked-email-user": "<strong>Namo pangguno Sanak diblokir untuak mangirim surel. Sanak masih bisa manyuntiang halaman lain di wiki ko. </strong> Sanak bisa mancaliak parincian pamblokiran  pado [[Special:MyContributions|account contributions]].\n\nPamblokiran dilakuan dek $1.\n\nAlasannyo adolah <em>$2</em>.\n\n* Diblokir sajak: $8\n* Blokir kadaluarsa pado: $6\n* Sasaran pamblokiran: $7\n* ID pamblokiran #$5",
        "blockedtext": "'''Namo pangguno atau alamaik IP Sanak alah kanai sakek.'''\n\nSakek dibuek dek $1.\nAlasan nan diagiahan adolah ''$2''.\n\n* Kanai sakek sajak: $8\n* Maso sakek habih pado: $6\n* Sasaran nan disakek: $7\n\nSanak dapek maubungi $1 atau [[{{MediaWiki:Grouppage-sysop}}|panguruih lainnyo]] untuak marundiangan hal ko.\n\nSanak indak dapek manggunoan fitur 'Kirim surel ka pangguno ko' kacuali Sanak alah mamasuakan alamaik surel nan sah di [[Special:Preferences|pangaturan akun]] dan Sanak indak sadang disakek untuak manggunoannyo.\n\nAlamaik IP Sanak adolah $3, dan ID panyakek adolah $5.\nTolong saratoan informasi di ateh pado satiok patanyoan nan Sanak buek.",
-       "autoblockedtext": "Alamaik IP Sanak alah kanai sakek sacaro otomatis dek digunoan jo pangguno lain, nan sakek dek $1. Panyakek ko dibuek dek alasan:\n\n:''$2''\n\n* Kanai sakek sajak: $8\n* Maso sakek habih pado: $6\n* Sasaran nan disakek: $7\n\nSanak dapek mahubungi $1 atau [[{{MediaWiki:Grouppage-sysop}}|penguruih lainnya]] untuak mambicarokan hal iko.\n\nSanak indak dapek manggunoan fitua 'Kirim surel ka pangguna iko' kacuali Sanak alah mamasuakan alamaik surel nan sah di [[Special:Preferences|pangaturan akun]] dan Sanak indak sadang disakek untuak manggunoannyo.\n\nAlamaik IP Sanak adolah $3, dan ID panyakek adolah $5.\nTolong saratoan informasi di ateh pado satiok patanyaan nan Sanak buek.",
+       "autoblockedtext": "Alamaik IP Sanak alah kanai sakek sacaro otomatis dek dipakai jo pangguno lain, nan alah disakek dek $1. Alamaik ko disakek dek sebab:\n\n:<em>$2</em>\n\n* Kanai sakek sajak: $8\n* Maso sakek habih pado: $6\n* Sasaran nan disakek: $7\n\nSanak dapek maubuangi $1 atau [[{{MediaWiki:Grouppage-sysop}}|panguruih lainnya]] untuak marundiangan pakaro ko.\n\nSanak indak dapek manggunoan pakakeh \"{{int:emailuser}}\" kacuali Sanak alah mamasuakan alamaik surel nan sah pado [[Special:Preferences|pangaturan akun]] dan Sanak indak sadang disakek untuak manggunoannyo.\n\nAlamaik IP Sanak adolah $3, dan ID panyakekan adolah $5.\nTolong saratoan informasi di ateh pado satiok patanyaan nan Sanak buek.",
        "blockednoreason": "indak ado alasan nan diagiah.",
        "whitelistedittext": "Sanak musti $1 untuak manyuntiang laman.",
        "confirmedittext": "Sanak musti mangkonfirmasian alamaik surel sabalun manyuntiang laman.\nMasuakan dan validasian alamaik surel Sanak pado [[Special:Preferences|pangaturan pangguno]] Sanak.",
        "loginreqlink": "masuak log",
        "loginreqpagetext": "Sanak harus $1 untuak dapek maliek laman lainnyo.",
        "accmailtitle": "Kato sandi alah takirim.",
-       "accmailtext": "Sabuah kato sandi acak untuak [[User talk:$1|$1]] alah dibuek dan dikiriman ka $2.\n\nKato sandi untuak akun baharu iko dapek diubah di laman ''[[Special:ChangePassword|pangubahan kato sandi]]'' satalah masuak log.",
+       "accmailtext": "Sabuah kato sandi alah diasiakan sacaro acak untuak [[User talk:$1|$1]] dan alah dikirim ka $2. Kato sandi ko dapek diubah pado <em>[[Special:ChangePassword|laman paubah kato sandi]]</em> salapeh masuak log.",
        "newarticle": "(Baru)",
        "newarticletext": "Laman nan Sanak cari alun ado.\nUntuak mambuek laman tu, mulailah jo manulih dalam kotak di bawah (caliak [$1 laman bantuan] untuak informasi labiah lanjuik).\nJikok Sanak indak sangajo sampai ka laman ko, klik tombol '''back''' pado paramban web Sanak.",
        "anontalkpagetext": "----''Iko adolah laman rundiang surang pangguno anonim nan alun mambuek akun atau indak manggunoannyo.\nJadi, kami tapaso mamakai alamat IP nan takaik untuak mangenalinyo.\nJikok Sanak adolah pangguno anonim dan maraso mandapek komentar nan indak lamak nan ditujuan lansuang kapado Sanak, cubolah [[Special:CreateAccount|mambuek akun]] atau [[Special:UserLogin|masuak log]] guno maindari karancuan jo pangguno anonim lainnyo.''",
        "sitecsspreview": "'''Ingeklah bahawa Sanak hanyo manampilan pratayang dari CSS iko.'''\n'''Parubahan alun disimpan!'''",
        "sitejsonpreview": "<strong>Ingeklah bahwa Sanak hanyo manampilan pratonton konfigurasi JSON ko. Parubahan alun basimpan!</strong>",
        "sitejspreview": "<strong>Ingek! Sanak hanyo manampilan pratonton kode JavaScript ko. Parubahan alun basimpan!</strong>",
-       "userinvalidconfigtitle": "'''Paringatan:''' Kulik \"$1\" indak ditamuan. Harap diingek bahawa laman .css dan .js manggunokan huruf kecil, contoh {{ns:user}}:Foo/vector.css dan bukannyo {{ns:user}}:Foo/Vector.css.",
+       "userinvalidconfigtitle": "<strong>Paringatan:</strong> Kulik \"$1\" indak ado. \n\nMohon diingek baso laman .css, .json, jo .js manggunoan huruf nan ketek; cando {{ns:user}}:Foo/vector.css bukannyo {{ns:user}}:Foo/Vector.css.",
        "updated": "(Dipabaharui)",
        "note": "'''Catatan:'''",
        "previewnote": "'''Ingek iko hanyo pratonton'''\nParubahan Sanak alun disimpan!",
        "continue-editing": "Pai ka kotak panyuntiangan",
        "previewconflict": "Pratayang iko mancaminan teks pado bagian ateh kotak suntiangan teks sabagaimano akan taliek bilo Sanak manyimpannyo.",
-       "session_fail_preview": "'''Maaf, kami indak dapek mangolah suntiangan Sanak dek tahapuihnyo data sesi.\nCubolah sakali lai.\nJikok masih indak barasil, cubolah [[Special:UserLogout|kalua log]] dan masuak log baliak.'''",
+       "session_fail_preview": "Maaf, kami indak bisa mamproses suntiangan Sanak dek ilangnyo data sesi. \n\nSanak mungkin lah takalua dari log. <strong>Mohon pastikan baso Sanak masih masuak log. Cubo sajo sakali lai.</strong>.\nKok masih indak bisa, cubo [[Special:UserLogout|kalua]] dan masuak log sakali lai, dan pareso kok panjalajah web sanak mambuliahan panyimpanan ''cookies'' dari laman web ko.",
        "session_fail_preview_html": "'''Kami indak dapek mamproses suntiangan Sanak karano hilangnyo sesi data.'''\n\n''Dek {{SITENAME}} mangizinan panggunoan HTML mantah, pratonton alah disuruakan sabagai pancagahan terhadok sarangan JavaScript.''\n\n'''Jikok iko marupoan suntiangan nan sah, silakan cubo lai.\nJikok masih jo indak barasil, cubolah [[Special:UserLogout|kalua log]] dan masuak baliak.'''",
        "token_suffix_mismatch": "'''Suntiangan Sanak ditolak karano aplikasi klien Sanak maubah karakter tando baco pado suntiangan.'''\nSuntiangan tasabuik ditolak untuak mancegah kasalahan pado teks laman.\nHal iko kadang tajadi jikok Sanak manggunokan layanan proxy anonim babasis web nan bamasalah.",
        "edit_form_incomplete": "'''Babarapo bagian dari formulir suntiangan indak mancapai server; pariso baliak apokah suntiangan Sanak tatap utuah dan cubo lai.'''",
index a6b7a5b..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": "Поврзани промени",
        "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": "Погрешен рок на истекување.",
        "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": "Заклучи база на податоци",
        "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 157b87c..216668f 100644 (file)
        "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 ꯂꯥꯃꯥꯏꯁꯤꯡ",
+       "index-category": "ꯏꯟꯗꯦꯛꯁ ꯂꯃꯥꯏꯁꯤꯡ",
        "noindex-category": "ꯏꯟꯗꯦꯛꯁ ꯌꯥꯎꯗꯕ ꯂꯃꯥꯏꯁꯤꯡ",
        "broken-file-category": " ꯀꯥꯏꯔꯕꯥ ꯐꯥꯏꯜꯒꯥ ꯂꯣꯏꯅꯕꯥ ꯂꯃꯥꯏꯁꯤꯡ",
        "about": "ꯄꯣꯠꯇꯨꯗꯤ ꯃꯔꯝꯗꯥ",
        "article": "ꯂꯃꯥꯏꯁꯤꯗꯥ ꯌꯥꯎꯕꯥ ꯄꯨꯝꯅꯃꯛ",
        "newwindow": "(ꯑꯅꯧꯕꯥ ꯊꯣꯡꯅꯥꯎꯗꯥ ꯍꯥꯡꯗꯣꯛ ꯎ)",
        "cancel": "ꯇꯣꯛꯄ",
-       "moredotdotdot": "ꯋꯥꯠꯂꯤ",
-       "morenotlisted": "ꯃꯁꯤꯒꯤ ꯄꯔꯦꯡꯁꯤ ꯃꯄꯨꯡ ꯐꯥꯗꯦ",
+       "moredotdotdot": "ꯋꯥꯠꯂꯤ....",
+       "morenotlisted": "ꯃꯁꯤꯒꯤ ꯄꯔꯦꯡꯁꯤ ꯃꯄꯨꯡ ꯐꯥꯗꯦ ꯫",
        "mypage": "ꯂꯃꯥꯏ",
        "mytalk": "ꯉꯥꯡꯐꯝ",
        "anontalk": "ꯉꯥꯡꯐꯝ",
        "otherlanguages": "ꯑꯇꯣꯞꯄꯥ ꯂꯣꯟꯁꯤꯡꯗꯥ",
        "redirectedfrom": "($1 ꯗꯒꯤ ꯔꯤꯗꯥꯏꯔꯦꯛ)",
        "redirectpagesub": "ꯑꯃꯨꯛ ꯍꯟꯂꯛꯄꯥ ꯂꯃꯥꯏ",
-       "redirectto": "Redirect to:",
+       "redirectto": "ꯃꯐꯝꯁꯤꯗ ꯍꯟꯕ:",
        "lastmodifiedat": "$1 ꯗꯥ ꯃꯁꯤꯒꯤ ꯂꯃꯥꯏꯁꯤ ꯑꯔꯣꯏꯕꯥ ꯁꯦꯝꯒꯠꯈꯤꯕꯥ, $2 ꯗꯥ",
        "viewcount": "This page has been accessed {{PLURAL:$1|once|$1 times}}?",
        "protectedpage": "ꯉꯥꯛꯊꯣꯛꯂꯕꯥ ꯂꯃꯥꯏ",
        "copyright": "$1 ꯒꯤ ꯃꯇꯦꯡꯅ ꯃꯅꯨꯡꯒꯤ ꯑꯌꯥꯑꯣꯕꯥ ꯐꯪꯒꯅꯤ ꯅꯠꯇꯔꯒꯥ ꯏꯁꯤꯟꯗꯔꯤꯒꯩ",
        "copyrightpage": "{{ns:project}}: ꯁꯤꯟꯗꯣꯔꯛꯄꯒꯤ ꯍꯛ",
        "currentevents": "ꯍꯧꯖꯤꯛꯀꯤ ꯊꯧꯔꯝꯁꯤꯡ",
-       "currentevents-url": "Project:houjikkee thouram",
+       "currentevents-url": "Project:ꯍꯧꯖꯤꯛꯀꯤ ꯊꯧꯔꯝ",
        "disclaimers": "ꯌꯥꯅꯤꯡꯗꯕꯥ ꯐꯣꯡꯗꯣꯛꯄꯁꯤꯡ",
        "disclaimerpage": "Project:ꯃꯌꯥꯝꯒꯤ ꯑꯣꯏꯅꯥ ꯌꯥꯅꯤꯡꯗꯕꯥ ꯐꯣꯡꯗꯣꯔꯛꯄꯥ",
        "edithelp": "ꯁꯦꯝꯒꯠꯅꯕꯥ ꯃꯥꯇꯦꯡ",
-       "helppage-top-gethelp": "ê¯\83ꯥê¯\87ꯦꯡ",
+       "helppage-top-gethelp": "ꯃꯇꯦꯡ",
        "mainpage": "ꯃꯔꯨꯑꯣꯏꯕ ꯂꯃꯥꯏ",
        "mainpage-description": "ꯃꯔꯨꯑꯣꯏꯕ ꯂꯃꯥꯏ",
        "policy-url": "Project:ꯈꯣꯡꯊꯥꯡ",
        "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": "ꯐꯤꯗꯁ ꯐꯪꯗꯦ",
        "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": "꯲ ꯁꯨꯕꯥ ꯃꯀꯣꯛꯀꯤ ꯄꯔꯦꯡ",
        "mergehistory-list": "ꯄꯎꯋꯥꯔꯤ ꯁꯦꯝꯒꯠꯄꯗꯨ ꯑꯃꯁꯨ ꯑꯃꯁꯨ ꯆꯪꯍꯟꯕ",
        "mergehistory-fail-invalid-source": "ꯂꯧꯔꯛꯐꯝ ꯂꯃꯥꯏꯁꯤ ꯂꯩꯇꯦ ꯫",
        "mergehistory-fail-invalid-dest": "ꯂꯝꯊꯨꯡꯐꯝ ꯂꯃꯥꯏꯁꯤ ꯂꯩꯇꯦ ꯫",
+       "mergehistory-autocomment": "[[:$1]] ꯁꯤ [[:$2]]ꯗꯥ ꯄꯨꯟꯁꯤꯟꯂꯨ",
        "mergehistory-reason": "ꯃꯔꯝ:",
        "mergelog": "ꯂꯣꯒ ꯄꯨꯟꯁꯤꯟꯕ",
        "history-title": "\"$1\" ꯒꯤ ꯔꯤꯚꯤꯖꯟ ꯄꯨꯋꯥꯔꯤ",
        "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 088c2e8..e6d27e7 100644 (file)
        "logentry-move-move-noredirect": "$3 မှ $4 သို့ စာမျက်နှာကို ပြန်ညွှန်းချန်မထားဘဲ $1 {{GENDER:$2|က ရွှေ့ခဲ့သည်}}",
        "logentry-move-move_redir": "$3 စာမျက်နှာကို $4 သို့ ပြန်ညွှန်းပေါ်ထပ်၍ $1 က {{GENDER:$2|ရွှေ့ခဲ့သည်}}",
        "logentry-move-move_redir-noredirect": "$3 မှ $4 သို့ ပြန်ညွှန်းပေါ်ထပ်အုပ်ကာ ပြန်ညွှန်းချန်မထားဘဲ $1 က {{GENDER:$2|ရွှေ့ခဲ့သည်}}",
+       "logentry-patrol-patrol": "စာမျက်နှာ $3 ၏ တည်းဖြတ်မူ $4 ကို $1 က စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း {{GENDER:$2|မှတ်သားခဲ့သည်}}",
        "logentry-patrol-patrol-auto": "စာမျက်နှာ $3 ၏ တည်းဖြတ်မူ $4 အား $1 က စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း အလိုအလျောက် {{GENDER:$2|မှတ်သားခဲ့သည်}}",
        "logentry-newusers-newusers": "အသုံးပြုသူအကောင့် $1 ကို {{GENDER:$2|ဖန်တီးခဲ့သည်}}",
        "logentry-newusers-create": "အသုံးပြုသူအကောင့် $1 ကို {{GENDER:$2|ဖန်တီးခဲ့သည်}}",
index 0ac7b3d..c75710f 100644 (file)
@@ -17,7 +17,8 @@
                        "S4b1nuz E.656",
                        "Ruthven",
                        "Fitoschido",
-                       "Sannita"
+                       "Sannita",
+                       "MarcoAurelio"
                ]
        },
        "tog-underline": "Sottolinia 'e jonte:",
        "mainpage": "Paggena prencepale",
        "mainpage-description": "Paggena prencepale",
        "policy-url": "Project:Policy",
-       "portal": "Porta d''a cummunetà",
-       "portal-url": "Project:Porta d''a cummunetà",
+       "portal": "Porta d'<nowiki/>'a commonetà",
+       "portal-url": "Project:Porta d''a commonetà",
        "privacy": "'Nformazzione ppe a privacy",
        "privacypage": "Project:'Nfrummazione ncopp'â privacy",
        "badaccess": "Nun aie bastante licenzia",
        "accmailtitle": "'O password è stato mannato.",
        "accmailtext": "'Na password gennerata casualmente ppe [[User talk:$1|$1]] è stata mannata a $2. Chista password può essere càgnata dint'â paggena ppe ''[[Special:ChangePassword|càgna 'a password]]'' subbeto doppo l'acciesso.",
        "newarticle": "(Nuovo)",
-       "newarticletext": "Site ghiuto/a addò nu link 'e na paggena ca nun esiste ancora.\nP' 'a crià sta paggena, accummenciate a scrivere dint'a cascia cà abbascio (vedite 'a [$1 paggena d'aiuto] pe liegge cchiù nfurmazziune).\nSi site venuto/a ccà pe' sbaglio, vedite 'e sprémmere 'o buttòne '''Arreto''' d' 'o navigatóre.",
+       "newarticletext": "Site ghiuto/a addò nu link 'e na paggena ca nun esiste ancora.\nPe crià sta paggena, accummenciate a scrivere dint'<nowiki/>'a cascia ccà abbascio (vedite 'a [$1 paggena d'aiuto] pe vedè cchiù 'nfurmazziune).\nSi site venuto/a ccà pe sbaglio, vedite 'e sprémmere 'o buttòne '''Arreto''' d'<nowiki/>o navigatóre.",
        "anontalkpagetext": "----\n''Chest'è 'a paggena 'e discussione 'e n'utente anonimo ca ancora nun s'è fatt' n'utenza o ca nun 'a sta ausanno.''\n\nPe' l'identificà avite 'e truvà 'o nummero d' 'o ndirizzo IP d' 'o sujo. L'indirizze IP se ponno spartì però sempe ausanno cunte differente.\n\nSi site n'utente anonimo e penzate ca 'e cummente ccà dint'a sta paggena nun parlano 'e vuje, allora [[Special:CreateAccount|criate n'utenza nnova]] o [[Special:UserLogin|trasite cu chella ca tenite già]] pe' nun sta' mmescato mmiez'a l'ati utente anonime n futuro.",
        "noarticletext": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate] o pure [{{fullurl:{{FULLPAGENAME}}|action=edit}} crià 'a paggena mo']</span>.",
        "noarticletext-nopermission": "Mo' mo' 'a paggena richiesta è abbacante. Se pò [[Special:Search/{{PAGENAME}}|ascià stu titolo]] dint'a l'ati paggene d' 'o sito, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ascià dint'e riggistre azzeccate]</span>, però nun tenite 'o permesso 'a crià sta paggena.",
        "importuploaderrortemp": "'A carreca d' 'o file mpurtato nun se facette.\nNa cartella temporanea nun se truova.",
        "import-parse-failure": "mpurtaziune XML scassata pe' n'errore d'analiso",
        "import-noarticle": "Nisciuna paggena 'a mpurtà!",
-       "import-nonewrevisions": "Nisciuna verziona mpurtata (Tutt' 'e verziune so' state già mpurtate o pure zumpajeno pe' bbia 'e cocch'errore).",
+       "import-nonewrevisions": "Nisciuna verziona mpurtata (Tutt' 'e verziune so' state mpurtate già o zumpajeno pe bbia 'e cocch'errore).",
        "xml-error-string": "$1 a 'a linea $2, culonne $3 (byte $4): $5",
        "import-upload": "Carreca 'e date 'e XML",
        "import-token-mismatch": "Se so' perdut' 'e date d' 'a sessione.\n\nPuò darse ca site asciuto/a. <strong>Pe' piacere cuntrullate si site ancora dinto e tentate n'ata vota</strong>.\n\nSi chesto nun funziunasse ancora, tentate 'e ve n'[[Special:UserLogout|ascì]] e trasì n'ata vota dinto, cuntrullate si 'o navigatore vuosto premmettesse 'e cookies 'e stu sito.",
        "tooltip-ca-move": "Mòve sta paggena",
        "tooltip-ca-watch": "Azzecca sta paggena int' 'a lista 'e paggene cuntrullate vuosta",
        "tooltip-ca-unwatch": "Lèva sta paggena d' 'a lista 'e paggene cuntrullate vuosta",
-       "tooltip-search": "Truova dint'ô {{SITENAME}}",
+       "tooltip-search": "Truova dint'a {{SITENAME}}",
        "tooltip-search-go": "Vaje â paggena cu stu nomme si esiste",
        "tooltip-search-fulltext": "Ascià 'o testo indicato dint'e paggene",
        "tooltip-p-logo": "Visita a paggena prencepale",
        "feedback-thanks": "Grazie! 'O feedback vuosto s'è mpizzato dint' 'a paggena \"[$2 $1]\".",
        "feedback-thanks-title": "Ve ringraziammo!",
        "feedback-useragent": "Aggente utente:",
-       "searchsuggest-search": "Truova dint'ô {{SITENAME}}",
+       "searchsuggest-search": "Truova dint'a {{SITENAME}}",
        "searchsuggest-containing": "tène...",
        "api-error-badtoken": "Errore interno: 'O token nun è buono.",
        "api-error-emptypage": "'A criazione 'e paggene nuove abbacante nun è permessa.",
index 4baf25a..6abed76 100644 (file)
        "search-interwiki-more-results": "flere resultater",
        "search-relatedarticle": "Relatert",
        "search-invalid-sort-order": "Sorteringsrekkefølge $1 er ukjent, så standard sortering blir brukt. Lovlige sorteringsrekkefølger er: $2",
+       "search-unknown-profile": "Søkeprofilen for $1 er ugjenkjennelig; standard søkeprofil blir brukt.",
        "searchrelated": "relatert",
        "searchall": "alle",
        "showingresults": "Nedenfor vises opptil {{PLURAL:$1|'''ett''' resultat|'''$1''' resultater}} fra og med nummer <b>$2</b>.",
        "right-editmyusercss": "Redigere sine egne CSS-filer",
        "right-editmyuserjson": "Rediger din egen bruker sine JSON-filer",
        "right-editmyuserjs": "Redigere sine egne JavaScript-filer",
+       "right-editmyuserjsredirect": "Redigere sine egne JavaScript-filer som er omdirigeringer",
        "right-viewmywatchlist": "Vise sin egen overvåkningsliste",
        "right-editmywatchlist": "Redigere sin egen overvåkningsliste. Legg merke til at noen handlinger fortsatt vil legge til sider uten denne rettigheten.",
        "right-viewmyprivateinfo": "Vise sine egne private data (f.eks. epostadresse og virkelig navn)",
        "action-editmyusercss": "redigere dine egne CSS-filer",
        "action-editmyuserjson": "redigere dine egne JSON-filer",
        "action-editmyuserjs": "redigere dine egne JavaScript-filer",
+       "action-editmyuserjsredirect": "redigere dine egne JavaScript-filer som er omdirigeringer",
        "action-viewsuppressed": "viser skjulte revisjoner",
        "action-hideuser": "blokkere et brukernavn og skjule det fra offentligheten",
        "action-ipblock-exempt": "omgå IP-blokkeringer, autoblokkeringer og rekkeblokkeringer",
        "rcfilters-clear-all-filters": "Nullstill alle filtre",
        "rcfilters-show-new-changes": "Vis nye endringer siden $1",
        "rcfilters-search-placeholder": "Filtrer endringer (bruk menyen eller søk etter et filternavn)",
+       "rcfilters-search-placeholder-mobile": "Filtre",
        "rcfilters-invalid-filter": "Ugyldig filter",
        "rcfilters-empty-filter": "Ingen aktive filtre. Alle bidrag vises.",
        "rcfilters-filterlist-title": "Filtre",
        "changecontentmodel": "Endre innholdsmodell for en side",
        "changecontentmodel-legend": "Endre innholdsmodell",
        "changecontentmodel-title-label": "Sidetittel",
+       "changecontentmodel-current-label": "Nåværende innholdsmodell:",
        "changecontentmodel-model-label": "Ny innholdsmodell",
        "changecontentmodel-reason-label": "Begrunnelse:",
        "changecontentmodel-submit": "Endre",
        "block-log-flags-angry-autoblock": "utvidet autoblokkering aktivert",
        "block-log-flags-hiddenname": "brukernavn skjult",
        "range_block_disabled": "Muligheten til å blokkere flere IP-adresser om gangen er slått av.",
+       "ipb-prevent-user-talk-edit": "Redigering av egen diskusjonsside må være tillatt for delvise blokkeringer, med mindre disse inkluderer begrensninger på navnerommet for brukerdiskusjonssider.",
        "ipb_expiry_invalid": "Ugyldig utløpstid.",
        "ipb_expiry_old": "Utløpstiden har allerede vært.",
        "ipb_expiry_temp": "For å skjule brukernavnet må blokkeringen være permanent.",
        "move-page-legend": "Flytt side",
        "movepagetext": "Når du bruker skjemaet nedenfor døper du om en side og flytter hele historikken til det nye navnet.\nDen gamle tittelen blir en omdirigeringsside til den nye tittelen.\nDu kan oppdatere omdirigeringer som peker til den opprinnelige tittelen automatisk.\nOm du velger å ikke gjøre det, sjekk at flyttingen ikke fører til [[Special:DoubleRedirects|doble]] eller [[Special:BrokenRedirects|ødelagte omdirigeringer]].\nDu er ansvarlig for at lenker fortsetter å peke til de sidene de er ment å peke til.\n\nLegg merke til at siden <strong>ikke</strong> kan flyttes hvis det allerede finnes en side med den nye tittelen, med mindre sistnevnte er tom eller er en omdirigeringsside uten historikk.\nDet betyr at du kan flytte en side tilbake dit den kom fra hvis du gjør en feil, og du kan ikke overskrive eksisterende sider ved et uhell.\n\n<strong>Merk:</strong>\nDette kan være en drastisk og uventet endring for en populær side;\nvær sikker på at du forstår konsekvensene av dette før du fortsetter.",
        "movepagetext-noredirectfixer": "Skjemaet nedenfor vil gi en side ny tittel og flytte historikken dens til det nye navnet.\nDen gamle tittelen vil bli en omdirigering til den nye.\nSjekk om det blir [[Special:DoubleRedirects|doble]] eller [[Special:BrokenRedirects|ødelagte omdirigeringer]].\nDu er ansvarlig for å sjekke at lenker fortsetter å gå dit de skal.\n\nMerk at sider <strong>ikke</strong> blir flyttet om det allerede finnes en side med den tittelen, med mindre siden er en omdirigering og ikke har noen redigeringshistorikk.\nDette betyr at du kan endre tittelen til en tittel siden hadde tidligere, og at du ikke kan skrive over en eksisterende side.\n\n<strong>Merk:</strong>\nDette kan være en drastisk og uventet endring for en populær side;\nvær sikker på at du forstår konsekvensene av dette før du fortsetter.",
+       "movepagetext-noredirectsupport": "Når man bruker skjemaet endrer man navnet til en side, og flytter all historikken dens til det nye navnet.\nDu er ansvarlig for å sikre at lenker fortsetter å peke dit de skal.\n\nMerk at siden <strong>ikke</strong> blir flyttet om det allerede er en annen side med det nye navnet.\nDette betyr at du kan flytte en side tilbake til der den var før om du gjør en feil, og du kan ikke overskrive eksisterende sider.\n\n<strong>Merk:</strong>\nDette kan være en drastisk og uventet endring for populære sider;\nsørg for at du forstår konsekvensene før du fortsetter.",
        "movepagetalktext": "Om du merker av denne boksen vil den tilhørende diskusjonssiden også flyttes til den nye tittelen, med mindre en ikke-tom diskusjonsside allerede finnes der.\n\nOm det er tilfelle må du flytte eller flette siden manuelt om det er ønskelig.",
        "moveuserpage-warning": "'''Advarsel:''' Du er i ferd med å flytte en brukerside. Merk at kun siden vil bli flyttet; brukernavnet vil ''ikke'' bli endret.",
        "movecategorypage-warning": "<strong>Advarsel:</strong> Du er i ferd med å flytte en kategoriside. Merk at kun siden blir flyttet, og at sider i det gamle kategorinavnet <em>ikke</em> blir omkategorisert til det nye navnet.",
        "permanentlink": "Permanent lenke",
        "permanentlink-revid": "Revisjons-ID",
        "permanentlink-submit": "Gå til revisjon",
+       "newsection": "Nytt avsnitt",
+       "newsection-page": "Målside",
+       "newsection-submit": "Gå til side",
        "dberr-problems": "Siden har tekniske problemer.",
        "dberr-again": "Prøv å oppdatere siden om noen minutter.",
        "dberr-info": "(Kan ikke kontakte databasetjeneren: $1)",
        "linkaccounts": "Lenk kontoer",
        "linkaccounts-success-text": "Kontoen ble lenket.",
        "linkaccounts-submit": "Lenk kontoer",
+       "cannotunlink-no-provider-title": "Det er ingen lenkede kontoer som kan avlenkes",
+       "cannotunlink-no-provider": "Det er ingen lenkede kontoer som kan avlenkes",
        "unlinkaccounts": "Fjern lenking av kontoer",
        "unlinkaccounts-success": "Kontoens lenking ble fjernet.",
        "authenticationdatachange-ignored": "Autentiseringsdataendringen ble ikke håndtert. Muligens ble ingen tilbyder konfigurert?",
        "edit-error-short": "Feil: $1",
        "edit-error-long": "Feil:\n\n$1",
        "specialmute": "Demp",
-       "specialmute-success": "Dempingsinnstillingene dine har blitt oppdatert. Se alle dempede brukere i [[Special:Preferences|innstillingene]].",
+       "specialmute-success": "Dempingsinnstillingene dine har blitt oppdatert. Se alle dempede brukere i [[Special:Preferences|innstillingene dine]].",
        "specialmute-submit": "Bekreft",
        "specialmute-label-mute-email": "Demp eposter fra denne brukeren",
-       "specialmute-header": "Velg dempingsinnstillenger som gjelder <b>{{BIDI:[[User:$1]]}}</b>.",
+       "specialmute-header": "Velg dempingsinnstillenger som gjelder brukeren <b>{{BIDI:[[User:$1|$1]]}}</b>.",
        "specialmute-error-invalid-user": "Det forespurte brukernavnet ble ikke funnet.",
-       "specialmute-email-footer": "Besøk <$1> for å behandle epostinnstillingene som gjelder {{BIDI:$2}}.",
+       "specialmute-error-no-options": "Dempingsfunksjoner er ikke tilgjengelige. Dette kan være fordi du ikke har bekreftet epostadressen din, eller at wikiadministratoren har slått av epostfunksjoner og/eller svartelisting av eposter for denne wikien.",
+       "specialmute-email-footer": "Besøk <$1> for å behandle epostinnstillingene som gjelder brukeren {{BIDI:$2}}.",
        "specialmute-login-required": "Logg inn for å endre dempingsinnstillingene dine.",
+       "mute-preferences": "Dempingsinnstillinger",
        "revid": "revisjon $1",
        "pageid": "side-ID $1",
        "interfaceadmin-info": "$1\n\nTillatelse til å redigere CSS, JavaScript og JSON som gjelder hele nettstedet ble nylig utskilt til rettigheten <code>editinterface</code>. Om du ikke forstår hvorfor du får denne feilmeldingen, se [[mw:MediaWiki_1.32/interface-admin]].",
        "passwordpolicies-policy-passwordnotinlargeblacklist": "Passord kan ikke være i listen over de vanligste 100&nbsp;000 passordene.",
        "passwordpolicies-policyflag-forcechange": "må endres ved innlogging",
        "passwordpolicies-policyflag-suggestchangeonlogin": "foreslå endring ved innlogging",
+       "mycustomjsredirectprotected": "Du har ikke tillatelse til å redigere denne JavaScript-siden fordi den er en omdirigering og ikke peker til en annen side i ditt brukernavnerom.",
        "easydeflate-invaliddeflate": "Det gitte innholdet er ikke riktig komprimert",
        "unprotected-js": "Av sikkerhetsårsaker kan ikke JavaScript lastes fra ubeskyttede sider. Bare skap JavaScript i MediaWiki-navnerommet eller som en brukerunderside",
        "userlogout-continue": "Ønsker du å logge ut?"
index 10f26ab..98a5cf2 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",
        "redirect-lookup": "Opzeuken:",
        "redirect-value": "Weerde:",
        "redirect-user": "Gebrukersnummer",
+       "redirect-page": "Syde-ID",
        "redirect-revision": "Ziedversie",
        "redirect-file": "Bestaandsnaam",
        "redirect-not-exists": "Weerde niet evunnen",
        "mw-widgets-abandonedit": "Bi'j der wisse van da'j de naokiekmodus verlaoten willen zonder eerst op te slaon?",
        "mw-widgets-abandonedit-discard": "Wiezigingen vortsmieten",
        "mw-widgets-abandonedit-keep": "Verdan gaon mit bewarken",
-       "mw-widgets-abandonedit-title": "Wee'j t zeker?"
+       "mw-widgets-abandonedit-title": "Wee'j t zeker?",
+       "randomrootpage": "Willeköärige stamsyde"
 }
index 192a852..d3983c8 100644 (file)
        "recentchanges-label-unpatrolled": "Düsse Ännern is noch nich kontrolleert worrn",
        "recentchanges-label-plusminus": "Disse Siedengrött is mit dit Antall Bytes ännert",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}}<br />(süh ok de [[Special:NewPages|List mit ne'e Sieden]])",
+       "rcfilters-search-placeholder-mobile": "Filters",
        "rcnotefrom": "Dit sünd de Ännern siet <b>$2</b> (bet to <b>$1</b> wiest).",
        "rclistfrom": "Wies ne’e Ännern siet $3 $2",
        "rcshowhideminor": "lütte Ännern $1",
index d47ff4c..0c02b1b 100644 (file)
        "histfirst": "पुरानो",
        "histlast": "नयाँ",
        "historysize": "({{PLURAL:$1|१ बाइट |$1 बाइटहरू}})",
-       "historyempty": "(खाली)",
+       "historyempty": "खाली",
        "history-feed-title": "पुनरावलोकन इतिहास",
        "history-feed-description": "विकीमा यो पृष्ठको पुनरावलोकन इतिहास",
        "history-feed-item-nocomment": "$1  $2मा",
        "mergehistory-go": "जोड्न मिल्ने सम्पादनहरू",
        "mergehistory-submit": "पुनरावलोकहरु जोड्नुहोस्",
        "mergehistory-empty": "कुनै पनि पुनरावलोकनहरू जोड्न मिल्दैन ।",
-       "mergehistory-done": "$3 {{PLURAL:$3|संस्करण|संस्करणहरू}}  $1बाट सफलतापूर्वक [[:$2]]मा थपियो ।",
+       "mergehistory-done": "$3 {{PLURAL:$3|संस्करण|संस्करणहरू}}  $1बाट सफलतापूर्वक [[:$2]]मा थपियो।",
        "mergehistory-fail": "इतिहास जोड्न सकिएन कृपया पृष्ठको नाम र समयमान जाँच गर्नुहोस्।",
        "mergehistory-fail-invalid-source": "स्रोत पृष्ठ अमान्य छ।",
        "mergehistory-fail-invalid-dest": "लक्ष्य पृष्ठ अमान्य छ।",
        "special-characters-title-endash": "इएन ड्यास",
        "special-characters-title-emdash": "इएम ड्यास",
        "special-characters-title-minus": "घटाउने चिन्ह",
+       "mw-widgets-abandonedit": "के तपाई सम्पादन सङ्ग्रह नगरीकन सम्पादनबाट बाहिरिनेमा निश्चित हुनुहुन्छ?",
        "mw-widgets-abandonedit-discard": "सम्पादन रद्द गर्नु",
        "mw-widgets-abandonedit-keep": "सम्पादन जारी राख्ने",
        "mw-widgets-abandonedit-title": "निश्चित हुनुहुन्छ ?",
index 19c9734..42aa999 100644 (file)
        "tog-watchcreations": "Pagina's die ik aanmaak en bestanden die ik upload aan mijn volglijst toevoegen",
        "tog-watchdefault": "Pagina's en bestanden die ik bewerk aan mijn volglijst toevoegen",
        "tog-watchmoves": "Pagina's en bestanden die ik hernoem aan mijn volglijst toevoegen",
-       "tog-watchdeletion": "Pagina’s en bestanden die ik verwijder automatisch volgen",
+       "tog-watchdeletion": "Pagina's en bestanden die ik verwijder aan mijn volglijst toevoegen",
        "tog-watchuploads": "Nieuwe bestanden die ik upload aan mijn volglijst toevoegen",
-       "tog-watchrollback": "Pagina's waarop ik heb teruggedraaid automatisch volgen",
+       "tog-watchrollback": "Pagina's waarop ik heb teruggedraaid aan mijn volglijst toevoegen",
        "tog-minordefault": "Mijn bewerkingen standaard als kleine bewerking markeren",
        "tog-previewontop": "Voorvertoning boven bewerkingsveld weergeven",
        "tog-previewonfirst": "Voorvertoning bij eerste bewerking weergeven",
        "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 7f5cefe..7f60100 100644 (file)
        "page-rss-feed": "«$1» RSS-kjelde",
        "page-atom-feed": "«$1» Atom-kjelde",
        "red-link-title": "$1 (sida finst ikkje)",
-       "sort-descending": "Sorter fallande",
-       "sort-ascending": "Sorter stigande",
+       "sort-descending": "Sorter fallande",
+       "sort-ascending": "Sorter stigande",
        "nstab-main": "Side",
        "nstab-user": "Brukarside",
        "nstab-media": "Filside",
        "translateinterface": "For å legge til eller endre omsetjingar for alle wikiar, nytt [https://translatewiki.net/ translatewiki.net], lokaliseringsprosjektet til MediaWiki.",
        "cascadeprotected": "Denne sida er verna mot endring fordi ho er inkludert i fylgjande {{PLURAL:$1|side|sider}} som har djupvern slått på:\n$2",
        "namespaceprotected": "Du har ikkje tilgang til å endre sidene i '''$1'''-namnerommet.",
-       "customcssprotected": "↓Du har ikkje tilgang til å endre denne sida, fordi ho inneheld ein annan brukar sine personlege innstillingar.",
+       "customcssprotected": "Du har ikkje tilgang til å endre denne sida fordi ho inneheld ein annan brukar sine personlege innstillingar.",
        "customjsonprotected": "Du har ikkje løyve til å endra denne JSON-sida av di ho inneheld dei personlege innstillingane til ein annan brukar.",
-       "customjsprotected": "Du har ikkje løyve til å endra denne JavaScript-sida fordi ho inneheld dei personlege innstillingane til ein annan brukar.",
+       "customjsprotected": "Du har ikkje løyve til å endra denne JavaScript-sida fordi ho inneheld dei personlege innstillingane til ein annan brukar.",
        "sitecssprotected": "Du har ikkje løyve til å endra denne CSS-sida av di ho kan påverka alle som vitjar nettstaden.",
        "sitejsprotected": "Du har ikkje løyve til å endra denne JavaScript-sida av di ho kan påverka alle som vitjar nettstaden.",
        "mycustomcssprotected": "Du har ikkje løyve til å endra denne CSS-sida.",
        "virus-scanfailed": "skanning mislukkast (kode $1)",
        "virus-unknownscanner": "ukjend antivirusprogram:",
        "logouttext": "<strong>Du er no utlogga.</strong>\n\nVer merksam på at nokre sider framleis kan visast fram som om du er innlogga fram til du slettar mellomlageret til nettlesaren din.",
+       "logout-failed": "Kan ikkje logga ut no: $1",
        "cannotlogoutnow-title": "Kan ikkje logga ut nå",
        "cannotlogoutnow-text": "Utlogging er ikkje mogleg når du nyttar $1.",
        "welcomeuser": "Velkomen, $1!",
        "passwordinlargeblacklist": "Passordet du skreiv inn er på ei liste over særs vanlege passord. Du må velja eit meir særeige passord.",
        "password-name-match": "Passordet ditt lyt vera noko anna enn brukarnamnet ditt.",
        "password-login-forbidden": "Bruk av dette brukarnamnet og passordet er vorte forbode.",
-       "mailmypassword": "Attendestill passord",
+       "mailmypassword": "Nullstill passord",
        "passwordremindertitle": "Nytt passord til {{SITENAME}}",
        "passwordremindertext": "Nokon (truleg du, frå IP-adressa $1) bad oss sende deg eit nytt passord til {{SITENAME}} ($4). Eit mellombels passord for «$2» er oppretta, og er sett til «$3». Om det var det du ville, må du logge inn\nog velje eit nytt passord no.\nMellombelspassordet ditt vil slutte å fungere om {{PLURAL:$5|éin dag|$5 dagar}}.\n\nDersom denne førespurnaden blei utført av nokon andre, eller om du kom på passordet og ikkje lenger ønsker å endre det, kan du ignorere denne meldinga og halde fram med å bruke det gamle passordet.",
        "noemail": "Det er ikkje registrert noka e-postadresse åt brukaren «$1».",
        "pt-createaccount": "Opprett konto",
        "pt-userlogout": "Logg ut",
        "php-mail-error-unknown": "Ukjend feil i PHPs mail()-funksjon",
-       "user-mail-no-addy": "Prøvde å senda e-post utan e-postadresse",
+       "user-mail-no-addy": "Prøvde å senda e-post utan e-postadresse",
        "user-mail-no-body": "Freista å senda e-post med tom eller urimeleg stutt brødtekst.",
        "changepassword": "Skift passord",
        "resetpass_announce": "For å fullføra innloggingen må du velja eit nytt passord.",
        "changepassword-success": "Passordet ditt er no endra!",
        "changepassword-throttled": "Du har gjort for mange nylege innloggingsforsøk.\nVer god å venta $1 før du prøver igjen.",
        "botpasswords": "Botpassord",
+       "botpasswords-label-appid": "Botnamn:",
        "botpasswords-label-create": "Opprett",
        "botpasswords-label-update": "Oppdater",
        "botpasswords-label-cancel": "Bryt av",
        "botpasswords-label-delete": "Slett",
+       "botpasswords-label-resetpassword": "Nullstill passordet",
+       "botpasswords-not-exist": "Brukaren «$1» har ikkje eit botpassord kalla «$2».",
        "resetpass_forbidden": "Passord kan ikkje endrast",
+       "resetpass_forbidden-reason": "Passorda kan ikkje verte endra: $1",
        "resetpass-no-info": "Du må vera innlogga for å få direktetilgang til denne sida.",
        "resetpass-submit-loggedin": "Endra passord",
        "resetpass-submit-cancel": "Avbryt",
        "resetpass-temp-password": "Mellombels passord:",
        "resetpass-abort-generic": "Passordbytet vart stogga av ei utviding.",
        "resetpass-validity-soft": "Passordet ditt er ikkje gyldig: $1\n\nGjer vel å velja eit nytt passord no, eller klikk «{{int:authprovider-resetpass-skip-label}}» for å endra det seinare.",
-       "passwordreset": "Attendestilling av passord",
+       "passwordreset": "Nullstilling av passord",
        "passwordreset-text-one": "Fyll ut dette skjemaet for å attendestilla passordet ditt.",
        "passwordreset-text-many": "{{PLURAL:$1|Fyll inn eitt av felta for å få eit mellombelspassord gjennom e-post.}}",
-       "passwordreset-disabled": "↓Tilbakestilling av passord er ikkje aktivert på denne wikien",
+       "passwordreset-disabled": "Nullstilling av passord er avslege på denne wikien.",
        "passwordreset-emaildisabled": "E-postfunksjonen er slegen av på wikien.",
        "passwordreset-username": "Brukarnamn:",
        "passwordreset-domain": "Domene:",
        "passwordreset-email": "E-postadresse:",
-       "passwordreset-emailtitle": "Kontodetaljar på {{SITENAME}}",
+       "passwordreset-emailtitle": "Kontodetaljar på {{SITENAME}}",
        "passwordreset-emailtext-ip": "Nokon (sannsynlegvis deg, frå IP-adressa $1) bad om ei nullstilling av passordet ditt for {{SITENAME}} ($4). {{PLURAL:$3|Denne brukarkontoen|Desse brukarkontoane}} er knytte til denne e-postadressa:\n\n$2\n\n{{PLURAL:$3|Dette mellombels passordet|Desse mellombels passorda}} går ut om {{PLURAL:$5|éin dag|$5 dagar}}.\nDu bør logga inn og velja eit nytt passord no. Om nokon andre enn deg bad om denne nullstillinga eller du no hugsar det opphavlege passordet og ikkje lenger ynskjer å endra det, kan du sjå bort frå denne meldinga og halda fram med å nytta det gamle passordet ditt.",
        "passwordreset-emailtext-user": "Brukaren $1 på {{SITENAME}} bad om ei påminning for kontodetaljane dine for {{SITENAME}} ($4). {{PLURAL:$3|Den fylgjande brukarkontoen|Dei fylgjande brukarkontoane}} er assosierte med denne e-postadressa:\n\n$2\n\n{{PLURAL:$3|Dette mellombels passordet|Desse mellombels passorda}} vil verta ugilde om {{PLURAL:$5|éin dag|$5 dagar}}.\nDu bør logga inn og velja eit nytt passord no. Om nokon andre enn deg bad om denne påminninga, eller du har kome i hug det opphavlege passordet og ikkje lenger ynskjer å endra det, kan du sjå bort frå denne meldinga og halda fram med å nytta det gamle passordet ditt.",
-       "passwordreset-emailelement": "Brukarnamn: \n$1\n\nMellombels passord: \n$2",
+       "passwordreset-emailelement": "Brukarnamn: \n$1\n\nMellombels passord: \n$2",
        "passwordreset-emailsentemail": "Om denne e-postadressa er knytt til din konto, vil det verte send ein e-post for attendestilling av passordet.",
        "passwordreset-emailsentusername": "Om ei e-postadresse er knytt til denne kontoen, vil det verte send ein e-post for attendestilling av passordet.",
        "passwordreset-nocaller": "Du må oppgje ein brukar",
        "passwordreset-nodata": "Verken eit brukarnamn eller ei e-postadresse vart oppgjeve",
        "changeemail": "Endre eller fjern e-postadresse",
        "changeemail-header": "Fyll ut dette skjemaet for å endre e-postadressa di. Ynskjer du å fjerne tilknytinga ei e-postadresse har til kontoen din, lat feltet for ny e-postadresse stå tomt når du sender inn skjemaet.",
-       "changeemail-no-info": "Du må vera pålogga for å få tilgang direkte til denne sida.",
+       "changeemail-no-info": "Du må vera pålogga for å få tilgang direkte til denne sida.",
        "changeemail-oldemail": "Gjeldande e-postadresse:",
        "changeemail-newemail": "Ny e-postadresse:",
        "changeemail-newemail-help": "Dette feltet skal stå tomt om du ynskjer å fjerne e-postadressa di. Du kan ikkje nullstille eit gløymt passord og kan heller ikkje ta imot e-postar frå denne wikien om e-postadressa er fjerna.",
-       "changeemail-none": "(ingen)",
+       "changeemail-none": "(ingen)",
        "changeemail-password": "{{SITENAME}}-passordet ditt:",
        "changeemail-submit": "Endre e-post",
        "changeemail-throttled": "Du har freista for mange gonger å logga inn. Du lyt venta $1 før du kan freista på nytt.",
        "changeemail-nochange": "Ver god å oppgje ei ny e-postadresse.",
+       "resettokens-token-label": "$1 (noverande verdi: $2)",
        "bold_sample": "Halvfeit skrift",
        "bold_tip": "Halvfeit skrift",
        "italic_sample": "Kursivskrift",
        "savechanges": "Publiser endringane",
        "publishpage": "Publiser sida",
        "publishchanges": "Publiser endringar",
+       "savearticle-start": "Lagre sida …",
+       "savechanges-start": "Lagra endringar …",
        "publishpage-start": "Publiser side …",
        "publishchanges-start": "Publiser endringar …",
        "preview": "Førehandsvising",
        "invalid-content-data": "Ugyldig innhald",
        "content-not-allowed-here": "Innhaldsmodellen «$1» er ikkje tillaten på sida [[:$2]]",
        "editwarning-warning": "Ved å forlata denne sida kan du mista alle endringane du måtte ha gjort.\nEr du innlogga kan denne åtvaringa slåast av under bolken «Endring» i innstillingane dine.",
+       "editpage-invalidcontentmodel-title": "Innhaldsmodell ikkje stødd.",
+       "editpage-invalidcontentmodel-text": "Innhaldsmodellen «$1» er ikkje stødd.",
+       "editpage-notsupportedcontentformat-title": "Innhaldsformatet ikkje stødd",
+       "editpage-notsupportedcontentformat-text": "Innhaldsformatet $1 er ikkje stødd av innhaldsmodellen $2.",
+       "slot-name-main": "Hovud",
        "content-model-wikitext": "WikiTekst",
        "content-model-text": "Rein tekst",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
        "content-json-empty-object": "Tomt objekt",
+       "content-json-empty-array": "Tom matrise",
        "deprecated-self-close-category": "Sider som nyttar ugyldige sjølvlukkande HTML-merke.",
        "duplicate-args-warning": "<strong>Åtvaring:</strong> [[:$1]] kallar [[:$2]] med meir enn éin verdi for argumentet «$3». Berre den sist oppgjevne verdien vert nytta.",
        "expensive-parserfunction-warning": "Åtvaring: Denne sida inneheld for mange prosesskrevande parserfunksjonar.\n\nDet burde vere færre enn {{PLURAL:$2|$2|$2}}, men er no {{PLURAL:$1|$1|$1}}.",
        "post-expand-template-argument-warning": "Åtvaring: Sida inneheld ein eller fleire malparameterar som vert for lange når dei utvidast.\nDesse parameterane har vorte utelatne.",
        "post-expand-template-argument-category": "Sider med utelatne malparameterar",
        "parser-template-loop-warning": "Mallykkje oppdaga: [[$1]]",
+       "template-loop-category": "Sider med malsløyfer",
        "parser-template-recursion-depth-warning": "Malen er inkludert for mange gonger ($1)",
        "language-converter-depth-warning": "Språkomformaren si djubdegrense vart overstege ($1)",
        "node-count-exceeded-category": "Sider der talet på knutepunkt er overskride",
        "prefs-misc": "Andre",
        "prefs-resetpass": "Endra passord",
        "prefs-changeemail": "Endre eller fjern e-postadresse",
-       "prefs-setemail": "Oppgje ei e-postadresse",
+       "prefs-setemail": "Oppgje ei e-postadresse",
        "prefs-email": "Val for e-post",
        "prefs-rendering": "Utsjånad",
        "saveprefs": "Lagre",
        "savedprefs": "Brukarinnstillingane er lagra.",
        "timezonelegend": "Tidssone:",
        "localtime": "Lokaltid:",
-       "timezoneuseserverdefault": "Nytt standardinnstillinga til wikien ($1)",
+       "timezoneuseserverdefault": "Nytt standardinnstillinga til wikien ($1)",
        "timezoneuseoffset": "Anna (oppgje skilnad)",
        "servertime": "Tenartid:",
        "guesstimezone": "Hent tidssone frå nettlesaren",
        "nowatchlist": "Du har ikkje noko i overvakingslista di.",
        "watchlistanontext": "Logg inn for å vise eller endre sider på overvakingslista di.",
        "watchnologin": "Ikkje innlogga",
-       "addwatch": "Legg til i overvakingslista",
+       "addwatch": "Legg til i overvakingslista",
        "addedwatchtext": "«[[:$1]]» og diskusjonssida hennar er lagde til i [[Special:Watchlist|overvakingslista]] di.",
        "addedwatchtext-talk": "«[[:$1]]» og den tilknytte sida hennar er lagde til i [[Special:Watchlist|overvakingslista di]].",
        "addedwatchtext-short": "Sida «$1» vart lagd til i overvakingslista di.",
        "show-big-image-size": "$1 × $2 pikslar",
        "file-info-gif-looped": "gjentatt",
        "file-info-gif-frames": "$1 {{PLURAL:$1|rame|ramer}}",
-       "file-info-png-looped": "oppatteke",
+       "file-info-png-looped": "oppatteke",
        "file-info-png-repeat": "spela av {{PLURAL:$1|éin gong|$1 gonger}}",
        "file-info-png-frames": "$1 {{PLURAL:$1|bilete|bilete}}",
        "file-no-thumb-animation": "'''Merk: Grunna tekniske avgrensingar vil ikkje miniatyrbilete av fila verta animerte.'''",
        "confirmemail_body_set": "Nokon, truleg deg, frå IP-adressa $1, har sett e-postadressa til kontoen «$2» på {{SITENAME}} til denne e-postadressa.\n\nFor å stadfesta at denne kontoen faktisk høyrer til deg, og for å slå på\nfunksjonar knytte til e-post på {{SITENAME}}, opna denne lenkja i nettlesaren din:\n\n$3\n\nOm brukarkontoen *ikkje* høyrer til deg, fylg denne lenkja for å bryta av stadfestinga av e-postadressa:\n\n$5\n\nDenne stadfestingskoden vert forelda $4.",
        "confirmemail_invalidated": "Stadfestinga av e-postadresse er avbrote",
        "invalidateemail": "Avbryt stadfestinga av e-postadressa",
+       "notificationemail_subject_changed": "Registrert e-postadresse på {{SITENAME}} er vorten endra",
+       "notificationemail_body_changed": "Nokon, truleg du (frå IP-adressa $1), har endra e-postadressa for kontoen «$2» til «$3» på {{SITENAME}}.\n\nOm det ikkje var deg som gjorde det, kontakt ein administrator på nettstaden med det same.",
        "scarytranscludedisabled": "[Interwiki-tilkopling er slått av]",
        "scarytranscludefailed": "[Henting av mal for $1 gjekk ikkje]",
        "scarytranscludefailed-httpstatus": "[Henting av mal for $1 gjekk ikkje: HTTP $2]",
        "log-action-filter-suppress-block": "Fjerning av brukar ved blokkering",
        "authmanager-userdoesnotexist": "Brukarkontoen «$1» er ikkje oppretta.",
        "authmanager-provider-temporarypassword": "Mellombels passord",
+       "changecredentials": "Endra innloggingsdetaljar",
+       "changecredentials-submit": "Endra innloggingsdetaljar",
+       "changecredentials-success": "Innloggingsdetaljane dine er vortne endra",
+       "removecredentials-submit": "Fjern innloggingsdetaljar",
+       "removecredentials-success": "Innloggingsdetaljane dine er vortne fjerna",
+       "credentialsform-provider": "Innloggingsmåte:",
+       "credentialsform-account": "Kontonamn:",
        "userjsispublic": "Merk: JavaScript-undersider bør ikkje innehalda konfidensielle data sidan dei er synlege for andre brukarar.",
        "usercssispublic": "Merk: CSS-undersider bør ikkje innehalda konfidensielle data sidan dei er synlege for andre brukarar.",
        "revid": "versjon $1",
        "interfaceadmin-info": "$1\n\nLøyva for endring av CSS/JS/JSON-filer som gjeld heile nettstaden vart nyleg skilde ut frå <code>editinterface</code>-retten. Om du ikkje skjøner kvifor du får denne feilmeldinga, sjå [[mw:MediaWiki_1.32/interface-admin]].",
        "passwordpolicies-policy-passwordcannotmatchusername": "Passordet kan ikkje vera det same som brukarnamnet",
-       "passwordpolicies-policy-passwordcannotmatchblacklist": "Passordet kan ikkje passa med svartelista passord"
+       "passwordpolicies-policy-passwordcannotmatchblacklist": "Passordet kan ikkje passa med svartelista passord",
+       "userlogout-continue": "Ynskjer du å logga ut?"
 }
index df22576..92fb9bb 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": "ߕߐ߮ ߓߘߍ (ߛߎߥߊ߲ߘߟߌ)",
        "duplicate-args-category": "ߞߐߜߍ ߦߋ߫ ߘߊߘߐߡߌߘߊߞߎ߲ߢߊ߫ ߓߊߟߌߣߍ߲ ߠߎ߬ ߟߊߓߊ߯ߙߊ߫ ߟߊ߫ ߞߙߊߞߏ ߞߟߌߟߌ ߘߐ߫",
        "duplicate-args-category-desc": "ߞߙߊߞߏ ߞߟߌߟߌ ߟߎ߬ ߦߋ߫ ߞߐߜߍ ߘߐ߫߸ ߡߍ߲ ߠߎ߬ ߦߋ߫ ߘߊߘߐߡߌߘߊߞߎ߲ߢߊ߫ ߓߊߟߌߣߍ߲ ߠߎ߬ ߟߊߓߊ߯ߙߊ߫ ߟߊ߫߸ ߦߏ߫ <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> ߥߟߊ߫ <code><nowiki>{{foo|bar|1=baz}}<nowiki></code>.",
        "expensive-parserfunction-warning": "<strong>ߖߊ߬ߛߙߋ߬ߡߊ߬ߟߊ</strong> ߞߐߜߍ ߣߌ߲߬ ߞߣߐߘߐ ߟߎ߬ ߘߐߞߍ߫ ߣߍ߲߫ ߞߎߙߎ߲ߞߎߙߎ߲ߟߊ߲߫ ߘߊߜߍߟߍ߲ߓߊ ߟߎ߬ ߗߋߘߊ ߞߟߌߟߌ ߟߎ߬ ߟߋ߬ ߟߊ߫. \n\nߕߎ߬ߡߊ߬ߘߐ߫ ߊ߬ ߘߌ߫ ߞߍ߫ $2 ߘߎ߰ߟߊ߫ \n{{PLURAL:$2|ߞߟߌߟߌ|ߞߟߌߟߌ ߟߎ߬}}߸ ߘߌ߫ ߞߍ߫ {{PLURAL:$1|ߦߋ߫ ߞߟߌߟߌ $1 ߟߋ߬ ߘߌ߫ ߡߎ߬ߕߎ߲߬|ߦߋ߫ ߞߟߌߟߌ ߟߎ߬ $1 ߟߋ߬ ߘߌ߫ ߡߎ߬ߕߎ߲߬}}.",
+       "parser-template-loop-warning": "ߞߙߊ߬ߞߏ ߞߐ߬ߘߙߍ ߓߘߊ߫ ߖߏ߰ߛߌ߬: [[$1]]",
+       "template-loop-category": "ߞߙߊ߬ߞߏ ߞߐ߬ߘߙߍ ߦߋ߫ ߞߐߜߍ ߡߍ߲ ߠߎ߬ ߠߊ߫",
        "undo-failure": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߕߍ߫ ߣߊ߬ ߛߋ߫ ߟߊ߫ ߘߐߛߊ߬ ߟߊ߫߸ ߝߘߏ߬ߒ߬ߡߊ߬ߟߌ߬ ߡߊߦߟߍߡߊ߲ߠߌ߲ ߞߏߛߐ߲߬.",
        "undo-summary-username-hidden": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ߫ ߢߡߊߘߏ߲߰ߣߍ߲ ߠߎ߬ ߟߢߊ߬ߟߌ $1 ߘߐߛߊ߬",
        "cantcreateaccount-text": "ߖߊ߬ߕߋ߬ߘߊ߬ ߛߌ߲ߘߟߌ ߞߊ߬ ߝߘߊ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߣߌ߲߬ ߠߊ߫ IP ߛߊ߲߬ߓߊ߬ߕߐ߮ (<strong>$1</strong>) ߟߊ߫, ߏ߬ ߓߘߊ߫ ߓߊ߬ߟߌ߬ [[User:$3|$3]] ߓߟߏ߫.\n\nߞߎ߲߭ ߡߍ߲ ߦߌ߬ߘߊ߬ ߣߴߏ߬ ߟߊ߫ $3 ߓߟߏ߫߸ ߏ߬ ߦߋ߫ <em>$2</em> ߟߋ߬ ߘߌ߫",
        "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-editmyuserjs": "ߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ JavaScript ߞߐߕߐ߮ ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
        "right-viewmywatchlist": "ߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ ߜߋ߬ߟߎ߲߬ߠߌ߲߬ ߛߙߍߘߍ ߦߋ߫",
        "right-editmyoptions": "ߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ ߟߊߝߌߛߦߊߟߌ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "right-markbotedits": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߟߊߞߐߛߊ߬ߦߌ߬ߣߍ߲ ߠߎ߬ ߣߐ߬ߣߐ߬ ߓߏߕ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ߣߐ ߘߌ߫.",
        "right-import": "ߞߐߜߍ ߟߎ߬ ߟߊߛߣߍ߫ ߞߊ߬ ߓߐ߫ ߥߞߌ ߕߐ߭ ߟߎ߬ ߘߐ߫",
        "right-importupload": "ߞߐߜߍ ߟߎ߬ ߟߊߛߣߍ߫ ߞߊ߬ ߓߐ߫ ߞߐߕߐ߯ ߟߊߦߟߍ߬ߣߍ߲ ߠߎ߬ ߘߐ߫",
        "right-patrol": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߘߏ ߟߎ߬ ߟߊ߫ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲ ߠߎ߬ ߣߐ߬ߣߐ߬.",
        "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": "ߞߐߕߐ߮ ߣߌ߲߬ ߛߎ߯ߦߊ߫ ߞߎߘߊ߫ ߟߊߦߟߍ߬",
        "filedelete-reason-dropdown": "* ߖߏ߰ߛߌ߬ߟߌ ߟߎ߬ ߝߊ߲߬ߓߊ ߞߎ߲߭\n** ߓߊߦߟߍߡߊ߲ ߤߊߞߍ ߕߌߢߍߟߌ\n** ߞߐߕߐ߯ ߓߊߟߌߣߍ߲ ߠߎ߬",
        "filedelete-edit-reasonlist": "ߖߏ߰ߛߌ߬ߟߌ ߞߎ߲߭ ߡߊߦߟߍ߬ߡߊ߲߫",
        "filedelete-maintenance-title": "ߞߐߕߐ߮ ߕߍ߫ ߛߐ߲߬ ߖߏ߰ߛߌ߬ ߟߊ߫",
+       "mimesearch": "MIME ߢߌߣߌ߲ߠߌ߲",
        "mimetype": "MIME ߛߎ߮ߦߊ:",
        "download": "ߟߊ߬ߖߌ߰ߒ߬ߞߎ߲߬ߠߌ߲",
        "unwatchedpages": "ߞߐߜߍ߫ ߜߋ߬ߟߎ߲߬ߓߊߟߌ ߟߎ߬",
        "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": "ߕߊ߯",
+       "doubleredirects": "ߟߊ߬ߞߎ߬ߛߌ߲߬ߠߌ߲߬ ߓߊߟߌߣߍ߲",
        "double-redirect-fixer": "ߟߊ߬ߞߎ߲߬ߛߌ߲߬ߠߌ߲ ߘߐߓߍ߲߬ߟߊ߲",
+       "brokenredirects": "ߟߊ߬ߞߎ߲߬ߛߌ߲߬ߠߌ߲ ߘߐߜߍߦߊߣߍ߲",
        "brokenredirects-edit": "ߊ߬ ߡߊߦߟߍ߬ߡߊ߲߬",
        "brokenredirects-delete": "ߊ߬ ߖߏ߬ߛߌ߬",
        "withoutinterwiki": "ߞߊ߲ ߛߘߌ߬ߜߋ߲ ߦߋ߫ ߞߐߜߍ ߡߍ߲ ߠߎ߬ ߟߊ߫",
+       "withoutinterwiki-legend": "ߢߍߣߙߊ",
        "withoutinterwiki-submit": "ߊ߬ ߦߌ߬ߘߊ߬",
+       "fewestrevisions": "ߟߢߊ߬ߟߌ߬ ߘߡߊߘߡߊ߫ ߦߋ߫ ߞߐߜߍ ߡߍ߲ ߠߎ߬ ߘߐ߫",
        "nbytes": "$1 {{PLURAL:$1|ߝߌ߬ߘߊ|ߝߌ߬ߘߊ߲ ߠߎ߬}}",
        "ncategories": "$1 {{PLURAL:$1|ߦߌߟߡߊ|ߦߌߟߡߊ ߟߎ߬}}",
        "ninterwikis": "$1 {{PLURAL:$1|ߥߞߌߕߍ|ߥߞߌߕߍ ߟߎ߬}}",
        "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": "ߞߐߖߋߓߌ ߟߎ߬",
        "booksources": "ߞߊ߬ߝߊ ߛߎ߲",
        "booksources-search-legend": "ߞߊ߬ߝߊ ߛߎ߲ ߕߌߙߌ߲߫",
        "booksources-search": "ߢߌߣߌ߲ߠߌ߲",
+       "magiclink-tracking-rfc": "ߞߐߜߍ ߟߎ߬ ߦߋ߫ RFC ߛߎߓߊ߯ߦߊ߫ ߛߘߌߜߋ߲ ߠߊߓߊ߯ߙߊ߫ ߟߊ߫",
+       "magiclink-tracking-rfc-desc": "ߞߐߜߍ ߣߌ߲߬ ߦߋ߫ RFC ߛߎߓߊ߯ߦߊ߫ ߛߘߌߜߋ߲ ߠߊߓߊ߯ߙߊ߫ ߟߊ߫. ߣߌ߲߬ ߘߐߜߍ߫ [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] on how to migrate.",
+       "magiclink-tracking-pmid": "ߞߐߜߍ ߟߎ߬ ߦߋ߫ PMID ߛߎߓߊ߯ߦߊ߫ ߛߘߌߜߋ߲ ߠߊߓߊ߯ߙߊ߫ ߟߊ߫.",
+       "magiclink-tracking-pmid-desc": "ߞߐߜߍ ߣߌ߲߬ ߦߋ߫ PMID ߛߎߓߊ߯ߦߊ߫ ߛߘߌߜߋ߲ ߠߊߓߊ߯ߙߊ߫ ߟߊ߫. ߣߌ߲߬ ߘߐߜߍ߫ [https://www.mediawiki.org/wiki/Special:MyLanguage /Help:Magic_links mediawiki.org] ߛߴߌ ߘߴߊ߬ ߟߐ߲߫ ߊ߬ ߦߋ߫ ߟߊߝߎ߲ߘߌ߫ ߟߊ߫ ߘߌ߬.",
+       "magiclink-tracking-isbn": "ߞߐߜߍ ߟߎ߬ ߦߋ߫ ISBN ߛߎߓߊ߯ߦߊ߫ ߛߘߌߜߋ߲ ߠߊߓߊ߯ߙߊ߫ ߟߊ߫",
+       "magiclink-tracking-isbn-desc": "ߞߐߜߍ ߣߌ߲߬ ߦߋ߫ ISBN ߛߎߓߊ߯ߦߊ߫ ߛߘߌߜߋ߲ ߠߊߓߊ߯ߙߊ߫ ߟߊ߫. ߣߌ߲߬ ߘߐߜߍ߫ [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] ߛߴߌ ߘߴߊ߬ ߟߐ߲߫ ߊ߬ ߦߋ߫ ߟߊߝߎ߲ߘߌ߫ ߟߊ߫ ߘߌ߬.",
        "specialloguserlabel": "ߞߍߓߊ߮ :",
        "speciallogtitlelabel": "ߞߏ߲߭ (ߞߎ߲߬ߕߐ߮ ߥߟߊ߫  {{ns:user}}: ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߟߊ߫ ߟߊ߬ߓߊ߰ߙߊ߬ ߕߐ߮):",
        "log": "ߘߏ߲߬",
        "logeventslist-submit": "ߊ߬ ߦߌ߬ߘߊ߬",
+       "logeventslist-more-filters": "ߘߊ߲ߖߐ ߡߞߊ߬ߝߏ߬ߟߌ߬ ߜߘߍ߫ ߦߌ߬ߘߊ߬",
+       "logeventslist-patrol-log": "ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬",
        "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": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߕߴߦߋ߲߬",
+       "activeusers-submit": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߞߎ߲߬ߞߍ߲ߘߍ ߟߎ߬ ߦߌ߬ߘߊ߬",
+       "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": "ߟߊߞߐߛߊ߬ߦߌ߬",
        "rollback-confirmation-no": "ߊ߬ ߘߐߛߊ߬",
        "rollbacklink": "ߟߊߞߐߛߊ߬ߦߌ߬",
        "rollbacklinkcount": "ߛߋ߬ߦߌ߲߬ ߌ ߣߐ߭ߡߊ߬ $1 {{PLURAL:$1|ߡߊߦߟߍ߬ߡߊ߲߫|ߟߎ߬ ߡߊߦߟߍ߬ߡߊ߲߫}}",
+       "rollbackfailed": "ߟߊ߬ߞߐ߬ߛߊ߬ߦߌ߲߬ߠߌ߲ ߓߘߊ߫ ߗߌߙߏ߲߫",
+       "rollback-missingparam": "ߢߌ߬ߣߊ߬ ߓߘߊ߫ ߞߍ߫ ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߡߊߢߌ߬ߣߌ߲߬ߞߊ߬ߣߍ߲ ߞߐ߫ ߡߞߊ߬ߛߌ߬ߟߌ ߘߐ߫",
+       "rollback-missingrevision": "ߓߟߏߡߟߊ߫ ߟߊߢߊ߬ߣߍ߲ ߟߊߦߟߍ߬ߞߏ ߕߍ߫ ߣߊ߬ ߓߍ߲߬ ߠߊ߫.",
+       "cantrollback": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߕߍߣߊ߬ ߛߐ߲߬ ߠߊ߫ ߟߊߞߐߛߊ߬ߦߌ߬ ߟߊ߫:\nߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲߫ ߠߊߓߊ߲ ߠߋ߬ ߦߋ߫ ߞߐߜߍ ߣߌ߲߬ ߕߌ߭ ߘߌ߫.",
+       "editcomment": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߟߊ߬ߘߛߏ߬ߟߌ ߕߘߍ߬ ߦߋ߫: <em>$1</em>",
+       "changecontentmodel": "ߞߐߜߍ ߣߌ߲߬ ߞߣߐߘߐ ߛߎ߮ߦߊ ߡߊߝߊ߬ߟߋ߲߬",
+       "changecontentmodel-legend": "ߞߣߐߘߐ ߛߎ߯ߦߊ ߡߊߝߊ߬ߟߋ߲߬",
        "changecontentmodel-title-label": "ߞߐߜߍ ߞߎ߲߬ߕߐ߮",
+       "changecontentmodel-current-label": "ߕߋ߲߭ߕߋ߲߭ ߞߣߐߘߐ ߛߎ߯ߦߊ:",
        "changecontentmodel-model-label": "ߞߣߐߘߐ߫ ߛߎ߯ߦߊ߫ ߞߎߘߊ",
        "changecontentmodel-reason-label": "ߊ߬ ߛߊߓߎ:",
        "changecontentmodel-submit": "ߊ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
        "changecontentmodel-success-title": "ߞߣߐߘߐ ߛߎ߯ߦߊ ߓߘߊ߫ ߡߊߦߟߍ߬ߡߊ߲߫",
+       "changecontentmodel-success-text": "[[:$1]] ߞߣߐߘߐ ߛߎ߯ߦߊ ߓߘߊ߫ ߡߊߝߊ߬ߟߋ߲߬.",
+       "changecontentmodel-cannot-convert": "ߞߣߐߘߐ ߡߍ߲ ߠߎ߬ ߦߋ߫ [[:$1]] ߘߐ߫߸ ߏ߬ ߕߍ߫ ߣߊ߬ ߛߐ߲߬ ߠߊ߫ ߡߊߝߊ߬ߟߋ߲߬ ߠߊ߫ $2 ߛߎ߯ߦߊ ߟߊ߫.",
+       "changecontentmodel-emptymodels-title": "ߞߣߐߘߐ߫ ߛߎ߯ߦߊ߫ ߕߍ߫ ߦߊ߲߬",
+       "changecontentmodel-emptymodels-text": "ߞߣߐߘߐ ߡߍ߲ ߠߎ߬ ߦߋ߫ [[:$1]] ߘߐ߫߸ ߏ߬ ߕߍ߫ ߣߊ߬ ߛߐ߲߬ ߠߊ߫ ߡߊߝߊ߬ߟߋ߲߬ ߠߊ߫ ߛߎ߯ߦߊ ߛߎ߯-ߎ߯-ߛߎ߫ ߟߊ߫.",
+       "log-name-contentmodel": "ߞߣߐߘߐ ߛߎ߯ߦߊ ߡߊߝߊ߬ߟߋ߲߬ߠߌ߲ ߘߊ߲ߖߐ",
+       "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": "ߕߋ߲߭ߕߋ߲߭ ߝߊ߲߬ߞߣߐ ߟߎ߬ ߦߋ߫",
+       "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": "ߞߍߒߖߘߍߦߋ߫ ߓߊߟߌߟߌ ߟߎ߬ ߛߙߍߘߍ",
+       "autoblocklist-total-autoblocks": "ߞߍߒߖߘߍߦߋ߫ ߓߊߟߌߟߌ ߦߙߌߞߊ ߞߙߎߞߍ߬ߙߍ: $1",
+       "autoblocklist-empty": "ߞߍߒߖߘߍߦߋ߫ ߝߊ߲ߞߣߐ ߛߙߍߘߍ ߘߐߞߏߟߏ߲ ߠߋ߬.",
+       "autoblocklist-otherblocks": "{{PLURAL:$1|ߞߍ߲ߒߖߘߍߦߋ߫ ߘߊ߲ߖߐ|ߞߍߒߖߘߍߦߋ߫ ߘߊ߲ߖߐ ߟߎ߬}} ߘߏ ߟߎ߬",
+       "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-rangeblocks": "ߓߊߞߘߏ ߝߊ߲߬ߞߣߐ ߟߎ߬ ߢߡߊߘߏ߲߰",
+       "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": "ߛߋ߲߬ߓߐ߬ߟߌ ߓߘߊ߫ ߛߎߘߊ߲߫",
+       "movetalk": "ߞߎߡߊߢߐ߲߯ߦߊ߫ ߞߐߜߍ߫ ߓߟߏߘߏ߲߬ߣߍ߲ ߠߎ߬ ߛߋ߲߬ߓߐ߫",
+       "move-subpages": "ߞߐߜߍߙߋ߲ ߠߎ߬ ߛߋ߲߬ߓߐ߫ (ߦߊ߲߬ $1)",
+       "move-talk-subpages": "ߞߐߜߍߙߋ߲ ߠߎ߬ ߛߋ߲߬ߓߐ߫ ߞߎߡߊߢߐ߲߯ߦߊ߫ ߞߐߜߍ (ߘߐ߫ ߦߊ߲߬ $1)",
+       "movepage-page-moved": "ߞߐߜߍ $1 ߓߘߊ߫ ߓߊ߲߫ ߓߐ߫ ߟߴߊ߬ ߣߐ߭ ߘߐ߫ ߞߊ߬ ߥߊ߫ ߦߊ߲߬ $2",
        "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": "ߞߐߜߍ ߕߍ߫ ߛߋ߲߬ߓߐ߬ߕߊ߫ ߘߌ߫.",
+       "imagenocrossnamespace": "ߞߐߕߐ߮ ߕߴߛߋ߫ ߟߥߊ߫ ߟߊ߫ ߕߐ߯ߛߓߍ ߞߣߍ ߕߍ߫ ߞߐߜߍ ߡߍ߲ ߠߎ߬ ߟߊ߫ ߘߐ߫.",
+       "imageinvalidfilename": "ߞߐߕߐ߮ ߕߐ߮ ߞߏ߲߭ ߓߍ߲߬ߣߍ߲߬ ߕߍ߫.",
        "export": "ߞߐߜߍ ߟߎ߬ ߟߊߝߏ߬ߦߌ߬",
+       "exportall": "ߞߐߜߍ ߓߍ߯ ߟߊߝߏ߬ߦߌ߬",
+       "export-submit": "ߟߊ߬ߝߏ߬ߦߌ߬ߟߌ",
+       "export-addcattext": "ߞߐߜߍ ߟߊߘߏ߲߬ ߦߌߟߡߊ ߘߐ߫:",
+       "export-addcat": "ߟߊ߬ߘߏ߲߬ߠߌ߲",
+       "export-addnstext": "ߞߐߜߍ ߟߊߘߏ߲߬ ߕߐ߯ߛߓߍ ߞߣߍ ߘߐ߫",
+       "export-addns": "ߟߊ߬ߘߏ߲߬ߠߌ߲",
+       "export-download": "ߊ߬ ߟߊߞߎ߲߬ߘߎ߬ ߞߐߕߐ߮ ߘߌ߫",
+       "export-templates": "ߊ߬ ߟߊߘߏ߲߬ ߞߙߊ߬ߞߏ ߘߐ߫",
+       "export-manual": "ߞߐߜߍ ߟߎ߬ ߟߊߘߏ߲߬ ߓߟߏߦߊߟߌ߫ ߓߟߏߡߊ߬:",
+       "allmessages": "ߞߊ߲ߞߋ ߗߋߛߓߍ ߟߎ߬",
+       "allmessagesname": "ߕߐ߮",
+       "allmessagesdefault": "ߓߐߛߎ߲ ߗߋߛߓߍ ߛߓߍߟߌ",
+       "allmessagescurrent": "ߕߋ߲߭ߕߋ߲߭ ߗߋߛߓߍ ߛߓߍߟߌ",
+       "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",
+       "thumbnail-temp-create": "ߥߊ߯ߕߌߟߊߕߊߡߌ߲߫ ߞߝߊ߬ߟߋ߲ߛߋ߲ ߞߐߕߐ߮ ߟߎ߬ ߛߌ߲ߘߟߌ ߕߍ߫ ߣߊ߬ ߓߍ߲߬ ߠߊ߫",
+       "thumbnail-dest-create": "ߞߝߊ߬ߟߋ߲ߛߋ߲ ߟߊߘߎ߲߬ߘߎ߬ߟߌ ߕߍ߫ ߣߊ߬ ߓߍ߲߬ ߣߴߊ߬ ߥߊ߫ ߦߙߐ ߘߐ߫.",
+       "thumbnail_invalid_params": "ߞߝߊ߬ߟߋ߲ߛߋ߲ ߟߊ߬ߓߍ߲߬ߢߐ߲߰ߡߊ ߓߍ߲߬ߣߍ߲߬ ߕߍ߫.",
+       "thumbnail_image-type": "ߖߌ߬ߦߊ߬ߓߍ ߛߎ߯ߦߊ ߞߐߡߊߓߌ߲ߓߌ߲߫ ߣߍ߲߫ ߕߍ߫",
+       "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": "ߥߞߌ ߣߌ߫ ߢߐ߲߯ߕߍ ߢߍߣߙߊ:",
+       "importstart": "ߞߐߜߍ ߟߎ߬ ߟߊߛߣߍ ߦߴߌ ߘߐ߫...",
+       "import-revision-count": "$1 {{PLURAL:$1|ߟߢߊ߬ߟߌ|ߟߢߊ߬ߟߌ ߟߎ߬}}",
+       "importnopages": "ߞߐߜߍ߫ ߟߊߛߛߣߍߕߊ߫ ߕߴߦߋ߲߬.",
+       "imported-log-entries": "{{PLURAL:$1|ߘߊ߲ߖߐ ߘߏ߲߬ߠߌ߲|ߘߊ߲ߖߐ ߟߎ߬ ߘߏ߲߬ߠߌ߲}} $1 ߓߘߊ߫ ߟߊߛߣߍ߫.",
+       "importfailed": "ߟߊ߬ߛߣߍ߬ߟߌ ߓߘߊ߫ ߗߌߙߏ߲߫: <nowiki>$1</nowiki>",
+       "importunknownsource": "ߟߊ߬ߛߣߍ߬ߟߌ ߛߎ߲ ߛߎ߯ߦߊ߫ ߡߊߟߐ߲ߓߊߟߌ",
+       "importcantopen": "ߞߐߕߐ߯ ߟߊߛߣߍߣߍ߲ ߕߍ߫ ߛߐ߲߬ ߟߊߞߊ߬ ߟߊ߫",
+       "importbadinterwiki": "ߥߞߌ߫ ߣߌ߫ ߢߐ߲߯ߕߍ ߛߘߌ߬ߜߋ߲߬ ߖߎ߮",
+       "importsuccess": "ߟߊ߬ߛߣߍ߬ߟߌ ߓߘߊ߫ ߓߊ߲߫߹",
+       "importnofile": "ߞߐߕߐ߯ ߟߊߛߣߍߣߍ߲߫ ߛߌ߫ ߕߎ߲߬ ߡߊ߫ ߟߊߦߟߍ߬.",
+       "importuploaderrorsize": "ߞߐߕߐ߯ ߟߊߛߣߍߣߍ߲ ߟߊߦߟߍ߬ߟߌ ߓߘߊ߫ ߗߌߙߏ߲߫.\nߞߐߕߐ߮ ߓߏ߲߬ߓߊ߫ ߞߊ߬ ߕߊ߬ߡߌ߲߬ ߟߊ߬ߦߟߍ߬ߟߌ ߢߊ߲ߞߊ߲߫ ߟߊߘߌ߬ߢߍ߬ߣߍ߲ ߞߊ߲߬.",
+       "importuploaderrorpartial": "ߞߐߕߐ߯ ߟߊߛߣߍߣߍ߲ ߟߊߦߟߍ߬ߟߌ ߓߘߊ߫ ߗߌߙߏ߲߫.\nߞߐߕߐ߮ ߝߊ߲߬ߞߋ߬ߟߋ߲߬ߡߊ߬ ߟߊ߬ߦߟߍ߬ߣߍ߲߫ ߠߋ߬.",
+       "importuploaderrortemp": "ߞߐߕߐ߮ ߟߊߛߣߍߣߍ߲ ߟߊߦߟߍ߬ߟߌ ߓߘߊ߫ ߗߌߙߏ߲߫.\nߢߌ߬ߣߊ߬ ߞߍ߫ ߣߍ߲߫ ߥߊ߯ߕߌߟߊߕߊߡߌ߲߫ ߞߐߕߐ߮ ߞߐ߫.",
+       "import-noarticle": "ߞߐߜߍ߫ ߟߊߛߛߣߍߕߊ߫ ߕߴߦߋ߲߬.",
+       "import-upload": "XML ߓߟߏߡߟߊ ߟߊߦߟߍ߬",
        "importlogpage": "ߟߊ߬ߛߣߍ߬ߟߌ ߞߣߍ",
+       "javascripttest": "JavaScript ߞߟߏߜߍ",
+       "javascripttest-pagetext-unknownaction": "ߞߍߟߌ߫  \"$1\" ߡߊߟߐ߲ߓߊߟߌ",
        "tooltip-pt-userpage": "{{GENDER:|ߌ ߟߊ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ߬}} ߞߐߜߍ",
        "tooltip-pt-mytalk": "{{GENDER:|ߌ ߟߊ߫}} ߞߎߡߊ߫ ߞߐߜߍ߫",
+       "tooltip-pt-anontalk": "ߘߊߘߐߖߊߥߏ ߞߊ߬ ߓߍ߲߬ IP ߛߊ߲߬ߓߊ߬ߕߐ߮ ߣߌ߲߬ ߠߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߊ߬",
        "tooltip-pt-preferences": "{{GENDER:|ߌ ߟߊ߫}} ߤߣߍߕߊ ߟߎ߬",
        "tooltip-pt-watchlist": "ߌ ߟߊ߫ ߞߐߜߍ߫ ߡߊߦߟߍ߬ߡߊ߲߬ߕߊ ߜߋ߬ߟߎ߲߬ߣߍ߲ ߠߎ߬ ߛߙߍߘߍ",
        "tooltip-pt-mycontris": "{{GENDER:|ߌ ߟߊ߫}} ߓߟߏߡߊߜߍ߲߫ ߛߙߍߘߍ ߟߎ߬",
+       "tooltip-pt-anoncontribs": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߍ߲ ߠߎ߬ ߞߍ߫ ߣߍ߲߫ ߦߋ߫ IP ߛߊ߲߬ߓߊ߬ߕߐ߮ ߣߌ߲߬ ߓߟߏ߫.",
        "tooltip-pt-login": "ߌ ߘߐߛߎߣߍ߲߫ ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߡߊ߬߸ ߞߏ߬ߣߌ߲߬ ߘߌߦߊߜߏߦߊ߫ ߕߍ߫",
+       "tooltip-pt-login-private": "ߌ ߞߊߞߊ߲߫ ߞߵߌ ߜߊ߲߬ߞߎ߲߫ ߞߊ߬ ߛߋ߫ ߥߞߌ ߣߌ߲߬ ߠߊߓߊ߯ߙߊ߫ ߟߊ߫.",
        "tooltip-pt-logout": "ߌ ߜߊ߲߬ߞߎ߲߬ߣߍ߲ ߓߐ߫",
        "tooltip-pt-createaccount": "ߊ߲ ߧߴߌ ߘߐߛߎ߫ ߟߊ߫ ߖߊ߬ߕߋ߬ߘߊ߬ߞߏ ߡߊ߬ ߊ߬ ߣߌ߫ ߘߏ߲߬ߕߐ߰ߟߊ߬ߘߏ߲߸ ߞߏ߬ߣߌ߲߬ ߢߊ߬ߒ߬ߞߐ߬ߓߊߟߌ߫ ߕߍ߫ ߢߊ߫ ߛߌ߫ ߞߊ߲߬",
        "tooltip-ca-talk": "ߞߣߐߘߐ ߞߐߜߍ ߞߏߢߊ ߘߐߢߌߡߌ߲ߠߌ߲",
        "tooltip-ca-viewsource": "ߞߐߜߍ ߣߌ߲߬ ߠߊߞߊ߲ߘߊߣߍ߲߫ ߠߋ߬.\nߌ ߘߌ߫ ߛߴߊ߬ ߛߎ߲ ߘߐߜߍ߫ ߟߊ߫",
        "tooltip-ca-history": "ߞߐߜߍ ߣߌ߲߬ ߛߊߞߍߟߌ߫ ߞߘߐ ߟߎ߬",
        "tooltip-ca-protect": "ߞߐߜߍ ߣߌ߲߬ ߠߊߞߊ߲ߘߊ߫",
+       "tooltip-ca-unprotect": "ߞߐߜߍ ߣߌ߲߬ ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߡߊߝߊ߬ߟߋ߲߬",
        "tooltip-ca-delete": "ߞߐߜߍ ߣߌ߲߬ ߖߏ߰ߛߌ߫",
+       "tooltip-ca-undelete": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߍ߲ ߠߎ߬ ߞߍ߫ ߣߍ߲߫ ߞߐߜߍ ߣߌ߲߬ ߞߊ߲߬ ߊ߬ ߖߏ߬ߛߌ߬ߟߌ ߢߍ߫߸ ߏ߬ ߟߎ߬ ߟߊߞߎߣߎ߲߫ ߟߊߞߎߣߎ߲߫.",
        "tooltip-ca-move": "ߘߐߜߍ ߣߌ߲߬ ߛߋ߲߬ߓߐ߫",
        "tooltip-ca-watch": "ߞߐߜߍ ߣߌ߲߬ ߝߙߊ߬ ߌ ߟߊ߫ ߞߙߐ߬ߛߌ߬ߕߊ ߟߎ߬ ߛߙߍߘߍ ߞߊ߲߬",
        "tooltip-ca-unwatch": "ߞߐߜߍ ߣߌ߲߬ ߛߋ߲߬ߓߐ߫ ߌ ߟߊ߫ ߟߊߞߙߐ߬ߛߌ߬ߕߊ߬ ߛߙߍߘߍ ߘߐ߫",
        "tooltip-n-help": "ߘߍ߬ߡߍ߲߬ ߦߙߐ",
        "tooltip-t-whatlinkshere": "ߞߐߜߍ ߟߎ߫ ߛߘߌ߬ߜߋ߲ ߛߙߍߘߍ ߡߍ߲ ߠߎ߫ ߓߌ߬ߟߊ߬ߣߍ߲߫ ߦߊ߲߬ ߡߊ߬",
        "tooltip-t-recentchangeslinked": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߠߊ߬ߓߊ߲ ߡߍ߲ ߠߎ߬ ߦߋ߫ ߞߐߜߍ ߣߌ߲߬ ߛߘߌ߬ߜߋ߲ ߠߎ߬ ߘߐ߫",
+       "tooltip-feed-rss": "ߞߐߜߍ ߣߌ߲߬ RSS ߓߊߟߏ",
        "tooltip-feed-atom": "ߞߐߜߍ ߣߌ߲߬ ߝߕߌ߫ ߓߊߟߏ",
        "tooltip-t-contributions": "{{GENDER:$1|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ}} ߟߊ߫ ߓߟߏߓߌߟߊߢߐ߲߮ߞߊ߲ ߛߙߍߘߍ",
        "tooltip-t-emailuser": "ߢߎߡߍߙߋ߲ߞߏ߲ߘߏ ߟߊߕߊ߯ ߟߊߓߊ߯ߙߟߊ ߣߌ߲߬ ߡߊ߬{{GENDER:$1|ߟߊߓߊ߯ߙߟߊ}}",
+       "tooltip-t-info": "ߞߌ߬ߓߊ߬ߙߏ߬ߦߊ߬ ߜߘߍ߫ ߟߎ߫ ߞߊ߬ ߓߍ߲߬ ߞߐߜߍ ߣߌ߲߬ ߡߊ߬.",
        "tooltip-t-upload": "ߞߐߕߐ߮ ߟߎ߬ ߟߊߦߟߍ߬",
        "tooltip-t-specialpages": "ߘߎ߲߬ߘߎ߬ߡߊ߬ ߞߐߜߍ ߞߋ߬ߟߋ߲߬ߞߋ߬ߟߋ߲߬ߠߊ ߟߎ߬ ߛߙߍߘߍ",
        "tooltip-t-print": "\nߞߐߜߍ ߣߌ߲߬ ߦߌߟߡߊ߫ ߜߌ߬ߙߌ߲߬ߘߌ߬ߕߊ",
        "tooltip-t-permalink": "ߞߐߜߍ ߣߌ߲߬ ߡߛߊ߬ߦߌ߲߬ߠߌ߲߬ ߛߘߌ߬ߜߋ߲߬ ߞߎߘߊߦߌ",
        "tooltip-ca-nstab-main": "ߞߣߐߘߐ ߞߣߐߘߐ߫ ߘߐߜߍ߫",
        "tooltip-ca-nstab-user": "ߞߐߜߍ߫ ߟߊߓߊ߯ߙߕߊ ߘߐߜߍ߫",
+       "tooltip-ca-nstab-media": "ߡߍ߲ߕߊߦߋߕߊ ߞߐߜߍ ߦߋ߫",
        "tooltip-ca-nstab-special": "ߣߌ߲߬ ߦߋ߫ ߞߐߜߍ߫ ߓߟߏߡߊߞߊ߬ߣߍ߲ ߠߋ߬ ߘߌ߫߸ ߊ߬ ߕߍ߫ ߛߋ߫ ߢߟߊߞߎߘߦߊ߫ ߟߊ߫",
        "tooltip-ca-nstab-project": "ߖߊ߬ߕߋ߬ߘߐ߬ߛߌ߰ ߞߐߜߍ ߘߐߜߍ߫",
        "tooltip-ca-nstab-image": "ߞߐߕߐ߮ ߞߐߜߍ ߟߎ߫ ߘߐߜߍ߫",
        "tooltip-ca-nstab-mediawiki": "ߞߊ߲ߞߋ ߗߋߛߓߍ ߘߐߜߍ߫",
        "tooltip-ca-nstab-template": "ߞߙߊߞߏ ߦߋ߫",
+       "tooltip-ca-nstab-help": "ߘߍ߬ߡߍ߲߬ߠߌ߲ ߞߐߜߍ ߘߐߜߍ߫",
        "tooltip-ca-nstab-category": "ߦߌߟߡߊ߫ ߞߐߜߍ ߟߎ߬ ߦߌ߬ߘߊ߬",
        "tooltip-minoredit": "ߣߌ߲߬ ߞߍ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߘߏ߫ ߘߌ߫",
        "tooltip-save": "ߌ ߟߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߣߍ߲ ߠߊߞߎ߲߬ߘߎ߬",
+       "tooltip-publish": "ߌ ߟߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߠߊߥߊ߲߬ߞߊ߬",
        "tooltip-preview": "ߌ ߟߊ߫ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߣߍ߲ ߘߐߜߍ߫ ߡߎߣߎ߲߬. ߏ߬ ߞߴߊ߬ ߟߊߞߎ߲߬ߘߎ ߢߍ߫ ߖߊ߰ߣߌ߲߫.",
        "tooltip-diff": "ߌ ߟߊ߫ ߛߓߍߟߌ߫ ߡߊߦߟߍ߬ߣߍ߲ ߦߌ߬ߘߊ߬",
        "tooltip-compareselectedversions": "ߘߊ߲߬ߝߘߊ߬ߓߐ ߡߍ߲ ߦߋ߫ ߡߊ߬ߛߊ߬ߦߌ߲߬ߠߌ߲ ߓߊߕߐ߬ߡߐ߲߬ߣߍ߲ ߝߌ߬ߟߊ ߟߎ߬ ߕߍ߫ ߞߐߜߍ ߣߌ߲߬ ߘߐ߫߸ ߏ߬ ߦߋ߫",
        "tooltip-watch": "ߞߐߜߍ ߣߌ߲߬ ߓߌ߬ߟߊ߬ ߌ ߟߊ߫ ߜߋ߬ߟߎ߬ߠߌ߲߬ ߛߙߍߘߍ ߘߐ߫",
+       "tooltip-watchlistedit-normal-submit": "ߞߎ߲߬ߕߐ߮ ߛߋ߲߬ߓߐ߫",
+       "tooltip-watchlistedit-raw-submit": "ߜߋ߬ߟߎ߲߬ߠߌ߲߬ ߛߙߍߘߍ ߟߏ߲ߘߐߦߊ߫",
+       "tooltip-upload": "ߟߏ߲ߘߐߦߊߟߌ ߘߊߡߌ߬ߣߊ߬",
        "tooltip-rollback": "\"ߟߊ߬ߞߐ߬ߛߊ߬ߦߌ߬ߟߌ\" ߓߟߏߡߊߜߍ߲ߠߊ ߟߊ߫ ߢߟߊߞߎߘߦߊ߫ ߟߊߓߊ߲ (ߠߎ߬) ߦߋ߫ ߟߊߞߐߛߊ߬ߦߌ߬ ߟߊ߫ ߞߐߜߍ ߣߌ߲߬ ߞߣߐ߫ ߛߐ߲߬ߞߌ߲߬ߞߏ߬ ߞߋߟߋ߲߫ ߔߋ߫ ߟߋ߬ ߟߊ߫",
        "tooltip-undo": "\"ߊ߬ ߘߐߛߊ߬\" ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߣߌ߲߬ ߞߐߛߊ߬ߦߌ߬ ߞߊ߬ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߝߊ߬ߘߌ ߟߊߞߊ߬ ߢߍߦߋߟߌ ߝߊ߬ߘߌ ߘߐ߫. ߊ߬ ߘߌ߫ ߖߡߊ߬ߙߌ߬ߦߊ ߘߌ߫ ߟߊ߬ߘߛߏ߬ߟߌ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲ ߡߊ߬.",
+       "tooltip-preferences-save": "ߦߟߌߡߊߛߙߋ ߟߊߞߎ߲߬ߘߎ߬",
        "tooltip-summary": "ߟߊ߬ߘߛߏ߬ߣߍ߲߬ ߛߎ߬ߘߎ߲߬ߣߍ߲ ߘߏ߫ ߟߊߘߏ߲߬",
+       "common.json": "/* Any JSON here will be loaded for all users on every page load. */",
+       "anonymous": "ߕߐ߯ߒߕߊ߲ {{PLURAL:$1|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ|ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߟߎ߬}} {{SITENAME}} ߘߐ߫",
+       "siteuser": "{{SITENAME}} ߟߊߓߊ߯ߙߟߊ $1",
+       "anonuser": "{{SITENAME}} ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ߫ ߕߐ߯ߒߕߊ߲ $1$1",
+       "lastmodifiedatby": "ߞߐߜߍ ߣߌ߲߬ ߡߊߦߟߍ߬ߡߊ߲߬ ߟߊߓߊ߲ ߞߍ߫ ߘߊ߫ $1߸ ߟߋ߬ ߟߊ߫ $2߸ $3 ߓߟߏ߫.",
+       "othercontribs": "ߓߌ߲ߓߌ߲ߣߍ߲߫ ߦߋ߫ $1 ߟߊ߫ ߓߊ߯ߙߊ ߟߋ߬ ߡߊ߬",
+       "others": "ߘߏ߫ ߜߘߍ ߟߎ߬",
+       "creditspage": "ߞߐߜߍ ߖߎ߬ߟߎ",
        "simpleantispam-label": "ߛߑߔߊߡ ߛߌ߬ߣߊ ߡߊ߬ߝߍ߬ߣߍ߲߬ߠߌ߲.\nߊ߬ ߞߍ߫ <strong>not</strong> ߣߌ߲߬ ߠߝߊ߫߹",
        "pageinfo-title": "ߞߟߊ߬ߟߐ߲ ߞߊ߲߬ \"$1\"",
        "pageinfo-header-basic": "ߞߎ߲߬ߠߊ߬ߝߎ߬ߟߋ߲߬ ߓߊߖߎ ߟߎ߬",
        "pageinfo-display-title": "ߞߎ߲߬ߕߐ߰ ߦߋߕߊ",
        "pageinfo-default-sort": "ߊ߬ ߘߊ߲ߢߊ ߓߐ߫ ߛߓߍߘߋ߲",
        "pageinfo-length": "ߞߐߜߍ ߥߊ߲߬ߥߊ߲ (bytes ߘߐ߫)",
+       "pageinfo-namespace": "ߕߐ߯ߛߓߍ ߞߣߍ",
        "pageinfo-article-id": "ߞߐߜߍ ID",
        "pageinfo-language": "ߞߐߜߍ ߣߌ߲߬ ߞߣߐߘߐ ߞߊ߲",
+       "pageinfo-language-change": "ߊ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
        "pageinfo-content-model": "ߞߐߜߍ ߞߣߐߘߐ߫ ߞߙߊߞߏ",
+       "pageinfo-content-model-change": "ߊ߬ ߡߊߦߟߍ߬ߡߊ߲߫",
        "pageinfo-robot-policy": "ߡߐ߰ߡߐ߮ ߕߐ߰ߡߊ߬ߛߙߋ߬ߟߌ߬ ߣߐ ߟߋ߬",
        "pageinfo-robot-index": "ߟߊߘߌ߬ߢߍ߬ߣߍ߲",
        "pageinfo-robot-noindex": "ߟߊߘߌ߬ߢߍ߬ߓߊߟߌ",
        "pageinfo-hidden-categories": "ߢߡߊߘߏ߲߰ߠߌ߲ {{PLURAL:$1|ߦߌߟߡߊ|ߦߌߟߡߊ ߟߎ߬(1$)}}",
        "pageinfo-templates": "ߞߐ߬ߣߐߡߊ߬-ߕߍߟߐ {{PLURAL:$1|ߞߙߊ߬ߞߏ|ߞߙߊ߬ߞߏ ߟߎ߬}} $1",
        "pageinfo-toolboxlink": "ߞߐߜߍ ߣߌ߲߬ ߞߎ߲߬ߠߊ߬ߝߎߟߋ߲",
+       "pageinfo-redirectsto": "ߊ߬ ߟߊߞߎ߲߬ߛߌ߲߬ߣߍ߲߬ ߦߋ߫:",
+       "pageinfo-redirectsto-info": "ߞߌ߬ߓߊ߬ߙߏ߬ߦߊ",
        "pageinfo-contentpage": "ߊ߬ ߖߊ߬ߕߋ߬ ߞߣߐߘߐ߫ ߞߐߜߍ ߘߏ߫ ߘߌ߫",
        "pageinfo-contentpage-yes": "ߐ߲߬ߤߐ߲߫",
+       "pageinfo-protect-cascading": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߛߎߙߎ߲ߘߎߦߊߣߍ߲߫ ߞߊ߬ ߝߘߊ߫ ߦߊ߲߬ ߠߋ߬ ߟߊ߫.",
+       "pageinfo-protect-cascading-yes": "ߐ߲߬ߐ߲߬ߐ߲߫",
+       "pageinfo-protect-cascading-from": "ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߛߎߙߎ߲ߘߎߦߊߣߍ߲߫ ߞߊ߬ ߝߘߊ߫",
+       "pageinfo-category-info": "ߦߌߟߡߊ ߞߌ߬ߓߊ߬ߙߏ߬ߦߊ",
+       "pageinfo-category-total": "ߝߙߍߕߍ ߞߙߎߞߍ߬ߙߍ ߝߙߍߕߍ ߟߎ߬",
+       "pageinfo-category-pages": "ߞߐߜߍ ߟߎ߬ ߝߙߍߕߍ ߟߎ߬",
+       "pageinfo-category-subcats": "ߦߌߟߡߊ ߟߎ߬ ߝߙߍߕߍ",
+       "pageinfo-category-files": "ߞߐߕߐ߮ ߟߎ߬ ߝߙߍߕߍ",
+       "pageinfo-user-id": "ߟߊ߬ߓߊ߰ߙߊ߬ߟߊ ߟߊ߫ ID",
+       "pageinfo-file-hash": "ߢߋߙߋ߲ߞߎߟߌ ߘߙߊߖߊ",
+       "pageinfo-view-protect-log": "ߞߐߜߍ ߣߌ߲߬ ߟߊ߬ߞߊ߲߬ߘߊ߬ߟߌ ߘߊ߲ߖߐ ߘߐߜߍ߫",
+       "markaspatrolleddiff": "ߊ߬ ߣߐ߬ߣߐ߬ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲ ߘߌ߫",
+       "markaspatrolledtext": "ߣߌ߲߭ ߣߐ߬ߣߐ߬ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲ ߘߌ߫",
+       "markaspatrolledtext-file": "ߞߐߕߐ߮ ߣߌ߲߬ ߦߌߟߡߊ ߣߐ߬ߣߐ߬ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲ ߘߌ߫",
+       "markedaspatrolled": "ߊ߬ ߣߐ߬ߣߐ߬ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲ ߘߌ߫",
+       "markedaspatrolledtext": "[[:$1]] ߦߌߟߡߊ߫ ߓߊߕߐ߬ߡߐ߲߬ߣߍ߲ ߓߊߕߐ߬ߡߐ߲߬ߣߍ߲ ߓߘߊ߫ ߣߐ߬ߣߐ߬ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲ ߘߌ߫",
+       "rcpatroldisabled": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߞߐ߯ߟߕߊ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߠߌ߲ ߕߴߊ߬ ߟߊ߫",
+       "rcpatroldisabledtext": "ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߞߐ߯ߟߕߊ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߠߌ߲ ߟߊ߬ߓߊ߰ߙߊ߬ߟߌ ߓߐߣߴߊ߬ ߟߊ߫ ߕߊ߲߬.",
+       "markedaspatrollederror": "ߊ߬ ߕߍ߫ ߣߊ߬ ߛߐ߲߬ ߠߊ߫ ߣߐ߬ߣߐ߬ ߟߊ߫ ߡߊߓߍ߲߬ߣߍ߲ ߘߌ߫",
+       "markedaspatrollederrortext": "ߌ ߞߊߞߊ߲߫ ߞߊ߬ ߟߢߊ߬ߟߌ ߘߏ߫ ߡߊߕߍ߰ ߞߵߊ߬ ߣߐ߬ߣߐ߬ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲ ߘߌ߫.",
+       "markedaspatrollederror-noautopatrol": "ߌ ߟߊߘߌ߬ߢߍ߬ߣߍ߲߬ ߕߍ߫ ߞߵߌ ߖߘߍ߬ߞߊ߬ߣߌ߲߬ ߡߊߦߟߍߡߊ߲ߠߌ߲ ߠߎ߬ ߣߐ߬ߣߐ߫ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲ ߘߌ߫.",
+       "markedaspatrollednotify": "ߣߌ߲߬ ߡߊߦߟߍ߬ߡߊ߲ ߣߌ߲߬ $1 ߘߌ߫߸ ߏ߬ ߓߘߊ߫ ߣߐ߬ߣߐ߫ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲ ߘߌ߫.",
+       "markedaspatrollederrornotify": "ߣߐ߬ߣߐ߬ߟߌ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲ ߘߌ߫ ߓߘߊ߫ ߗߌߙߏ߲߫.",
        "patrol-log-page": "ߜߊ߲߬ߞߎ߲߬ߠߌ߲ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬",
+       "patrol-log-header": "ߣߌ߲߬ ߦߋ߫ ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲ ߟߢߊ߬ߟߌ ߘߊ߲ߖߐ ߟߋ߬ ߘߌ߫.",
+       "confirm-markpatrolled-button": "ߏ߬ߞߍ߫",
+       "confirm-markpatrolled-top": "ߞߊ߬ $3 ߟߊ߫ ߟߢߊ߬ߟߌ ߣߐ߬ߣߐ߬ $2 ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߣߍ߲ ߘߌ߫؟",
+       "deletedrevision": "ߟߢߊ߬ߟߌ߬ $1 ߞߘߐ ߟߎ߬ ߖߏ߬ߛߌ߫",
+       "filedeleteerror-short": "ߞߐߕߐ߮ ߖߏ߬ߛߌ߬ߟߌ ߝߎ߬ߕߎ߲߬ߕߌ:$1",
+       "filedeleteerror-long": "ߝߎ߬ߕߎ߲߬ߕߌ ߓߘߊ߫ ߓߌ߬ߟߵߊ߬ ߘߐ߫ ߞߐߕߐ߮ ߖߏ߬ߛߌ߬ߟߌ ߕߎ߬ߡߊ ߟߊ߫:\n\n$1",
+       "filedelete-missing": "ߞߐߕߐ߮  \"$1\" ߕߍ߫ ߣߊ߬ ߛߐ߲߬ ߠߊ߫ ߖߏ߰ߛߌ߬ ߟߊ߫ ߞߴߊ߬ ߡߊߛߐ߬ߘߐ߲߬ ߊ߬ ߕߍ߫ ߦߋ߲߬ ߏ߬ ߞߐ߫.",
+       "filedelete-old-unregistered": "ߞߐߕߐ߮ ߟߢߊ߬ߟߌ߬ ߴߴ$1ߴߴ ߡߊߕߍ߰ߣߍ߲ ߕߍ߫ ߓߟߏߡߟߊ ߝߊ߲ ߘߐ߫.",
+       "filedelete-current-unregistered": "ߞߐߕߐ߯ ߴߴ$1ߴߴ ߡߊߕߍ߰ߣߍ߲ ߕߍ߫ ߓߟߏߡߟߊߝߊ߲ ߘߐ߫.",
        "previousdiff": "→ ߡߊ߬ߦߟߍ߬ߡߊ߲߬ߠߌ߲߬ ߞߘߐ",
        "nextdiff": "ߊ߬ ߡߊ߫ ߡߊߦߟߍ߬ߡߊ߲߬ ←",
+       "imagemaxsize": "ߖߌ߬ߦߊ߬ߓߍ ߢߊ߲ߞߊ߲ ߘߊ߲߭ ߞߐߕߐ߮ ߞߊ߲߬ߛߓߍ߬ߟߌ߬ ߞߐߜߍ ߘߐ߫:",
+       "thumbsize": "ߞߝߊ߬ߟߋ߲ߛߋ߲ ߢߊ߲ߞߊ߲:",
        "widthheightpage": "$1 × $2,$3 {{PLURAL:$3|page|pages}}",
+       "file-info": "ߞߐߕߐ߮ ߢߊ߲ߞߊ߲: $1߸ MIME ߛߎ߯ߦߊ: $2",
        "file-info-size": "$1 × $2 ߖߌ߬ߦߊ߬ߘߊ߲ߕߊ߸ ߞߐߕߐ߮ ߢߊ߲ߞߊ߲: $3߸ MIME ߛߎ߮ߦߊ:$4",
        "file-info-size-pages": "$1 × $2 ߖߌ߬ߦߊ߬ߘߊ߲ߕߊ߸ ߞߐߕߐ߮ ߢߊ߲ߞߊ߲: $3߸ MIME ߛߎ߮ߦߊ: $4߸ $5 {{PLURAL:$5|ߞߐߜߍ|ߞߐߜߍ ߟߎ߬}}",
        "file-nohires": "ߢߊߓߐߣߍ߲ ߛߊ߲ߘߐߕߊ߫ ߜߘߍ߫ ߕߍ߫ ߦߋ߲߬",
        "svg-long-desc": "SVG ߞߐߕߐ߮, ߕߐ߯ߦߊߟߌ $1 × $2 ߖߌ߬ߦߊ߬ߘߊ߲ߕߊ, ߞߐߕߐ߮ ߢߊ߲ߞߊ߲: $3",
+       "svg-long-error": "SGV ߞߐߕߐ߯ ߓߍ߲߬ߓߊߟߌ: $1",
        "show-big-image": "ߞߐߕߐ߮ ߓߊߛߎ߲",
        "show-big-image-preview": "ߊ߬ ߢߍߦߋߟߌ ߢߊ߲ߞߊ߲: $1.",
+       "show-big-image-preview-differ": "ߣߌ߲߬  $3 ߢߊ߲ߞߊ߲߸ ߣߌ߲߬ $2 ߢߍߦߋߟߌ߸ ߞߐߕߐ߮: $1",
        "show-big-image-other": "{{PLURAL:$2|ߢߊߓߐߟߌ|ߢߊߓߐߟߌ ߟߎ߬}} ߕߐ߬ߡߊ $1.",
        "show-big-image-size": "ߖߌ߬ߦߊ߬ߙߋ߲ $1 × $2",
+       "file-info-gif-looped": "ߞߐ߬ߘߙߍ߬ߦߊ߬ߣߍ߲",
+       "file-info-png-looped": "ߞߐ߬ߘߙߍ߬ߦߊ߬ߣߍ߲",
+       "file-info-png-repeat": "ߓߘߊ߫ ߟߊߓߊ߯ߙߊ߫ {{PLURAL:ߛߋ߲߬ߧߊ߬ $1|ߛߋ߲߬ߧߊ߬ $1}}",
+       "newimages-legend": "ߥߊ߬ߣߊߙߌ",
+       "newimages-label": "ߞߐߕߐ߮ ߕߐ߮ (ߥߟߴߊ߬ ߝߊ߲߭ ߘߏ߫):",
+       "newimages-user": "IP ߛߊ߲߬ߓߊ߬ߕߐ߮ ߥߟߊ߫ ߟߊ߬ߓߊ߰ߙߊ߬ߕߐ߮:",
+       "newimages-newbies": "ߖߊ߬ߕߋ߬ߘߊ߬ ߞߎߘߊ ߟߎ߫ ߘߐߙߐ߲߫ ߠߊ߫ ߓߟߏߓߌߟߊߢߐ߲߯ߞߊ߲ ߦߌ߬ߘߊ߫ ߕߋ߲߬",
+       "newimages-showbots": "ߓߏߕ ߟߊ߫ ߟߊ߬ߦߟߍ߬ߟߌ ߟߎ߬ ߦߌ߬ߘߊ߬",
+       "newimages-hidepatrolled": "ߓߍ߬ߙߍ߲߬ߓߍ߬ߙߍ߲߬ߠߌ߲ ߟߊ߬ߦߟߍ߬ߟߌ ߟߎ߬ ߢߡߊߘߏ߲߰",
+       "newimages-mediatype": "ߡߍ߲ߕߊߦߋߕߊ ߛߎ߯ߦߊ:",
+       "noimages": "ߝߏߦߌ߬ ߦߋߕߊ߫ ߕߍ߫",
+       "gallery-slideshow-toggle": "ߞߝߊ߬ߟߋ߲ߛߋ߲ ߠߊߦߌ߬ߙߌ߲߬ߘߌ߫",
+       "ilsubmit": "ߢߌߣߌ߲ߠߌ߲",
+       "bydate": "ߕߎ߬ߡߊ߬ߘߊ ߡߊ߬",
+       "sp-newimages-showfrom": "ߞߐߕߐ߯ ߞߎߘߊ ߟߎ߬ ߦߌ߬ߘߊ ߟߊߝߟߐ߫ ߣߌ߲߬ $2߸$1 ߡߊ߬",
+       "seconds": "{{PLURAL:$1|ߝߌ߬ߟߊ߲߬ $1|ߝߌ߬ߟߊ߲ $1 ߟߎ߬}}",
+       "minutes": "{{PLURAL:$1|ߡߌ߬ߛߍ߲߬ $1|ߡߌ߬ߛߍ߲߬ $1 ߟߎ߫}}",
+       "hours": "{{PLURAL:$1|ߕߎ߬ߡߊ߬ߙߋ߲߬ $1|ߕߎ߬ߡߊ߬ߙߋ߲߬ $1 ߟߎ߫}}",
+       "days": "{{PLURAL:$1|ߕߟߋ߬ $1|ߕߟߋ߬ $1 ߟߎ߫}}",
+       "weeks": "{{PLURAL:$1|ߞߎ߲߬ߢߐ߮ $1|ߞߎ߲߬ߢߐ߮ $1 ߟߎ߫}}",
+       "months": "{{PLURAL:$1|ߞߊߙߏ߫ $1|ߞߊߙߏ߫ $1 ߟߎ߫}}",
+       "years": "{{PLURAL:$1|ߛߊ߲߬ $1|ߛߊ߲߭ $1}}",
+       "ago": "$1 ߖߊ߬ߕߋ߬",
+       "just-now": "ߌߞߘߐ߫ ߣߌ߲߬",
+       "hours-ago": "{{PLURAL:$1|ߕߎ߬ߡߊ߬ߙߋ߲|ߕߎ߬ߡߊ߬ߙߋ߲ ߠߎ߬}} $1 ߞߘߐ߫",
+       "minutes-ago": "{{PLURAL:ߡߌ߬ߛߍ߲߬|$1|ߡߌ߬ߛߍ߲ ߠߎ߬}} $1 ߞߘߐ߫",
+       "seconds-ago": "{{PLURAL:ߝߌ߬ߟߊ߲߬|$1|ߝߌ߬ߟߊ߲}} $1 ߞߘߐ߫",
+       "monday-at": "ߞߐ߬ߓߊ߬ߟߏ߲ $1 ߟߊ߫",
+       "tuesday-at": "ߞߐ߬ߟߏ߲ $1 ߟߊ߫",
+       "wednesday-at": "ߞߎ߬ߣߎ߲߬ߟߏ߲ $1 ߟߊ߫",
+       "thursday-at": "ߓߌߟߏ߲ $1 ߟߊ߫",
+       "friday-at": "ߛߌ߬ߣߌ߲߬ߟߏ߲ $1 ߟߊ߫",
+       "saturday-at": "ߞߍ߲ߘߍߟߏ߲ $1 ߟߊ߫",
+       "sunday-at": "ߞߊ߯ߙߌߟߏ߲ $1 ߟߊ߫",
+       "yesterday-at": "ߞߎߣߎ߲߬ $1 ߟߊ߫",
        "metadata": "ߟߐ߲ߕߊߞߐ ߟߎ߬",
        "metadata-help": "ߞߌ߬ߓߊ߬ߙߏ߬ߦߊ߬ߟߌ߬ ߜߘߍ߫ ߟߎ߫ ߦߋ߫ ߞߐߕߐ߮ ߣߌ߲߬ ߘߐ߫߸ ߊ߬ ߟߊߘߏ߲߬ߣߍ߲߬ ߦߋ߫ ߞߍ߫ ߟߊ߫ ߞߍߟߊ߲߫ ߡߍ߲ߛߍ߲ߡߊ ߟߋ߫ ߟߊ߫ ߥߟߊ߫ ߖߌ߬ߦߊ߬ߕߍ߬ߟߊ߲߸ ߞߵߊ߬ ߟߊߓߊ߯ߙߊ߫ ߥߟߊ߫ ߞߵߊ߬ ߡߍ߲ߛߍ߲ߡߊ.\nߣߴߊ߬ ߡߊߦߟߍ߬ߡߊ߲߬ ߣߍ߲߬ ߞߍ߫ ߘߊ߫ ߞߊ߬ ߓߴߊ߬ ߛߎ߲ߞߎ߲ ߡߊ߬߸ ߞߌ߬ߓߊ߬ߙߏ߬ߦߊ ߘߏ߫ ߟߎ߫ ߕߍ߫ ߣߊ߬ ߟߊߞߊ߲߬ߘߏ߬ ߟߊ߫ ߞߐߕߐ߯ ߡߊߦߟߍ߬ߡߊ߲߬ߣߍ߲ ߘߐ߫.",
        "metadata-fields": "ߟߐ߲ߕߊߞߐ߫ ߖߌ߬ߦߊ߬ߓߍ ߞߣߍ ߡߍ߲ ߦߋ߫ ߗߋߛߓߍ ߣߌ߲߬ ߘߐ߫߸ ߏ߬ ߘߌ߫ ߣߊ߬ ߥߟߏ߫ ߖߌ߬ߦߊ߬ߓߍ ߞߐߜߍ ߘߐ߫ ߣߌ߫ ߟߐ߲ߕߊߞߐ߫ ߥߟߊ߬ߟߋ߲ ߠߊߘߐ߯ߦߊ߫ ߘߊ߫. ߊ߬ ߕߐ߭ ߟߎ߬ ߢߡߊߘߏ߲߰ߣߍ߲ ߘߌ߫ ߕߏ߫ ߝߍ߭ ߞߏߛߐ߲߬.\n•ߊ߬ ߞߍ߫ \n•ߛߎ߯ߦߊ \n•ߕߎ߬ߡߊ߬ߘߊ ߣߌ߫ ߕߎ߬ߡߊ߬ߙߋ߲߫ ߓߐߛߎ߲ߡߊ \n•ߟߊ߬ߝߏߦߌ ߕߎ߬ߡߊ߬ߘߊ߬ ߖߐ߲ߖߐ߲ \n•ߞ ߝߙߍߕߍ \n•ߡ.ߛ.ߛ ߞߊߟߌߦߊ ߡߐ߬ߟߐ߲߬ߦߊ߬ߟߌ \n•ߕߊߞߎ߲ߡߊ ߥߊ߲߬ߥߊ߲ \n•ߞߎ߬ߛߊ߲ \n•ߓߊߦߟߍߡߊ߲ ߤߊߞߍ  ߘߞߖ \n•ߖߌ߬ߦߊ߬ߓߍ ߞߊ߲߬ߛߓߍ\n•ߘߟߊߕߍ߮ ߘߞߖ (ߘߊ߲߬ߠߊ߬ߕߍ߰ ߞߊ߲ߞߋ߫ ߖߊ߯ߓߡߊ)\n•ߘߎ߰ߕߍߟߍ߲ ߘߞߖ (ߘߊ߲߬ߠߊ߬ߕߍ߰ ߞߊ߲ߞߋ߫ ߖߊ߯ߓߡߊ)\n•ߞߐߓߋ ߘߞߖ (ߘߊ߲߬ߠߊ߬ߕߍ߰ ߞߊ߲ߞߋ߫ ߖߊ߯ߓߡߊ)",
        "namespacesall": "ߊ߬ ߓߍ߯",
        "monthsall": "ߡߎ߰ߡߍ",
+       "scarytranscludetoolong": "[URL ߖߊ߰ߡߊ߲߬ ߞߏߖߎ߰]",
+       "deletedwhileediting": "<strong>ߖߊ߲߬ߓߌ߬ߟߊ߬ߟߌ</strong> ߞߐߜߍ ߣߌ߲߬ ߕߎ߲߬ ߓߘߊ߫ ߖߏ߰ߛߌ߫ ߊ߬ ߡߊߦߟߍ߬ߡߊ߲ ߘߊߡߌ߬ߣߊ ߞߐ߫ ߌ ߓߟߏ߫.",
+       "recreate": "ߊ߬ ߟߊߘߊ߲߫ ߕߎ߲߯",
+       "confirm_purge_button": "ߏ߬ߞߍ߫",
        "parentheses-start": "⸜",
        "parentheses-end": "⸝",
        "imgmultipagenext": "ߞߐߜߍ ߣߊ߬ߕߐ ←",
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..f6491eb 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.",
        "move-subpages": "Mover subpáginas (até $1)",
        "move-talk-subpages": "Mover subpáginas da página de discussão (até $1)",
        "movepage-page-exists": "A página $1 já existe e não pode ser substituída.",
+       "movepage-source-doesnt-exist": "A página $1 não existe e não pode ser movida.",
        "movepage-page-moved": "A página $1 foi movida para $2",
        "movepage-page-unmoved": "A página $1 não pôde ser movida para $2.",
        "movepage-max-pages": "O limite de $1 {{PLURAL:$1|página movida|páginas movidas}} foi atingido; não será possível mover mais páginas de forma automática.",
        "delete_and_move_reason": "Eliminada para mover \"[[$1]]\"",
        "selfmove": "O título fonte e o título destinatário são os mesmos; não é possível mover uma página para ela mesma.",
        "immobile-source-namespace": "Não é possível mover páginas no espaço nominal \"$1\"",
+       "immobile-source-namespace-iw": "Páginas em outras wikis não podem ser movidas dessa wiki.",
        "immobile-target-namespace": "Não é possível mover páginas para o espaço nominal \"$1\"",
        "immobile-target-namespace-iw": "Um link interwiki não é um destino válido para movimentação de página.",
        "immobile-source-page": "Esta página não pode ser movida.",
        "immobile-target-page": "Não é possível mover para esse título de destino.",
+       "movepage-invalid-target-title": "O nome solicitado é inválido.",
        "bad-target-model": "O destino especificado usa um modelo de conteúdo diferente. Não é possível converter $1 para $2.",
        "imagenocrossnamespace": "Não é possível mover imagem para espaço nominal que não de imagens",
        "nonfile-cannot-move-to-file": "Não é possível mover não arquivos para espaço nominal de arquivos",
        "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..86933e3 100644 (file)
        "templatesused": "Displayed below the page when editing it. It indicates a list of templates which are used on that page.\n\nParameters:\n* $1 - number of templates\nSee also:\n* {{msg-mw|Templatesusedpreview}}\n* {{msg-mw|Templatesusedsection}}",
        "templatesusedpreview": "Used in editor when displaying a preview.\n\nParameters:\n* $1 - number of templates\nSee also:\n* {{msg-mw|Templatesused}}\n* {{msg-mw|Templatesusedsection}}",
        "templatesusedsection": "Used in editor when displaying a preview.\n\nParameters:\n* $1 - number of templates\nSee also:\n* {{msg-mw|Templatesused}}\n* {{msg-mw|Templatesusedpreview}}",
-       "template-protected": "{{Identical|Protected}}",
-       "template-semiprotected": "Used on [[Special:ProtectedPages]]. Appears in brackets after listed page titles which are semi-protected.",
+       "template-protected": "{{Identical|Protected}}\n\nSee also:\n* {{msg-mw|Template-semiprotected}}",
+       "template-semiprotected": "Appears in brackets after listed page titles which are semi-protected.\n\nSee also:\n* {{msg-mw|Template-protected}}",
        "hiddencategories": "This message is shown below the edit form, like you have a section ''\"Templates used on this page\"''.\n\nParameters:\n* $1 - number of categories",
        "edittools": "{{optional}}\nThis text will be shown below edit and upload forms. It can be used to offer special characters not present on most keyboards for copying/pasting, and also often makes them clickable for insertion via a JavaScript. Since these are seen as specific to a wiki, however, this message should not contain anything but an html comment explaining how it should be used once the wiki has been installed.",
        "edittools-upload": "{{optional}}\nThis text will be shown below upload forms. It will default to the contents of edittools.",
        "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}}",
        "rcfilters-filter-showlinkedto-label": "Label that indicates that the page is showing changes that link TO the target page. Used on [[Special:Recentchangeslinked]] when structured filters are enabled.",
        "rcfilters-filter-showlinkedto-option-label": "Menu option to show changes TO the target page. Used on [[Special:Recentchangeslinked]] when structured filters are enabled.",
        "rcfilters-target-page-placeholder": "Placeholder text for the title lookup [[Special:Recentchangeslinked]] when structured filters are enabled.",
+       "rcfilters-allcontents-label": "Label of the filter for all content namespaces on [[Special:Recentchanges]] or [[Special:Watchlist]] when structured filters are enabled.",
+       "rcfilters-alldiscussions-label": "Label of the filter for all discussion namespaces on [[Special:Recentchanges]] or [[Special:Watchlist]] when structured filters are enabled.",
        "rcnotefrom": "This message is displayed at [[Special:RecentChanges]] when viewing recentchanges from some specific time.\n\nThe corresponding message is {{msg-mw|Rclistfrom}}.\n\nParameters:\n* $1 - the maximum number of changes that are displayed\n* $2 - (Optional) a date and time\n* $3 - a date\n* $4 - a time\n* $5 - Number of changes are displayed, for use with PLURAL",
        "rclistfromreset": "Used on [[Special:RecentChanges]] to reset a selection of a certain date range.",
        "rclistfrom": "Used on [[Special:RecentChanges]]. Parameters:\n* $1 - (Currently not use) date and time. The date and the time adds to the rclistfrom description.\n* $2 - time. The time adds to the rclistfrom link description (with split of date and time).\n* $3 - date. The date adds to the rclistfrom link description (with split of date and time).\n\nThe corresponding message is {{msg-mw|Rcnotefrom}}.",
        "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.",
        "move-subpages": "The text of an option on the special page [[Special:MovePage|MovePage]]. If this option is ticked, any subpages will be moved with the main page to a new title.\n\nParameters:\n* $1 - ...\nSee also:\n* {{msg-mw|Move-page-legend|legend for the form}}\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-talk-subpages|label for checkbox}}\n* {{msg-mw|Move-watch|label for checkbox}}",
        "move-talk-subpages": "The text of an option on the special page [[Special:MovePage|MovePage]]. If this option is ticked, any talk subpages will be moved with the talk page to a new title.\n\nParameters:\n* $1 - ...\nSee also:\n* {{msg-mw|Move-page-legend|legend for the form}}\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-watch|label for checkbox}}",
        "movepage-page-exists": "Used as error message when moving page.\n* $1 - page title",
+       "movepage-source-doesnt-exist": "Used as error message when trying to move a page that doesn't exist.\n* $1 - page title",
        "movepage-page-moved": "Used as success message when moving page.\n\nCan be followed by {{msg-mw|Movepage-max-pages}}.\n\nParameters:\n* $1 - old page title (with link)\n* $2 - new page title (with link)\nSee also:\n* {{msg-mw|Movepage-page-unmoved}}",
        "movepage-page-unmoved": "Used as error message when moving page. Parameters:\n* $1 - old page title (with link)\n* $2 - new page title (with link)\nSee also:\n* {{msg-mw|Movepage-page-moved}}",
        "movepage-max-pages": "PROBABLY (A GUESS): when moving a page, you can select an option of moving its subpages, but there is a maximum that can be moved automatically.\n\nParameters:\n* $1 - maximum moved pages, defined in the variable [[mw:Special:MyLanguage/Manual:$wgMaximumMovedPages|$wgMaximumMovedPages]]",
        "delete_and_move_reason": "Shown as reason in content language in the deletion log. Parameter:\n* $1 - The page name for which this page was deleted.",
        "selfmove": "Used as error message when moving page.\n\nSee also:\n* {{msg-mw|badtitletext}}\n* {{msg-mw|immobile-source-namespace}}\n* {{msg-mw|immobile-target-namespace-iw}}\n* {{msg-mw|immobile-target-namespace}}",
        "immobile-source-namespace": "Used as error message. Parameters:\n* $1 - source namespace name\nSee also:\n* {{msg-mw|Immobile-source-page}}\n* {{msg-mw|Immobile-target-namespace}}\n* {{msg-mw|Immobile-target-page}}",
+       "immobile-source-namespace-iw": "Used as error message if somehow something tries to move a page that's on a different wiki.\nSee also:\n* {{msg-mw|Immobile-source-namespace}}\n* {{msg-mw|Immobile-target-namespace-iw}}",
        "immobile-target-namespace": "Used as error message. Parameters:\n* $1 - destination namespace name\nSee also:\n* {{msg-mw|Immobile-source-namespace}}\n* {{msg-mw|Immobile-source-page}}\n* {{msg-mw|Immobile-target-page}}",
        "immobile-target-namespace-iw": "This message appears when attempting to move a page, if a person has typed an interwiki link as a namespace prefix in the input box labelled 'To new title'.  The special page 'Movepage' cannot be used to move a page to another wiki.\n\n'Destination' can be used instead of 'target' in this message.",
        "immobile-source-page": "See also:\n* {{msg-mw|Immobile-source-namespace}}\n* {{msg-mw|Immobile-source-page}}\n* {{msg-mw|Immobile-target-namespace}}\n* {{msg-mw|Immobile-target-page}}",
        "immobile-target-page": "See also:\n* {{msg-mw|Immobile-source-namespace}}\n* {{msg-mw|Immobile-source-page}}\n* {{msg-mw|Immobile-target-namespace}}\n* {{msg-mw|Immobile-target-page}}",
+       "movepage-invalid-target-title": "Error displayed when trying to move a page to an invalid title, e.g., empty or contains prohibited characters.",
        "bad-target-model": "This message is shown when attempting to move a page, but the move would change the page's content model.\nThis may be the case when [[mw:Manual:$wgContentHandlerUseDB|$wgContentHandlerUseDB]] is set to false, because then a page's content model is derived from the page's title.\n\nParameters:\n* $1 - The localized name of the original page's content model:\n**{{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}\n* $2 - The localized name of the content model used by the destination title:\n**{{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}",
        "imagenocrossnamespace": "Used as error message.\n\nSee also:\n* {{msg-mw|Imagenocrossnamespace}}\n* {{msg-mw|Nonfile-cannot-move-to-file}}",
        "nonfile-cannot-move-to-file": "Used as error message.\n\nSee also:\n* {{msg-mw|Imagenocrossnamespace}}\n* {{msg-mw|Nonfile-cannot-move-to-file}}",
        "version-db-mariadb-url": "{{ignored}}URL to the website of MariaDB",
        "version-db-percona-url": "{{ignored}}URL to the website of Percona",
        "version-db-postgres-url": "{{ignored}}URL to the website of PostgreSQL",
-       "version-db-oracle-url": "{{ignored}}URL to the website of Oracle",
        "version-db-sqlite-url": "{{ignored}}URL to the website of SQLite",
-       "version-db-mssql-url": "{{ignored}}URL to the website of Microsoft SQL Server",
        "version-entrypoints": "Header on [[Special:Version]] above a table that lists the URLs of various entry points in this MediaWiki installation. Entry points are the \"places\" where the wiki's content and information can be accessed in various ways, for instance the standard index.php which shows normal pages, histories etc.",
        "version-entrypoints-header-entrypoint": "Header for the first column in the entry points table on [[Special:Version]].\nSee also {{msg-mw|Version-entrypoints}}",
        "version-entrypoints-header-url": "Header for the second column in the entry points table on [[Special:Version]].\n{{Identical|URL}}",
        "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 edb642a..add3803 100644 (file)
        "history": "Istoricul paginii",
        "history_short": "Istoric",
        "history_small": "istoric",
-       "updatedmarker": "actualizat de la ultima mea vizită",
+       "updatedmarker": "actualizat de la ultima dumneavoastră vizită",
        "printableversion": "Versiune de tipărit",
        "permalink": "Legătură permanentă",
        "print": "Tipărire",
        "autoblockedtext": "Această adresă IP a fost blocată automat deoarece a fost folosită de către un alt utilizator, care a fost blocat de $1.\nMotivul blocării este:\n\n:<em>$2</em>\n\n* Începutul blocării: $8\n* Sfârșitul blocării: $6\n* Intervalul blocării: $7\n\nPuteți contacta pe $1 sau pe unul dintre ceilalți [[{{MediaWiki:Grouppage-sysop}}|administratori]] pentru a discuta blocarea.\n\nNu veți putea folosi opțiunea de \"{{int:emailuser}}\" decât dacă aveți înregistrată o adresă de e-mail validă la [[Special:Preferences|preferințe]] și nu sunteți blocat la folosirea ei.\n\nAveți adresa IP $3, iar identificatorul dumneavoastră de blocare este #$5.\nVă rugăm să includeți detaliile de mai sus în orice mesaje pe care le trimiteți.",
        "systemblockedtext": "Numele de utilizator sau adresa IP a fost blocat automat de MediaWiki.\nMotivul indicat este:\n\n:<em>$2</em>\n\n\n* Începutul blocării: $8\n* Expirarea blocării: $6\n* Utilizatorul vizat: $7\n\nAdresa IP curentă a dumneavoastră este $3.\nVă rugăm să includeți toate detaliile de mai sus în orice interogare pe care o veți faceți.",
        "blockednoreason": "nici un motiv oferit",
+       "blockedtext-composite": "<strong>Numele dumneavoastră de utilizator sau adresa IP au fost blocate.</strong>\nMotivul indicat este:\n\n:<em>$2</em>\n\n\n* Începutul blocării: $8\n* Expirarea celei mai lungi blocări: $6\n\n* $5\n\nAdresa dumneavoastră IP este $3.\nVă rugăm să includeți toate detaliile de mai sus în orice demers pe care îl veți face.",
+       "blockedtext-composite-no-ids": "Adresa dumneavoastră ip apare în mai multe liste negre",
+       "blockedtext-composite-reason": "Există mai multe blocări asupra contului sau adresei dumneavoastră IP",
        "whitelistedittext": "Trebuie să vă $1 pentru a putea modifica pagini.",
        "confirmedittext": "Trebuie să vă confirmați adresa de e-mail înainte de a edita pagini. Vă rugăm să vă setați și să vă validați adresa de e-mail cu ajutorul [[Special:Preferences|preferințelor utilizatorului]].",
        "nosuchsectiontitle": "Secțiunea nu poate fi găsită",
        "group-bureaucrat-member": "{{GENDER:$1|birocrat}}",
        "group-suppress-member": "{{GENDER:$1|suprimător|suprimătoare}}",
        "grouppage-user": "{{ns:project}}:Utilizatori",
-       "grouppage-autoconfirmed": "{{ns:project}}:Utilizator autoconfirmați",
+       "grouppage-autoconfirmed": "{{ns:project}}:Utilizatori confirmați automat",
        "grouppage-bot": "{{ns:project}}:Boți",
        "grouppage-sysop": "{{ns:project}}:Administratori",
        "grouppage-interface-admin": "{{ns:project}}:Administratori de interfață",
        "rcfilters-clear-all-filters": "Ștergeți toate filtrele",
        "rcfilters-show-new-changes": "Arată schimbările mai noi de la $1",
        "rcfilters-search-placeholder": "Filtrați modificările recente (folosiți meniul sau căutați numele filtrului)",
+       "rcfilters-search-placeholder-mobile": "Filtre",
        "rcfilters-invalid-filter": "Filtru invalid",
        "rcfilters-empty-filter": "Nu există filtre active. Toate contribuțiile sunt afișate.",
        "rcfilters-filterlist-title": "Filtre",
        "changecontentmodel": "Modificare model de conținut al unei pagini",
        "changecontentmodel-legend": "Modifică modelul de conținut",
        "changecontentmodel-title-label": "Titlul paginii",
+       "changecontentmodel-current-label": "Modelul de conținut curent:",
        "changecontentmodel-model-label": "Model de conținut nou",
        "changecontentmodel-reason-label": "Motiv:",
        "changecontentmodel-submit": "Schimbă",
        "contribsub2": "Pentru {{GENDER:$3|$1}} ($2)",
        "contributions-subtitle": "Pentru {{GENDER:$3|$1}}",
        "contributions-userdoesnotexist": "Contul de utilizator „$1” nu este înregistrat.",
+       "negative-namespace-not-supported": "Spațiile de nume cu valori negative nu sunt permise.",
        "nocontribs": "Nu a fost găsită nici o modificare care să satisfacă acest criteriu.",
        "uctop": "actuală",
        "month": "Din luna (și dinainte):",
        "interlanguage-link-title-nonlang": "$1 – $2",
        "common.css": "/** CSS plasate aici vor fi aplicate tuturor aparițiilor */",
        "print.css": "/* CSS plasate aici vor afecta modul în care paginile vor fi imprimate */",
+       "group-autoconfirmed.css": "/* Orice stil CSS din această pagină va afecta doar utilizatorii autoconfirmați */",
        "common.json": "/* Orice JSON din această pagină va fi încărcat pentru toți utilizatorii la fiecare pagină încărcată. */",
+       "group-autoconfirmed.js": "/* Orice cod JavaScript din această pagină va fi încărcat doar pentru utilizatorii autoconfirmați */",
        "anonymous": "{{PLURAL:$1|Utilizator anonim|Utilizatori anonimi}} ai {{SITENAME}}",
        "siteuser": "Utilizator {{SITENAME}} $1",
        "anonuser": "utlizator anonim $1 al {{SITENAME}}",
        "permanentlink": "Legătură permanentă",
        "permanentlink-revid": "ID versiune",
        "permanentlink-submit": "Mergi la versiunea",
+       "newsection": "Secțiune nouă",
+       "newsection-page": "Pagină țintă",
+       "newsection-submit": "Mergi la pagină",
        "dberr-problems": "Ne cerem scuze! Acest site întâmpină dificultăți tehnice.",
        "dberr-again": "Așteptați câteva minute și încercați din nou.",
        "dberr-info": "(Nu se poate accesa baza de date: $1)",
        "mw-widgets-abandonedit-discard": "Renunță la modificări",
        "mw-widgets-abandonedit-keep": "Continuă editarea",
        "mw-widgets-abandonedit-title": "Sunteți sigur(ă)?",
+       "mw-widgets-copytextlayout-copy": "Copiază",
+       "mw-widgets-copytextlayout-copy-fail": "Nu am putut copia în clipboard.",
+       "mw-widgets-copytextlayout-copy-success": "Copiat în clipboard.",
        "mw-widgets-dateinput-no-date": "Nicio dată selectată",
        "mw-widgets-dateinput-placeholder-day": "AAAA-LL-ZZ",
        "mw-widgets-dateinput-placeholder-month": "AAAA-LL",
        "changecredentials": "Schimbă credențialele",
        "changecredentials-submit": "Schimbă credențialele",
        "changecredentials-invalidsubpage": "„$1” nu este un tip de credențiale valid.",
+       "removecredentials-invalidsubpage": "$1 nu este un tip de credențiale valid.",
+       "removecredentials-success": "Credențialele dumneavoastră au fost șterse.",
+       "credentialsform-provider": "Tipuri de credențiale:",
        "credentialsform-account": "Numele contului:",
        "cannotlink-no-provider-title": "Nu există conturi conectate",
        "cannotlink-no-provider": "Nu există conturi conectate.",
        "linkaccounts": "Conectează conturile",
        "linkaccounts-success-text": "Contul a fost conectat.",
        "linkaccounts-submit": "Leagă conturile",
+       "cannotunlink-no-provider-title": "Nu există conturi ce pot fi deconectate",
+       "cannotunlink-no-provider": "Nu există conturi ce pot fi deconectate",
        "unlinkaccounts": "Dezleagă conturile",
        "unlinkaccounts-success": "Contul a fost dezlegat",
        "userjsispublic": "Atenție: subpaginile JavaScript nu trebuie să conțină date confidențiale, întrucât ele sunt vizibile altor utilizatori.",
        "restrictionsfield-help": "O adresă IP sau gamă CIDR pe linie. Pentru a activa tot, folosiți:<pre>0.0.0.0/0\n::/0</pre>",
        "edit-error-short": "Eroare: $1",
        "edit-error-long": "Erori:\n\n$1",
+       "specialmute-submit": "Confirmare",
+       "specialmute-label-mute-email": "Ascunde e-mailuri de la acest utilizator",
+       "specialmute-error-invalid-user": "Numele de utilizator solicitat nu a putut fi găsit.",
        "revid": "versiunea $1",
        "pageid": "ID pagină $1",
        "interfaceadmin-info": "$1\n\nPermisiunile pentru editarea de CSS/JS/JSON global au fost recent separate de dreptul <code>editinterface</code>. Dacă nu înțelegeți de ce primiți această eroare, vedeți [[mw:MediaWiki_1.32/interface-admin]].",
        "passwordpolicies-policy-passwordcannotmatchblacklist": "Parolele nu pot fi cele de pe lista neagră",
        "passwordpolicies-policy-maximalpasswordlength": "Parola trebuie să aibă cel puțin $1 {{PLURAL:$1|caracter|caractere|de caractere}}.",
        "passwordpolicies-policy-passwordcannotbepopular": "Parola nu poate fi {{PLURAL:$1|o parolă populară|în lista celor $1 parole populare|în lista celor $1 de parole populare}}.",
-       "easydeflate-invaliddeflate": "Conținutul oferit nu este comprimat corect"
+       "passwordpolicies-policy-passwordnotinlargeblacklist": "Parola nu poate fi în lista celor mai comune 100.000 de parole.",
+       "passwordpolicies-policyflag-forcechange": "trebuie schimbată la conectare",
+       "passwordpolicies-policyflag-suggestchangeonlogin": "sugerează schimbarea la conectare",
+       "easydeflate-invaliddeflate": "Conținutul oferit nu este comprimat corect",
+       "userlogout-continue": "Doriți să vă deconectați?"
 }
index 585a532..c4fa153 100644 (file)
        "blockedtext": "<strong>'U nome de l'utende o l'indirizze IP ha state bloccate.</strong>\n\n'U blocche ha state fatte da $1.\n'U mutive date jè <em>$2</em>.\n\n* 'U Blocche accumenze: $8\n* 'U Blocche spicce: $6\n* Tipe de blocche: $7\n\nTu puè condatta $1 o n'otre [[{{MediaWiki:Grouppage-sysop}}|amministratore]] pe 'ngazzarte sus a 'u blocche.\nTu non ge puè ausà 'u strumende \"{{int:emailuser}}\" senza ca mitte n'indirizze email valide jndr'à le\n[[Special:Preferences|preferenze tune]] e ce è state bloccate sus a l'use sue.\nL'IP ca tine mò jè $3 e 'u codece d'u blocche jè #$5.\nPe piacere mitte ste doje 'mbormaziune ce manne 'na richieste de sblocche.",
        "autoblockedtext": "L'indirizze IP tue ha state automaticamende blocchete purcè ha state ausete da n'otre utende, ca avère state blocchete da $1.\n'U mutive date jè 'u seguende:\n\n:''$2''\n\n* Inizie d'u blocche: $8\n* Scadenze d'u blocche: $6\n* Blocche 'ndise: $7\n\nTu puè cundattà $1 o une de l'otre [[{{MediaWiki:Grouppage-sysop}}|amministrature]] pe parà de stu probbleme.\n\nVide Bbuene ca tu non ge puè ausà 'a funziona \"manne n'e-mail a stu utende\" senze ca tu tìne 'n'indirizze e-mail valide e reggistrete jndr'à seziona [[Special:Preferences|me piace accussì]] e tu non ge sinde blocchete da ausarle.\n\nL'indirizze IP corrende jè $3, e 'u codece d'u blocche jè #$5.\nPe piacere mitte tutte le dettaglie ca ponne essere utile pe le richieste tune.",
        "blockednoreason": "nisciune mutive",
+       "blockedtext-composite-ids": "ID d'u blocche relevande: $1 ('u 'ndirizze IP tune pò sta pure jndr'à lista gnore)",
        "blockedtext-composite-no-ids": "'U 'ndirizze IP tune jesse jndr'à 'nu sacche de liste gnore",
        "blockedtext-composite-reason": "Stonne attive cchiù blocche sus a 'u cunde tune e/o indirizze IP",
        "whitelistedittext": "Tu ha $1 pàggene da cangià.",
        "yourtext": "'U teste tue",
        "storedversion": "Versione archivijete",
        "editingold": "'''FA ATTENZIO': Tu ste cange 'na revisione de sta pàgena scadute.'''\nCe tu a reggistre, ogne cangiamende fatte apprisse a sta revisione avène perdute.",
+       "unicode-support-fail": "Pare ca 'u browser tune non ge supporte l'Unicode. Essenne richieste pe cangià le pàggene, 'u cangiamende tune non g'avène reggistrate.",
        "yourdiff": "Differenze",
        "copyrightwarning": "Pe piacere vide ca tutte le condrebbute de {{SITENAME}} sonde considerete de essere rilasciete sotte 'a $2 (vide $1 pe le dettaglie).\nCe tu non ge vuè ca le condrebbute tue avènene ausete da otre o avènene cangete, non le scè mettènne proprie.<br />\nTu na promettere pure ca le cose ca scrive tu, sonde 'mbormaziune libbere o copiete da 'nu pubbleche dominie.<br />\n'''NON METTE' NISCIUNA FATJE CA JE' PROTETTE DA DERITTE SENZA PERMESSE!'''",
        "copyrightwarning2": "Pe piacere vide ca tutte le condrebbute de {{SITENAME}} ponne essere cangete, alterate o luvete da otre condrebbutore.\nCe tu non ge vuè ca quidde ca scrive avène cangete da tre, allore non scè scrivenne proprie aqquà.<br />\nTu ne stè promitte ca quidde ca scrive tu, o lè scritte cu 'u penziere tue o lè cupiate da risorse de pubbliche dominie o sembre robba libbere (vide $1 pe cchiù dettaglie).\n'''NO REGGISTRA' FATIJE CUPERTE DA 'U COPYRIGHT SENZA PERMESSE! NO FA STUDECARIE!'''",
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..6ac2f8a 100644 (file)
        "statistics-articles": "Pàginas de càbidos",
        "statistics-pages": "Pàginas",
        "statistics-files": "Documentos carrigados",
+       "pageswithprop": "Pàginas cun una propiedade de pàgina",
        "pageswithprop-submit": "Bae",
        "doubleredirects": "Redirects dòpios",
        "doubleredirectstext": "Custa pàgina cuntenet una lista de pàginas ki re-indiritzant a àteras pàginas de re-indiritzamentu.\nOgni lìnia cuntenet ligàmines a su primu e a su de duos re-indiritzamentu, aici comente sa prima lìnia de sa de duos re-indiritzamentos, chi de sòlitu adòbiat s'artìculu \"beru\", a sa cale fintzas su primu re-indiritzamentu dia depet puntare.\nIs re-indiritzamentos <del>cantzellados</del> sunt stados curretos.",
        "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.",
        "linksearch-line": "$1 est ligadu in sa pàgina $2",
        "listusers-submit": "Ammustra",
        "listusers-blocked": "(blocadu)",
+       "activeusers": "Lista de sos impitadores ativos",
        "listgrouprights-group": "Grupu",
        "listgrouprights-rights": "Deretos",
        "listgrouprights-members": "(lista de is cumponentes)",
        "listgrouprights-namespaceprotection-namespace": "Nùmene-logu",
+       "trackingcategories": "Categorias de sighidura",
        "mailnologintext": "Depes èsser [[Special:UserLogin|identificadu (login)]] e àere registradu un'indiritzu email vàlidu in is [[Special:Preferences|preferèntzias tuas]] pro imbiare email a àteros impitadores.",
        "emailuser": "Imbia una email a custu impitadore",
        "emailuser-title-notarget": "Ispedi una email a s'impitadore",
        "unblockip": "Sblocca s'impitadore",
        "unblockiptext": "Usa il modulo sottostante per restituire il diritto di scrittura ad un indirizzo IP precedentemente bloccato.",
        "ipusubmit": "Boga custu bloccu",
-       "ipblocklist": "Impitadores bloccados",
+       "blocklist": "Impitadores blocados",
+       "autoblocklist": "Blocos automàticos",
+       "autoblocklist-legend": "Allista sos blocos automàticos",
+       "ipblocklist": "Impitadores blocados",
        "blocklist-expiry": "Iscadit",
        "blocklist-reason": "Motivu",
        "ipblocklist-submit": "Chirca",
        "fileduplicatesearch-submit": "Chirca",
        "specialpages": "Pàginas ispetziales",
        "specialpages-note-top": "Legenda",
+       "specialpages-group-maintenance": "Raportos de manutentzione",
        "specialpages-group-login": "Intra / crea contu",
+       "specialpages-group-users": "Impitadores e deretos",
        "specialpages-group-pages": "Listas de is pàginas",
        "tag-filter": "Filtra pro [[Special:Tags|etichetta]]:",
        "tag-filter-submit": "Filtru",
index 15ee048..0719083 100644 (file)
        "search-result-category-size": "{{PLURAL:$1|1 رڪن|$1 رڪنَ}} ({{PLURAL:$2|1 ذيلي زمرو|$2 ذيلي زمرا}}, {{PLURAL:$3|1 فائيل|$3 فائيلَ}})",
        "search-redirect": "($1 کان چوريو)",
        "search-section": "(سيڪشن $1)",
-       "search-category": "(Ø°مرو $1)",
+       "search-category": "(زمرو $1)",
        "search-file-match": "(فائيل جي مواد سان ملي ٿو)",
        "search-suggest": "ڇا توهان جو مطلب ھيو: $1",
        "search-rewritten": "نتيجا براءِ $1. يا $2 بابت نتيجا ڏسو.",
        "rcfilters-filter-watchlistactivity-seen-label": "ڏٺل سنوارون",
        "rcfilters-filtergroup-changetype": "تبديليءَ جو قِسم",
        "rcfilters-filter-pageedits-label": "صفحي سنوارون",
-       "rcfilters-filter-newpages-label": "صÙ\81Ø­Ù\8a ØªØ®Ù\84Ù\8aÙ\82ون",
+       "rcfilters-filter-newpages-label": "صÙ\81Ø­Ù\8a Ø³Ø±Ø¬Ø§Ù\8aون",
        "rcfilters-filter-newpages-description": "نوان صفحا ٺاھيندڙ سنوارون.",
        "rcfilters-filter-categorization-label": "زمري ۾ تبديليون",
        "rcfilters-filter-logactions-label": "لاگڊ عمل",
        "protectedtitles-submit": "عنوان ڏيکاريو",
        "listusers": "واپرائيندڙن جي فهرست",
        "listusers-editsonly": "صرف ترميمن وارا واپرائيندڙ ڏيکاريو",
+       "listusers-temporarygroupsonly": "صرف عارضي واپرائيندڙ گروھن ۾ واپرائيندڙ ڏيکاريو",
+       "listusers-creationsort": "سرجڻ جي تاريخ سان مرتب ڪريو",
+       "listusers-desc": "گھٽجندڙ ترتيب ۾ مرتب ڪريو",
        "usereditcount": "$1 {{PLURAL:$1|سنوار|سنوارون}}",
        "newpages": "نوان صفحا",
        "newpages-submit": "ڏيکاريو",
        "allpages-hide-redirects": "چورڻا لڪايو",
        "categories": "زمرا",
        "categories-submit": "ڏيکاريو",
+       "categoriesfrom": "تي شروع ٿيندڙ زمرا ڏيکاريو:",
        "deletedcontributions": "واپرائيندڙ جون ڊاٿل ڀاڱيداريون",
        "deletedcontributions-title": "واپرائيندڙ جون ڊاٿل ڀاڱيداريون",
        "sp-deletedcontributions-contribs": "ڀاڱيداريون",
        "listusers-noresult": "ڪو بہ واپرائيندڙ نہ لڌو.",
        "listusers-blocked": "(بندشيل)",
        "activeusers": "سرگرم واپرائيندڙن جي فھرست",
+       "activeusers-intro": "ھي انھن واپرائيندڙن جي فھرست آھي جن گذريل {{PLURAL:$1|ڏينھن}} ۾ ڪنھن بہ قسم جي ڪا سرگرمي ڪئي آھي.",
+       "activeusers-count": "گذريل {{PLURAL:$3|ڏينھن|$3 ڏينھن}} ۾ $1 {{PLURAL:$1|عمل}}",
+       "activeusers-from": "تي شروع ٿيندڙ واپرائيندڙ ڏيکاريو:",
        "activeusers-groups": "گروھن سان تعلق رکندڙ واپرائيندڙَ ڏيکاريو:",
        "activeusers-excludegroups": "گروھن سان تعلق رکندڙ گروھ ڇڏيو:",
        "activeusers-noresult": "ڪي بہ واپرائيندڙ نہ لڌا.",
        "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-search": "ڀاڱيدارين لاءِ ڳولا ڪريو",
        "sp-contributions-username": "آءِپي پتو يا واپرائيندڙ-نانءُ:",
        "sp-contributions-toponly": "صرف اھي سنوارون ڏيکاريو جيڪي تازا ترين مسودا آھن",
-       "sp-contributions-newonly": "صرف اھي سنوارون ڏيکاريو جيڪي صرف صفحي تخليقون آھن",
+       "sp-contributions-newonly": "صرف اھي سنوارون ڏيکاريو جيڪي صفحي سرجايون آھن",
        "sp-contributions-hideminor": "معمولي سنوارون لڪايو",
        "sp-contributions-submit": "ڳوليو",
        "whatlinkshere": "هتان ڇا ڳنڍيل آهي",
        "badipaddress": "ناقابلڪار آءِ پي پتو",
        "blockipsuccesssub": "بندش ڪامياب ٿي",
        "ipb-blockingself": "اوهان پنهنجي پاڻ تي بندش وجهي رهيا آهيو! ڇا اوهان اهو ڪرڻ پسند ڪندو؟",
+       "ipb-blocklist-contribs": "{{GENDER:$1|$1}} جي لاءِ ڀاڱيداريون",
        "block-expiry": "اختتام:",
        "unblockip": "واپرائيندڙ کي اڻبندشيو",
        "ipusubmit": "اها بندش هٽايو",
        "pageinfo-category-pages": "صفحن جو تعداد",
        "pageinfo-category-subcats": "ذيلي زمرن جو تعداد",
        "pageinfo-category-files": "صفحن جو تعداد",
-       "pageinfo-user-id": "واهپيندڙ (يوزر) جي سڃاڻپ (آءِ ڊي)",
+       "pageinfo-user-id": "واهپيندڙ آئِڊي",
        "markaspatrolledtext": "ھن صفحي کي گشت ڪيل طور نشان لڳايو",
        "markedaspatrollednotify": "$1 کي گشت ڪيل طور ڄاڻيو ويو آهي.",
        "patrol-log-page": "گشت لاگ",
        "pagelang-select-lang": "ٻولي چونڊيو",
        "right-pagelang": "صفحي جي ٻولي بدلايو",
        "action-pagelang": "صفحي جي ٻولي بدلايو",
+       "mediastatistics": "ميڊيا انگ-اکر",
        "mediastatistics-header-unknown": "اڻڄاتل",
        "mediastatistics-header-audio": "آواز",
        "mediastatistics-header-video": "وڊيوز",
index 06a683a..e0f4f5c 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.",
        "move-talk-subpages": "Premjesti podstranice stranice za razgovor (sve do $1)",
        "movepage-page-exists": "Stranica $1 već postoji i ne može biti automatski zamijenjena.",
        "movepage-page-moved": "Stranica $1 je premještena na $2.",
-       "movepage-page-unmoved": "Stranica $1 ne može biti premještena na $2.",
+       "movepage-page-unmoved": "Stranica $1 ne može biti premještena u $2.",
        "movepage-max-pages": "Maksimum od $1 {{PLURAL:$1|stranice|stranice|stranica}} je premješteno i više nije moguće premjestiti automatski.",
        "movelogpage": "Evidencija premještanja",
        "movelogpagetext": "Ispod je spisak stranica koje su premještene.",
        "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)",
        "mycustomjsredirectprotected": "Nemate dopuštenje za uređivanje ove JavaScript stranice jer predstavlja preusmjeravanje i ne vodi do vašeg imenskog prostora.",
        "easydeflate-invaliddeflate": "Sadržaj nije ispravno pročišćen",
        "unprotected-js": "JavaScript ne može da se učita sa nezaštićenih stranica iz bezbednosnih razloga. Samo napravite JavaScript u imenskom prostoru MediaWiki: ili kao korisničku podstranicu",
-       "userlogout-continue": "Ako se želite odjaviti, [$1 nastavite na odjavnoj strnaici]."
+       "userlogout-continue": "Želite se odjaviti?"
 }
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..a65feb1 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.",
        "move-subpages": "Premakni podstrani (do $1)",
        "move-talk-subpages": "Premakni podstrani pogovorne strani (do $1)",
        "movepage-page-exists": "Stran $1 že obstaja in je ni mogoče samodejno prepisati.",
+       "movepage-source-doesnt-exist": "Stran $1 ne obstaja in je ni mogoče premakniti.",
        "movepage-page-moved": "Stran $1 je bila prestavljena na $2.",
        "movepage-page-unmoved": "Strani $1 ni bilo mogoče prestaviti na $2.",
        "movepage-max-pages": "{{PLURAL:$1|Premaknjena je bila največ $1 stran|Premaknjeni sta bili največ $1 strani|Premaknjene so bile največ $1 strani|Premaknjenih je bilo največ $1 strani}} in nobena več ne bo samodejno premaknjena.",
        "delete_and_move_reason": "Izbrisano z namenom pripraviti prostor za »[[$1]]«",
        "selfmove": "Naslov je enak;\nstrani ni mogoče prestaviti čez njo.",
        "immobile-source-namespace": "Ne morem premikati strani v imenskem prostoru »$1«",
+       "immobile-source-namespace-iw": "Strani na drugih wikijih ne morete premikati s tega wikija.",
        "immobile-target-namespace": "Ne morem premakniti strani v imenski prostor »$1«",
        "immobile-target-namespace-iw": "Povezava interwiki ni veljaven cilj za premik strani.",
        "immobile-source-page": "Te strani ni mogoče prestaviti.",
        "immobile-target-page": "Ne morem premakniti na ta ciljni naslov.",
+       "movepage-invalid-target-title": "Zahtevano ime ni veljavno.",
        "bad-target-model": "Želen cilj uporablja drugačno obliko vsebine. Ne morem pretvoriti iz $1 v $2.",
        "imagenocrossnamespace": "Ne morem premakniti datoteke izven imenskega prostora datotek",
        "nonfile-cannot-move-to-file": "Ne morem premakniti nedatoteko v imenski prostor datotek",
        "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..5129716 100644 (file)
        "grant-group-customization": "Anpassning och inställningar",
        "grant-group-administration": "Utför administrativa åtgärder",
        "grant-group-private-information": "Få tillgång till privat data om dig",
-       "grant-group-other": "Diverse aktivitet",
+       "grant-group-other": "Övrig aktivitet",
        "grant-blockusers": "Blockera och avblockera användare",
        "grant-createaccount": "Skapa konton",
        "grant-createeditmovepage": "Skapa, redigera och flytta sidor",
        "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",
        "block-log-flags-angry-autoblock": "utökad automatblockering aktiverad",
        "block-log-flags-hiddenname": "användarnamn dolt",
        "range_block_disabled": "Möjligheten för administratörer att blockera intervall av IP-adresser har stängts av.",
+       "ipb-prevent-user-talk-edit": "Att kunna redigera sin egen diskussionssida måste tillåtas för en partiell blockering, om inte den innehåller en begränsning för användardiskussionsnamnrymden.",
        "ipb_expiry_invalid": "Ogiltig utgångstid.",
        "ipb_expiry_old": "Utgångstiden har redan passerat.",
        "ipb_expiry_temp": "För att dölja användarnamnet måste blockeringen vara permanent.",
        "move-page-legend": "Flytta sida",
        "movepagetext": "Med hjälp av formuläret härunder kan du byta namn på en sida, och flytta hela dess historik till ett nytt namn.\nDen gamla sidtiteln kommer att göras om till en omdirigering till den nya titeln.\nDu kan välja att automatiskt uppdatera omdirigeringar som leder till den gamla titeln.\nOm du väljer att inte göra det, kontrollera då att du inte skapar några [[Special:DoubleRedirects|dubbla]] eller [[Special:BrokenRedirects|trasiga omdirigeringar]].\nDu bör också se till att länkar fortsätter att peka dit de ska.\n\nNotera att sidan <strong>inte</strong> kan flyttas om det redan finns en sida under den nya sidtiteln, såvida inte den sidan är en omdirigering till den gamla titeln och saknar annan versionshistorik.\nDet innebär att du kan flytta tillbaks en sida om du råkar göra fel, och att du inte kan skriva över existerande sidor.\n\n<strong>Observera:</strong>\nAtt flytta en populär sida kan vara en drastisk och oväntad ändring;\ndärför bör du vara säker på att du förstår konsekvenserna innan du fortsätter med flytten.",
        "movepagetext-noredirectfixer": "Formuläret nedan kommer att byta namn på en sida, och flytta hela sin historik till det nya namnet.\nDen gamla titeln kommer att bli en omdirigeringssida till den nya titeln.\nGlöm inte att kontrollera [[Special:DoubleRedirects|dubbla]] eller [[Special:BrokenRedirects|brutna omdirigeringar]].\nDu är ansvarig för att se till att länkar fortsätter att peka där de förväntas gå.\n\nObservera att sidan <strong>inte</strong> kommer att flyttas om det finns redan en sida på den nya titeln, förutom om den är en omdirigering och saknar tidigare redigeringshistorik.\nDetta innebär att du kan byta tillbaka namnet på en sida om du av misstag bytt namn på den, och du kan inte skriva över en befintlig sida.\n\n<strong>Observera:</strong>\nDetta kan vara en drastisk och oväntad förändring för en populär sida;\nse till att du förstår konsekvenserna av detta innan du fortsätter.",
+       "movepagetext-noredirectsupport": "När formuläret nedan används byter en sida namn och flyttar all dess historik till det nya namnet.\nDu är ansvarig för att kontrollera att länkarna fortsätter leda dit där de ska.\n\nObservera att sidan <strong>inte</strong> kommer att flyttas om det redan finns en sida med den nya titeln.\nDetta innebär att du kan byta tillbaka namnet på en sida till vad den hade innan namnändringen om du gör ett misstag och du kan inte skriva över en befintlig sida.\n\n<strong>Observera:</strong>\nDetta kan bli en drastisk och oväntad ändring för en populär sida;\nvar god se till att du förstår konsekvenserna av detta innan du fortsätter.",
        "movepagetalktext": "Om du markerar denna ruta kommer den associerade diskussionssidan att automatiskt flyttas till en ny titel om inte en befintlig diskussionssida redan finns där.\n\nI detta fall måste du flytta eller sammanfoga sidan manuellt, om det önskas.",
        "moveuserpage-warning": "'''Varning:''' Du håller på att flytta en användarsida. Observera att endast sidan kommer att flyttas och att användaren ''inte'' kommer att byta namn.",
        "movecategorypage-warning": "<strong>Varning:</strong> Du är på väg att flytta en kategorisida. Observera att endast sidan kommer att flyttas och eventuella sidor i den gamla kategorin kommer <em>inte</em> att kategoriseras om till den nya kategorin.",
        "duplicate-defaultsort": "'''Varning:''' Standardsorteringsnyckeln \"$2\" tar över från den tidigare standardsorteringsnyckeln \"$1\".",
        "duplicate-displaytitle": "<strong>Varning:</strong> Visningstiteln \"$2\" skriver över den tidigare visningstiteln \"$1\".",
        "restricted-displaytitle": "<strong>Varning:</strong> Visningstiteln \"$1\" ignorerades eftersom den inte motsvarar sidans riktiga titel.",
-       "invalid-indicator-name": "<p>Fel:</strong> Sidstatus-indikatorernas <code>namn</code>-attributet får inte vara tomt.",
+       "invalid-indicator-name": "<p>Fel:</strong> Sidstatus-indikatorernas <code>name</code>-attribut får inte vara tomt.",
        "version": "Version",
        "version-extensions": "Installerade programtillägg",
        "version-skins": "Installerade utseenden",
        "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..d6d6c8c 100644 (file)
@@ -17,7 +17,8 @@
                        "Vashgird",
                        "Fitoschido",
                        "TajikMaterialist",
-                       "Vlad5250"
+                       "Vlad5250",
+                       "Amire80"
                ]
        },
        "tog-underline": "Пайвандҳо хаткашида:",
        "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": "Намоиши саҳифаи акс",
        "redirectedfrom": "(Тағйири масир аз $1)",
        "redirectpagesub": "Саҳифаи равонакунӣ",
        "redirectto": "Тағйири масир ба:",
-       "lastmodifiedat": "Ин саҳифапо бори охир дар $1, $2 вироиш карда буданд.",
+       "lastmodifiedat": "Ин саҳифаро бори охир дар $1, $2 вироиш карда буданд.",
        "viewcount": "Ин саҳифа {{PLURAL:$1|бор|$1 бор}} дида шудааст.",
        "protectedpage": "Саҳифаи муҳофизатшуда",
        "jumpto": "Ҷаҳиш ба:",
        "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 1a93bad..873fae3 100644 (file)
@@ -74,7 +74,7 @@
        "tog-watchlisthidecategorization": "ซ่อนการจัดหมวดหมู่หน้า",
        "tog-ccmeonemails": "ส่งสำเนาอีเมลที่ฉันส่งหาผู้อื่นให้ฉัน",
        "tog-diffonly": "ไม่แสดงเนื้อหาหน้าใต้ความแตกต่างระหว่างรุ่น",
-       "tog-showhiddencats": "à¹\81สà¸\94à¸\87หมวà¸\94หมูà¹\88à¸\97ีà¹\88à¸\8bà¹\88อà¸\99อยูà¹\88",
+       "tog-showhiddencats": "à¹\81สà¸\94à¸\87หมวà¸\94หมูà¹\88à¸\8bà¹\88อà¸\99",
        "tog-norollbackdiff": "ไม่แสดงผลต่างหลังดำเนินการย้อนรวดเดียว",
        "tog-useeditwarning": "เตือนฉันเมื่อออกจากหน้าแก้ไขโดยมีการเปลี่ยนแปลงที่ยังไม่บันทึก",
        "tog-prefershttps": "ใช้การเชื่อมต่อปลอดภัยทุกครั้งเมื่อเข้าสู่ระบบแล้ว",
        "title-invalid-talk-namespace": "ชื่อเรื่องหน้าที่ขออ้างถึงหน้าพูดคุยซึ่งมีไม่ได้",
        "title-invalid-characters": "ชื่อเรื่องหน้าที่ขอมีอักขระไม่สมเหตุสมผล: \"$1\"",
        "title-invalid-relative": "ชื่อเรื่องมีเส้นทางสัมพัทธ์ ชื่อเรื่องหน้าสัมพัทธ์ (./, ../) ไม่สมเหตุสมผล เพราะมักจะเข้าถึงไม่ได้เมื่อจัดการด้วยเบราว์เซอร์ของผู้ใช้",
-       "title-invalid-magic-tilde": "à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87หà¸\99à¹\89าà¸\97ีà¹\88à¸\82อมีลำà¸\94ัà¸\9aà¸\97ิลà¸\94าà¹\80มà¸\88ิà¸\81à¹\84มà¹\88สมà¹\80หà¸\95ุสมà¸\9cล (<nowiki>~~~</nowiki>)",
+       "title-invalid-magic-tilde": "à¸\8aืà¹\88อหà¸\99à¹\89าà¸\97ีà¹\88รà¹\89อà¸\87à¸\82อมีลำà¸\94ัà¸\9aà¸\97ิลà¹\80à¸\94อà¸\9eิà¹\80ศษà¸\97ีà¹\88à¹\83à¸\8aà¹\89à¹\84มà¹\88à¹\84à¸\94à¹\89 (<nowiki>~~~</nowiki>)",
        "title-invalid-too-long": "ชื่อเรื่องหน้าที่ขอยาวเกินไป ไม่สามารถยาวกว่า $1 ไบต์ในการเข้ารหัส UTF-8",
        "title-invalid-leading-colon": "ชื่อเรื่องหน้าที่ขอขึ้นต้นด้วยโคลอนไม่สมเหตุสมผล",
        "perfcached": "ข้อมูลต่อไปนี้ถูกเก็บในแคชและอาจล้าสมัย มีผลการค้นหาสูงสุด $1 รายการในแคช",
        "autoblockedtext": "เลขที่อยู่ไอพีของคุณถูกบล็อกอัตโนมัติ เพราะเคยมีผู้ใช้อื่นใช้ ซึ่งถูกบล็อกโดย $1\nโดยให้เหตุผลว่า\n\n:<em>$2</em>\n\n* เริ่มการบล็อก: $8\n* สิ้นสุดการบล็อก: $6\n* ผู้ถูกบล็อกที่เจตนา: $7\n\nคุณสามารถติดต่อ $1 หรือ[[{{MediaWiki:Grouppage-sysop}}|ผู้ดูแลระบบ]]คนอื่นเพื่ออภิปรายการบล็อกนี้ \nคุณไม่สามารถใช้คุณลักษณะ \"{{int:emailuser}}\" จนกว่าจะระบุที่อยู่อีเมลที่ถูกต้องใน[[Special:Preferences|การตั้งค่าบัญชี]]ของคุณ และคุณมิได้ถูกห้ามใช้\nเลขที่อยู่ไอพีปัจจุบันของคุณคือ $3 และหมายเลขการบล็อกคือ #$5 \nโปรดรวมรายละเอียดข้างต้นทั้งหมดในการสอบถามใด ๆ",
        "systemblockedtext": "ชื่อผู้ใช้หรือที่อยู่ไอพีของคุณถูกบล็อกอัตโนมัติโดยมีเดียวิกิ\nเหตุผลสำหรับการบล็อกคือ:\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": "คุณต้องยืนยันที่อยู่อีเมลของคุณก่อนแก้ไขหน้า \nโปรดตั้งและตรวจสอบความสมเหตุสมผลของที่อยู่อีเมลของคุผ่าน[[Special:Preferences|การตั้งค่าผู้ใช้]]",
        "nosuchsectiontitle": "ไม่พบส่วน",
        "search-interwiki-more": "(เพิ่มเติม)",
        "search-interwiki-more-results": "ผลลัพธ์เพิ่มเติม",
        "search-relatedarticle": "สัมพันธ์",
+       "search-invalid-sort-order": "ไม่รู้จำลำดับการเรียง $1 จะใช้การเรียงลำดับโดยปริยายแทน ลำดับการเรียงที่สมเหตุสมผลได้แก่: $2",
+       "search-unknown-profile": "ไม่รู้จำโปรไฟล์การค้นหา $1 จะใช้โปรไฟล์การค้นหาโดยปริยายแทน",
        "searchrelated": "สัมพันธ์",
        "searchall": "ทั้งหมด",
        "showingresults": "ด้านล่างแสดง <strong>1</strong> ผลลัพธ์ เริ่มตั้งแต่รายการที่ <strong>$2</strong>",
        "restoreprefs": "คืนค่าการตั้งค่าเริ่มต้นทั้งหมด (ในทุกส่วน)",
        "prefs-editing": "การแก้ไข",
        "searchresultshead": "ค้นหา",
-       "stub-threshold": "à¸\84วามยาวà¸\82อà¸\87หà¸\99à¹\89าà¸\97ีà¹\88à¹\83à¸\8aà¹\89à¹\80à¸\9bà¹\87à¸\99à¹\80สà¹\89à¸\99à¹\81à¸\9aà¹\88à¸\87à¹\83à¸\99à¸\81ารระà¸\9aุหà¸\99à¹\89าà¹\82à¸\84รà¸\87 à¹\80à¸\9eืà¹\88อà¸\88ะà¹\83หà¹\89มีà¸\81ารà¸\88ัà¸\94รูà¸\9bà¹\81à¸\9aà¸\9aà¹\80à¸\89à¸\9eาะà¸\95ัว à¸ªà¸³à¸«à¸£à¸±à¸\9aลิà¸\87à¸\81à¹\8cà¸\97ีà¹\88à¹\82ยà¸\87มายัà¸\87โครง ($1):",
+       "stub-threshold": "à¸\82ีà¸\94à¹\81à¸\9aà¹\88à¸\87สำหรัà¸\9aà¸\81ารà¸\88ัà¸\94รูà¸\9bà¹\81à¸\9aà¸\9aลิà¸\87à¸\81à¹\8cโครง ($1):",
        "stub-threshold-sample-link": "ตัวอย่าง",
        "stub-threshold-disabled": "ปิดใช้งาน",
        "recentchangesdays": "จำนวนวันที่แสดงในเปลี่ยนแปลงล่าสุด:",
        "right-editmyusercss": "แก้ไขไฟล์ซีเอสเอสผู้ใช้ของคุณเอง",
        "right-editmyuserjson": "แก้ไขไฟล์ JSON ผู้ใช้ของคุณเอง",
        "right-editmyuserjs": "แก้ไขไฟล์จาวาสคริปต์ผู้ใช้ของคุณเอง",
+       "right-editmyuserjsredirect": "แก้ไขไฟล์จาวาสคริปต์ผู้ใช้จองคุณที่เป็นการเปลี่ยนทาง",
        "right-viewmywatchlist": "ดูรายการเฝ้าดูของคุณ",
        "right-editmywatchlist": "แก้ไขรายการเฝ้าดูของคุณ หมายเหตุว่า บางปฏิบัติการจะยังเพิ่มหน้าแม้ปราศจากสิทธินี้",
        "right-viewmyprivateinfo": "ดูข้อมูลส่วนตัวของคุณ (เช่น ที่อยู่อีเมล ชื่อจริง)",
        "action-editprotected": "แก้ไขหน้าที่ป้องกันแบบ \"{{int:protect-level-sysop}}\"",
        "action-editsemiprotected": "แก้ไขหน้าที่ป้องกันแบบ \"{{int:protect-level-autoconfirmed}}\"",
        "action-editinterface": "แก้ไขอินเตอร์เฟซผู้ใช้",
+       "action-editusercss": "แก้ไขไฟล์ซีเอสเอสของผู้ใช้อื่น",
+       "action-edituserjson": "แก้ไขไฟล์ JSON ของผู้ใช้อื่น",
+       "action-edituserjs": "แก้ไขไฟล์จาวาสคริปต์ของผู้ใช้อื่น",
+       "action-editsitecss": "แก้ไขซีเอสเอสทั้งเว็บไซต์",
+       "action-editsitejson": "แก้ไข JSON ทั้งเว็บไซต์",
+       "action-editsitejs": "แก้ไขจาวาสคริปต์ทั้งเว็บไซต์",
+       "action-editmyusercss": "แก้ไขไฟล์ซีเอสเอสผู้ใช้ของคุณเอง",
+       "action-editmyuserjson": "แก้ไขไฟล์ JSON ผู้ใช้ของคุณเอง",
+       "action-editmyuserjs": "แก้ไขไฟล์จาวาสคริปต์ผู้ใช้ของคุณเอง",
+       "action-editmyuserjsredirect": "แก้ไขไฟล์จาวาสคริปต์ผู้ใช้ของคุณเองที่เป็นการเปลี่ยนทาง",
        "action-viewsuppressed": "ดูรุ่นแก้ไขที่ถูกซ่อนจากผู้ใช้อื่นทุกคน",
        "action-hideuser": "บล็อกชื่อผู้ใช้ ซ่อนไม่ให้สาธารณะเห็น",
        "action-ipblock-exempt": "ข้ามการบล็อกไอพี บล็อกอัตโนมัติและบล็อกเป็นช่วง",
        "action-noratelimit": "ไม่ได้รับผลกระทบจากขีดจำกัดอัตรา",
        "action-reupload-own": "เขียนทับไฟล์เดิมที่ตัวเองอัปโหลด",
        "action-nominornewtalk": "ไม่ให้การแก้ไขเล็กน้อยในหน้าอภิปรายดำเนินการตัวพร้อมสารใหม่",
+       "action-markbotedits": "ทำเครื่องหมายการแก้ไขที่ถูกย้อนรวดเดียวเป็นการแก้ไขของบอต",
+       "action-patrolmarks": "ดูการทำเครื่องหมายตรวจสอบการเปลี่ยนแปลงล่าสุด",
        "nchanges": "$1 การเปลี่ยนแปลง",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ตั้งแต่การเยี่ยมชมครั้งสุดท้าย}}",
        "enhancedrc-history": "ประวัติ",
        "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-watchlist-markseen-button": "ทำเครื่องหมายว่าเห็นการเปลี่ยนแปลงทั้งหมดแล้ว",
        "rcfilters-watchlist-edit-watchlist-button": "แก้ไขรายการหน้าเฝ้าดูของคุณ",
        "rcfilters-watchlist-showupdated": "การเปลี่ยนแปลงหน้าที่คุณไม่ได้ชมตั้งแต่มีการเปลี่ยนแปลงแสดงด้วย <strong>ตัวหนา</strong> โดยมีเครื่องหมายเข้ม",
-       "rcfilters-preference-label": "ใช้อินเทอร์เฟซที่ไม่ใช้ JavaScript",
-       "rcfilters-preference-help": "โหลด RecentChanges โดยไม่ใช้ตัวกรองหรือฟังก์ชันการเน้น",
+       "rcfilters-preference-label": "ใช้อินเทอร์เฟซที่ไม่ใช้จาวาสคริปต์",
+       "rcfilters-preference-help": "โหลดการเปลี่ยนแปลงล่าสุดโดยไม่มีฟังก์ชันค้นตัวกรองหรือเน้น",
        "rcfilters-watchlist-preference-label": "ใช้อินเตอร์เฟซที่ไม่ใช้ JavaScript",
        "rcfilters-watchlist-preference-help": "โหลดรายการเฝ้าดูที่ไม่มีตัวกรองหรือฟังก์ชันการเน้น",
        "rcfilters-filter-showlinkedfrom-label": "แสดงการเปลี่ยนแปลงในหน้าที่ลิงก์มาจาก",
        "booksources-search": "ค้นหา",
        "booksources-text": "ด้านล่างเป็นรายการการเชื่อมโยงไปยังเว็บไซต์อื่นที่ขายหนังสือใหม่และหนังสือใช้แล้ว และอาจมีข้อมูลเพิ่มเติมเกี่ยวกับหนังสือที่คุณกำลังมองหา:",
        "booksources-invalid-isbn": "รหัส ISBN ที่ให้ไว้ไม่ถูกต้อง กรุณาตรวจสอบจากต้นฉบับอีกครั้ง",
+       "magiclink-tracking-rfc": "หน้าที่ใช้ลิงก์พิเศษ RFC",
+       "magiclink-tracking-rfc-desc": "หน้านี้ใช้ลิงก์พิเศษ RFC วิธีโยกย้ายให้ดูที่ [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org]",
+       "magiclink-tracking-pmid": "หน้าที่ใช้ลิงก์พิเศษ PMID",
+       "magiclink-tracking-pmid-desc": "หน้านี้ใช้ลิงก์พิเศษ PMID วิธีโยกย้ายให้ดูที่ [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org]",
+       "magiclink-tracking-isbn": "หน้าที่ใช้ลิงก์พิเศษ ISBN",
+       "magiclink-tracking-isbn-desc": "หน้านี้ใช้ลิงก์พิเศษ ISBN วิธีโยกย้ายให้ดูที่ [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org]",
        "specialloguserlabel": "ผู้ดำเนินการ:",
        "speciallogtitlelabel": "เป้าหมาย (ชื่อเรื่องหรือ {{ns:user}}:ชื่อผู้ใช้ สำหรับผู้ใช้):",
        "log": "ปูม",
        "trackingcategories-desc": "เกณฑ์การรวมหมวดหมู่",
        "restricted-displaytitle-ignored": "หน้าที่มีชื่อเรื่องแสดงที่ถูกละเลย",
        "restricted-displaytitle-ignored-desc": "หน้ามี <code><nowiki>{{DISPLAYTITLE}}</nowiki></code> ที่ถูกละเลย เพราะไม่สมนัยกับชื่อเรื่องแท้จริงของหน้า",
-       "noindex-category-desc": "à¹\82รà¸\9aอà¸\95à¹\84มà¹\88สามารà¸\96à¸\97ำà¸\94ัà¸\8aà¸\99ีหà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9eราะมีà¹\80มà¸\88ิà¸\81à¹\80วิรà¹\8cà¸\94 <code><nowiki>__NOINDEX__</nowiki></code> อยู่และอยู่ในเนมสเปซซึ่งอนุญาตตัวบ่งชี้นี้",
+       "noindex-category-desc": "à¸\9aอà¸\95à¹\84มà¹\88สามารà¸\96à¸\97ำà¸\94ัà¸\8aà¸\99ีหà¸\99à¹\89าà¸\99ีà¹\89à¹\80à¸\9eราะมีà¸\84ำสัà¹\88à¸\87à¸\9eิà¹\80ศษ <code><nowiki>__NOINDEX__</nowiki></code> อยู่และอยู่ในเนมสเปซซึ่งอนุญาตตัวบ่งชี้นี้",
        "index-category-desc": "หน้านี้มี <code><nowiki>__INDEX__</nowiki></code> อยู่ (และอยู่ในเนมสเปซซึ่งอนุญาตตัวบ่งชี้นี้) ฉะนั้น โรบอตจึงทำดัชนี้ได้ ซึ่งปกติไม่สามารถทำได้",
        "post-expand-template-inclusion-category-desc": "การแทนที่แม่แบบทั้งหมดทำให้ขนาดของหน้าใหญ่กว่า <code>$wgMaxArticleSize</code> จึงไม่มีการแทนที่แม่แบบบางตัว",
        "post-expand-template-argument-category-desc": "หน้านี้มีขนาดใหญ่กว่า <code>$wgMaxArticleSize</code> หลังจากขยายอาร์กิวเมนต์ของแม่แบบ (สิ่งที่อยู่ภายในวงเล็บปีกกาสามวง เช่น <code>{{{Foo}}}</code>)",
        "lockedbyandtime": "(โดย {{GENDER:$1|$1}} เมื่อวันที่ $2 เวลา $3)",
        "move-page": "ย้าย $1",
        "move-page-legend": "ย้ายหน้า",
-       "movepagetext": "à¸\81ารà¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¸\88ะà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89า à¹\81ละยà¹\89ายà¸\9bระวัà¸\95ิà¸\97ัà¹\89à¸\87หมà¸\94à¹\84à¸\9bà¸\8aืà¹\88อà¹\83หมà¹\88\nà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\80à¸\81à¹\88าà¸\88ะà¸\81ลายà¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¹\84à¸\9bà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\83หมà¹\88\nà¸\84ุà¸\93สามารà¸\96à¸\9bรัà¸\9aà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\8bึà¹\88à¸\87à¸\8aีà¹\89à¹\84à¸\9bยัà¸\87à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\80à¸\94ิมà¹\84à¸\94à¹\89อัà¸\95à¹\82à¸\99มัà¸\95ิ\nà¹\81à¸\95à¹\88หาà¸\81à¸\84ุà¸\93à¹\80ลือà¸\81à¹\84มà¹\88à¸\97ำà¹\80à¸\8aà¹\88à¸\99à¸\99ัà¹\89à¸\99 à¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\95รวà¸\88สอà¸\9a[[Special:DoubleRedirects|หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\8bà¹\89ำà¸\8bà¹\89อà¸\99]]หรือ[[Special:BrokenRedirects|หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¹\80สีย]]\nà¸\84ุà¸\93à¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89รัà¸\9aà¸\9cิà¸\94à¸\8aอà¸\9aà¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าลิà¸\87à¸\81à¹\8cà¸\95à¹\88าà¸\87 à¹\86 à¸¢à¸±à¸\87à¸\8aีà¹\89à¹\84à¸\9bยัà¸\87à¸\97ีà¹\88à¸\97ีà¹\88สมà¸\84วร\n\nà¹\82à¸\9bรà¸\94à¸\97ราà¸\9aวà¹\88าหà¸\99à¹\89าà¸\94ัà¸\87à¸\81ลà¹\88าวà¸\88ะ<strong>à¹\84มà¹\88</strong>à¸\96ูà¸\81ยà¹\89าย à¸\96à¹\89ามีหà¸\99à¹\89าà¸\97ีà¹\88à¹\83à¸\8aà¹\89à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\83หมà¹\88à¹\81ลà¹\89ว à¹\80วà¹\89à¸\99à¹\81à¸\95à¹\88หà¸\99à¹\89าà¸\99ัà¹\89à¸\99à¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87 à¹\81ละà¹\84มà¹\88มีà¸\9bระวัà¸\95ิà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\83à¸\99อà¸\94ีà¸\95\nà¸\8bึà¹\88à¸\87หมายà¸\84วามวà¹\88า à¸\84ุà¸\93สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¸\81ลัà¸\9aà¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¹\80à¸\94ิมà¹\84à¸\94à¹\89หาà¸\81à¸\84ุà¸\93à¸\97ำà¸\9cิà¸\94à¸\9eลาà¸\94 à¹\81ละà¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96à¹\80à¸\82ียà¸\99à¸\97ัà¸\9aหà¸\99à¹\89าà¸\97ีà¹\88มีอยูà¹\88à¹\81ลà¹\89วà¹\84à¸\94à¹\89\n\n<strong>à¸\84ำà¹\80à¸\95ือà¸\99!</strong>\nสิ่งนี้อาจเป็นการเปลี่ยนแปลงที่รุนแรงและไม่คาดคิดสำหรับหน้าที่เป็นที่นิยม\nโปรดให้แน่ใจว่าคุณเข้าใจผลลัพธ์นี้ก่อนดำเนินการ",
+       "movepagetext": "à¸\81ารà¹\83à¸\8aà¹\89à¹\81à¸\9aà¸\9aà¸\94à¹\89าà¸\99ลà¹\88าà¸\87à¸\88ะà¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89า à¹\81ละยà¹\89ายà¸\9bระวัà¸\95ิà¸\97ัà¹\89à¸\87หมà¸\94à¹\84à¸\9bà¸\8aืà¹\88อà¹\83หมà¹\88\nà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\80à¸\81à¹\88าà¸\88ะà¸\81ลายà¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¹\84à¸\9bà¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\83หมà¹\88\nà¸\84ุà¸\93สามารà¸\96à¸\9bรัà¸\9aà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\8bึà¹\88à¸\87à¸\8aีà¹\89à¹\84à¸\9bยัà¸\87à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\80à¸\94ิมà¹\84à¸\94à¹\89อัà¸\95à¹\82à¸\99มัà¸\95ิ\nà¹\81à¸\95à¹\88หาà¸\81à¸\84ุà¸\93à¹\80ลือà¸\81à¹\84มà¹\88à¸\97ำà¹\80à¸\8aà¹\88à¸\99à¸\99ัà¹\89à¸\99 à¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าà¸\95รวà¸\88สอà¸\9a[[Special:DoubleRedirects|หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¸\8bà¹\89ำà¸\8bà¹\89อà¸\99]]หรือ[[Special:BrokenRedirects|หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87à¹\80สีย]]\nà¸\84ุà¸\93à¹\80à¸\9bà¹\87à¸\99à¸\9cูà¹\89รัà¸\9aà¸\9cิà¸\94à¸\8aอà¸\9aà¹\80à¸\9eืà¹\88อà¹\83หà¹\89à¹\81à¸\99à¹\88à¹\83à¸\88วà¹\88าลิà¸\87à¸\81à¹\8cà¸\95à¹\88าà¸\87 à¹\86 à¸¢à¸±à¸\87à¸\8aีà¹\89à¹\84à¸\9bยัà¸\87à¸\97ีà¹\88à¸\97ีà¹\88สมà¸\84วร\n\nà¹\82à¸\9bรà¸\94à¸\97ราà¸\9aวà¹\88าà¸\88ะ<strong>à¹\84มà¹\88</strong>มีà¸\81ารยà¹\89ายหà¸\99à¹\89าà¸\99ีà¹\89à¸\96à¹\89ามีหà¸\99à¹\89าà¸\97ีà¹\88à¹\83à¸\8aà¹\89à¸\8aืà¹\88อà¹\80รืà¹\88อà¸\87à¹\83หมà¹\88à¹\81ลà¹\89ว à¹\80วà¹\89à¸\99à¹\81à¸\95à¹\88หà¸\99à¹\89าà¸\99ัà¹\89à¸\99à¹\80à¸\9bà¹\87à¸\99หà¸\99à¹\89าà¹\80à¸\9bลีà¹\88ยà¸\99à¸\97าà¸\87 à¹\81ละà¹\84มà¹\88มีà¸\9bระวัà¸\95ิà¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82à¹\83à¸\99อà¸\94ีà¸\95\nà¸\8bึà¹\88à¸\87หมายà¸\84วามวà¹\88า à¸\84ุà¸\93สามารà¸\96à¹\80à¸\9bลีà¹\88ยà¸\99à¸\8aืà¹\88อหà¸\99à¹\89าà¸\81ลัà¸\9aà¹\80à¸\9bà¹\87à¸\99à¸\8aืà¹\88อà¹\80à¸\94ิมà¹\84à¸\94à¹\89หาà¸\81à¸\84ุà¸\93à¸\97ำà¸\9cิà¸\94à¸\9eลาà¸\94 à¹\81ละà¸\84ุà¸\93à¹\84มà¹\88สามารà¸\96à¹\80à¸\82ียà¸\99à¸\97ัà¸\9aหà¸\99à¹\89าà¸\97ีà¹\88มีอยูà¹\88à¹\81ลà¹\89วà¹\84à¸\94à¹\89\n\n<strong>หมายà¹\80หà¸\95ุ:</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> คุณกำลังย้ายหน้าผู้ใช้ โปรดทราบว่าหน้าผู้ใช้เท่านั้นที่จะถูกเปลี่ยนชื่อ แต่ผู้ใช้จะ<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)",
        "htmlform-yes": "ใช่",
        "htmlform-chosen-placeholder": "เลือกตัวเลือก",
        "htmlform-cloner-create": "เพิ่มอีก",
+       "htmlform-cloner-delete": "ลบ",
        "htmlform-cloner-required": "ต้องการอย่างน้อยหนึ่งค่า",
        "htmlform-date-placeholder": "YYYY-MM-DD",
        "htmlform-time-placeholder": "HH:MM:SS",
        "authmanager-provider-temporarypassword": "รหัสผ่านชั่วคราว",
        "authprovider-resetpass-skip-label": "ข้าม",
        "authprovider-resetpass-skip-help": "ข้ามการตั้งรหัสผ่านใหม่",
+       "specialpage-securitylevel-not-allowed-title": "ไม่อนุญาต",
        "credentialsform-account": "ชื่อบัญชี:",
        "cannotlink-no-provider-title": "ไม่มีบัญชีที่โยงได้",
        "cannotlink-no-provider": "ไม่มีบัญชีที่โยงได้",
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..84acc31 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).",
        "newmessageslinkplural": "яңа {{PLURAL:$1|хәбәр|999=хәбәрләр}}",
        "newmessagesdifflinkplural": "соңгы {{PLURAL:$1|үзгәреш|999=үзгәрешләр}}",
-       "youhavenewmessagesmulti": "$1 эчендә яңа хат бар",
+       "youhavenewmessagesmulti": "Сездә $1 эчендә яңа хәбәрләр бар",
        "editsection": "үзгәртү",
        "editold": "үзгәртү",
        "viewsourceold": "чыганак кодны карау",
        "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-categorization-label": "Төркем үзгәрешләре",
        "rcfilters-filter-categorization-description": "Төркемнәргә кушылган яки төркемнәрдән алып ташланган битләр турында язмалар.",
        "rcfilters-filter-logactions-label": "Беркетмәләнүче гамәлләр",
-       "rcfilters-filter-logactions-description": "Ð\90дминиÑ\81Ñ\82Ñ\80аÑ\82ив Ð³Ð°Ð¼Ó\99ллÓ\99Ñ\80, Ñ\85иÑ\81ап Ñ\8fзмаÑ\81Ñ\8bн Ñ\82өзүлÓ\99Ñ\80, Ð±Ð¸Ñ\82не Ð±ÐµÑ\82еÑ\80үлÓ\99Ñ\80, Ñ\84айл Ð¹Ó©ÐºÐ»Ó\99үлÓ\99Ñ\80...",
+       "rcfilters-filter-logactions-description": "Ð\98даÑ\80Ó\99 Ð³Ð°Ð¼Ó\99ллÓ\99Ñ\80е, Ñ\85иÑ\81ап Ñ\8fзмаÑ\81Ñ\8bн Ñ\82өзүлÓ\99Ñ\80е, Ð±Ð¸Ñ\82не Ð±ÐµÑ\82еÑ\80үлÓ\99Ñ\80е, Ñ\84айл Ñ\82Ó©Ñ\8fүлÓ\99Ñ\80еâ\80¦",
        "rcfilters-filtergroup-lastrevision": "Соңгы юрамалар",
        "rcfilters-filter-lastrevision-label": "Соңгы юрама",
        "rcfilters-filter-lastrevision-description": "Битнең соңгы гына үзгәртүе.",
        "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-page": "Бит исеме:",
        "recentchangeslinked-to": "Моның урынына бу биткә бәйле булган битләрдәге үзгәртүләрне күрсәтү",
+       "recentchanges-page-added-to-category": "[[:$1]] төркемгә өстәлгән",
+       "recentchanges-page-removed-from-category": "[[:$1]] төркемнән алынган",
+       "autochange-username": "MediaWiki автоүзгәртү",
        "upload": "Файл төяү",
        "uploadbtn": "Файл төяү",
        "reuploaddesc": "Файл төявен кире кагу",
        "savefile": "Файлны саклау",
        "uploaddisabled": "Төяү тыелган.",
        "copyuploaddisabled": "URL буенча төяү сүндерелгән.",
-       "uploaddisabledtext": "Файлларны йөкләү ябылган.",
+       "uploaddisabledtext": "Файл төяүләре ябылган.",
        "upload-source": "Файлның чыганагы",
        "sourcefilename": "Файлның чыганагы:",
        "sourceurl": "Чыганакның URL адресы:",
        "uploadstash-badtoken": "Әлеге гамәлне башкарып булмады, сезнең хисап язмагыз гамәлдән чыгуы ихтимал. Яңадан кабатлап карагыз.",
        "uploadstash-errclear": "Файлларны бетереп булмады.",
        "uploadstash-refresh": "Файллар исемлеген яңарту",
+       "uploadstash-thumbnail": "кече рәсемне карау",
        "invalid-chunk-offset": "Кабул ителмәгән фрагмент шуышуы",
        "img-auth-accessdenied": "Рөхсәт юк",
        "img-auth-nopathinfo": "<code>PATH_INFO</code> күрсәтелмәгән.\nСезнең сервер әлеге мәгълүматларны бирүгә көйләнмәгән.\nБәлки ул CGI нигезендә эшлидер һәм <code>img_auth</code> белән эш итмидер.\nТулырак мәгълүмат: https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
        "http-read-error": "HTTP укуда хата.",
        "license": "Лицензиясе:",
        "license-header": "Лицензиясе",
-       "nolicense": "Юк",
+       "nolicense": "Ð\91еÑ\80 Ð½Ó\99Ñ\80Ñ\81Ó\99 Ð´Ó\99 Ñ\81айланмаган",
        "license-nopreview": "(Алдан карау мөмкин түгел)",
        "upload_source_file": "(сезнең санакта сайланган файл)",
        "listfiles-delete": "бетерү",
-       "listfiles-summary": "Әлеге махсус бит Сез йөкләгән бөтен файлларны күрсәтә.",
+       "listfiles-summary": "Бу барлык төялгән файллар күрсәтү өчен махсус бит.",
        "listfiles_search_for": "Файл исеме буенча эзләү:",
+       "listfiles-userdoesnotexist": "«$1» хисап язмасы теркәлмәгән.",
        "imgfile": "файл",
        "listfiles": "Файллар исемлеге",
-       "listfiles_thumb": "Ð\9cиниаÑ\82Ñ\8eÑ\80а",
+       "listfiles_thumb": "Ð\9aеÑ\87е Ñ\80Ó\99Ñ\81ем",
        "listfiles_date": "Вакыт",
        "listfiles_name": "Файл исеме",
        "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": "Файл",
-       "filehist": "Файлның тарихы",
+       "filehist": "Файл тарихы",
        "filehist-help": "Файлның нинди булганлыгын күрү өчен датага/сәгатькә басыгыз.",
-       "filehist-deleteall": "Ð\91аÑ\80Ñ\8bÑ\81Ñ\8bн Ð´Ð° Ñ\8eк Ð¸Ñ\82",
+       "filehist-deleteall": "баÑ\80Ñ\8bÑ\81Ñ\8bн Ð´Ð° Ð±ÐµÑ\82еÑ\80Ò¯",
        "filehist-deleteone": "бетерү",
        "filehist-revert": "кайтару",
        "filehist-current": "хәзерге",
        "filehist-datetime": "Дата/вакыт",
-       "filehist-thumb": "Ð\9cиниаÑ\82Ñ\8eÑ\80а",
-       "filehist-thumbtext": "$1 ÐºÓ©Ð½Ð½Ðµ Ð±Ñ\83лган Ñ\8eÑ\80ама Ñ\8dÑ\81кизÑ\8b",
-       "filehist-nothumb": "Ð\9cиниаÑ\82Ñ\8eÑ\80аÑ\81Ñ\8b юк",
+       "filehist-thumb": "Ð\9aеÑ\87е Ñ\80Ó\99Ñ\81ем",
+       "filehist-thumbtext": "$1 Ð´Ð°Ð³Ñ\8b Ñ\8eÑ\80ама Ó©Ñ\87ен ÐºÐµÑ\87е Ñ\80Ó\99Ñ\81ем",
+       "filehist-nothumb": "Ð\9aеÑ\87е Ñ\80Ó\99Ñ\81ем юк",
        "filehist-user": "Кулланучы",
        "filehist-dimensions": "Зурлык",
-       "filehist-filesize": "Файлның зурлыгы",
+       "filehist-filesize": "Файл зурлыгы",
        "filehist-comment": "Искәрмә",
        "imagelinks": "Файлны куллану",
        "linkstoimage": "{{PLURAL:$1|Киләсе бит|Киләсе $1 бит}} әлеге файлны куллана:",
        "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": "Сез бу файлны яңарта алмыйсыз.",
        "filedelete-legend": "Файлны бетерү",
        "filedelete-comment": "Сәбәп:",
        "filedelete-submit": "Бетерү",
+       "filedelete-success": "<strong>$1</strong> бетерелде.",
        "filedelete-nofile": "<strong>$1</strong> файлы юк.",
        "filedelete-otherreason": "Башка сәбәп:",
        "filedelete-reason-otherlist": "Башка сәбәп",
        "filedelete-reason-dropdown": "*Киң таралган бетерү сәбәпләре \n** авторлык хокукларны бозу\n** кабатланган файл",
        "filedelete-edit-reasonlist": "Сәбәпләр исемлеген үзгәртү",
+       "filedelete-maintenance-title": "Файлны бетереп булмый",
        "mimesearch": "MIME эзләү",
        "mimetype": "MIME-тип:",
-       "download": "йөклÓ\99Ò¯",
+       "download": "күÑ\87еÑ\80еп Ð°Ð»Ñ\83",
        "unwatchedpages": "Беркемдә күзәтмәүче  битләр",
        "listredirects": "Юнәлтүләр исемлеге",
        "unusedtemplates": "Кулланылмаган үрнәкләр",
        "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": "Теркәлгән кулланучылар",
        "lonelypages": "Үксез битләр",
        "uncategorizedpages": "Төркемләнмәгән битләр",
        "uncategorizedcategories": "Төркемләнмәгән төркемнәр",
-       "uncategorizedimages": "ТөÑ\80кемлÓ\99нмÓ\99гÓ\99н Ñ\81Ò¯Ñ\80Ó\99Ñ\82лÓ\99р",
-       "uncategorizedtemplates": "Төркемләнмәгән үрнәкләр",
-       "unusedcategories": "Кулланмаган төркемнәр",
-       "unusedimages": "Кулланмаган сүрәтләр",
+       "uncategorizedimages": "ТөÑ\80кемлÓ\99нмÓ\99гÓ\99н Ñ\84айллар",
+       "uncategorizedtemplates": "Төркемләнмәгән калыплар",
+       "unusedcategories": "Кулланылмаган төркемнәр",
+       "unusedimages": "Кулланылмаган файллар",
        "wantedcategories": "Зарур төркемнәр",
        "wantedpages": "Зарур битләр",
        "wantedfiles": "Кирәкле файллар",
        "mostlinkedcategories": "Күп үзенә сылтамалы төркемнәр",
        "mostlinkedtemplates": "Иң күп кулланылган битләр",
        "mostcategories": "Күп төркемләргә кертелгән битләр",
-       "mostimages": "Иң кулланган сүрәтләр",
+       "mostimages": "Иң күп кулланылган файллар",
        "mostrevisions": "Күп үзгәртүләр белән битләр",
        "prefixindex": "Барлык алкушымча белән битләр",
        "prefixindex-submit": "Күрсәтү",
        "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": "Кирәкле язмалар көндәлектә юк.",
        "emailsend": "Җибәрү",
        "emailccme": "Миңа хатның күчерелмәсе җибәрелсен.",
        "emailccsubject": "$1 өчен хәбәрегезнең күчермәсе: $2",
-       "emailsent": "ХаÑ\82 Ò\97ибÓ\99Ñ\80елгÓ\99н",
+       "emailsent": "ХаÑ\82 Ò\97ибÓ\99Ñ\80елде",
        "emailsenttext": "E-mail хатыгыз җиберелде.",
        "usermessage-editor": "Система хәбәрчесе",
        "watchlist": "Күзәтү исемлеге",
        "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": "кертүләр",
        "unblocklink": "тыюдан азат итү",
        "change-blocklink": "тыюны үзгәртү",
        "contribslink": "кертем",
-       "emaillink": "Ñ\85аÑ\82 Ñ\8fзÑ\83",
+       "emaillink": "Ñ\8dлекÑ\82Ñ\80он Ñ\85аÑ\82 Ò\97ибÓ\99Ñ\80Ò¯",
        "blocklogpage": "Тыю көндәлеге",
        "blocklogentry": "[[$1]] $2 вакытка тыелды $3",
        "reblock-logentry": "[[$1]] тыю көләүләрен $2 $3 вакыт арасына үзгәртте",
        "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": "Үзгәртелмәгән",
        "allmessages-filter-translate": "Тәрҗемә итү",
        "thumbnail-more": "Зурайту",
        "filemissing": "Файл табылмады",
-       "thumbnail_error": "Кечкенә сүрәт төзүе хатасы: $1",
+       "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-ca-nstab-media": "Медиа-файл",
        "tooltip-ca-nstab-special": "Бу махсус бит, аны үзгәртү мөмкин түгел",
        "tooltip-ca-nstab-project": "Проектның бите",
-       "tooltip-ca-nstab-image": "СүÑ\80Ó\99Ñ\82нең Ð±Ð¸Ñ\82е",
+       "tooltip-ca-nstab-image": "Файл Ð±Ð¸Ñ\82ен ÐºÐ°Ñ\80аÑ\80га",
        "tooltip-ca-nstab-mediawiki": "MediaWiki хәбәре бите",
        "tooltip-ca-nstab-template": "Калып бите",
        "tooltip-ca-nstab-help": "Белешмә бите",
        "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": "үзгәртү",
        "previousdiff": "← Алдагы төзәтмә",
        "nextdiff": "Киләсе төзәтмә →",
        "imagemaxsize": "Рәсемнең зурлыгына чикләүләр:<br />''(тасвирлау бите өчен)''",
-       "thumbsize": "РÓ\99Ñ\81емнең ÐºÐµÑ\87еÑ\80Ó\99йÑ\82елгÓ\99н Ñ\8eÑ\80амаÑ\81Ñ\8b Ó©Ñ\87ен:",
+       "thumbsize": "Ð\9aеÑ\87е Ñ\80Ó\99Ñ\81ем Ð·Ñ\83Ñ\80лÑ\8bгÑ\8b:",
        "widthheight": "$1 × $2",
-       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|бит|битләр|бит}}",
-       "file-info": "файл зурлыгы: $1, MIME-тип: $2",
-       "file-info-size": "$1 × $2 нокта, файлның зурлыгы: $3, MIME тибы: $4",
-       "file-info-size-pages": "$1 Ã\97 $2 Ð¿Ð¸ÐºÑ\81елÑ\8c, Ñ\84айл ÐºÒ¯Ð»Ó\99ме: $3, MIME-Ñ\82ибÑ\8b: $4, $5 {{PLURAL:$5|бит}}",
+       "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|бит}}",
+       "file-info": "файл зурлыгы: $1, MIME төре: $2",
+       "file-info-size": "$1 × $2 нокта, файл зурлыгы: $3, MIME төре: $4",
+       "file-info-size-pages": "$1 Ã\97 $2 Ð½Ð¾ÐºÑ\82а, Ñ\84айл Ð·Ñ\83Ñ\80лÑ\8bгÑ\8b: $3, MIME Ñ\82Ó©Ñ\80е: $4, $5 {{PLURAL:$5|бит}}",
        "file-nohires": "Югары ачыклык белән юрама юк.",
        "svg-long-desc": "SVG файлы, шартлы $1 × $2 нокта, файлның зурлыгы: $3",
        "show-big-image": "Төп файл",
        "file-info-gif-looped": "әйләнешле",
        "file-info-gif-frames": "$1 {{PLURAL:$1|фрейм}}",
        "file-info-png-looped": "әйләнешле",
-       "newimages": "Яңа сүрәтләр җыелмасы",
+       "newimages": "Яңа файллар җыелмасы",
+       "newimages-summary": "Бу соңгы төялгән файлларны күрсәтү өчен махсус бит.",
        "newimages-legend": "Сөзгеч",
+       "newimages-label": "Файл исеме (яки аның өлеше):",
+       "newimages-user": "IP адресы яки кулланучы исеме",
+       "newimages-newbies": "Яңа хисап язмаларыннан ясалган кертемне генә күрсәтергә",
+       "newimages-showbots": "Бот төяүләрен күрсәтергә",
+       "newimages-hidepatrolled": "Тикшерелгән төяүләрне яшерергә",
+       "newimages-mediatype": "Медиа төре:",
        "ilsubmit": "Эзләү",
        "bydate": "дата буенча",
        "seconds": "{{PLURAL:$1|$1 секунд}}",
        "months": "{{PLURAL:$1|$1 ай}}",
        "years": "{{PLURAL:$1|$1 ел}}",
        "ago": "$1 элек",
-       "just-now": "яңа гына",
+       "just-now": "әле генә",
        "hours-ago": "$1 {{PLURAL:$1|cәгать}} элек",
        "minutes-ago": "$1 {{PLURAL:$1|минут}} элек",
        "seconds-ago": "$1 {{PLURAL:$1|секунд}} элек",
        "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-media": "Ð\99өклÓ\99Ò¯ Ò»Ó\99м Ð¼ÐµÐ´Ð¸Ð°-Ñ\84айллаÑ\80 Ñ\85иÑ\81апнамÓ\99Ñ\81е",
+       "specialpages-group-changes": "Соңгы үзгәрешләр һәм көндәлекләр",
+       "specialpages-group-media": "Ð\9cедиа Ñ\85иÑ\81апнамÓ\99лÓ\99Ñ\80е Ò»Ó\99м Ñ\82Ó©Ñ\8fүлÓ\99Ñ\80",
        "specialpages-group-users": "Кулланучылар һәм аларның хокуклары",
        "specialpages-group-highuse": "Еш кулланылучы битләр",
        "specialpages-group-pages": "Битләр исемлеге",
        "specialpages-group-pagetools": "Бит өчен кораллар",
-       "specialpages-group-wiki": "Мәгълүмат һәм җиһазлар",
+       "specialpages-group-wiki": "Мәгълүматлар һәм кораллар",
        "specialpages-group-redirects": "Күчерелүче махсус битләр",
        "specialpages-group-spam": "Спамга каршы кораллар",
+       "specialpages-group-developer": "Программист кораллары",
        "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-contentmodelchange": "эчтәлек моделен үзгәртү",
+       "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-create-no-name": "Сезнең тамгага исем бирәсегез бар.",
+       "tags-create-invalid-chars": "Тамга исемләрендә өтерләр (<code>,</code>), асма сызыклар (<code>|</code>) яки авыш сызыклар (<code>/</code>) була алмас.",
+       "tags-create-already-exists": "«$1» тамгасы бар инде.",
+       "tags-create-warnings-below": "Тамга төзүне дәвам итәргә телисезме?",
+       "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": "Икенче бит",
        "diff-form": "Аермалыклар",
        "diff-form-submit": "Аермасын күрсәтү",
        "permanentlink": "Даими сылтама",
+       "newsection": "Яңа бүлек",
        "dberr-problems": "Гафу итегез! Сайтта техник кыенлыклар чыкты.",
        "dberr-again": "Сәхифәне берничә минуттан соң яңартып карагыз.",
        "dberr-info": "(Мәгълүматлар базасы серверы белән тоташырга мөмкин түгел: $1)",
        "htmlform-user-not-exists": "<strong>$1</strong> барлыкта юк.",
        "logentry-delete-delete": "$1 $3 битен {{GENDER:$2|бетерә}}",
        "logentry-delete-restore": "$1 $3 ($4) битен {{GENDER:$2|торгызды}}",
+       "logentry-delete-restore-nocount": "$1 $3 битен {{GENDER:$2|торгызды}}",
+       "restore-count-revisions": "{{PLURAL:$1|бер генә юрама|$1 юрама}}",
+       "restore-count-files": "{{PLURAL:$1|бер генә файл|$1 файл}}",
        "logentry-delete-revision": "$1 $3 битендә {{PLURAL:$5|$5 юрамасының}} күренешен {{GENDER:$2|үзгәртте}}: $4",
        "revdelete-content-hid": "эчтәлек яшерелгән",
        "revdelete-summary-hid": "төзәтмәнең тасвирламасы яшерелгән",
        "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-managetags": "Тамгалар идарә итү журналы",
+       "log-name-tag": "Тамгалар көндәлеге",
        "rightsnone": "(юк)",
        "feedback-adding": "Фикерне сәхифәгә өстәү ...",
        "feedback-back": "Кирегә",
-       "feedback-bugnew": "Мин тикшердем. Яңа хата турында хәбәр итү",
+       "feedback-bugnew": "Мин тикшердем. Яңа хата турында белдерү",
        "feedback-bugornote": "Әгәр дә сез техник проблеманы җентекләп тасвирларга әзер икәнсез, зинһар өчен, [$1 хата турында хәбәр итегез].\nБашка очракта сез түбәндәге гади форманы куллана аласыз. Сезнең шәрехләмә \"[$3 $2]\" сәхифәсенә сезнең кулланучы исеме һәм сез кулланган браузер исеме белән бергә өстәләчәк.",
        "feedback-cancel": "Кире алу",
        "feedback-close": "Тәмам",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|секунд}}",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|байт}}",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|байт}}",
-       "expandtemplates": "Үрнәкләрне ачу",
+       "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|байт}}",
+       "expandtemplates": "Калыпларны җәелдерү",
        "expand_templates_output": "Нәтиҗә",
        "expand_templates_ok": "Ярар",
+       "expand_templates_generate_xml": "XML тикшерү агачын күрсәтергә",
+       "expand_templates_generate_rawhtml": "HTML күрсәтергә",
        "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": "бит телен үзгәртергә",
+       "log-name-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-nbytes": "{{PLURAL:$1|бер генә байт|$1 байт}} ($2; $3%)",
+       "mediastatistics-table-mimetype": "MIME төре",
+       "mediastatistics-table-count": "Файллар саны",
+       "mediastatistics-table-totalbytes": "Тулаем зурлык",
+       "mediastatistics-header-unknown": "Билгесез",
+       "mediastatistics-header-drawing": "Рәсемнәр (вектор сурәтләре)",
        "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..1cbbad1 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": "(تبدیل مت کرو)",
        "deleting-backlinks-warning": "<strong>انتباہ:</strong> جس صفحہ کو آپ حذف کر رہے ہیں اس سے مربوط یا اس میں شامل [[Special:WhatLinksHere/{{FULLPAGENAME}}|دیگر صفحات]]۔",
        "deleting-subpages-warning": "<strong>انتباہ:</strong> جو صفحہ آپ حذف کر رہے ہیں اس [[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|کا ایک ذیلی صفحہ ہے|$1 subpages|51=کے 50 سے زائد ذیلی صفحات ہیں}}]]",
        "rollback": "ترمیمات سابقہ حالت پرواپس",
+       "rollback-confirmation-confirm": "کیا واقعی:",
+       "rollback-confirmation-yes": "استرجع کریں",
+       "rollback-confirmation-no": "یا منسوخ کر دیں",
        "rollbacklink": "استرجع کریں",
        "rollbacklinkcount": "استرجع $1 {{PLURAL:$1|ترمیم|ترامیم}}",
        "rollbacklinkcount-morethan": "$1 {{PLURAL:$1|ترمیم|ترامیم}} سے زیادہ کا استرجع",
        "mycontris": "شراکتیں",
        "anoncontribs": "شراکتیں",
        "contribsub2": "{{GENDER:$3|$1}} ($2)",
+       "contributions-subtitle": "برائے {{GENDER:$3|$1}}",
        "contributions-userdoesnotexist": "«$1» کے نام سے صارف کھاتہ مندرج نہیں ہے۔",
        "nocontribs": "اس معیار کے مطابق کوئی ترمیم دستیاب نہیں ہوئی۔",
        "uctop": "موجودہ نسخہ",
index ff50d0b..49b249b 100644 (file)
        "nstab-template": "Modèl",
        "nstab-help": "Ajuto",
        "nstab-category": "Categoria",
-       "mainpage-nstab": "Pàgina prinsipale",
+       "mainpage-nstab": "Pajina prinsipałe",
        "nosuchaction": "Operasion no riconossua",
        "nosuchactiontext": "L'asion spesifegà ne l'URL no a xè vałida.\nXè posibiłe che l'URL sia sta dizità en modo erato o che sia sta seguio on cołegamento no vałido.\nCiò podaria anca indicare on bug en {{SITENAME}}.",
        "nosuchspecialpage": "Pajina prinsipałe no disponibiłe",
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..8c1df68 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": "您没有权限移动页面。",
        "permanentlink": "固定链接",
        "permanentlink-revid": "修订版本ID",
        "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": "身份验证数据更改未处理。也许没有配置的提供者?",
        "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..c5641c9 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": "æ\82¨å¿\85é \88å\86\8dç\99»å\85¥ä¸\80次ä¾\86é©\97証æ\82¨ç\82º {{GENDER:$1|$1}}。",
+       "userlogin-reauth": "æ\82¨å¿\85é \88å\86\8dç\99»å\85¥ä¸\80次ä¾\86é©\97è­\89æ\82¨ç\82º{{GENDER:$1|$1}}。",
        "userlogin-createanother": "建立另一個帳號",
        "createacct-emailrequired": "電子郵件地址",
        "createacct-emailoptional": "電子郵件地址(選填)",
        "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>",
        "templatesused": "此頁面使用了以下{{PLURAL:$1|模板}}:",
        "templatesusedpreview": "此預覽使用了以下{{PLURAL:$1|模板}}:",
        "templatesusedsection": "此頁面使用了以下 {{PLURAL:$1|模板}} :",
-       "template-protected": "(受保護)",
-       "template-semiprotected": "(受半保護)",
+       "template-protected": "(受保護)",
+       "template-semiprotected": "(受半保護)",
        "hiddencategories": "此頁面屬於 {{PLURAL:$1|1 個隱藏分類|$1 個隱藏分類}}的成員:",
        "edittools": "<!-- 此處的文字將被顯示在編輯和上傳表單以下。 -->",
        "nocreatetext": "{{SITENAME}} 已限制建立新頁面的功能。 {{GENDER:|你|妳|你}}可返回並編輯既有的頁面,或者 [[Special:UserLogin|登入或建立新帳號]]。",
        "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-source-doesnt-exist": "頁面$1不存在因此無法移動。",
        "movepage-page-moved": "已移動頁面 $1 到 $2。",
        "movepage-page-unmoved": "無法移動頁面 $1 到 $2。",
        "movepage-max-pages": "移動頁面的上限為 $1 頁,超出限制的頁面將不會自動移動。",
        "movelogpagetext": "以下是所有移動頁面的動作記錄清單。",
        "movesubpage": "{{PLURAL:$1|子頁面}}",
        "movesubpagetext": "此頁面有 $1 個子頁面如下所示。",
-       "movesubpagetalktext": "對應的對話頁有以下 $1 頁{{PLURAL:$1|子頁面|子頁面}}。",
+       "movesubpagetalktext": "對應的討論頁有以下 $1 頁{{PLURAL:$1|子頁面|子頁面}}。",
        "movenosubpage": "此頁面沒有任何子頁面。",
        "movereason": "原因:",
        "revertmove": "還原",
        "delete_and_move_reason": "已刪除讓來自 [[$1]] 頁面可移動",
        "selfmove": "標題相同;無法移動頁面到自己本身。",
        "immobile-source-namespace": "無法移動在命名空間 \"$1\" 中的頁面",
+       "immobile-source-namespace-iw": "在其它 wiki 的頁面無法從此 wiki 移動。",
        "immobile-target-namespace": "無法移動頁面至命名空間 \"$1\"",
        "immobile-target-namespace-iw": "移動頁面不可使用 Interwiki 連結做為目標。",
        "immobile-source-page": "此頁面無法移動。",
        "immobile-target-page": "無法移動至目標標題。",
+       "movepage-invalid-target-title": "請求的名稱無效。",
        "bad-target-model": "指定的目標地使用不同的內容模型。無法轉換 $1 為 $2。",
        "imagenocrossnamespace": "不可以移動檔案到非檔案命名空間",
        "nonfile-cannot-move-to-file": "不可以移動非檔案到檔案命名空間",
        "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 20be9fd..da241e5 100644 (file)
@@ -160,7 +160,8 @@ class CleanupCaps extends TableCleanup {
                        $this->output( "\"$display\" -> \"$targetDisplay\": DRY RUN, NOT MOVED\n" );
                        $ok = 'OK';
                } else {
-                       $mp = new MovePage( $current, $target );
+                       $mp = MediaWikiServices::getInstance()->getMovePageFactory()
+                               ->newMovePage( $current, $target );
                        $status = $mp->move( $this->user, $reason, $createRedirect );
                        $ok = $status->isOK() ? 'OK' : $status->getWikiText( false, false, 'en' );
                        $this->output( "\"$display\" -> \"$targetDisplay\": $ok\n" );
index 59820a5..02152f7 100644 (file)
@@ -144,30 +144,34 @@ class ConvertLinks extends Maintenance {
                        $this->output( "Loading IDs from $cur table...\n" );
                        $this->performanceLog( $fh, "Reading $numRows rows from cur table...\n" );
                        $this->performanceLog( $fh, "rows read vs seconds elapsed:\n" );
+                       $contentLang = MediaWikiServices::getInstance()->getContentLanguage();
 
-                       $dbw->bufferResults( false );
-                       $res = $dbw->query( "SELECT cur_namespace,cur_title,cur_id FROM $cur" );
                        $ids = [];
-
-                       foreach ( $res as $row ) {
-                               $title = $row->cur_title;
-                               if ( $row->cur_namespace ) {
-                                       $title = MediaWikiServices::getInstance()->getContentLanguage()->
-                                               getNsText( $row->cur_namespace ) . ":$title";
-                               }
-                               $ids[$title] = $row->cur_id;
-                               $curRowsRead++;
-                               if ( $reportCurReadProgress ) {
-                                       if ( ( $curRowsRead % $curReadReportInterval ) == 0 ) {
-                                               $this->performanceLog(
-                                                       $fh,
-                                                       $curRowsRead . " " . ( microtime( true ) - $baseTime ) . "\n"
-                                               );
-                                               $this->output( "\t$curRowsRead rows of $cur table read.\n" );
+                       $lastId = 0;
+                       do {
+                               $res = $dbw->query(
+                                       "SELECT cur_namespace,cur_title,cur_id FROM $cur " .
+                                       "WHERE cur_id > $lastId ORDER BY cur_id LIMIT 10000"
+                               );
+                               foreach ( $res as $row ) {
+                                       $title = $row->cur_title;
+                                       if ( $row->cur_namespace ) {
+                                               $title = $contentLang->getNsText( $row->cur_namespace ) . ":$title";
+                                       }
+                                       $ids[$title] = $row->cur_id;
+                                       $curRowsRead++;
+                                       if ( $reportCurReadProgress ) {
+                                               if ( ( $curRowsRead % $curReadReportInterval ) == 0 ) {
+                                                       $this->performanceLog(
+                                                               $fh,
+                                                               $curRowsRead . " " . ( microtime( true ) - $baseTime ) . "\n"
+                                                       );
+                                                       $this->output( "\t$curRowsRead rows of $cur table read.\n" );
+                                               }
                                        }
+                                       $lastId = $row->cur_id;
                                }
-                       }
-                       $dbw->bufferResults( true );
+                       } while ( $res->numRows() > 0 );
                        $this->output( "Finished loading IDs.\n\n" );
                        $this->performanceLog(
                                $fh,
index da9b4d6..505168e 100644 (file)
@@ -114,7 +114,7 @@ class CreateAndPromote extends Maintenance {
 
                if ( !$exists ) {
                        // Create the user via AuthManager as there may be various side
-                       // effects that are perfomed by the configured AuthManager chain.
+                       // effects that are performed by the configured AuthManager chain.
                        $status = MediaWiki\Auth\AuthManager::singleton()->autoCreateUser(
                                $user,
                                MediaWiki\Auth\AuthManager::AUTOCREATE_SOURCE_MAINT,
index 9548d6b..6b1cdc3 100644 (file)
@@ -33,8 +33,11 @@ require_once __DIR__ . '/Maintenance.php';
 class McTest extends Maintenance {
        public function __construct() {
                parent::__construct();
-               $this->addDescription( "Makes several 'set', 'incr' and 'get' requests on every"
-                       . " memcached server and shows a report" );
+               $this->addDescription(
+                       "Makes several operation requests on every cache server and shows a report.\n" .
+                       "This tests both per-key and batched *Multi() methods as well as WRITE_BACKGROUND.\n" .
+                       "\"IB\" means \"immediate blocking\" and \"DB\" means \"deferred blocking.\""
+               );
                $this->addOption( 'i', 'Number of iterations', false, true );
                $this->addOption( 'cache', 'Use servers from this $wgObjectCaches store', false, true );
                $this->addOption( 'driver', 'Either "php" or "pecl"', false, true );
@@ -76,37 +79,47 @@ class McTest extends Maintenance {
                        $this->fatalError( "Invalid driver type '$type'" );
                }
 
+               $this->output( "Warming up connections to cache servers..." );
+               $mccByServer = [];
                foreach ( $servers as $server ) {
-                       $this->output( str_pad( $server, $maxSrvLen ) . "\n" );
-
                        /** @var BagOStuff $mcc */
-                       $mcc = new $class( [
+                       $mccByServer[$server] = new $class( [
                                'servers' => [ $server ],
                                'persistent' => true,
+                               'allow_tcp_nagle_delay' => false,
                                'timeout' => $wgMemCachedTimeout
                        ] );
+                       $mccByServer[$server]->get( 'key' );
+               }
+               $this->output( "done\n" );
+               $this->output( "Single and batched operation profiling/test results:\n" );
+
+               $valueByKey = [];
+               for ( $i = 1; $i <= $iterations; $i++ ) {
+                       $valueByKey["test$i"] = 'S' . str_pad( $i, 2048 );
+               }
 
-                       $this->benchmarkSingleKeyOps( $mcc, $iterations );
-                       $this->benchmarkMultiKeyOpsImmediateBlocking( $mcc, $iterations );
-                       $this->benchmarkMultiKeyOpsDeferredBlocking( $mcc, $iterations );
+               foreach ( $mccByServer as $server => $mcc ) {
+                       $this->output( str_pad( $server, $maxSrvLen ) . "\n" );
+                       $this->benchmarkSingleKeyOps( $mcc, $valueByKey );
+                       $this->benchmarkMultiKeyOpsImmediateBlocking( $mcc, $valueByKey );
+                       $this->benchmarkMultiKeyOpsDeferredBlocking( $mcc, $valueByKey );
                }
        }
 
        /**
         * @param BagOStuff $mcc
-        * @param int $iterations
+        * @param array $valueByKey
         */
-       private function benchmarkSingleKeyOps( $mcc, $iterations ) {
+       private function benchmarkSingleKeyOps( BagOStuff $mcc, array $valueByKey ) {
                $add = 0;
                $set = 0;
                $incr = 0;
                $get = 0;
                $delete = 0;
 
-               $keys = [];
-               for ( $i = 1; $i <= $iterations; $i++ ) {
-                       $keys[] = "test$i";
-               }
+               $i = count( $valueByKey );
+               $keys = array_keys( $valueByKey );
 
                // Clear out any old values
                $mcc->deleteMulti( $keys );
@@ -153,43 +166,40 @@ class McTest extends Maintenance {
                $delMs = intval( 1e3 * ( microtime( true ) - $time_start ) );
 
                $this->output(
-                       " add: $add/$iterations {$addMs}ms   " .
-                       "set: $set/$iterations {$setMs}ms   " .
-                       "incr: $incr/$iterations {$incrMs}ms   " .
-                       "get: $get/$iterations ({$getMs}ms)   " .
-                       "delete: $delete/$iterations ({$delMs}ms)\n"
+                       " add: $add/$i {$addMs}ms   " .
+                       "set: $set/$i {$setMs}ms   " .
+                       "incr: $incr/$i {$incrMs}ms   " .
+                       "get: $get/$i ({$getMs}ms)   " .
+                       "delete: $delete/$i ({$delMs}ms)\n"
                );
        }
 
        /**
         * @param BagOStuff $mcc
-        * @param int $iterations
+        * @param array $valueByKey
         */
-       private function benchmarkMultiKeyOpsImmediateBlocking( $mcc, $iterations ) {
-               $keysByValue = [];
-               for ( $i = 1; $i <= $iterations; $i++ ) {
-                       $keysByValue["test$i"] = 'S' . str_pad( $i, 2048 );
-               }
-               $keyList = array_keys( $keysByValue );
+       private function benchmarkMultiKeyOpsImmediateBlocking( BagOStuff $mcc, array $valueByKey ) {
+               $keys = array_keys( $valueByKey );
+               $iterations = count( $valueByKey );
 
                $time_start = microtime( true );
-               $mSetOk = $mcc->setMulti( $keysByValue ) ? 'S' : 'F';
+               $mSetOk = $mcc->setMulti( $valueByKey ) ? '✓' : '✗';
                $mSetMs = intval( 1e3 * ( microtime( true ) - $time_start ) );
 
                $time_start = microtime( true );
-               $found = $mcc->getMulti( $keyList );
+               $found = $mcc->getMulti( $keys );
                $mGetMs = intval( 1e3 * ( microtime( true ) - $time_start ) );
                $mGetOk = 0;
                foreach ( $found as $key => $value ) {
-                       $mGetOk += ( $value === $keysByValue[$key] );
+                       $mGetOk += ( $value === $valueByKey[$key] );
                }
 
                $time_start = microtime( true );
-               $mChangeTTLOk = $mcc->changeTTLMulti( $keyList, 3600 ) ? 'S' : 'F';
+               $mChangeTTLOk = $mcc->changeTTLMulti( $keys, 3600 ) ? '✓' : '✗';
                $mChangeTTTMs = intval( 1e3 * ( microtime( true ) - $time_start ) );
 
                $time_start = microtime( true );
-               $mDelOk = $mcc->deleteMulti( $keyList ) ? 'S' : 'F';
+               $mDelOk = $mcc->deleteMulti( $keys ) ? '✓' : '✗';
                $mDelMs = intval( 1e3 * ( microtime( true ) - $time_start ) );
 
                $this->output(
@@ -202,34 +212,31 @@ class McTest extends Maintenance {
 
        /**
         * @param BagOStuff $mcc
-        * @param int $iterations
+        * @param array $valueByKey
         */
-       private function benchmarkMultiKeyOpsDeferredBlocking( $mcc, $iterations ) {
+       private function benchmarkMultiKeyOpsDeferredBlocking( BagOStuff $mcc, array $valueByKey ) {
+               $keys = array_keys( $valueByKey );
+               $iterations = count( $valueByKey );
                $flags = $mcc::WRITE_BACKGROUND;
-               $keysByValue = [];
-               for ( $i = 1; $i <= $iterations; $i++ ) {
-                       $keysByValue["test$i"] = 'A' . str_pad( $i, 2048 );
-               }
-               $keyList = array_keys( $keysByValue );
 
                $time_start = microtime( true );
-               $mSetOk = $mcc->setMulti( $keysByValue, 0, $flags ) ? 'S' : 'F';
+               $mSetOk = $mcc->setMulti( $valueByKey, 0, $flags ) ? '✓' : '✗';
                $mSetMs = intval( 1e3 * ( microtime( true ) - $time_start ) );
 
                $time_start = microtime( true );
-               $found = $mcc->getMulti( $keyList );
+               $found = $mcc->getMulti( $keys );
                $mGetMs = intval( 1e3 * ( microtime( true ) - $time_start ) );
                $mGetOk = 0;
                foreach ( $found as $key => $value ) {
-                       $mGetOk += ( $value === $keysByValue[$key] );
+                       $mGetOk += ( $value === $valueByKey[$key] );
                }
 
                $time_start = microtime( true );
-               $mChangeTTLOk = $mcc->changeTTLMulti( $keyList, 3600, $flags ) ? 'S' : 'F';
+               $mChangeTTLOk = $mcc->changeTTLMulti( $keys, 3600, $flags ) ? '✓' : '✗';
                $mChangeTTTMs = intval( 1e3 * ( microtime( true ) - $time_start ) );
 
                $time_start = microtime( true );
-               $mDelOk = $mcc->deleteMulti( $keyList, $flags ) ? 'S' : 'F';
+               $mDelOk = $mcc->deleteMulti( $keys, $flags ) ? '✓' : '✗';
                $mDelMs = intval( 1e3 * ( microtime( true ) - $time_start ) );
 
                $this->output(
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;
        }
 }
 
index 47828e6..09f3120 100644 (file)
@@ -35,6 +35,8 @@
  * e.g. immobile_namespace for namespaces which can't be moved
  */
 
+use MediaWiki\MediaWikiServices;
+
 require_once __DIR__ . '/Maintenance.php';
 
 /**
@@ -105,7 +107,8 @@ class MoveBatch extends Maintenance {
 
                        $this->output( $source->getPrefixedText() . ' --> ' . $dest->getPrefixedText() );
                        $this->beginTransaction( $dbw, __METHOD__ );
-                       $mp = new MovePage( $source, $dest );
+                       $mp = MediaWikiServices::getInstance()->getMovePageFactory()
+                               ->newMovePage( $source, $dest );
                        $status = $mp->move( $wgUser, $reason, !$noredirects );
                        if ( !$status->isOK() ) {
                                $this->output( "\nFAILED: " . $status->getWikiText( false, false, 'en' ) );
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 68188f0..d33e3de 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' ],
        ],
@@ -1934,6 +1934,8 @@ return [
                        'rcfilters-filter-showlinkedto-label',
                        'rcfilters-filter-showlinkedto-option-label',
                        'rcfilters-target-page-placeholder',
+                       'rcfilters-allcontents-label',
+                       'rcfilters-alldiscussions-label',
                        'blanknamespace',
                        'namespaces',
                        'tags-title',
@@ -1967,6 +1969,7 @@ return [
        'mediawiki.interface.helpers.styles' => [
                'class' => ResourceLoaderLessVarFileModule::class,
                'lessMessages' => [
+                       'comma-separator',
                        'parentheses-start',
                        'parentheses-end',
                        'brackets-start',
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
index 59eca6b..5cbb115 100644 (file)
                content: '';
        }
 }
+
+.mw-tag-marker {
+       &:after {
+               content: '@{msg-comma-separator}';
+       }
+
+       &:last-child:after {
+               content: '';
+       }
+}
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 97b73ae..85a4efe 100644 (file)
@@ -58,6 +58,7 @@ OO.initClass( Controller );
  */
 Controller.prototype.initialize = function ( filterStructure, namespaceStructure, tagList, conditionalViews ) {
        var parsedSavedQueries, pieces,
+               nsAllContents, nsAllDiscussions,
                displayConfig = mw.config.get( 'StructuredChangeFiltersDisplayConfig' ),
                defaultSavedQueryExists = mw.config.get( 'wgStructuredChangeFiltersDefaultSavedQueryExists' ),
                controller = this,
@@ -67,20 +68,38 @@ Controller.prototype.initialize = function ( filterStructure, namespaceStructure
 
        // Prepare views
        if ( namespaceStructure ) {
-               items = [];
+               nsAllContents = {
+                       name: 'all-contents',
+                       label: mw.msg( 'rcfilters-allcontents-label' ),
+                       description: '',
+                       identifiers: [ 'subject' ],
+                       cssClass: 'mw-changeslist-ns-subject',
+                       subset: []
+               };
+               nsAllDiscussions = {
+                       name: 'all-discussions',
+                       label: mw.msg( 'rcfilters-alldiscussions-label' ),
+                       description: '',
+                       identifiers: [ 'talk' ],
+                       cssClass: 'mw-changeslist-ns-talk',
+                       subset: []
+               };
+               items = [ nsAllContents, nsAllDiscussions ];
                // eslint-disable-next-line no-jquery/no-each-util
                $.each( namespaceStructure, function ( namespaceID, label ) {
                        // Build and clean up the individual namespace items definition
-                       items.push( {
-                               name: namespaceID,
-                               label: label || mw.msg( 'blanknamespace' ),
-                               description: '',
-                               identifiers: [
-                                       mw.Title.isTalkNamespace( namespaceID ) ?
-                                               'talk' : 'subject'
-                               ],
-                               cssClass: 'mw-changeslist-ns-' + namespaceID
-                       } );
+                       var isTalk = mw.Title.isTalkNamespace( namespaceID ),
+                               nsFilter = {
+                                       name: namespaceID,
+                                       label: label || mw.msg( 'blanknamespace' ),
+                                       description: '',
+                                       identifiers: [
+                                               isTalk ? 'talk' : 'subject'
+                                       ],
+                                       cssClass: 'mw-changeslist-ns-' + namespaceID
+                               };
+                       items.push( nsFilter );
+                       ( isTalk ? nsAllDiscussions : nsAllContents ).subset.push( { filter: namespaceID } );
                } );
 
                views.namespaces = {
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 a5b71b9..0eb1134 100644 (file)
@@ -23,7 +23,7 @@
         * @cfg {boolean} [redirect] Page is a redirect
         * @cfg {boolean} [disambiguation] Page is a disambiguation page
         * @cfg {string} [query] Matching query string to highlight
-        * @cfg {string} [compare] String comparison function for query highlighting
+        * @cfg {Function} [compare] String comparison function for query highlighting
         */
        mw.widgets.TitleOptionWidget = function MwWidgetsTitleOptionWidget( config ) {
                var icon;
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 c35e80f..e71cc88 100644 (file)
@@ -74,6 +74,7 @@ $wgAutoloadClasses += [
        'TestUserRegistry' => "$testDir/phpunit/includes/TestUserRegistry.php",
 
        # tests/phpunit/includes
+       'FactoryArgTestTrait' => "$testDir/phpunit/unit/includes/FactoryArgTestTrait.php",
        'PageArchiveTestBase' => "$testDir/phpunit/includes/page/PageArchiveTestBase.php",
        'RevisionDbTestBase' => "$testDir/phpunit/includes/RevisionDbTestBase.php",
        'RevisionTestModifyableContent' => "$testDir/phpunit/includes/RevisionTestModifyableContent.php",
@@ -103,6 +104,10 @@ $wgAutoloadClasses += [
        # tests/phpunit/includes/changes
        'TestRecentChangesHelper' => "$testDir/phpunit/includes/changes/TestRecentChangesHelper.php",
 
+       # tests/phpunit/includes/config
+       'TestAllServiceOptionsUsed' => "$testDir/phpunit/includes/config/TestAllServiceOptionsUsed.php",
+       'LoggedServiceOptions' => "$testDir/phpunit/includes/config/LoggedServiceOptions.php",
+
        # tests/phpunit/includes/content
        'DummyContentHandlerForTesting' =>
                "$testDir/phpunit/mocks/content/DummyContentHandlerForTesting.php",
@@ -212,6 +217,9 @@ $wgAutoloadClasses += [
        'MockSearchResultSet' => "$testDir/phpunit/mocks/search/MockSearchResultSet.php",
        'MockSearchResult' => "$testDir/phpunit/mocks/search/MockSearchResult.php",
 
+       # tests/phpunit/unit/includes/libs/filebackend/fsfile
+       'TempFSFileTestTrait' => "$testDir/phpunit/unit/includes/libs/filebackend/fsfile/TempFSFileTestTrait.php",
+
        # tests/suites
        'ParserTestFileSuite' => "$testDir/phpunit/suites/ParserTestFileSuite.php",
        'ParserTestTopLevelSuite' => "$testDir/phpunit/suites/ParserTestTopLevelSuite.php",
index e3c20a2..36c3fe2 100644 (file)
@@ -327,7 +327,7 @@ class ParserTestRunner {
                // This is essential and overrides disabling of database messages in TestSetup
                $setup['wgUseDatabaseMessages'] = true;
                $reset = function () {
-                       MessageCache::destroyInstance();
+                       MediaWikiServices::getInstance()->resetServiceForTesting( 'MessageCache' );
                };
                $setup[] = $reset;
                $teardown[] = $reset;
@@ -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..496f265 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 = '' ) {
@@ -224,7 +222,6 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
         *
         * @since 1.28
         *
-        * @param string[] $groups Groups the test user should be added to.
         * @return TestUser
         */
        public static function getTestSysop() {
@@ -256,7 +253,7 @@ abstract class MediaWikiIntegrationTestCase extends PHPUnit\Framework\TestCase {
                if ( !$page->exists() ) {
                        $user = self::getTestSysop()->getUser();
                        $page->doEditContent(
-                               new WikitextContent( 'UTContent' ),
+                               ContentHandler::makeContent( 'UTContent', $title ),
                                'UTPageSummary',
                                EDIT_NEW | EDIT_SUPPRESS_RC,
                                false,
@@ -635,6 +632,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 +1318,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 +1411,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 +1494,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 +1583,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 +1896,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 +1939,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 e745960..fb32ef7 100644 (file)
@@ -406,7 +406,6 @@ class MessageTest extends MediaWikiLangTestCase {
                $this->setMwGlobals( 'wgRawHtml', true );
                // We have to reset the core hook registration.
                // to register the html hook
-               MessageCache::destroyInstance();
                $this->overrideMwServices();
 
                $msg = new RawMessage( '<html><script>alert("xss")</script></html>' );
index 9166666..2895fa2 100644 (file)
 <?php
 
+use MediaWiki\Config\ServiceOptions;
+use MediaWiki\MediaWikiServices;
+use MediaWiki\Page\MovePageFactory;
+use MediaWiki\Permissions\PermissionManager;
+use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\LoadBalancer;
+
 /**
  * @group Database
  */
 class MovePageTest extends MediaWikiTestCase {
+       /**
+        * @param string $class
+        * @return object A mock that throws on any method call
+        */
+       private function getNoOpMock( $class ) {
+               $mock = $this->createMock( $class );
+               $mock->expects( $this->never() )->method( $this->anythingBut( '__destruct' ) );
+               return $mock;
+       }
+
+       /**
+        * The only files that exist are 'File:Existent.jpg', 'File:Existent2.jpg', and
+        * 'File:Existent-file-no-page.jpg'. Calling unexpected methods causes a test failure.
+        *
+        * @return RepoGroup
+        */
+       private function getMockRepoGroup() : RepoGroup {
+               $mockExistentFile = $this->createMock( LocalFile::class );
+               $mockExistentFile->method( 'exists' )->willReturn( true );
+               $mockExistentFile->method( 'getMimeType' )->willReturn( 'image/jpeg' );
+               $mockExistentFile->expects( $this->never() )
+                       ->method( $this->anythingBut( 'exists', 'load', 'getMimeType', '__destruct' ) );
+
+               $mockNonexistentFile = $this->createMock( LocalFile::class );
+               $mockNonexistentFile->method( 'exists' )->willReturn( false );
+               $mockNonexistentFile->expects( $this->never() )
+                       ->method( $this->anythingBut( 'exists', 'load', '__destruct' ) );
+
+               $mockLocalRepo = $this->createMock( LocalRepo::class );
+               $mockLocalRepo->method( 'newFile' )->will( $this->returnCallback(
+                       function ( Title $title ) use ( $mockExistentFile, $mockNonexistentFile ) {
+                               if ( in_array( $title->getPrefixedText(),
+                                       [ 'File:Existent.jpg', 'File:Existent2.jpg', 'File:Existent-file-no-page.jpg' ]
+                               ) ) {
+                                       return $mockExistentFile;
+                               }
+                               return $mockNonexistentFile;
+                       }
+               ) );
+               $mockLocalRepo->expects( $this->never() )
+                       ->method( $this->anythingBut( 'newFile', '__destruct' ) );
+
+               $mockRepoGroup = $this->createMock( RepoGroup::class );
+               $mockRepoGroup->method( 'getLocalRepo' )->willReturn( $mockLocalRepo );
+               $mockRepoGroup->expects( $this->never() )
+                       ->method( $this->anythingBut( 'getLocalRepo', '__destruct' ) );
+
+               return $mockRepoGroup;
+       }
+
+       /**
+        * @param LinkTarget $old
+        * @param LinkTarget $new
+        * @param array $params Valid keys are: db, options, nsInfo, wiStore, repoGroup.
+        *   options is an indexed array that will overwrite our defaults, not a ServiceOptions, so it
+        *   need not contain all keys.
+        * @return MovePage
+        */
+       private function newMovePage( $old, $new, array $params = [] ) : MovePage {
+               $mockLB = $this->createMock( LoadBalancer::class );
+               $mockLB->method( 'getConnection' )
+                       ->willReturn( $params['db'] ?? $this->getNoOpMock( IDatabase::class ) );
+               $mockLB->expects( $this->never() )
+                       ->method( $this->anythingBut( 'getConnection', '__destruct' ) );
+
+               $mockNsInfo = $this->createMock( NamespaceInfo::class );
+               $mockNsInfo->method( 'isMovable' )->will( $this->returnCallback(
+                       function ( $ns ) {
+                               return $ns >= 0;
+                       }
+               ) );
+               $mockNsInfo->expects( $this->never() )
+                       ->method( $this->anythingBut( 'isMovable', '__destruct' ) );
+
+               return new MovePage(
+                       $old,
+                       $new,
+                       new ServiceOptions(
+                               MovePageFactory::$constructorOptions,
+                               $params['options'] ?? [],
+                               [
+                                       'CategoryCollation' => 'uppercase',
+                                       'ContentHandlerUseDB' => true,
+                               ]
+                       ),
+                       $mockLB,
+                       $params['nsInfo'] ?? $mockNsInfo,
+                       $params['wiStore'] ?? $this->getNoOpMock( WatchedItemStore::class ),
+                       $params['permMgr'] ?? $this->getNoOpMock( PermissionManager::class ),
+                       $params['repoGroup'] ?? $this->getMockRepoGroup()
+               );
+       }
 
        public function setUp() {
                parent::setUp();
+
+               // Ensure we have some pages that are guaranteed to exist or not
+               $this->getExistingTestPage( 'Existent' );
+               $this->getExistingTestPage( 'Existent2' );
+               $this->getExistingTestPage( 'File:Existent.jpg' );
+               $this->getExistingTestPage( 'File:Existent2.jpg' );
+               $this->getExistingTestPage( 'MediaWiki:Existent.js' );
+               $this->getExistingTestPage( 'Hooked in place' );
+               $this->getNonExistingTestPage( 'Nonexistent' );
+               $this->getNonExistingTestPage( 'Nonexistent2' );
+               $this->getNonExistingTestPage( 'File:Nonexistent.jpg' );
+               $this->getNonExistingTestPage( 'File:Nonexistent.png' );
+               $this->getNonExistingTestPage( 'File:Existent-file-no-page.jpg' );
+               $this->getNonExistingTestPage( 'MediaWiki:Nonexistent' );
+               $this->getNonExistingTestPage( 'No content allowed' );
+
+               // Set a couple of hooks for specific pages
+               $this->setTemporaryHook( 'ContentModelCanBeUsedOn',
+                       function ( $modelId, Title $title, &$ok ) {
+                               if ( $title->getPrefixedText() === 'No content allowed' ) {
+                                       $ok = false;
+                               }
+                       }
+               );
+
+               $this->setTemporaryHook( 'TitleIsMovable',
+                       function ( Title $title, &$result ) {
+                               if ( strtolower( $title->getPrefixedText() ) === 'hooked in place' ) {
+                                       $result = false;
+                               }
+                       }
+               );
+
                $this->tablesUsed[] = 'page';
                $this->tablesUsed[] = 'revision';
                $this->tablesUsed[] = 'comment';
        }
 
+       /**
+        * @covers MovePage::__construct
+        */
+       public function testConstructorDefaults() {
+               $services = MediaWikiServices::getInstance();
+
+               $obj1 = new MovePage( Title::newFromText( 'A' ), Title::newFromText( 'B' ) );
+               $obj2 = new MovePage(
+                       Title::newFromText( 'A' ),
+                       Title::newFromText( 'B' ),
+                       new ServiceOptions( MovePageFactory::$constructorOptions, $services->getMainConfig() ),
+                       $services->getDBLoadBalancer(),
+                       $services->getNamespaceInfo(),
+                       $services->getWatchedItemStore(),
+                       $services->getPermissionManager(),
+                       $services->getRepoGroup(),
+                       $services->getTitleFormatter()
+               );
+
+               $this->assertEquals( $obj2, $obj1 );
+       }
+
        /**
         * @dataProvider provideIsValidMove
         * @covers MovePage::isValidMove
+        * @covers MovePage::isValidMoveTarget
         * @covers MovePage::isValidFileMove
+        * @covers MovePage::__construct
+        * @covers Title::isValidMoveOperation
+        *
+        * @param string|Title $old
+        * @param string|Title $new
+        * @param array $expectedErrors
+        * @param array $extraOptions
         */
-       public function testIsValidMove( $old, $new, $error ) {
-               $this->setMwGlobals( 'wgContentHandlerUseDB', false );
-               $mp = new MovePage(
-                       Title::newFromText( $old ),
-                       Title::newFromText( $new )
-               );
-               $status = $mp->isValidMove();
-               if ( $error === true ) {
-                       $this->assertTrue( $status->isGood() );
-               } else {
-                       $this->assertTrue( $status->hasMessage( $error ) );
+       public function testIsValidMove(
+               $old, $new, array $expectedErrors, array $extraOptions = []
+       ) {
+               if ( is_string( $old ) ) {
+                       $old = Title::newFromText( $old );
+               }
+               if ( is_string( $new ) ) {
+                       $new = Title::newFromText( $new );
+               }
+               // Can't test MovePage with a null target, only isValidMoveOperation
+               if ( $new ) {
+                       $mp = $this->newMovePage( $old, $new, [ 'options' => $extraOptions ] );
+                       $this->assertSame( $expectedErrors, $mp->isValidMove()->getErrorsArray() );
+               }
+
+               foreach ( $extraOptions as $key => $val ) {
+                       $this->setMwGlobals( "wg$key", $val );
                }
+               $this->overrideMwServices();
+               $this->setService( 'RepoGroup', $this->getMockRepoGroup() );
+               // This returns true instead of an array if there are no errors
+               $this->hideDeprecated( 'Title::isValidMoveOperation' );
+               $this->assertSame( $expectedErrors ?: true, $old->isValidMoveOperation( $new, false ) );
        }
 
-       /**
-        * This should be kept in sync with TitleTest::provideTestIsValidMoveOperation
-        */
        public static function provideIsValidMove() {
-               return [
-                       // 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' ],
+               global $wgMultiContentRevisionSchemaMigrationStage;
+               $ret = [
+                       'Self move' => [
+                               'Existent',
+                               'Existent',
+                               [ [ 'selfmove' ] ],
+                       ],
+                       'Move to null' => [
+                               'Existent',
+                               null,
+                               [ [ 'badtitletext' ] ],
+                       ],
+                       'Move from empty name' => [
+                               Title::makeTitle( NS_MAIN, '' ),
+                               'Nonexistent',
+                               // @todo More specific error message, or make the move valid if the page actually
+                               // exists somehow in the database
+                               [ [ 'badarticleerror' ] ],
+                       ],
+                       'Move to empty name' => [
+                               'Existent',
+                               Title::makeTitle( NS_MAIN, '' ),
+                               [ [ 'movepage-invalid-target-title' ] ],
+                       ],
+                       'Move to invalid name' => [
+                               'Existent',
+                               Title::makeTitle( NS_MAIN, '<' ),
+                               [ [ 'movepage-invalid-target-title' ] ],
+                       ],
+                       'Move between invalid names' => [
+                               Title::makeTitle( NS_MAIN, '<' ),
+                               Title::makeTitle( NS_MAIN, '>' ),
+                               // @todo First error message should be more specific, or maybe we should make moving
+                               // such pages valid if they actually exist somehow in the database
+                               [ [ 'movepage-source-doesnt-exist' ], [ 'movepage-invalid-target-title' ] ],
+                       ],
+                       'Move nonexistent' => [
+                               'Nonexistent',
+                               'Nonexistent2',
+                               [ [ 'movepage-source-doesnt-exist' ] ],
+                       ],
+                       'Move over existing' => [
+                               'Existent',
+                               'Existent2',
+                               [ [ 'articleexists' ] ],
+                       ],
+                       'Move from another wiki' => [
+                               Title::makeTitle( NS_MAIN, 'Test', '', 'otherwiki' ),
+                               'Nonexistent',
+                               [ [ 'immobile-source-namespace-iw' ] ],
+                       ],
+                       'Move special page' => [
+                               'Special:FooBar',
+                               'Nonexistent',
+                               [ [ 'immobile-source-namespace', 'Special' ] ],
+                       ],
+                       'Move to another wiki' => [
+                               'Existent',
+                               Title::makeTitle( NS_MAIN, 'Test', '', 'otherwiki' ),
+                               [ [ 'immobile-target-namespace-iw' ] ],
+                       ],
+                       'Move to special page' =>
+                               [ 'Existent', 'Special:FooBar', [ [ 'immobile-target-namespace', 'Special' ] ] ],
+                       'Move to allowed content model' => [
+                               'MediaWiki:Existent.js',
+                               'MediaWiki:Nonexistent',
+                               [],
+                       ],
+                       'Move to prohibited content model' => [
+                               'Existent',
+                               'No content allowed',
+                               [ [ 'content-not-allowed-here', 'wikitext', 'No content allowed', 'main' ] ],
+                       ],
+                       'Aborted by hook' => [
+                               'Hooked in place',
+                               'Nonexistent',
+                               // @todo Error is wrong
+                               [ [ 'immobile-source-namespace', '' ] ],
+                       ],
+                       'Doubly aborted by hook' => [
+                               'Hooked in place',
+                               'Hooked In Place',
+                               // @todo Both errors are wrong
+                               [ [ 'immobile-source-namespace', '' ], [ 'immobile-target-namespace', '' ] ],
+                       ],
+                       'Non-file to file' =>
+                               [ 'Existent', 'File:Nonexistent.jpg', [ [ 'nonfile-cannot-move-to-file' ] ] ],
+                       'File to non-file' => [
+                               'File:Existent.jpg',
+                               'Nonexistent',
+                               [ [ 'imagenocrossnamespace' ] ],
+                       ],
+                       'Existing file to non-existing file' => [
+                               'File:Existent.jpg',
+                               'File:Nonexistent.jpg',
+                               [],
+                       ],
+                       'Existing file to existing file' => [
+                               'File:Existent.jpg',
+                               'File:Existent2.jpg',
+                               [ [ 'articleexists' ] ],
+                       ],
+                       'Existing file to existing file with no page' => [
+                               'File:Existent.jpg',
+                               'File:Existent-file-no-page.jpg',
+                               // @todo Is this correct? Moving over an existing file with no page should succeed?
+                               [],
+                       ],
+                       'Existing file to name with slash' => [
+                               'File:Existent.jpg',
+                               'File:Existent/slashed.jpg',
+                               [ [ 'imageinvalidfilename' ] ],
+                       ],
+                       'Mismatched file extension' => [
+                               'File:Existent.jpg',
+                               'File:Nonexistent.png',
+                               [ [ 'imagetypemismatch' ] ],
+                       ],
                ];
+               if ( $wgMultiContentRevisionSchemaMigrationStage === SCHEMA_COMPAT_OLD ) {
+                       // ContentHandlerUseDB = false only works with the old schema
+                       $ret['Move to different content model (ContentHandlerUseDB false)'] = [
+                               'MediaWiki:Existent.js',
+                               'MediaWiki:Nonexistent',
+                               [ [ 'bad-target-model', 'JavaScript', 'wikitext' ] ],
+                               [ 'ContentHandlerUseDB' => false ],
+                       ];
+               }
+               return $ret;
+       }
+
+       /**
+        * @dataProvider provideMove
+        * @covers MovePage::move
+        *
+        * @param string $old Old name
+        * @param string $new New name
+        * @param array $expectedErrors
+        * @param array $extraOptions
+        */
+       public function testMove( $old, $new, array $expectedErrors, array $extraOptions = [] ) {
+               if ( is_string( $old ) ) {
+                       $old = Title::newFromText( $old );
+               }
+               if ( is_string( $new ) ) {
+                       $new = Title::newFromText( $new );
+               }
+
+               $params = [ 'options' => $extraOptions ];
+               if ( $expectedErrors === [] ) {
+                       $this->markTestIncomplete( 'Checking actual moves has not yet been implemented' );
+               }
+
+               $obj = $this->newMovePage( $old, $new, $params );
+               $status = $obj->move( $this->getTestUser()->getUser() );
+               $this->assertSame( $expectedErrors, $status->getErrorsArray() );
+       }
+
+       public static function provideMove() {
+               $ret = [];
+               foreach ( self::provideIsValidMove() as $name => $arr ) {
+                       list( $old, $new, $expectedErrors, $extraOptions ) = array_pad( $arr, 4, [] );
+                       if ( !$new ) {
+                               // Not supported by testMove
+                               continue;
+                       }
+                       $ret[$name] = $arr;
+               }
+               return $ret;
+       }
+
+       /**
+        * Integration test to catch regressions like T74870. Taken and modified
+        * from SemanticMediaWiki
+        *
+        * @covers Title::moveTo
+        * @covers MovePage::move
+        */
+       public function testTitleMoveCompleteIntegrationTest() {
+               $this->hideDeprecated( 'Title::moveTo' );
+
+               $oldTitle = Title::newFromText( 'Help:Some title' );
+               WikiPage::factory( $oldTitle )->doEditContent( new WikitextContent( 'foo' ), 'bar' );
+               $newTitle = Title::newFromText( 'Help:Some other title' );
+               $this->assertNull(
+                       WikiPage::factory( $newTitle )->getRevision()
+               );
+
+               $this->assertTrue( $oldTitle->moveTo( $newTitle, false, 'test1', true ) );
+               $this->assertNotNull(
+                       WikiPage::factory( $oldTitle )->getRevision()
+               );
+               $this->assertNotNull(
+                       WikiPage::factory( $newTitle )->getRevision()
+               );
        }
 
        /**
@@ -62,7 +417,7 @@ class MovePageTest extends MediaWikiTestCase {
                $oldTitle = Title::newFromText( 'Some old title' );
                WikiPage::factory( $oldTitle )->doEditContent( new WikitextContent( 'foo' ), 'bar' );
                $newTitle = Title::newFromText( 'A brand new title' );
-               $mp = new MovePage( $oldTitle, $newTitle );
+               $mp = $this->newMovePage( $oldTitle, $newTitle );
                $user = User::newFromName( 'TitleMove tester' );
                $status = $mp->move( $user, 'Reason', true );
                $this->assertTrue( $status->hasMessage( $error ) );
index cd19cca..2148411 100644 (file)
@@ -874,6 +874,92 @@ class DerivedPageDataUpdaterTest extends MediaWikiTestCase {
                );
        }
 
+       /**
+        * * @covers \MediaWiki\Storage\DerivedPageDataUpdater::isCountable
+        */
+       public function testIsCountableNotContentPage() {
+               $updater = $this->getDerivedPageDataUpdater(
+                       Title::newFromText( 'Main_Page', NS_TALK )
+               );
+               self::assertFalse( $updater->isCountable() );
+       }
+
+       public function provideIsCountable() {
+               yield 'deleted revision' => [
+                       '$articleCountMethod' => 'any',
+                       '$wikitextContent' => 'Test',
+                       '$revisionVisibility' => RevisionRecord::SUPPRESSED_ALL,
+                       '$isCountable' => false
+               ];
+               yield 'redirect' => [
+                       '$articleCountMethod' => 'any',
+                       '$wikitextContent' => '#REDIRECT [[Main_Page]]',
+                       '$revisionVisibility' => 0,
+                       '$isCountable' => false
+               ];
+               yield 'no links count method any' => [
+                       '$articleCountMethod' => 'any',
+                       '$wikitextContent' => 'Test',
+                       '$revisionVisibility' => 0,
+                       '$isCountable' => true
+               ];
+               yield 'no links count method link' => [
+                       '$articleCountMethod' => 'link',
+                       '$wikitextContent' => 'Test',
+                       '$revisionVisibility' => 0,
+                       '$isCountable' => false
+               ];
+               yield 'with links count method link' => [
+                       '$articleCountMethod' => 'link',
+                       '$wikitextContent' => '[[Test]]',
+                       '$revisionVisibility' => 0,
+                       '$isCountable' => true
+               ];
+       }
+
+       /**
+        * @dataProvider provideIsCountable
+        *
+        * @param string $articleCountMethod
+        * @param string $wikitextContent
+        * @param int $revisionVisibility
+        * @param bool $isCountable
+        * @throws \MWException
+        * @covers \MediaWiki\Storage\DerivedPageDataUpdater::isCountable
+        */
+       public function testIsCountable(
+               $articleCountMethod,
+               $wikitextContent,
+               $revisionVisibility,
+               $isCountable
+       ) {
+               $this->setMwGlobals( [ 'wgArticleCountMethod' => $articleCountMethod ] );
+               $title = $this->getTitle( 'Main_Page' );
+               $content = new WikitextContent( $wikitextContent );
+               $update = new RevisionSlotsUpdate();
+               $update->modifyContent( SlotRecord::MAIN, $content );
+               $revision = $this->makeRevision( $title, $update, User::newFromName( 'Alice' ), 'rev1', 13 );
+               $revision->setVisibility( $revisionVisibility );
+               $updater = $this->getDerivedPageDataUpdater( $title );
+               $updater->prepareUpdate( $revision );
+               self::assertSame( $isCountable, $updater->isCountable() );
+       }
+
+       /**
+        * @throws \MWException
+        * @covers \MediaWiki\Storage\DerivedPageDataUpdater::isCountable
+        */
+       public function testIsCountableNoModifiedSlots() {
+               $page = $this->getPage( __METHOD__ );
+               $content = [ 'main' => new WikitextContent( '[[Test]]' ) ];
+               $rev = $this->createRevision( $page, 'first', $content );
+               $nullRevision = MutableRevisionRecord::newFromParentRevision( $rev );
+               $nullRevision->setId( 14 );
+               $updater = $this->getDerivedPageDataUpdater( $page, $nullRevision );
+               $updater->prepareUpdate( $nullRevision );
+               $this->assertTrue( $updater->isCountable() );
+       }
+
        /**
         * @covers \MediaWiki\Storage\DerivedPageDataUpdater::doUpdates()
         * @covers \MediaWiki\Storage\DerivedPageDataUpdater::doSecondaryDataUpdates()
index 773bd51..ca2e99f 100644 (file)
@@ -24,9 +24,7 @@ class TestUser {
 
        private function assertNotReal() {
                global $wgDBprefix;
-               if ( $wgDBprefix !== MediaWikiTestCase::DB_PREFIX &&
-                       $wgDBprefix !== MediaWikiTestCase::ORA_DB_PREFIX
-               ) {
+               if ( $wgDBprefix !== MediaWikiTestCase::DB_PREFIX ) {
                        throw new MWException( "Can't create user on real database" );
                }
        }
index 913f56d..6cfc377 100644 (file)
@@ -3,7 +3,6 @@
 use MediaWiki\Interwiki\InterwikiLookup;
 use MediaWiki\Linker\LinkTarget;
 use MediaWiki\MediaWikiServices;
-use Wikimedia\TestingAccessWrapper;
 
 /**
  * @group Database
@@ -22,12 +21,6 @@ class TitleTest extends MediaWikiTestCase {
                $this->setContentLang( 'en' );
        }
 
-       protected function tearDown() {
-               // For testNewMainPage
-               MessageCache::destroyInstance();
-               parent::tearDown();
-       }
-
        /**
         * @covers Title::legalChars
         */
@@ -286,45 +279,6 @@ class TitleTest extends MediaWikiTestCase {
                ];
        }
 
-       /**
-        * Auth-less test of Title::isValidMoveOperation
-        *
-        * @param string $source
-        * @param string $target
-        * @param array|string|bool $expected Required error
-        * @dataProvider provideTestIsValidMoveOperation
-        * @covers Title::isValidMoveOperation
-        */
-       public function testIsValidMoveOperation( $source, $target, $expected ) {
-               $this->hideDeprecated( 'Title::isValidMoveOperation' );
-
-               $this->setMwGlobals( 'wgContentHandlerUseDB', false );
-               $title = Title::newFromText( $source );
-               $nt = Title::newFromText( $target );
-               $errors = $title->isValidMoveOperation( $nt, false );
-               if ( $expected === true ) {
-                       $this->assertTrue( $errors );
-               } else {
-                       $errors = $this->flattenErrorsArray( $errors );
-                       foreach ( (array)$expected as $error ) {
-                               $this->assertContains( $error, $errors );
-                       }
-               }
-       }
-
-       public static function provideTestIsValidMoveOperation() {
-               return [
-                       // 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' ],
-               ];
-       }
-
        /**
         * Auth-less test of Title::userCan
         *
@@ -810,7 +764,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 );
 
@@ -993,6 +947,41 @@ class TitleTest extends MediaWikiTestCase {
                $title->getOtherPage();
        }
 
+       /**
+        * @dataProvider provideIsMovable
+        * @covers Title::isMovable
+        *
+        * @param string|Title $title
+        * @param bool $expected
+        * @param callable|null $hookCallback For TitleIsMovable
+        */
+       public function testIsMovable( $title, $expected, $hookCallback = null ) {
+               if ( $hookCallback ) {
+                       $this->setTemporaryHook( 'TitleIsMovable', $hookCallback );
+               }
+               if ( is_string( $title ) ) {
+                       $title = Title::newFromText( $title );
+               }
+
+               $this->assertSame( $expected, $title->isMovable() );
+       }
+
+       public static function provideIsMovable() {
+               return [
+                       'Simple title' => [ 'Foo', true ],
+                       // @todo Should these next two really be true?
+                       'Empty name' => [ Title::makeTitle( NS_MAIN, '' ), true ],
+                       'Invalid name' => [ Title::makeTitle( NS_MAIN, '<' ), true ],
+                       'Interwiki' => [ Title::makeTitle( NS_MAIN, 'Test', '', 'otherwiki' ), false ],
+                       'Special page' => [ 'Special:FooBar', false ],
+                       'Aborted by hook' => [ 'Hooked in place', false,
+                               function ( Title $title, &$result ) {
+                                       $result = false;
+                               }
+                       ],
+               ];
+       }
+
        public function provideCreateFragmentTitle() {
                return [
                        [ Title::makeTitle( NS_MAIN, 'Test' ), 'foo' ],
@@ -1288,10 +1277,11 @@ class TitleTest extends MediaWikiTestCase {
         * @covers Title::newMainPage
         */
        public function testNewMainPage() {
-               $msgCache = TestingAccessWrapper::newFromClass( MessageCache::class );
-               $msgCache->instance = $this->createMock( MessageCache::class );
-               $msgCache->instance->method( 'get' )->willReturn( 'Foresheet' );
-               $msgCache->instance->method( 'transform' )->willReturn( 'Foresheet' );
+               $mock = $this->createMock( MessageCache::class );
+               $mock->method( 'get' )->willReturn( 'Foresheet' );
+               $mock->method( 'transform' )->willReturn( 'Foresheet' );
+
+               $this->setService( 'MessageCache', $mock );
 
                $this->assertSame(
                        'Foresheet',
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 f42777c..71f76e7 100644 (file)
@@ -4,7 +4,6 @@ use MediaWiki\Block\BlockManager;
 use MediaWiki\Block\DatabaseBlock;
 use MediaWiki\Block\CompositeBlock;
 use MediaWiki\Block\SystemBlock;
-use MediaWiki\Config\ServiceOptions;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\TestingAccessWrapper;
 
@@ -14,6 +13,7 @@ use Wikimedia\TestingAccessWrapper;
  * @coversDefaultClass \MediaWiki\Block\BlockManager
  */
 class BlockManagerTest extends MediaWikiTestCase {
+       use TestAllServiceOptionsUsed;
 
        /** @var User */
        protected $user;
@@ -50,7 +50,8 @@ class BlockManagerTest extends MediaWikiTestCase {
                $this->setMwGlobals( $blockManagerConfig );
                $this->overrideMwServices();
                return [
-                       new ServiceOptions(
+                       new LoggedServiceOptions(
+                               self::$serviceOptionsAccessLog,
                                BlockManager::$constructorOptions,
                                MediaWikiServices::getInstance()->getMainConfig()
                        ),
@@ -680,4 +681,10 @@ class BlockManagerTest extends MediaWikiTestCase {
                ];
        }
 
+       /**
+        * @coversNothing
+        */
+       public function testAllServiceOptionsUsed() {
+               $this->assertAllServiceOptionsUsed( [ 'ApplyIpBlocksToXff', 'SoftBlockRanges' ] );
+       }
 }
index 35dacac..74ad84a 100644 (file)
@@ -13,7 +13,6 @@ class MessageCacheTest extends MediaWikiLangTestCase {
        protected function setUp() {
                parent::setUp();
                $this->configureLanguages();
-               MessageCache::destroyInstance();
                MessageCache::singleton()->enable();
        }
 
@@ -25,6 +24,7 @@ class MessageCacheTest extends MediaWikiLangTestCase {
                // let's choose e.g. German (de)
                $this->setUserLang( 'de' );
                $this->setContentLang( 'de' );
+               $this->resetServices();
        }
 
        function addDBDataOnce() {
@@ -152,7 +152,6 @@ class MessageCacheTest extends MediaWikiLangTestCase {
                ] );
                $this->overrideMwServices();
 
-               MessageCache::destroyInstance();
                $messageCache = MessageCache::singleton();
                $messageCache->enable();
 
@@ -260,7 +259,6 @@ class MessageCacheTest extends MediaWikiLangTestCase {
                $importer->import( $importRevision );
 
                // Now, load the message from the wiki page
-               MessageCache::destroyInstance();
                $messageCache = MessageCache::singleton();
                $messageCache->enable();
                $messageCache = TestingAccessWrapper::newFromObject( $messageCache );
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', '*' );
diff --git a/tests/phpunit/includes/config/LoggedServiceOptions.php b/tests/phpunit/includes/config/LoggedServiceOptions.php
new file mode 100644 (file)
index 0000000..41fdf24
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+
+use MediaWiki\Config\ServiceOptions;
+
+/**
+ * Helper for TestAllServiceOptionsUsed.
+ */
+class LoggedServiceOptions extends ServiceOptions {
+       /** @var array */
+       private $accessLog;
+
+       /**
+        * @param array &$accessLog Pass self::$serviceOptionsAccessLog from the class implementing
+        *   TestAllServiceOptionsUsed.
+        * @param string[] $keys
+        * @param mixed ...$args Forwarded to parent as-is.
+        */
+       public function __construct( array &$accessLog, array $keys, ...$args ) {
+               $this->accessLog = &$accessLog;
+               if ( !$accessLog ) {
+                       $accessLog = [ $keys, [] ];
+               }
+
+               parent::__construct( $keys, ...$args );
+       }
+
+       /**
+        * @param string $key
+        * @return mixed
+        */
+       public function get( $key ) {
+               $this->accessLog[1][$key] = true;
+
+               return parent::get( $key );
+       }
+}
diff --git a/tests/phpunit/includes/config/TestAllServiceOptionsUsed.php b/tests/phpunit/includes/config/TestAllServiceOptionsUsed.php
new file mode 100644 (file)
index 0000000..618472b
--- /dev/null
@@ -0,0 +1,48 @@
+<?php
+
+/**
+ * Use this trait to check that code run by tests accesses every key declared for this class'
+ * ServiceOptions, e.g., in a $constructorOptions member variable. To use this trait, you need to do
+ * two things (other than use-ing it):
+ *
+ * 1) Don't use the regular ServiceOptions when constructing your objects, but rather
+ * LoggedServiceOptions. These are used the same as ServiceOptions, except in the constructor, pass
+ * self::$serviceOptionsAccessLog before the regular arguments.
+ *
+ * 2) Make a test that calls assertAllServiceOptionsUsed(). If some ServiceOptions keys are not yet
+ * accessed in tests but actually are used by the class, pass their names as an argument.
+ *
+ * Currently we support only one ServiceOptions per test class.
+ */
+trait TestAllServiceOptionsUsed {
+       /** @var array [ expected keys (as list), keys accessed so far (as dictionary) ] */
+       private static $serviceOptionsAccessLog = [];
+
+       /**
+        * @param string[] $expectedUnused Options that we know are not yet tested
+        */
+       public function assertAllServiceOptionsUsed( array $expectedUnused = [] ) {
+               $this->assertNotEmpty( self::$serviceOptionsAccessLog,
+                       'You need to pass LoggedServiceOptions to your class instead of ServiceOptions ' .
+                       'for TestAllServiceOptionsUsed to work.'
+               );
+
+               list( $expected, $actual ) = self::$serviceOptionsAccessLog;
+
+               $expected = array_diff( $expected, $expectedUnused );
+
+               $this->assertSame(
+                       [],
+                       array_diff( $expected, array_keys( $actual ) ),
+                       "Some ServiceOptions keys were not accessed in tests. If they really aren't used, " .
+                       "remove them from the class' option list. If they are used, add tests to cover them, " .
+                       "or ignore the problem for now by passing them to assertAllServiceOptionsUsed() in " .
+                       "its \$expectedUnused argument."
+               );
+
+               if ( $expectedUnused ) {
+                       $this->markTestIncomplete( 'Some ServiceOptions keys are not yet accessed by tests: ' .
+                               implode( ', ', $expectedUnused ) );
+               }
+       }
+}
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..981b4ad 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 it auto-commits 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 [
                        [
diff --git a/tests/phpunit/includes/libs/filebackend/fsfile/TempFSFileIntegrationTest.php b/tests/phpunit/includes/libs/filebackend/fsfile/TempFSFileIntegrationTest.php
new file mode 100644 (file)
index 0000000..42805b2
--- /dev/null
@@ -0,0 +1,9 @@
+<?php
+
+class TempFSFileIntegrationTest extends MediaWikiIntegrationTestCase {
+       use TempFSFileTestTrait;
+
+       private function newFile() {
+               return TempFSFile::factory( 'tmp' );
+       }
+}
index 4a56fc5..f496fa3 100644 (file)
@@ -19,9 +19,10 @@ class BagOStuffTest extends MediaWikiTestCase {
 
                // type defined through parameter
                if ( $this->getCliArg( 'use-bagostuff' ) !== null ) {
-                       $name = $this->getCliArg( 'use-bagostuff' );
+                       global $wgObjectCaches;
 
-                       $this->cache = ObjectCache::newFromId( $name );
+                       $id = $this->getCliArg( 'use-bagostuff' );
+                       $this->cache = ObjectCache::newFromParams( $wgObjectCaches[$id] );
                } else {
                        // no type defined - use simple hash
                        $this->cache = new HashBagOStuff;
@@ -36,7 +37,7 @@ class BagOStuffTest extends MediaWikiTestCase {
         * @covers MediumSpecificBagOStuff::makeKeyInternal
         */
        public function testMakeKey() {
-               $cache = ObjectCache::newFromId( 'hash' );
+               $cache = new HashBagOStuff();
 
                $localKey = $cache->makeKey( 'first', 'second', 'third' );
                $globalKey = $cache->makeGlobalKey( 'first', 'second', 'third' );
@@ -112,21 +113,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 +174,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 +183,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 +196,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 +244,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 +261,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" );
        }
 
        /**
@@ -353,24 +381,39 @@ class BagOStuffTest extends MediaWikiTestCase {
                        return $oldValue . '!';
                };
 
-               foreach ( [ $tiny, $small, $big ] as $value ) {
+               $cases = [ 'tiny' => $tiny, 'small' => $small, 'big' => $big ];
+               foreach ( $cases as $case => $value ) {
                        $this->cache->set( $key, $value, 10, BagOStuff::WRITE_ALLOW_SEGMENTS );
-                       $this->assertEquals( $value, $this->cache->get( $key ) );
-                       $this->assertEquals( $value, $this->cache->getMulti( [ $key ] )[$key] );
-
-                       $this->assertTrue( $this->cache->merge( $key, $callback, 5 ) );
-                       $this->assertEquals( "$value!", $this->cache->get( $key ) );
-                       $this->assertEquals( "$value!", $this->cache->getMulti( [ $key ] )[$key] );
-
-                       $this->assertTrue( $this->cache->deleteMulti( [ $key ] ) );
-                       $this->assertFalse( $this->cache->get( $key ) );
-                       $this->assertEquals( [], $this->cache->getMulti( [ $key ] ) );
+                       $this->assertEquals( $value, $this->cache->get( $key ), "get $case" );
+                       $this->assertEquals( $value, $this->cache->getMulti( [ $key ] )[$key], "get $case" );
+
+                       $this->assertTrue(
+                               $this->cache->merge( $key, $callback, 5, 1, BagOStuff::WRITE_ALLOW_SEGMENTS ),
+                               "merge $case"
+                       );
+                       $this->assertEquals(
+                               "$value!",
+                               $this->cache->get( $key ),
+                               "merged $case"
+                       );
+                       $this->assertEquals(
+                               "$value!",
+                               $this->cache->getMulti( [ $key ] )[$key],
+                               "merged $case"
+                       );
+
+                       $this->assertTrue( $this->cache->deleteMulti( [ $key ] ), "delete $case" );
+                       $this->assertFalse( $this->cache->get( $key ), "deleted $case" );
+                       $this->assertEquals( [], $this->cache->getMulti( [ $key ] ), "deletd $case" );
 
                        $this->cache->set( $key, "@$value", 10, BagOStuff::WRITE_ALLOW_SEGMENTS );
-                       $this->assertEquals( "@$value", $this->cache->get( $key ) );
-                       $this->assertTrue( $this->cache->delete( $key, BagOStuff::WRITE_PRUNE_SEGMENTS ) );
-                       $this->assertFalse( $this->cache->get( $key ) );
-                       $this->assertEquals( [], $this->cache->getMulti( [ $key ] ) );
+                       $this->assertEquals( "@$value", $this->cache->get( $key ), "get $case" );
+                       $this->assertTrue(
+                               $this->cache->delete( $key, BagOStuff::WRITE_PRUNE_SEGMENTS ),
+                               "prune $case"
+                       );
+                       $this->assertFalse( $this->cache->get( $key ), "pruned $case" );
+                       $this->assertEquals( [], $this->cache->getMulti( [ $key ] ), "pruned $case" );
                }
 
                $this->cache->set( $key, 666, 10, BagOStuff::WRITE_ALLOW_SEGMENTS );
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 ) );
diff --git a/tests/phpunit/includes/libs/services/ServiceContainerTest.php b/tests/phpunit/includes/libs/services/ServiceContainerTest.php
deleted file mode 100644 (file)
index 6e51883..0000000
+++ /dev/null
@@ -1,497 +0,0 @@
-<?php
-
-use Wikimedia\Services\ServiceContainer;
-
-/**
- * @covers Wikimedia\Services\ServiceContainer
- */
-class ServiceContainerTest extends PHPUnit\Framework\TestCase {
-
-       use MediaWikiCoversValidator; // TODO this library is supposed to be independent of MediaWiki
-       use PHPUnit4And6Compat;
-
-       private function newServiceContainer( $extraArgs = [] ) {
-               return new ServiceContainer( $extraArgs );
-       }
-
-       public function testGetServiceNames() {
-               $services = $this->newServiceContainer();
-               $names = $services->getServiceNames();
-
-               $this->assertInternalType( 'array', $names );
-               $this->assertEmpty( $names );
-
-               $name = 'TestService92834576';
-               $services->defineService( $name, function () {
-                       return null;
-               } );
-
-               $names = $services->getServiceNames();
-               $this->assertContains( $name, $names );
-       }
-
-       public function testHasService() {
-               $services = $this->newServiceContainer();
-
-               $name = 'TestService92834576';
-               $this->assertFalse( $services->hasService( $name ) );
-
-               $services->defineService( $name, function () {
-                       return null;
-               } );
-
-               $this->assertTrue( $services->hasService( $name ) );
-       }
-
-       public function testGetService() {
-               $services = $this->newServiceContainer( [ 'Foo' ] );
-
-               $theService = new stdClass();
-               $name = 'TestService92834576';
-               $count = 0;
-
-               $services->defineService(
-                       $name,
-                       function ( $actualLocator, $extra ) use ( $services, $theService, &$count ) {
-                               $count++;
-                               PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
-                               PHPUnit_Framework_Assert::assertSame( $extra, 'Foo' );
-                               return $theService;
-                       }
-               );
-
-               $this->assertSame( $theService, $services->getService( $name ) );
-
-               $services->getService( $name );
-               $this->assertSame( 1, $count, 'instantiator should be called exactly once!' );
-       }
-
-       public function testGetService_fail_unknown() {
-               $services = $this->newServiceContainer();
-
-               $name = 'TestService92834576';
-
-               $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class );
-
-               $services->getService( $name );
-       }
-
-       public function testPeekService() {
-               $services = $this->newServiceContainer();
-
-               $services->defineService(
-                       'Foo',
-                       function () {
-                               return new stdClass();
-                       }
-               );
-
-               $services->defineService(
-                       'Bar',
-                       function () {
-                               return new stdClass();
-                       }
-               );
-
-               // trigger instantiation of Foo
-               $services->getService( 'Foo' );
-
-               $this->assertInternalType(
-                       'object',
-                       $services->peekService( 'Foo' ),
-                       'Peek should return the service object if it had been accessed before.'
-               );
-
-               $this->assertNull(
-                       $services->peekService( 'Bar' ),
-                       'Peek should return null if the service was never accessed.'
-               );
-       }
-
-       public function testPeekService_fail_unknown() {
-               $services = $this->newServiceContainer();
-
-               $name = 'TestService92834576';
-
-               $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class );
-
-               $services->peekService( $name );
-       }
-
-       public function testDefineService() {
-               $services = $this->newServiceContainer();
-
-               $theService = new stdClass();
-               $name = 'TestService92834576';
-
-               $services->defineService( $name, function ( $actualLocator ) use ( $services, $theService ) {
-                       PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
-                       return $theService;
-               } );
-
-               $this->assertTrue( $services->hasService( $name ) );
-               $this->assertSame( $theService, $services->getService( $name ) );
-       }
-
-       public function testDefineService_fail_duplicate() {
-               $services = $this->newServiceContainer();
-
-               $theService = new stdClass();
-               $name = 'TestService92834576';
-
-               $services->defineService( $name, function () use ( $theService ) {
-                       return $theService;
-               } );
-
-               $this->setExpectedException( Wikimedia\Services\ServiceAlreadyDefinedException::class );
-
-               $services->defineService( $name, function () use ( $theService ) {
-                       return $theService;
-               } );
-       }
-
-       public function testApplyWiring() {
-               $services = $this->newServiceContainer();
-
-               $wiring = [
-                       'Foo' => function () {
-                               return 'Foo!';
-                       },
-                       'Bar' => function () {
-                               return 'Bar!';
-                       },
-               ];
-
-               $services->applyWiring( $wiring );
-
-               $this->assertSame( 'Foo!', $services->getService( 'Foo' ) );
-               $this->assertSame( 'Bar!', $services->getService( 'Bar' ) );
-       }
-
-       public function testImportWiring() {
-               $services = $this->newServiceContainer();
-
-               $wiring = [
-                       'Foo' => function () {
-                               return 'Foo!';
-                       },
-                       'Bar' => function () {
-                               return 'Bar!';
-                       },
-                       'Car' => function () {
-                               return 'FUBAR!';
-                       },
-               ];
-
-               $services->applyWiring( $wiring );
-
-               $services->addServiceManipulator( 'Foo', function ( $service ) {
-                       return $service . '+X';
-               } );
-
-               $services->addServiceManipulator( 'Car', function ( $service ) {
-                       return $service . '+X';
-               } );
-
-               $newServices = $this->newServiceContainer();
-
-               // create a service with manipulator
-               $newServices->defineService( 'Foo', function () {
-                       return 'Foo!';
-               } );
-
-               $newServices->addServiceManipulator( 'Foo', function ( $service ) {
-                       return $service . '+Y';
-               } );
-
-               // create a service before importing, so we can later check that
-               // existing service instances survive importWiring()
-               $newServices->defineService( 'Car', function () {
-                       return 'Car!';
-               } );
-
-               // force instantiation
-               $newServices->getService( 'Car' );
-
-               // Define another service, so we can later check that extra wiring
-               // is not lost.
-               $newServices->defineService( 'Xar', function () {
-                       return 'Xar!';
-               } );
-
-               // import wiring, but skip `Bar`
-               $newServices->importWiring( $services, [ 'Bar' ] );
-
-               $this->assertNotContains( 'Bar', $newServices->getServiceNames(), 'Skip `Bar` service' );
-               $this->assertSame( 'Foo!+Y+X', $newServices->getService( 'Foo' ) );
-
-               // import all wiring, but preserve existing service instance
-               $newServices->importWiring( $services );
-
-               $this->assertContains( 'Bar', $newServices->getServiceNames(), 'Import all services' );
-               $this->assertSame( 'Bar!', $newServices->getService( 'Bar' ) );
-               $this->assertSame( 'Car!', $newServices->getService( 'Car' ), 'Use existing service instance' );
-               $this->assertSame( 'Xar!', $newServices->getService( 'Xar' ), 'Predefined services are kept' );
-       }
-
-       public function testLoadWiringFiles() {
-               $services = $this->newServiceContainer();
-
-               $wiringFiles = [
-                       __DIR__ . '/TestWiring1.php',
-                       __DIR__ . '/TestWiring2.php',
-               ];
-
-               $services->loadWiringFiles( $wiringFiles );
-
-               $this->assertSame( 'Foo!', $services->getService( 'Foo' ) );
-               $this->assertSame( 'Bar!', $services->getService( 'Bar' ) );
-       }
-
-       public function testLoadWiringFiles_fail_duplicate() {
-               $services = $this->newServiceContainer();
-
-               $wiringFiles = [
-                       __DIR__ . '/TestWiring1.php',
-                       __DIR__ . '/./TestWiring1.php',
-               ];
-
-               // loading the same file twice should fail, because
-               $this->setExpectedException( Wikimedia\Services\ServiceAlreadyDefinedException::class );
-
-               $services->loadWiringFiles( $wiringFiles );
-       }
-
-       public function testRedefineService() {
-               $services = $this->newServiceContainer( [ 'Foo' ] );
-
-               $theService1 = new stdClass();
-               $name = 'TestService92834576';
-
-               $services->defineService( $name, function () {
-                       PHPUnit_Framework_Assert::fail(
-                               'The original instantiator function should not get called'
-                       );
-               } );
-
-               // redefine before instantiation
-               $services->redefineService(
-                       $name,
-                       function ( $actualLocator, $extra ) use ( $services, $theService1 ) {
-                               PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
-                               PHPUnit_Framework_Assert::assertSame( 'Foo', $extra );
-                               return $theService1;
-                       }
-               );
-
-               // force instantiation, check result
-               $this->assertSame( $theService1, $services->getService( $name ) );
-       }
-
-       public function testRedefineService_disabled() {
-               $services = $this->newServiceContainer( [ 'Foo' ] );
-
-               $theService1 = new stdClass();
-               $name = 'TestService92834576';
-
-               $services->defineService( $name, function () {
-                       return 'Foo';
-               } );
-
-               // disable the service. we should be able to redefine it anyway.
-               $services->disableService( $name );
-
-               $services->redefineService( $name, function () use ( $theService1 ) {
-                       return $theService1;
-               } );
-
-               // force instantiation, check result
-               $this->assertSame( $theService1, $services->getService( $name ) );
-       }
-
-       public function testRedefineService_fail_undefined() {
-               $services = $this->newServiceContainer();
-
-               $theService = new stdClass();
-               $name = 'TestService92834576';
-
-               $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class );
-
-               $services->redefineService( $name, function () use ( $theService ) {
-                       return $theService;
-               } );
-       }
-
-       public function testRedefineService_fail_in_use() {
-               $services = $this->newServiceContainer( [ 'Foo' ] );
-
-               $theService = new stdClass();
-               $name = 'TestService92834576';
-
-               $services->defineService( $name, function () {
-                       return 'Foo';
-               } );
-
-               // create the service, so it can no longer be redefined
-               $services->getService( $name );
-
-               $this->setExpectedException( Wikimedia\Services\CannotReplaceActiveServiceException::class );
-
-               $services->redefineService( $name, function () use ( $theService ) {
-                       return $theService;
-               } );
-       }
-
-       public function testAddServiceManipulator() {
-               $services = $this->newServiceContainer( [ 'Foo' ] );
-
-               $theService1 = new stdClass();
-               $theService2 = new stdClass();
-               $name = 'TestService92834576';
-
-               $services->defineService(
-                       $name,
-                       function ( $actualLocator, $extra ) use ( $services, $theService1 ) {
-                               PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
-                               PHPUnit_Framework_Assert::assertSame( 'Foo', $extra );
-                               return $theService1;
-                       }
-               );
-
-               $services->addServiceManipulator(
-                       $name,
-                       function (
-                               $theService, $actualLocator, $extra
-                       ) use (
-                               $services, $theService1, $theService2
-                       ) {
-                               PHPUnit_Framework_Assert::assertSame( $theService1, $theService );
-                               PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
-                               PHPUnit_Framework_Assert::assertSame( 'Foo', $extra );
-                               return $theService2;
-                       }
-               );
-
-               // force instantiation, check result
-               $this->assertSame( $theService2, $services->getService( $name ) );
-       }
-
-       public function testAddServiceManipulator_fail_undefined() {
-               $services = $this->newServiceContainer();
-
-               $theService = new stdClass();
-               $name = 'TestService92834576';
-
-               $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class );
-
-               $services->addServiceManipulator( $name, function () use ( $theService ) {
-                       return $theService;
-               } );
-       }
-
-       public function testAddServiceManipulator_fail_in_use() {
-               $services = $this->newServiceContainer( [ 'Foo' ] );
-
-               $theService = new stdClass();
-               $name = 'TestService92834576';
-
-               $services->defineService( $name, function () use ( $theService ) {
-                       return $theService;
-               } );
-
-               // create the service, so it can no longer be redefined
-               $services->getService( $name );
-
-               $this->setExpectedException( Wikimedia\Services\CannotReplaceActiveServiceException::class );
-
-               $services->addServiceManipulator( $name, function () {
-                       return 'Foo';
-               } );
-       }
-
-       public function testDisableService() {
-               $services = $this->newServiceContainer( [ 'Foo' ] );
-
-               $destructible = $this->getMockBuilder( Wikimedia\Services\DestructibleService::class )
-                       ->getMock();
-               $destructible->expects( $this->once() )
-                       ->method( 'destroy' );
-
-               $services->defineService( 'Foo', function () use ( $destructible ) {
-                       return $destructible;
-               } );
-               $services->defineService( 'Bar', function () {
-                       return new stdClass();
-               } );
-               $services->defineService( 'Qux', function () {
-                       return new stdClass();
-               } );
-
-               // instantiate Foo and Bar services
-               $services->getService( 'Foo' );
-               $services->getService( 'Bar' );
-
-               // disable service, should call destroy() once.
-               $services->disableService( 'Foo' );
-
-               // disabled service should still be listed
-               $this->assertContains( 'Foo', $services->getServiceNames() );
-
-               // getting other services should still work
-               $services->getService( 'Bar' );
-
-               // disable non-destructible service, and not-yet-instantiated service
-               $services->disableService( 'Bar' );
-               $services->disableService( 'Qux' );
-
-               $this->assertNull( $services->peekService( 'Bar' ) );
-               $this->assertNull( $services->peekService( 'Qux' ) );
-
-               // disabled service should still be listed
-               $this->assertContains( 'Bar', $services->getServiceNames() );
-               $this->assertContains( 'Qux', $services->getServiceNames() );
-
-               $this->setExpectedException( Wikimedia\Services\ServiceDisabledException::class );
-               $services->getService( 'Qux' );
-       }
-
-       public function testDisableService_fail_undefined() {
-               $services = $this->newServiceContainer();
-
-               $theService = new stdClass();
-               $name = 'TestService92834576';
-
-               $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class );
-
-               $services->redefineService( $name, function () use ( $theService ) {
-                       return $theService;
-               } );
-       }
-
-       public function testDestroy() {
-               $services = $this->newServiceContainer();
-
-               $destructible = $this->getMockBuilder( Wikimedia\Services\DestructibleService::class )
-                       ->getMock();
-               $destructible->expects( $this->once() )
-                       ->method( 'destroy' );
-
-               $services->defineService( 'Foo', function () use ( $destructible ) {
-                       return $destructible;
-               } );
-
-               $services->defineService( 'Bar', function () {
-                       return new stdClass();
-               } );
-
-               // create the service
-               $services->getService( 'Foo' );
-
-               // destroy the container
-               $services->destroy();
-
-               $this->setExpectedException( Wikimedia\Services\ContainerDisabledException::class );
-               $services->getService( 'Bar' );
-       }
-
-}
diff --git a/tests/phpunit/includes/libs/services/TestWiring1.php b/tests/phpunit/includes/libs/services/TestWiring1.php
deleted file mode 100644 (file)
index b6ff4eb..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * Test file for testing ServiceContainer::loadWiringFiles
- */
-
-return [
-       'Foo' => function () {
-               return 'Foo!';
-       },
-];
diff --git a/tests/phpunit/includes/libs/services/TestWiring2.php b/tests/phpunit/includes/libs/services/TestWiring2.php
deleted file mode 100644 (file)
index dfff64f..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-/**
- * Test file for testing ServiceContainer::loadWiringFiles
- */
-
-return [
-       'Bar' => function () {
-               return 'Bar!';
-       },
-];
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 ];
        }
 
        /**
diff --git a/tests/phpunit/includes/parser/ParserFactoryIntegrationTest.php b/tests/phpunit/includes/parser/ParserFactoryIntegrationTest.php
new file mode 100644 (file)
index 0000000..5bf4f3f
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * @covers ParserFactory
+ */
+class ParserFactoryIntegrationTest extends MediaWikiIntegrationTestCase {
+       public function provideConstructorArguments() {
+               // Create a mock Config object that will satisfy ServiceOptions::__construct
+               $mockConfig = $this->createMock( 'Config' );
+               $mockConfig->method( 'has' )->willReturn( true );
+               $mockConfig->method( 'get' )->willReturn( 'I like otters.' );
+
+               $mocks = [
+                       [ 'the plural of platypus...' ],
+                       $this->createMock( 'MagicWordFactory' ),
+                       $this->createMock( 'Language' ),
+                       '...is platypodes',
+                       $this->createMock( 'MediaWiki\Special\SpecialPageFactory' ),
+                       $mockConfig,
+                       $this->createMock( 'MediaWiki\Linker\LinkRendererFactory' ),
+               ];
+
+               yield 'args_without_namespace_info' => [
+                       $mocks,
+               ];
+               yield 'args_with_namespace_info' => [
+                       array_merge( $mocks, [ $this->createMock( 'NamespaceInfo' ) ] ),
+               ];
+       }
+
+       /**
+        * @dataProvider provideConstructorArguments
+        * @covers ParserFactory::__construct
+        */
+       public function testBackwardsCompatibleConstructorArguments( $args ) {
+               $this->hideDeprecated( 'ParserFactory::__construct with Config parameter' );
+               $factory = new ParserFactory( ...$args );
+               $parser = $factory->create();
+
+               // It is expected that these are not present on the parser.
+               unset( $args[5] );
+               unset( $args[0] );
+
+               foreach ( ( new ReflectionObject( $parser ) )->getProperties() as $prop ) {
+                       $prop->setAccessible( true );
+                       foreach ( $args as $idx => $mockTest ) {
+                               if ( $prop->getValue( $parser ) === $mockTest ) {
+                                       unset( $args[$idx] );
+                               }
+                       }
+               }
+
+               $this->assertCount( 0, $args, 'Not all arguments to the ParserFactory constructor were ' .
+                       'found in Parser member variables' );
+       }
+}
diff --git a/tests/phpunit/includes/parser/ParserFactoryTest.php b/tests/phpunit/includes/parser/ParserFactoryTest.php
deleted file mode 100644 (file)
index 048256d..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-
-/**
- * @covers ParserFactory
- */
-class ParserFactoryTest extends MediaWikiTestCase {
-       /**
-        * For backwards compatibility, all parameters to the parser constructor are optional and
-        * default to the appropriate global service, so it's easy to forget to update ParserFactory to
-        * actually pass the parameters it's supposed to.
-        */
-       public function testConstructorArgNum() {
-               $factoryConstructor = new ReflectionMethod( 'ParserFactory', '__construct' );
-               $instanceConstructor = new ReflectionMethod( 'Parser', '__construct' );
-               // Subtract one for the ParserFactory itself
-               $this->assertSame( $instanceConstructor->getNumberOfParameters() - 1,
-                       $factoryConstructor->getNumberOfParameters(),
-                       'Parser and ParserFactory constructors have an inconsistent number of parameters. ' .
-                       'Did you add a parameter to one and not the other?' );
-       }
-
-       public function testAllArgumentsWerePassed() {
-               $factoryConstructor = new ReflectionMethod( 'ParserFactory', '__construct' );
-               $mocks = [];
-               foreach ( $factoryConstructor->getParameters() as $index => $param ) {
-                       $type = (string)$param->getType();
-                       if ( $index === 0 ) {
-                               $val = $this->createMock( 'MediaWiki\Config\ServiceOptions' );
-                       } elseif ( $type === 'array' ) {
-                               $val = [ 'porcupines will tell me your secrets' . count( $mocks ) ];
-                       } elseif ( class_exists( $type ) || interface_exists( $type ) ) {
-                               $val = $this->createMock( $type );
-                       } elseif ( $type === '' ) {
-                               // Optimistically assume a string is okay
-                               $val = 'I will de-quill them first' . count( $mocks );
-                       } else {
-                               $this->fail( "Unrecognized parameter type $type in ParserFactory constructor" );
-                       }
-                       $mocks[] = $val;
-               }
-
-               $factory = new ParserFactory( ...$mocks );
-               $parser = $factory->create();
-
-               foreach ( ( new ReflectionObject( $parser ) )->getProperties() as $prop ) {
-                       $prop->setAccessible( true );
-                       foreach ( $mocks as $idx => $mock ) {
-                               if ( $prop->getValue( $parser ) === $mock ) {
-                                       unset( $mocks[$idx] );
-                               }
-                       }
-               }
-
-               $this->assertCount( 0, $mocks, 'Not all arguments to the ParserFactory constructor were ' .
-                       'found in Parser member variables' );
-       }
-
-       public function provideConstructorArguments() {
-               // Create a mock Config object that will satisfy ServiceOptions::__construct
-               $mockConfig = $this->createMock( 'Config' );
-               $mockConfig->method( 'has' )->willReturn( true );
-               $mockConfig->method( 'get' )->willReturn( 'I like otters.' );
-
-               $mocks = [
-                       [ 'the plural of platypus...' ],
-                       $this->createMock( 'MagicWordFactory' ),
-                       $this->createMock( 'Language' ),
-                       '...is platypodes',
-                       $this->createMock( 'MediaWiki\Special\SpecialPageFactory' ),
-                       $mockConfig,
-                       $this->createMock( 'MediaWiki\Linker\LinkRendererFactory' ),
-               ];
-
-               yield 'args_without_namespace_info' => [
-                       $mocks,
-               ];
-               yield 'args_with_namespace_info' => [
-                       array_merge( $mocks, [ $this->createMock( 'NamespaceInfo' ) ] ),
-               ];
-       }
-
-       /**
-        * @dataProvider provideConstructorArguments
-        * @covers ParserFactory::__construct
-        */
-       public function testBackwardsCompatibleConstructorArguments( $args ) {
-               $this->hideDeprecated( 'ParserFactory::__construct with Config parameter' );
-               $factory = new ParserFactory( ...$args );
-               $parser = $factory->create();
-
-               // It is expected that these are not present on the parser.
-               unset( $args[5] );
-               unset( $args[0] );
-
-               foreach ( ( new ReflectionObject( $parser ) )->getProperties() as $prop ) {
-                       $prop->setAccessible( true );
-                       foreach ( $args as $idx => $mockTest ) {
-                               if ( $prop->getValue( $parser ) === $mockTest ) {
-                                       unset( $args[$idx] );
-                               }
-                       }
-               }
-
-               $this->assertCount( 0, $args, 'Not all arguments to the ParserFactory constructor were ' .
-                       'found in Parser member variables' );
-       }
-}
index b518040..6de5617 100644 (file)
@@ -88,6 +88,10 @@ class Argon2PasswordTest extends PasswordTestCase {
        }
 
        public function testPartialConfig() {
+               // The default options changed in PHP 7.2.21 and 7.3.8. This seems to be the only way to
+               // fetch them at runtime.
+               $options = password_get_info( password_hash( '', PASSWORD_ARGON2I ) )['options'];
+
                $factory = new PasswordFactory();
                $factory->register( 'argon2', [
                        'class' => Argon2Password::class,
@@ -96,7 +100,14 @@ class Argon2PasswordTest extends PasswordTestCase {
 
                $partialPassword = $factory->newFromType( 'argon2' );
                $partialPassword->crypt( 'password' );
-               $fullPassword = $this->passwordFactory->newFromCiphertext( $partialPassword->toString() );
+
+               $factory2 = new PasswordFactory();
+               $factory2->register( 'argon2', [
+                       'class' => Argon2Password::class,
+                       'algo' => 'argon2i',
+               ] + $options );
+
+               $fullPassword = $factory2->newFromCiphertext( $partialPassword->toString() );
 
                $this->assertFalse( $fullPassword->needsUpdate(),
                        'Options not set for a password should fall back to defaults'
index a00eb3f..e7f7067 100644 (file)
@@ -1,7 +1,6 @@
 <?php
 
 use MediaWiki\Auth\AuthManager;
-use MediaWiki\Config\ServiceOptions;
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Preferences\DefaultPreferencesFactory;
 use Wikimedia\TestingAccessWrapper;
@@ -29,6 +28,7 @@ use Wikimedia\TestingAccessWrapper;
  * @group Preferences
  */
 class DefaultPreferencesFactoryTest extends \MediaWikiTestCase {
+       use TestAllServiceOptionsUsed;
 
        /** @var IContextSource */
        protected $context;
@@ -60,7 +60,8 @@ class DefaultPreferencesFactoryTest extends \MediaWikiTestCase {
                        ->method( $this->anythingBut( 'getValidNamespaces', '__destruct' ) );
 
                return new DefaultPreferencesFactory(
-                       new ServiceOptions( DefaultPreferencesFactory::$constructorOptions, $this->config ),
+                       new LoggedServiceOptions( self::$serviceOptionsAccessLog,
+                               DefaultPreferencesFactory::$constructorOptions, $this->config ),
                        new Language(),
                        AuthManager::singleton(),
                        MediaWikiServices::getInstance()->getLinkRenderer(),
@@ -237,4 +238,11 @@ class DefaultPreferencesFactoryTest extends \MediaWikiTestCase {
                $form->trySubmit();
                $this->assertEquals( 12, $user->getOption( 'rclimit' ) );
        }
+
+       /**
+        * @coversNothing
+        */
+       public function testAllServiceOptionsUsed() {
+               $this->assertAllServiceOptionsUsed( [ 'EnotifMinorEdits', 'EnotifRevealEditorAddress' ] );
+       }
 }
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..9d58cef 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use MediaWiki\MediaWikiServices;
 use Wikimedia\TestingAccessWrapper;
 
 /**
@@ -169,6 +170,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
@@ -196,6 +210,19 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                );
        }
 
+       public function testRcNsFilterAllContents() {
+               $namespaces = MediaWikiServices::getInstance()->getNamespaceInfo()->getSubjectNamespaces();
+               $this->assertConditions(
+                       [ # expected
+                               'rc_namespace IN (' . $this->db->makeList( $namespaces ) . ')',
+                       ],
+                       [
+                               'namespace' => 'all-contents',
+                       ],
+                       "rc conditions with all-contents"
+               );
+       }
+
        public function testRcHidemyselfFilter() {
                $this->setMwGlobals( 'wgActorTableSchemaMigrationStage', SCHEMA_COMPAT_NEW );
                $this->overrideMwServices();
index fdd200b..29a7441 100644 (file)
@@ -20,6 +20,7 @@
  */
 
 use MediaWiki\Interwiki\InterwikiLookup;
+use Wikimedia\TestingAccessWrapper;
 
 /**
  * @covers MediaWikiTitleCodec
@@ -88,24 +89,50 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
        }
 
        /**
-        * Returns a mock NamespaceInfo that has only a hasGenderDistinction() method, which assumes
-        * only NS_USER and NS_USER_TALK have a gender distinction. All other methods throw.
+        * Returns a mock NamespaceInfo that has only the following methods:
+        *
+        *  * exists()
+        *  * getCanonicalName()
+        *  * hasGenderDistinction()
+        *  * isCapitalized()
+        *
+        * All other methods throw. The only namespaces that exist are NS_SPECIAL, NS_MAIN, NS_TALK,
+        * NS_USER, and NS_USER_TALK. NS_USER and NS_USER_TALK have gender distinctions. All namespaces
+        * are capitalized.
         *
         * @return NamespaceInfo
         */
        private function getNamespaceInfo() : NamespaceInfo {
+               $canonicalNamespaces = [
+                       NS_SPECIAL => 'Special',
+                       NS_MAIN => '',
+                       NS_TALK => 'Talk',
+                       NS_USER => 'User',
+                       NS_USER_TALK => 'User_talk',
+               ];
+
                $nsInfo = $this->createMock( NamespaceInfo::class );
 
-               $nsInfo->expects( $this->any() )
-                       ->method( 'hasGenderDistinction' )
+               $nsInfo->method( 'exists' )
+                       ->will( $this->returnCallback( function ( $ns ) use ( $canonicalNamespaces ) {
+                               return isset( $canonicalNamespaces[$ns] );
+                       } ) );
+
+               $nsInfo->method( 'getCanonicalName' )
+                       ->will( $this->returnCallback( function ( $ns ) use ( $canonicalNamespaces ) {
+                               return $canonicalNamespaces[$ns] ?? false;
+                       } ) );
+
+               $nsInfo->method( 'hasGenderDistinction' )
                        ->will( $this->returnCallback( function ( $ns ) {
                                return $ns === NS_USER || $ns === NS_USER_TALK;
                        } ) );
 
-               $nsInfo->expects( $this->never() )
-                       ->method( $this->callback( function ( $name ) {
-                               return $name !== 'hasGenderDistinction';
-                       } ) );
+               $nsInfo->method( 'isCapitalized' )->willReturn( true );
+
+               $nsInfo->expects( $this->never() )->method( $this->anythingBut(
+                       'exists', 'getCanonicalName', 'hasGenderDistinction', 'isCapitalized'
+               ) );
 
                return $nsInfo;
        }
@@ -114,7 +141,7 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
                return new MediaWikiTitleCodec(
                        Language::factory( $lang ),
                        $this->getGenderCache(),
-                       [],
+                       [ 'localtestiw' ],
                        $this->getInterwikiLookup(),
                        $this->getNamespaceInfo()
                );
@@ -436,6 +463,370 @@ class MediaWikiTitleCodecTest extends MediaWikiTestCase {
                $codec->parseTitle( $text, NS_MAIN );
        }
 
+       /**
+        * @dataProvider provideMakeTitleValueSafe
+        * @covers IP::sanitizeIP
+        */
+       public function testMakeTitleValueSafe(
+               $expected, $ns, $text, $fragment = '', $interwiki = '', $lang = 'en'
+       ) {
+               $codec = $this->makeCodec( $lang );
+               $this->assertEquals( $expected,
+                       $codec->makeTitleValueSafe( $ns, $text, $fragment, $interwiki ) );
+       }
+
+       /**
+        * @dataProvider provideMakeTitleValueSafe
+        * @covers Title::makeTitleSafe
+        * @covers Title::makeName
+        * @covers Title::secureAndSplit
+        * @covers IP::sanitizeIP
+        */
+       public function testMakeTitleSafe(
+               $expected, $ns, $text, $fragment = '', $interwiki = '', $lang = 'en'
+       ) {
+               $codec = $this->makeCodec( $lang );
+               $this->setService( 'TitleParser', $codec );
+               $this->setService( 'TitleFormatter', $codec );
+
+               $actual = Title::makeTitleSafe( $ns, $text, $fragment, $interwiki );
+               // We need to reset some members so equality testing works
+               if ( $actual ) {
+                       $wrapper = TestingAccessWrapper::newFromObject( $actual );
+                       $wrapper->mArticleID = $actual->getNamespace() === NS_SPECIAL ? 0 : -1;
+                       $wrapper->mLocalInterwiki = false;
+                       $wrapper->mUserCaseDBKey = null;
+               }
+               $this->assertEquals( Title::castFromLinkTarget( $expected ), $actual );
+       }
+
+       public static function provideMakeTitleValueSafe() {
+               $ret = [
+                       'Nonexistent NS' => [ null, 942929, 'Test' ],
+                       'Simple page' => [ new TitleValue( NS_MAIN, 'Test' ), NS_MAIN, 'Test' ],
+
+                       // Fragments
+                       'Passed fragment' => [
+                               new TitleValue( NS_MAIN, 'Test', 'Fragment' ),
+                               NS_MAIN, 'Test', 'Fragment'
+                       ],
+                       'Embedded fragment' => [
+                               new TitleValue( NS_MAIN, 'Test', 'Fragment' ),
+                               NS_MAIN, 'Test#Fragment'
+                       ],
+                       'Passed fragment with spaces' => [
+                               // XXX Leading space is okay in fragment?
+                               new TitleValue( NS_MAIN, 'Test', ' Frag ment' ),
+                               NS_MAIN, ' Test ', " Frag_ment "
+                       ],
+                       'Embedded fragment with spaces' => [
+                               // XXX Leading space is okay in fragment?
+                               new TitleValue( NS_MAIN, 'Test', ' Frag ment' ),
+                               NS_MAIN, " Test # Frag_ment "
+                       ],
+                       // XXX Is it correct that these aren't normalized to spaces?
+                       'Passed fragment with leading tab' => [ null, NS_MAIN, "\tTest\t", "\tFragment" ],
+                       'Embedded fragment with leading tab' => [ null, NS_MAIN, "\tTest\t#\tFragment" ],
+                       'Passed fragment with trailing tab' => [ null, NS_MAIN, "\tTest\t", "Fragment\t" ],
+                       'Embedded fragment with trailing tab' => [ null, NS_MAIN, "\tTest\t#Fragment\t" ],
+                       'Passed fragment with interior tab' => [ null, NS_MAIN, "\tTest\t", "Frag\tment" ],
+                       'Embedded fragment with interior tab' => [ null, NS_MAIN, "\tTest\t#\tFrag\tment" ],
+
+                       // Interwikis
+                       'Passed local interwiki' => [
+                               new TitleValue( NS_MAIN, 'Test' ),
+                               NS_MAIN, 'Test', '', 'localtestiw'
+                       ],
+                       'Embedded local interwiki' => [
+                               new TitleValue( NS_MAIN, 'Test' ),
+                               NS_MAIN, 'localtestiw:Test'
+                       ],
+                       'Passed remote interwiki' => [
+                               new TitleValue( NS_MAIN, 'Test', '', 'remotetestiw' ),
+                               NS_MAIN, 'Test', '', 'remotetestiw'
+                       ],
+                       'Embedded remote interwiki' => [
+                               new TitleValue( NS_MAIN, 'Test', '', 'remotetestiw' ),
+                               NS_MAIN, 'remotetestiw:Test'
+                       ],
+                       // XXX Are these correct? Interwiki prefixes are case-sensitive?
+                       'Passed local interwiki with different case' => [
+                               new TitleValue( NS_MAIN, 'LocalTestIW:Test' ),
+                               NS_MAIN, 'Test', '', 'LocalTestIW'
+                       ],
+                       'Embedded local interwiki with different case' => [
+                               new TitleValue( NS_MAIN, 'LocalTestIW:Test' ),
+                               NS_MAIN, 'LocalTestIW:Test'
+                       ],
+                       'Passed remote interwiki with different case' => [
+                               new TitleValue( NS_MAIN, 'RemoteTestIW:Test' ),
+                               NS_MAIN, 'Test', '', 'RemoteTestIW'
+                       ],
+                       'Embedded remote interwiki with different case' => [
+                               new TitleValue( NS_MAIN, 'RemoteTestIW:Test' ),
+                               NS_MAIN, 'RemoteTestIW:Test'
+                       ],
+                       'Passed local interwiki with lowercase page name' => [
+                               new TitleValue( NS_MAIN, 'Test' ),
+                               NS_MAIN, 'test', '', 'localtestiw'
+                       ],
+                       'Embedded local interwiki with lowercase page name' => [
+                               new TitleValue( NS_MAIN, 'Test' ),
+                               NS_MAIN, 'localtestiw:test'
+                       ],
+                       // For remote we don't auto-capitalize
+                       'Passed remote interwiki with lowercase page name' => [
+                               new TitleValue( NS_MAIN, 'test', '', 'remotetestiw' ),
+                               NS_MAIN, 'test', '', 'remotetestiw'
+                       ],
+                       'Embedded remote interwiki with lowercase page name' => [
+                               new TitleValue( NS_MAIN, 'test', '', 'remotetestiw' ),
+                               NS_MAIN, 'remotetestiw:test'
+                       ],
+
+                       // Fragment and interwiki
+                       'Fragment and local interwiki' => [
+                               new TitleValue( NS_MAIN, 'Test', 'Fragment' ),
+                               NS_MAIN, 'Test', 'Fragment', 'localtestiw'
+                       ],
+                       'Fragment and remote interwiki' => [
+                               new TitleValue( NS_MAIN, 'Test', 'Fragment', 'remotetestiw' ),
+                               NS_MAIN, 'Test', 'Fragment', 'remotetestiw'
+                       ],
+                       'Fragment and local interwiki and non-main namespace' => [
+                               new TitleValue( NS_TALK, 'Test', 'Fragment' ),
+                               NS_TALK, 'Test', 'Fragment', 'localtestiw'
+                       ],
+                       // We don't know the foreign wiki's namespaces, so it will always be NS_MAIN
+                       'Fragment and remote interwiki and non-main namespace' => [
+                               new TitleValue( NS_MAIN, 'Talk:Test', 'Fragment', 'remotetestiw' ),
+                               NS_TALK, 'Test', 'Fragment', 'remotetestiw'
+                       ],
+
+                       // Whitespace normalization and Unicode stripping
+                       'Name with space' => [
+                               new TitleValue( NS_MAIN, 'Test_test' ),
+                               NS_MAIN, 'Test test'
+                       ],
+                       'Unicode bidi override characters' => [
+                               new TitleValue( NS_MAIN, 'Test' ),
+                               NS_MAIN, "\u{200E}T\u{200F}e\u{202A}s\u{202B}t\u{202C}\u{202D}\u{202E}"
+                       ],
+                       'Invalid UTF-8 sequence' => [ null, NS_MAIN, "Te\x80\xf0st" ],
+                       'Whitespace collapsing' => [
+                               new TitleValue( NS_MAIN, 'Test_test' ),
+                               NS_MAIN, "Test _\u{00A0}\u{1680}\u{180E}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}" .
+                               "\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}" .
+                               "\u{205F}\u{3000}test"
+                       ],
+                       'UTF8_REPLACEMENT' => [ null, NS_MAIN, UtfNormal\Constants::UTF8_REPLACEMENT ],
+
+                       // Namespace prefixes
+                       'Talk:Test' => [
+                               new TitleValue( NS_TALK, 'Test' ),
+                               NS_MAIN, 'Talk:Test'
+                       ],
+                       'Test in talk NS' => [
+                               new TitleValue( NS_TALK, 'Test' ),
+                               NS_TALK, 'Test'
+                       ],
+                       'Talkk:Test' => [
+                               new TitleValue( NS_MAIN, 'Talkk:Test' ),
+                               NS_MAIN, 'Talkk:Test'
+                       ],
+                       'Talk:Talk:Test' => [ null, NS_MAIN, 'Talk:Talk:Test' ],
+                       'Talk:User:Test' => [ null, NS_MAIN, 'Talk:User:Test' ],
+                       'User:Talk:Test' => [
+                               new TitleValue( NS_USER, 'Talk:Test' ),
+                               NS_MAIN, 'User:Talk:Test'
+                       ],
+                       'User:Test in talk NS' => [ null, NS_TALK, 'User:Test' ],
+                       'Talk:Test in talk NS' => [ null, NS_TALK, 'Talk:Test' ],
+                       'User:Test in user NS' => [
+                               new TitleValue( NS_USER, 'User:Test' ),
+                               NS_USER, 'User:Test'
+                       ],
+                       'Talk:Test in user NS' => [
+                               new TitleValue( NS_USER, 'Talk:Test' ),
+                               NS_USER, 'Talk:Test'
+                       ],
+
+                       // Initial colon
+                       ':Test' => [
+                               new TitleValue( NS_MAIN, 'Test' ),
+                               NS_MAIN, ':Test'
+                       ],
+                       ':Talk:Test' => [
+                               new TitleValue( NS_TALK, 'Test' ),
+                               NS_MAIN, ':Talk:Test'
+                       ],
+                       ':localtestiw:Test' => [
+                               new TitleValue( NS_MAIN, 'Test' ),
+                               NS_MAIN, ':localtestiw:Test'
+                       ],
+                       ':remotetestiw:Test' => [
+                               new TitleValue( NS_MAIN, 'Test', '', 'remotetestiw' ),
+                               NS_MAIN, ':remotetestiw:Test'
+                       ],
+                       // XXX Is this correct? Why is it different from remote?
+                       'localtestiw::Test' => [ null, NS_MAIN, 'localtestiw::Test' ],
+                       'remotetestiw::Test' => [
+                               new TitleValue( NS_MAIN, 'Test', '', 'remotetestiw' ),
+                               NS_MAIN, 'remotetestiw::Test'
+                       ],
+                       // XXX Is this correct? Why is it different from remote?
+                       'localtestiw:: Test' => [ null, NS_MAIN, 'localtestiw:: Test' ],
+                       'remotetestiw:: Test' => [
+                               new TitleValue( NS_MAIN, 'Test', '', 'remotetestiw' ),
+                               NS_MAIN, 'remotetestiw:: Test'
+                       ],
+
+                       // Empty titles
+                       'Empty title' => [ null, NS_MAIN, '' ],
+                       'Empty title with namespace' => [ null, NS_USER, '' ],
+                       'Local interwiki with empty page name' => [
+                               new TitleValue( NS_MAIN, 'Main_Page' ),
+                               NS_MAIN, 'localtestiw:'
+                       ],
+                       'Remote interwiki with empty page name' => [
+                               // XXX Is this correct? This is supposed to redirect to the main page remotely?
+                               new TitleValue( NS_MAIN, '', '', 'remotetestiw' ),
+                               NS_MAIN, 'remotetestiw:'
+                       ],
+
+                       // Whitespace-only titles
+                       'Whitespace-only title' => [ null, NS_MAIN, "\t\n" ],
+                       'Whitespace-only title with namespace' => [ null, NS_USER, " _ " ],
+                       'Local interwiki with whitespace-only page name' => [
+                               // XXX Is whitespace-only really supposed to be different from empty?
+                               null,
+                               NS_MAIN, "localtestiw:_\t"
+                       ],
+                       'Remote interwiki with whitespace-only page name' => [
+                               // XXX Is whitespace-only really supposed to be different from empty?
+                               null,
+                               NS_MAIN, "remotetestiw:\t_\n\r"
+                       ],
+
+                       // Namespace and interwiki
+                       'Talk:localtestiw:Test' => [ null, NS_MAIN, 'Talk:localtestiw:Test' ],
+                       'Talk:remotetestiw:Test' => [ null, NS_MAIN, 'Talk:remotetestiw:Test' ],
+                       'User:localtestiw:Test' => [
+                               new TitleValue( NS_USER, 'Localtestiw:Test' ),
+                               NS_MAIN, 'User:localtestiw:Test'
+                       ],
+                       'User:remotetestiw:Test' => [
+                               new TitleValue( NS_USER, 'Remotetestiw:Test' ),
+                               NS_MAIN, 'User:remotetestiw:Test'
+                       ],
+                       'localtestiw:Test in user namespace' => [
+                               new TitleValue( NS_USER, 'Localtestiw:Test' ),
+                               NS_USER, 'localtestiw:Test'
+                       ],
+                       'remotetestiw:Test in user namespace' => [
+                               new TitleValue( NS_USER, 'Remotetestiw:Test' ),
+                               NS_USER, 'remotetestiw:Test'
+                       ],
+                       'localtestiw:talk:test' => [
+                               new TitleValue( NS_TALK, 'Test' ),
+                               NS_MAIN, 'localtestiw:talk:test'
+                       ],
+                       'remotetestiw:talk:test' => [
+                               new TitleValue( NS_MAIN, 'talk:test', '', 'remotetestiw' ),
+                               NS_MAIN, 'remotetestiw:talk:test'
+                       ],
+
+                       // Invalid chars
+                       'Test[test' => [ null, NS_MAIN, 'Test[test' ],
+
+                       // Long titles
+                       '255 chars long' => [
+                               new TitleValue( NS_MAIN, str_repeat( 'A', 255 ) ),
+                               NS_MAIN, str_repeat( 'A', 255 )
+                       ],
+                       '255 chars long in user NS' => [
+                               new TitleValue( NS_USER, str_repeat( 'A', 255 ) ),
+                               NS_USER, str_repeat( 'A', 255 )
+                       ],
+                       'User:255 chars long' => [
+                               new TitleValue( NS_USER, str_repeat( 'A', 255 ) ),
+                               NS_MAIN, 'User:' . str_repeat( 'A', 255 )
+                       ],
+                       '256 chars long' => [ null, NS_MAIN, str_repeat( 'A', 256 ) ],
+                       '256 chars long in user NS' => [ null, NS_USER, str_repeat( 'A', 256 ) ],
+                       'User:256 chars long' => [ null, NS_MAIN, 'User:' . str_repeat( 'A', 256 ) ],
+
+                       '512 chars long in special NS' => [
+                               new TitleValue( NS_SPECIAL, str_repeat( 'A', 512 ) ),
+                               NS_SPECIAL, str_repeat( 'A', 512 )
+                       ],
+                       'Special:512 chars long' => [
+                               new TitleValue( NS_SPECIAL, str_repeat( 'A', 512 ) ),
+                               NS_MAIN, 'Special:' . str_repeat( 'A', 512 )
+                       ],
+                       '513 chars long in special NS' => [ null, NS_SPECIAL, str_repeat( 'A', 513 ) ],
+                       'Special:513 chars long' => [ null, NS_MAIN, 'Special:' . str_repeat( 'A', 513 ) ],
+
+                       // IP addresses
+                       'User:000.000.000' => [
+                               new TitleValue( NS_USER, '000.000.000' ),
+                               NS_MAIN, 'User:000.000.000'
+                       ],
+                       'User:000.000.000.000' => [
+                               new TitleValue( NS_USER, '0.0.0.0' ),
+                               NS_MAIN, 'User:000.000.000.000'
+                       ],
+                       '000.000.000.000' => [
+                               new TitleValue( NS_MAIN, '000.000.000.000' ),
+                               NS_MAIN, '000.000.000.000'
+                       ],
+                       'User:1.1.256.000' => [
+                               new TitleValue( NS_USER, '1.1.256.000' ),
+                               NS_MAIN, 'User:1.1.256.000'
+                       ],
+                       'User:1.1.255.000' => [
+                               new TitleValue( NS_USER, '1.1.255.0' ),
+                               NS_MAIN, 'User:1.1.255.000'
+                       ],
+                       // TODO More IP address sanitization tests
+               ];
+
+               // Invalid and valid dots
+               foreach ( [ '.', '..', '...' ] as $dots ) {
+                       foreach ( [ '?', '?/', '?/Test', 'Test/?/Test', '/?', 'Test/?', '?Test', 'Test?Test',
+                       'Test?' ] as $pattern ) {
+                               $test = str_replace( '?', $dots, $pattern );
+                               if ( $dots === '...' || in_array( $pattern, [ '?Test', 'Test?Test', 'Test?' ] ) ) {
+                                       $expectedMain = new TitleValue( NS_MAIN, $test );
+                                       $expectedUser = new TitleValue( NS_USER, $test );
+                               } else {
+                                       $expectedMain = $expectedUser = null;
+                               }
+                               $ret[$test] = [ $expectedMain, NS_MAIN, $test ];
+                               $ret["$test in user NS"] = [ $expectedUser, NS_USER, $test ];
+                               $ret["User:$test"] = [ $expectedUser, NS_MAIN, "User:$test" ];
+                       }
+               }
+
+               // Invalid and valid tildes
+               foreach ( [ '~~', '~~~' ] as $tildes ) {
+                       foreach ( [ '?', 'Test?', '?Test', 'Test?Test' ] as $pattern ) {
+                               $test = str_replace( '?', $tildes, $pattern );
+                               if ( $tildes === '~~' ) {
+                                       $expectedMain = new TitleValue( NS_MAIN, $test );
+                                       $expectedUser = new TitleValue( NS_USER, $test );
+                               } else {
+                                       $expectedMain = $expectedUser = null;
+                               }
+                               $ret[$test] = [ $expectedMain, NS_MAIN, $test ];
+                               $ret["$test in user NS"] = [ $expectedUser, NS_USER, $test ];
+                               $ret["User:$test"] = [ $expectedUser, NS_MAIN, "User:$test" ];
+                       }
+               }
+
+               return $ret;
+       }
+
        public static function provideGetNamespaceName() {
                return [
                        [ NS_MAIN, 'Foo', 'en', '' ],
index c1e258d..028c438 100644 (file)
@@ -9,6 +9,8 @@ use MediaWiki\Config\ServiceOptions;
 use MediaWiki\Linker\LinkTarget;
 
 class NamespaceInfoTest extends MediaWikiTestCase {
+       use TestAllServiceOptionsUsed;
+
        /**********************************************************************************************
         * Shared code
         * %{
@@ -63,8 +65,11 @@ class NamespaceInfoTest extends MediaWikiTestCase {
        ];
 
        private function newObj( array $options = [] ) : NamespaceInfo {
-               return new NamespaceInfo( new ServiceOptions( NamespaceInfo::$constructorOptions,
-                       $options, self::$defaultOptions ) );
+               return new NamespaceInfo( new LoggedServiceOptions(
+                       self::$serviceOptionsAccessLog,
+                       NamespaceInfo::$constructorOptions,
+                       $options, self::$defaultOptions
+               ) );
        }
 
        // %} End shared code
@@ -1342,6 +1347,13 @@ class NamespaceInfoTest extends MediaWikiTestCase {
        }
 
        // %} End restriction levels
+
+       /**
+        * @coversNothing
+        */
+       public function testAllServiceOptionsUsed() {
+               $this->assertAllServiceOptionsUsed();
+       }
 }
 
 /**
index 6fa911b..53edbf2 100644 (file)
@@ -26,6 +26,7 @@ class DatabaseSqliteTest extends \MediaWikiIntegrationTestCase {
                $this->db = $this->getMockBuilder( DatabaseSqlite::class )
                        ->setConstructorArgs( [ [
                                'dbFilePath' => ':memory:',
+                               'dbname' => 'Foo',
                                'schema' => false,
                                'host' => false,
                                'user' => false,
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/FactoryArgTestTrait.php b/tests/phpunit/unit/includes/FactoryArgTestTrait.php
new file mode 100644 (file)
index 0000000..f7035b4
--- /dev/null
@@ -0,0 +1,148 @@
+<?php
+
+/**
+ * Test that a factory class correctly forwards all arguments to the class it constructs. This is
+ * useful because sometimes a class' constructor will have more arguments added, and it's easy to
+ * accidentally have the factory's constructor fall out of sync.
+ */
+trait FactoryArgTestTrait {
+       /**
+        * @return string Name of factory class
+        */
+       abstract protected static function getFactoryClass();
+
+       /**
+        * @return string Name of instance class
+        */
+       abstract protected static function getInstanceClass();
+
+       /**
+        * @return int The number of arguments that the instance constructor receives but the factory
+        * constructor doesn't. Used for a simple argument count check. Override if this isn't zero.
+        */
+       protected static function getExtraClassArgCount() {
+               return 0;
+       }
+
+       /**
+        * Override if your factory method name is different from newInstanceClassName.
+        *
+        * @return string
+        */
+       protected function getFactoryMethodName() {
+               return 'new' . $this->getInstanceClass();
+       }
+
+       /**
+        * Override if $factory->$method( ...$args ) isn't the right way to create an instance, where
+        * $method is returned from getFactoryMethodName(), and $args is constructed by applying
+        * getMockValueForParam() to the factory method's parameters.
+        *
+        * @param object $factory Factory object
+        * @return object Object created by factory
+        */
+       protected function createInstanceFromFactory( $factory ) {
+               $methodName = $this->getFactoryMethodName();
+               $methodObj = new ReflectionMethod( $factory, $methodName );
+               $mocks = [];
+               foreach ( $methodObj->getParameters() as $param ) {
+                       $mocks[] = $this->getMockValueForParam( $param );
+               }
+
+               return $factory->$methodName( ...$mocks );
+       }
+
+       public function testConstructorArgNum() {
+               $factoryClass = static::getFactoryClass();
+               $instanceClass = static::getInstanceClass();
+               $factoryConstructor = new ReflectionMethod( $factoryClass, '__construct' );
+               $instanceConstructor = new ReflectionMethod( $instanceClass, '__construct' );
+               $this->assertSame(
+                       $instanceConstructor->getNumberOfParameters() - static::getExtraClassArgCount(),
+                       $factoryConstructor->getNumberOfParameters(),
+                       "$instanceClass and $factoryClass constructors have an inconsistent number of " .
+                       ' parameters. Did you add a parameter to one and not the other?' );
+       }
+
+       /**
+        * Override if getMockValueForParam doesn't produce suitable values for one or more of the
+        * parameters to your factory constructor or create method.
+        *
+        * @param ReflectionParameter $param One of the factory constructor's arguments
+        * @return array Empty to not override, or an array of one element which is the value to pass
+        *   that will allow the object to be constructed successfully
+        */
+       protected function getOverriddenMockValueForParam( ReflectionParameter $param ) {
+               return [];
+       }
+
+       /**
+        * Override if this doesn't produce suitable values for one or more of the parameters to your
+        * factory constructor or create method.
+        *
+        * @param ReflectionParameter $param One of the factory constructor's arguments
+        * @return mixed A value to pass that will allow the object to be constructed successfully
+        */
+       protected function getMockValueForParam( ReflectionParameter $param ) {
+               $overridden = $this->getOverriddenMockValueForParam( $param );
+               if ( $overridden ) {
+                       return $overridden[0];
+               }
+
+               $pos = $param->getPosition();
+
+               $type = (string)$param->getType();
+
+               if ( $type === 'array' ) {
+                       return [ "some unlikely string $pos" ];
+               }
+
+               if ( class_exists( $type ) || interface_exists( $type ) ) {
+                       return $this->createMock( $type );
+               }
+
+               if ( $type === '' ) {
+                       // Optimistically assume a string is okay
+                       return "some unlikely string $pos";
+               }
+
+               $this->fail( "Unrecognized parameter type $type" );
+       }
+
+       /**
+        * Assert that the given $instance correctly received $val as the value for parameter $name. By
+        * default, checks that the instance has some member whose value is the same as $val.
+        *
+        * @param object $instance
+        * @param string $name Name of parameter to the factory object's constructor
+        * @param mixed $val
+        */
+       protected function assertInstanceReceivedParam( $instance, $name, $val ) {
+               foreach ( ( new ReflectionObject( $instance ) )->getProperties() as $prop ) {
+                       $prop->setAccessible( true );
+                       if ( $prop->getValue( $instance ) === $val ) {
+                               $this->assertTrue( true );
+                               return;
+                       }
+               }
+
+               $this->assertFalse( true, "Param $name not received by " . static::getInstanceClass() );
+       }
+
+       public function testAllArgumentsWerePassed() {
+               $factoryClass = static::getFactoryClass();
+
+               $factoryConstructor = new ReflectionMethod( $factoryClass, '__construct' );
+               $mocks = [];
+               foreach ( $factoryConstructor->getParameters() as $param ) {
+                       $mocks[$param->getName()] = $this->getMockValueForParam( $param );
+               }
+
+               $instance =
+                       $this->createInstanceFromFactory( new $factoryClass( ...array_values( $mocks ) ) );
+
+               foreach ( $mocks as $name => $mock ) {
+                       $this->assertInstanceReceivedParam( $instance, $name, $mock );
+               }
+       }
+}
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' ],
-               ];
-       }
-
-}
diff --git a/tests/phpunit/unit/includes/libs/filebackend/fsfile/TempFSFileTestTrait.php b/tests/phpunit/unit/includes/libs/filebackend/fsfile/TempFSFileTestTrait.php
new file mode 100644 (file)
index 0000000..d32e01e
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * Code shared between the unit and integration tests
+ */
+trait TempFSFileTestTrait {
+       abstract protected function newFile();
+
+       /**
+        * @covers TempFSFile::__construct
+        * @covers TempFSFile::purge
+        */
+       public function testPurge() {
+               $file = $this->newFile();
+               $this->assertTrue( file_exists( $file->getPath() ) );
+               $file->purge();
+               $this->assertFalse( file_exists( $file->getPath() ) );
+       }
+
+       /**
+        * @covers TempFSFile::__construct
+        * @covers TempFSFile::bind
+        * @covers TempFSFile::autocollect
+        * @covers TempFSFile::__destruct
+        */
+       public function testBind() {
+               $file = $this->newFile();
+               $path = $file->getPath();
+               $this->assertTrue( file_exists( $path ) );
+               $obj = new stdclass;
+               $file->bind( $obj );
+               unset( $file );
+               $this->assertTrue( file_exists( $path ) );
+               unset( $obj );
+               $this->assertFalse( file_exists( $path ) );
+       }
+
+       /**
+        * @covers TempFSFile::__construct
+        * @covers TempFSFile::preserve
+        * @covers TempFSFile::__destruct
+        */
+       public function testPreserve() {
+               $file = $this->newFile();
+               $path = $file->getPath();
+               $this->assertTrue( file_exists( $path ) );
+               $file->preserve();
+               unset( $file );
+               $this->assertTrue( file_exists( $path ) );
+               Wikimedia\suppressWarnings();
+               unlink( $path );
+               Wikimedia\restoreWarnings();
+       }
+}
diff --git a/tests/phpunit/unit/includes/libs/services/ServiceContainerTest.php b/tests/phpunit/unit/includes/libs/services/ServiceContainerTest.php
new file mode 100644 (file)
index 0000000..f9e820a
--- /dev/null
@@ -0,0 +1,523 @@
+<?php
+
+use Wikimedia\Services\ServiceContainer;
+
+/**
+ * @covers Wikimedia\Services\ServiceContainer
+ */
+class ServiceContainerTest extends PHPUnit\Framework\TestCase {
+
+       use MediaWikiCoversValidator; // TODO this library is supposed to be independent of MediaWiki
+       use PHPUnit4And6Compat;
+
+       private function newServiceContainer( $extraArgs = [] ) {
+               return new ServiceContainer( $extraArgs );
+       }
+
+       public function testGetServiceNames() {
+               $services = $this->newServiceContainer();
+               $names = $services->getServiceNames();
+
+               $this->assertInternalType( 'array', $names );
+               $this->assertEmpty( $names );
+
+               $name = 'TestService92834576';
+               $services->defineService( $name, function () {
+                       return null;
+               } );
+
+               $names = $services->getServiceNames();
+               $this->assertContains( $name, $names );
+       }
+
+       public function testHasService() {
+               $services = $this->newServiceContainer();
+
+               $name = 'TestService92834576';
+               $this->assertFalse( $services->hasService( $name ) );
+
+               $services->defineService( $name, function () {
+                       return null;
+               } );
+
+               $this->assertTrue( $services->hasService( $name ) );
+       }
+
+       public function testGetService() {
+               $services = $this->newServiceContainer( [ 'Foo' ] );
+
+               $theService = new stdClass();
+               $name = 'TestService92834576';
+               $count = 0;
+
+               $services->defineService(
+                       $name,
+                       function ( $actualLocator, $extra ) use ( $services, $theService, &$count ) {
+                               $count++;
+                               PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
+                               PHPUnit_Framework_Assert::assertSame( $extra, 'Foo' );
+                               return $theService;
+                       }
+               );
+
+               $this->assertSame( $theService, $services->getService( $name ) );
+
+               $services->getService( $name );
+               $this->assertSame( 1, $count, 'instantiator should be called exactly once!' );
+       }
+
+       public function testGetServiceRecursionCheck() {
+               $services = $this->newServiceContainer();
+
+               $services->defineService( 'service1', function ( ServiceContainer $services ) {
+                       $services->getService( 'service2' );
+               } );
+
+               $services->defineService( 'service2', function ( ServiceContainer $services ) {
+                       $services->getService( 'service3' );
+               } );
+
+               $services->defineService( 'service3', function ( ServiceContainer $services ) {
+                       $services->getService( 'service1' );
+               } );
+
+               $exceptionThrown = false;
+               try {
+                       $services->getService( 'service1' );
+               } catch ( RuntimeException $e ) {
+                       $exceptionThrown = true;
+                       $this->assertSame( 'Circular dependency when creating service! ' .
+                               'service1 -> service2 -> service3 -> service1', $e->getMessage() );
+               }
+               $this->assertTrue( $exceptionThrown, 'RuntimeException must be thrown' );
+       }
+
+       public function testGetService_fail_unknown() {
+               $services = $this->newServiceContainer();
+
+               $name = 'TestService92834576';
+
+               $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class );
+
+               $services->getService( $name );
+       }
+
+       public function testPeekService() {
+               $services = $this->newServiceContainer();
+
+               $services->defineService(
+                       'Foo',
+                       function () {
+                               return new stdClass();
+                       }
+               );
+
+               $services->defineService(
+                       'Bar',
+                       function () {
+                               return new stdClass();
+                       }
+               );
+
+               // trigger instantiation of Foo
+               $services->getService( 'Foo' );
+
+               $this->assertInternalType(
+                       'object',
+                       $services->peekService( 'Foo' ),
+                       'Peek should return the service object if it had been accessed before.'
+               );
+
+               $this->assertNull(
+                       $services->peekService( 'Bar' ),
+                       'Peek should return null if the service was never accessed.'
+               );
+       }
+
+       public function testPeekService_fail_unknown() {
+               $services = $this->newServiceContainer();
+
+               $name = 'TestService92834576';
+
+               $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class );
+
+               $services->peekService( $name );
+       }
+
+       public function testDefineService() {
+               $services = $this->newServiceContainer();
+
+               $theService = new stdClass();
+               $name = 'TestService92834576';
+
+               $services->defineService( $name, function ( $actualLocator ) use ( $services, $theService ) {
+                       PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
+                       return $theService;
+               } );
+
+               $this->assertTrue( $services->hasService( $name ) );
+               $this->assertSame( $theService, $services->getService( $name ) );
+       }
+
+       public function testDefineService_fail_duplicate() {
+               $services = $this->newServiceContainer();
+
+               $theService = new stdClass();
+               $name = 'TestService92834576';
+
+               $services->defineService( $name, function () use ( $theService ) {
+                       return $theService;
+               } );
+
+               $this->setExpectedException( Wikimedia\Services\ServiceAlreadyDefinedException::class );
+
+               $services->defineService( $name, function () use ( $theService ) {
+                       return $theService;
+               } );
+       }
+
+       public function testApplyWiring() {
+               $services = $this->newServiceContainer();
+
+               $wiring = [
+                       'Foo' => function () {
+                               return 'Foo!';
+                       },
+                       'Bar' => function () {
+                               return 'Bar!';
+                       },
+               ];
+
+               $services->applyWiring( $wiring );
+
+               $this->assertSame( 'Foo!', $services->getService( 'Foo' ) );
+               $this->assertSame( 'Bar!', $services->getService( 'Bar' ) );
+       }
+
+       public function testImportWiring() {
+               $services = $this->newServiceContainer();
+
+               $wiring = [
+                       'Foo' => function () {
+                               return 'Foo!';
+                       },
+                       'Bar' => function () {
+                               return 'Bar!';
+                       },
+                       'Car' => function () {
+                               return 'FUBAR!';
+                       },
+               ];
+
+               $services->applyWiring( $wiring );
+
+               $services->addServiceManipulator( 'Foo', function ( $service ) {
+                       return $service . '+X';
+               } );
+
+               $services->addServiceManipulator( 'Car', function ( $service ) {
+                       return $service . '+X';
+               } );
+
+               $newServices = $this->newServiceContainer();
+
+               // create a service with manipulator
+               $newServices->defineService( 'Foo', function () {
+                       return 'Foo!';
+               } );
+
+               $newServices->addServiceManipulator( 'Foo', function ( $service ) {
+                       return $service . '+Y';
+               } );
+
+               // create a service before importing, so we can later check that
+               // existing service instances survive importWiring()
+               $newServices->defineService( 'Car', function () {
+                       return 'Car!';
+               } );
+
+               // force instantiation
+               $newServices->getService( 'Car' );
+
+               // Define another service, so we can later check that extra wiring
+               // is not lost.
+               $newServices->defineService( 'Xar', function () {
+                       return 'Xar!';
+               } );
+
+               // import wiring, but skip `Bar`
+               $newServices->importWiring( $services, [ 'Bar' ] );
+
+               $this->assertNotContains( 'Bar', $newServices->getServiceNames(), 'Skip `Bar` service' );
+               $this->assertSame( 'Foo!+Y+X', $newServices->getService( 'Foo' ) );
+
+               // import all wiring, but preserve existing service instance
+               $newServices->importWiring( $services );
+
+               $this->assertContains( 'Bar', $newServices->getServiceNames(), 'Import all services' );
+               $this->assertSame( 'Bar!', $newServices->getService( 'Bar' ) );
+               $this->assertSame( 'Car!', $newServices->getService( 'Car' ), 'Use existing service instance' );
+               $this->assertSame( 'Xar!', $newServices->getService( 'Xar' ), 'Predefined services are kept' );
+       }
+
+       public function testLoadWiringFiles() {
+               $services = $this->newServiceContainer();
+
+               $wiringFiles = [
+                       __DIR__ . '/TestWiring1.php',
+                       __DIR__ . '/TestWiring2.php',
+               ];
+
+               $services->loadWiringFiles( $wiringFiles );
+
+               $this->assertSame( 'Foo!', $services->getService( 'Foo' ) );
+               $this->assertSame( 'Bar!', $services->getService( 'Bar' ) );
+       }
+
+       public function testLoadWiringFiles_fail_duplicate() {
+               $services = $this->newServiceContainer();
+
+               $wiringFiles = [
+                       __DIR__ . '/TestWiring1.php',
+                       __DIR__ . '/./TestWiring1.php',
+               ];
+
+               // loading the same file twice should fail, because
+               $this->setExpectedException( Wikimedia\Services\ServiceAlreadyDefinedException::class );
+
+               $services->loadWiringFiles( $wiringFiles );
+       }
+
+       public function testRedefineService() {
+               $services = $this->newServiceContainer( [ 'Foo' ] );
+
+               $theService1 = new stdClass();
+               $name = 'TestService92834576';
+
+               $services->defineService( $name, function () {
+                       PHPUnit_Framework_Assert::fail(
+                               'The original instantiator function should not get called'
+                       );
+               } );
+
+               // redefine before instantiation
+               $services->redefineService(
+                       $name,
+                       function ( $actualLocator, $extra ) use ( $services, $theService1 ) {
+                               PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
+                               PHPUnit_Framework_Assert::assertSame( 'Foo', $extra );
+                               return $theService1;
+                       }
+               );
+
+               // force instantiation, check result
+               $this->assertSame( $theService1, $services->getService( $name ) );
+       }
+
+       public function testRedefineService_disabled() {
+               $services = $this->newServiceContainer( [ 'Foo' ] );
+
+               $theService1 = new stdClass();
+               $name = 'TestService92834576';
+
+               $services->defineService( $name, function () {
+                       return 'Foo';
+               } );
+
+               // disable the service. we should be able to redefine it anyway.
+               $services->disableService( $name );
+
+               $services->redefineService( $name, function () use ( $theService1 ) {
+                       return $theService1;
+               } );
+
+               // force instantiation, check result
+               $this->assertSame( $theService1, $services->getService( $name ) );
+       }
+
+       public function testRedefineService_fail_undefined() {
+               $services = $this->newServiceContainer();
+
+               $theService = new stdClass();
+               $name = 'TestService92834576';
+
+               $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class );
+
+               $services->redefineService( $name, function () use ( $theService ) {
+                       return $theService;
+               } );
+       }
+
+       public function testRedefineService_fail_in_use() {
+               $services = $this->newServiceContainer( [ 'Foo' ] );
+
+               $theService = new stdClass();
+               $name = 'TestService92834576';
+
+               $services->defineService( $name, function () {
+                       return 'Foo';
+               } );
+
+               // create the service, so it can no longer be redefined
+               $services->getService( $name );
+
+               $this->setExpectedException( Wikimedia\Services\CannotReplaceActiveServiceException::class );
+
+               $services->redefineService( $name, function () use ( $theService ) {
+                       return $theService;
+               } );
+       }
+
+       public function testAddServiceManipulator() {
+               $services = $this->newServiceContainer( [ 'Foo' ] );
+
+               $theService1 = new stdClass();
+               $theService2 = new stdClass();
+               $name = 'TestService92834576';
+
+               $services->defineService(
+                       $name,
+                       function ( $actualLocator, $extra ) use ( $services, $theService1 ) {
+                               PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
+                               PHPUnit_Framework_Assert::assertSame( 'Foo', $extra );
+                               return $theService1;
+                       }
+               );
+
+               $services->addServiceManipulator(
+                       $name,
+                       function (
+                               $theService, $actualLocator, $extra
+                       ) use (
+                               $services, $theService1, $theService2
+                       ) {
+                               PHPUnit_Framework_Assert::assertSame( $theService1, $theService );
+                               PHPUnit_Framework_Assert::assertSame( $services, $actualLocator );
+                               PHPUnit_Framework_Assert::assertSame( 'Foo', $extra );
+                               return $theService2;
+                       }
+               );
+
+               // force instantiation, check result
+               $this->assertSame( $theService2, $services->getService( $name ) );
+       }
+
+       public function testAddServiceManipulator_fail_undefined() {
+               $services = $this->newServiceContainer();
+
+               $theService = new stdClass();
+               $name = 'TestService92834576';
+
+               $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class );
+
+               $services->addServiceManipulator( $name, function () use ( $theService ) {
+                       return $theService;
+               } );
+       }
+
+       public function testAddServiceManipulator_fail_in_use() {
+               $services = $this->newServiceContainer( [ 'Foo' ] );
+
+               $theService = new stdClass();
+               $name = 'TestService92834576';
+
+               $services->defineService( $name, function () use ( $theService ) {
+                       return $theService;
+               } );
+
+               // create the service, so it can no longer be redefined
+               $services->getService( $name );
+
+               $this->setExpectedException( Wikimedia\Services\CannotReplaceActiveServiceException::class );
+
+               $services->addServiceManipulator( $name, function () {
+                       return 'Foo';
+               } );
+       }
+
+       public function testDisableService() {
+               $services = $this->newServiceContainer( [ 'Foo' ] );
+
+               $destructible = $this->getMockBuilder( Wikimedia\Services\DestructibleService::class )
+                       ->getMock();
+               $destructible->expects( $this->once() )
+                       ->method( 'destroy' );
+
+               $services->defineService( 'Foo', function () use ( $destructible ) {
+                       return $destructible;
+               } );
+               $services->defineService( 'Bar', function () {
+                       return new stdClass();
+               } );
+               $services->defineService( 'Qux', function () {
+                       return new stdClass();
+               } );
+
+               // instantiate Foo and Bar services
+               $services->getService( 'Foo' );
+               $services->getService( 'Bar' );
+
+               // disable service, should call destroy() once.
+               $services->disableService( 'Foo' );
+
+               // disabled service should still be listed
+               $this->assertContains( 'Foo', $services->getServiceNames() );
+
+               // getting other services should still work
+               $services->getService( 'Bar' );
+
+               // disable non-destructible service, and not-yet-instantiated service
+               $services->disableService( 'Bar' );
+               $services->disableService( 'Qux' );
+
+               $this->assertNull( $services->peekService( 'Bar' ) );
+               $this->assertNull( $services->peekService( 'Qux' ) );
+
+               // disabled service should still be listed
+               $this->assertContains( 'Bar', $services->getServiceNames() );
+               $this->assertContains( 'Qux', $services->getServiceNames() );
+
+               $this->setExpectedException( Wikimedia\Services\ServiceDisabledException::class );
+               $services->getService( 'Qux' );
+       }
+
+       public function testDisableService_fail_undefined() {
+               $services = $this->newServiceContainer();
+
+               $theService = new stdClass();
+               $name = 'TestService92834576';
+
+               $this->setExpectedException( Wikimedia\Services\NoSuchServiceException::class );
+
+               $services->redefineService( $name, function () use ( $theService ) {
+                       return $theService;
+               } );
+       }
+
+       public function testDestroy() {
+               $services = $this->newServiceContainer();
+
+               $destructible = $this->getMockBuilder( Wikimedia\Services\DestructibleService::class )
+                       ->getMock();
+               $destructible->expects( $this->once() )
+                       ->method( 'destroy' );
+
+               $services->defineService( 'Foo', function () use ( $destructible ) {
+                       return $destructible;
+               } );
+
+               $services->defineService( 'Bar', function () {
+                       return new stdClass();
+               } );
+
+               // create the service
+               $services->getService( 'Foo' );
+
+               // destroy the container
+               $services->destroy();
+
+               $this->setExpectedException( Wikimedia\Services\ContainerDisabledException::class );
+               $services->getService( 'Bar' );
+       }
+
+}
diff --git a/tests/phpunit/unit/includes/libs/services/TestWiring1.php b/tests/phpunit/unit/includes/libs/services/TestWiring1.php
new file mode 100644 (file)
index 0000000..b6ff4eb
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Test file for testing ServiceContainer::loadWiringFiles
+ */
+
+return [
+       'Foo' => function () {
+               return 'Foo!';
+       },
+];
diff --git a/tests/phpunit/unit/includes/libs/services/TestWiring2.php b/tests/phpunit/unit/includes/libs/services/TestWiring2.php
new file mode 100644 (file)
index 0000000..dfff64f
--- /dev/null
@@ -0,0 +1,10 @@
+<?php
+/**
+ * Test file for testing ServiceContainer::loadWiringFiles
+ */
+
+return [
+       'Bar' => function () {
+               return 'Bar!';
+       },
+];
diff --git a/tests/phpunit/unit/includes/page/MovePageFactoryTest.php b/tests/phpunit/unit/includes/page/MovePageFactoryTest.php
new file mode 100644 (file)
index 0000000..99fc631
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+
+use MediaWiki\Page\MovePageFactory;
+
+/**
+ * @covers MediaWiki\Page\MovePageFactory
+ */
+class MovePageFactoryTest extends MediaWikiUnitTestCase {
+       use FactoryArgTestTrait;
+
+       protected function getFactoryClass() {
+               return MovePageFactory::class;
+       }
+
+       protected function getInstanceClass() {
+               return MovePage::class;
+       }
+
+       protected static function getExtraClassArgCount() {
+               // $to and $from
+               return 2;
+       }
+}
diff --git a/tests/phpunit/unit/includes/parser/ParserFactoryTest.php b/tests/phpunit/unit/includes/parser/ParserFactoryTest.php
new file mode 100644 (file)
index 0000000..f1e48c7
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * @covers ParserFactory
+ */
+class ParserFactoryTest extends MediaWikiUnitTestCase {
+       use FactoryArgTestTrait;
+
+       protected static function getFactoryClass() {
+               return ParserFactory::class;
+       }
+
+       protected static function getInstanceClass() {
+               return Parser::class;
+       }
+
+       protected static function getFactoryMethodName() {
+               return 'create';
+       }
+
+       protected static function getExtraClassArgCount() {
+               // The parser factory itself is passed to the parser
+               return 1;
+       }
+
+       protected function getOverriddenMockValueForParam( ReflectionParameter $param ) {
+               if ( $param->getPosition() === 0 ) {
+                       return [ $this->createMock( MediaWiki\Config\ServiceOptions::class ) ];
+               }
+               return [];
+       }
+}
index cd67a93..8256c7c 100644 (file)
@@ -29,8 +29,12 @@ class TitleValueTest extends \MediaWikiUnitTestCase {
        public function goodConstructorProvider() {
                return [
                        [ NS_MAIN, '', 'fragment', '', true, false ],
+                       [ NS_MAIN, '', '', 'interwiki', false, true ],
+                       [ NS_MAIN, '', 'fragment', 'interwiki', true, true ],
                        [ 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 +48,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 +65,7 @@ class TitleValueTest extends \MediaWikiUnitTestCase {
                        [ NS_MAIN, 5, 'fragment', '' ],
                        [ NS_MAIN, null, 'fragment', '' ],
                        [ NS_USER, '', 'fragment', '' ],
-                       [ NS_MAIN, 'foo bar', '', '' ],
+                       [ NS_USER, '', '', 'interwiki' ],
                        [ NS_MAIN, 'bar_', '', '' ],
                        [ NS_MAIN, '_foo', '', '' ],
                        [ NS_MAIN, ' eek ', '', '' ],