Merge "RC Filters: Hooks for highlight guided tour"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 3 Apr 2017 18:47:56 +0000 (18:47 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 3 Apr 2017 18:47:56 +0000 (18:47 +0000)
422 files changed:
.travis.yml
RELEASE-NOTES-1.29
autoload.php
composer.json
docs/hooks.txt
includes/Block.php
includes/CategoryFinder.php
includes/Defines.php
includes/EditPage.php
includes/Linker.php
includes/MediaWiki.php
includes/MergeHistory.php
includes/OutputPage.php
includes/Revision.php
includes/RevisionList.php
includes/SiteStats.php
includes/Title.php
includes/TrackingCategories.php
includes/WatchedItemQueryService.php
includes/WatchedItemQueryServiceExtension.php
includes/WatchedItemStore.php
includes/actions/PurgeAction.php
includes/actions/ViewAction.php
includes/api/ApiBase.php
includes/api/ApiPageSet.php
includes/api/ApiParse.php
includes/api/ApiPurge.php
includes/api/ApiQueryAllImages.php
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/fr.json
includes/api/i18n/ko.json
includes/api/i18n/pt-br.json
includes/api/i18n/qqq.json
includes/api/i18n/sv.json
includes/api/i18n/uk.json
includes/api/i18n/zh-hans.json
includes/cache/BacklinkCache.php
includes/cache/LinkBatch.php
includes/cache/LinkCache.php
includes/cache/MessageBlobStore.php
includes/cache/MessageCache.php
includes/cache/localisation/LCStoreDB.php
includes/changes/ChangesListBooleanFilter.php
includes/changes/ChangesListFilter.php
includes/changes/ChangesListFilterGroup.php
includes/changes/ChangesListStringOptionsFilter.php
includes/changes/ChangesListStringOptionsFilterGroup.php
includes/changetags/ChangeTagsList.php
includes/changetags/ChangeTagsLogList.php
includes/changetags/ChangeTagsRevisionList.php
includes/db/CloneDatabase.php
includes/db/ORAResult.php
includes/deferred/AtomicSectionUpdate.php
includes/deferred/AutoCommitUpdate.php
includes/deferred/DeferredUpdates.php
includes/deferred/LinksDeletionUpdate.php
includes/deferred/LinksUpdate.php
includes/deferred/MWCallableUpdate.php
includes/deferred/SiteStatsUpdate.php
includes/deferred/SqlDataUpdate.php
includes/deferred/WANCacheReapUpdate.php
includes/export/WikiExporter.php
includes/externalstore/ExternalStoreDB.php
includes/filebackend/filejournal/DBFileJournal.php
includes/filebackend/lockmanager/MySqlLockManager.php
includes/filerepo/FileBackendDBRepoWrapper.php
includes/filerepo/ForeignDBRepo.php
includes/filerepo/LocalRepo.php
includes/filerepo/file/LocalFile.php
includes/http/Http.php
includes/http/MWHttpRequest.php
includes/installer/DatabaseInstaller.php
includes/installer/DatabaseUpdater.php
includes/installer/Installer.php
includes/installer/OracleUpdater.php
includes/installer/i18n/br.json
includes/jobqueue/JobQueueDB.php
includes/jobqueue/utils/PurgeJobUtils.php
includes/libs/CSSMin.php
includes/libs/lockmanager/DBLockManager.php
includes/libs/rdbms/connectionmanager/ConnectionManager.php
includes/libs/rdbms/connectionmanager/SessionConsistentConnectionManager.php
includes/libs/rdbms/database/DBConnRef.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/database/DatabaseMysqlBase.php
includes/libs/rdbms/database/IDatabase.php
includes/libs/rdbms/database/IMaintainableDatabase.php
includes/libs/rdbms/database/MaintainableDBConnRef.php
includes/libs/rdbms/database/resultwrapper/ResultWrapper.php
includes/libs/rdbms/defines.php
includes/libs/rdbms/exception/DBConnectionError.php
includes/libs/rdbms/exception/DBError.php
includes/libs/rdbms/exception/DBExpectedError.php
includes/libs/rdbms/exception/DBQueryError.php
includes/libs/rdbms/lbfactory/LBFactory.php
includes/libs/rdbms/lbfactory/LBFactoryMulti.php
includes/libs/rdbms/lbfactory/LBFactorySimple.php
includes/libs/rdbms/lbfactory/LBFactorySingle.php
includes/libs/rdbms/loadbalancer/ILoadBalancer.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/libs/rdbms/loadbalancer/LoadBalancerSingle.php
includes/libs/rdbms/loadmonitor/LoadMonitor.php
includes/libs/rdbms/loadmonitor/LoadMonitorMySQL.php
includes/logging/LogEntry.php
includes/logging/LogEventsList.php
includes/media/IPTC.php
includes/objectcache/ObjectCache.php
includes/objectcache/SqlBagOStuff.php
includes/page/Article.php
includes/page/PageArchive.php
includes/page/WikiFilePage.php
includes/page/WikiPage.php
includes/pager/IndexPager.php
includes/parser/CoreTagHooks.php
includes/parser/Parser.php
includes/parser/ParserOptions.php
includes/resourceloader/ResourceLoaderImage.php
includes/resourceloader/ResourceLoaderSkinModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/resourceloader/ResourceLoaderUserDefaultsModule.php
includes/resourceloader/ResourceLoaderUserOptionsModule.php
includes/resourceloader/ResourceLoaderUserTokensModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/revisiondelete/RevDelArchiveList.php
includes/revisiondelete/RevDelArchivedFileList.php
includes/revisiondelete/RevDelFileItem.php
includes/revisiondelete/RevDelFileList.php
includes/revisiondelete/RevDelLogList.php
includes/revisiondelete/RevDelRevisionList.php
includes/revisiondelete/RevisionDeleteUser.php
includes/search/SearchDatabase.php
includes/search/SearchEngineFactory.php
includes/specialpage/ChangesListSpecialPage.php
includes/specialpage/ImageQueryPage.php
includes/specialpage/PageQueryPage.php
includes/specialpage/QueryPage.php
includes/specialpage/WantedQueryPage.php
includes/specials/SpecialBrokenRedirects.php
includes/specials/SpecialDoubleRedirects.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialListDuplicatedFiles.php
includes/specials/SpecialListredirects.php
includes/specials/SpecialMediaStatistics.php
includes/specials/SpecialMostcategories.php
includes/specials/SpecialMostinterwikis.php
includes/specials/SpecialMostlinked.php
includes/specials/SpecialMostlinkedcategories.php
includes/specials/SpecialMostlinkedtemplates.php
includes/specials/SpecialNewimages.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialShortpages.php
includes/specials/SpecialUnwatchedpages.php
includes/specials/SpecialWatchlist.php
includes/specials/SpecialWhatlinkshere.php
includes/specials/pagers/ContribsPager.php
includes/specials/pagers/ImageListPager.php
includes/specials/pagers/NewFilesPager.php
includes/user/UserGroupMembership.php
includes/user/UserRightsProxy.php
includes/utils/BatchRowIterator.php
includes/utils/BatchRowWriter.php
includes/widget/search/InterwikiSearchResultSetWidget.php
languages/data/Names.php
languages/i18n/ar.json
languages/i18n/arz.json
languages/i18n/atj.json
languages/i18n/azb.json
languages/i18n/ba.json
languages/i18n/be-tarask.json
languages/i18n/be.json
languages/i18n/bn.json
languages/i18n/br.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/crh-cyrl.json
languages/i18n/crh-latn.json
languages/i18n/cs.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/dty.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/eu.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/frc.json
languages/i18n/frr.json
languages/i18n/gl.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hr.json
languages/i18n/ia.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/kiu.json
languages/i18n/km.json
languages/i18n/ko.json
languages/i18n/krl.json
languages/i18n/lb.json
languages/i18n/lt.json
languages/i18n/mg.json
languages/i18n/mk.json
languages/i18n/nl.json
languages/i18n/oc.json
languages/i18n/olo.json
languages/i18n/or.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sc.json
languages/i18n/sl.json
languages/i18n/sq.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/tl.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/uk.json
languages/i18n/vi.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
languages/messages/MessagesAtj.php [new file with mode: 0644]
maintenance/Maintenance.php
maintenance/backup.inc
maintenance/cleanupRemovedModules.php
maintenance/purgeModuleDeps.php
maintenance/refreshLinks.php
maintenance/runBatchedQuery.php
maintenance/sql.php
package.json
resources/Resources.php
resources/lib/oojs-ui/i18n/bqi.json
resources/lib/oojs-ui/oojs-ui-apex.js
resources/lib/oojs-ui/oojs-ui-core-apex.css
resources/lib/oojs-ui/oojs-ui-core-mediawiki.css
resources/lib/oojs-ui/oojs-ui-core.js
resources/lib/oojs-ui/oojs-ui-mediawiki.js
resources/lib/oojs-ui/oojs-ui-toolbars-apex.css
resources/lib/oojs-ui/oojs-ui-toolbars-mediawiki.css
resources/lib/oojs-ui/oojs-ui-toolbars.js
resources/lib/oojs-ui/oojs-ui-widgets-apex.css
resources/lib/oojs-ui/oojs-ui-widgets-mediawiki.css
resources/lib/oojs-ui/oojs-ui-widgets.js
resources/lib/oojs-ui/oojs-ui-windows-apex.css
resources/lib/oojs-ui/oojs-ui-windows-mediawiki.css
resources/lib/oojs-ui/oojs-ui-windows.js
resources/lib/oojs-ui/themes/apex/icons-alerts.json
resources/lib/oojs-ui/themes/apex/icons-content.json
resources/lib/oojs-ui/themes/apex/icons-interactions.json
resources/lib/oojs-ui/themes/apex/icons-layout.json [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/icons-movement.json
resources/lib/oojs-ui/themes/apex/icons.json
resources/lib/oojs-ui/themes/apex/images/icons/add-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/add-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/bookmark-ltr-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/bookmark-ltr-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/bookmark-rtl-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/bookmark-rtl-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/clear-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/clear-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/clock-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/clock-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/heart-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/heart-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/key-ltr-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/key-ltr-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/key-rtl-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/key-rtl-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/search-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/search-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/search-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/search-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/search.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/search.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/stripeSideMenu.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/stripeSideMenu.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/subtract-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/subtract-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/viewCompact.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/viewCompact.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr-invert.svg [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl-invert.png [deleted file]
resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl-invert.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/icons-alerts.json
resources/lib/oojs-ui/themes/mediawiki/icons-content.json
resources/lib/oojs-ui/themes/mediawiki/icons-interactions.json
resources/lib/oojs-ui/themes/mediawiki/icons-layout.json
resources/lib/oojs-ui/themes/mediawiki/icons-location.json
resources/lib/oojs-ui/themes/mediawiki/icons-movement.json
resources/lib/oojs-ui/themes/mediawiki/icons.json
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl-invert.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl-invert.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl-progressive.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl-progressive.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl.png [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl.svg [new file with mode: 0644]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-progressive.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-progressive.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-progressive.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-progressive.svg [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.png [deleted file]
resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.svg [deleted file]
resources/src/mediawiki.legacy/oldshared.css
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.libs/mediawiki.libs.jpegmeta.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FilterItem.js
resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
resources/src/mediawiki.skinning/content.parsoid.less
resources/src/mediawiki.special/mediawiki.special.search.interwikiwidget.styles.less
resources/src/mediawiki.special/mediawiki.special.userlogin.common.css
resources/src/mediawiki.widgets/mw.widgets.CategoryMultiselectWidget.js [new file with mode: 0644]
resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js [deleted file]
resources/src/mediawiki.widgets/mw.widgets.ComplexNamespaceInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.ComplexTitleInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.TitleOptionWidget.js
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.js
resources/src/mediawiki/mediawiki.Upload.BookletLayout.js
resources/src/mediawiki/mediawiki.util.js
resources/src/moment-locale-overrides.js
tests/parser/DbTestPreviewer.php
tests/parser/DbTestRecorder.php
tests/parser/ParserTestRunner.php
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/includes/FauxRequestTest.php
tests/phpunit/includes/HtmlTest.php
tests/phpunit/includes/MessageTest.php
tests/phpunit/includes/api/ApiMainTest.php
tests/phpunit/includes/auth/AuthManagerTest.php
tests/phpunit/includes/changes/ChangesListBooleanFilterGroupTest.php
tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php
tests/phpunit/includes/changes/ChangesListStringOptionsFilterGroupTest.php
tests/phpunit/includes/changes/RCCacheEntryFactoryTest.php
tests/phpunit/includes/db/DatabaseTest.php
tests/phpunit/includes/http/HttpTest.php
tests/phpunit/includes/libs/CSSMinTest.php
tests/phpunit/includes/libs/ObjectFactoryTest.php
tests/phpunit/includes/libs/objectcache/HashBagOStuffTest.php
tests/phpunit/includes/objectcache/ObjectCacheTest.php [new file with mode: 0644]
tests/phpunit/includes/resourceloader/MessageBlobStoreTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php
tests/phpunit/includes/specialpage/AbstractChangesListSpecialPageTestCase.php
tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php
tests/phpunit/includes/title/NaiveImportTitleFactoryTest.php
tests/phpunit/includes/title/NamespaceImportTitleFactoryTest.php
tests/phpunit/mocks/MockChangesListFilter.php
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js
tests/selenium/wdio.conf.jenkins.js
tests/selenium/wdio.conf.js

index 5e2c7a0..baf7f03 100644 (file)
@@ -31,6 +31,11 @@ matrix:
       php: hhvm-3.12
     - env: dbtype=mysql dbuser=root
       php: 7
+  allow_failures:
+    # Postgres support for unit tests is still buggy
+    # https://phabricator.wikimedia.org/T75174
+    - env: dbtype=postgres dbuser=travis
+      php: 5.5
 
 services:
   - mysql
index bd75eb7..b9b6485 100644 (file)
@@ -82,6 +82,7 @@ production.
   highlight prefix matches in the results.
 * (T157035) "new mw.Uri()" was ignoring options when using default URI.
 * Special:Allpages can no longer be filtered by redirect in miser mode.
+* (T160519) CACHE_ANYTHING will not be CACHE_ACCEL if no accelerator is installed.
 
 === Action API changes in 1.29 ===
 * Submitting sensitive authentication request parameters to action=login,
@@ -159,6 +160,7 @@ changes to languages because of Phabricator reports.
   The new or reinstated language fallbacks are (after cs ↔ sk in 1.28):
   ca ↔ oc; hsb ↔ dsb; io → eo; mdf → ru; pnt → el; roa-tara → it; rup → ro;
   sh → bs, sr-el, hr.
+* (T137376) New language support: Atikamekw (atj).
 * (T155957) Talk Namespaces for Javanese language (jv) have been updated.
 
 ==== No fallback for Ukrainian ====
@@ -268,6 +270,17 @@ changes to languages because of Phabricator reports.
 * WikiRevision::$fileIsTemp was deprecated.
 * WikiRevision::$importer was deprecated.
 * WikiRevision::$user was deprecated.
+* Article::getLastPurgeTimestamp(), WikiPage::getLastPurgeTimestamp(), and the
+  WikiPage::PURGE_* constants are deprecated, and the functions will always
+  return false. They were a hack for an issue that has since been fixed.
+* Hook 'EditPageBeforeEditChecks' is now deprecated. Instead use the new hook
+  'EditPageGetCheckboxesDefinition', or 'EditPage::showStandardInputs:options'
+  if you don't actually care about checkboxes and just want to add some HTML
+  to the page.
+* Selflinks are now rendered as href-less <a> tags with the class mw-selflink
+  rather than <strong> tags. The old class name, "selflink", was deprecated
+  and will be removed in a future release. (T160480)
+* (T156184) $wgRawHtml will no longer apply to internationalization messages.
 
 == Compatibility ==
 
index 4ffaa11..956d504 100644 (file)
@@ -1591,14 +1591,17 @@ $wgAutoloadLocalClasses = [
        'Wikimedia\\Rdbms\\Blob' => __DIR__ . '/includes/libs/rdbms/encasing/Blob.php',
        'Wikimedia\\Rdbms\\ChronologyProtector' => __DIR__ . '/includes/libs/rdbms/ChronologyProtector.php',
        'Wikimedia\\Rdbms\\ConnectionManager' => __DIR__ . '/includes/libs/rdbms/connectionmanager/ConnectionManager.php',
+       'Wikimedia\\Rdbms\\DBConnRef' => __DIR__ . '/includes/libs/rdbms/database/DBConnRef.php',
        'Wikimedia\\Rdbms\\DBMasterPos' => __DIR__ . '/includes/libs/rdbms/database/position/DBMasterPos.php',
        'Wikimedia\\Rdbms\\DatabaseDomain' => __DIR__ . '/includes/libs/rdbms/database/DatabaseDomain.php',
        'Wikimedia\\Rdbms\\FakeResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/FakeResultWrapper.php',
        'Wikimedia\\Rdbms\\Field' => __DIR__ . '/includes/libs/rdbms/field/Field.php',
        'Wikimedia\\Rdbms\\IBlob' => __DIR__ . '/includes/libs/rdbms/encasing/IBlob.php',
+       'Wikimedia\\Rdbms\\IDatabase' => __DIR__ . '/includes/libs/rdbms/database/IDatabase.php',
        'Wikimedia\\Rdbms\\ILBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/ILBFactory.php',
        'Wikimedia\\Rdbms\\ILoadBalancer' => __DIR__ . '/includes/libs/rdbms/loadbalancer/ILoadBalancer.php',
        'Wikimedia\\Rdbms\\ILoadMonitor' => __DIR__ . '/includes/libs/rdbms/loadmonitor/ILoadMonitor.php',
+       'Wikimedia\\Rdbms\\IMaintainableDatabase' => __DIR__ . '/includes/libs/rdbms/database/IMaintainableDatabase.php',
        'Wikimedia\\Rdbms\\IResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/IResultWrapper.php',
        'Wikimedia\\Rdbms\\LBFactory' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactory.php',
        'Wikimedia\\Rdbms\\LBFactoryMulti' => __DIR__ . '/includes/libs/rdbms/lbfactory/LBFactoryMulti.php',
@@ -1610,6 +1613,7 @@ $wgAutoloadLocalClasses = [
        'Wikimedia\\Rdbms\\LoadMonitor' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitor.php',
        'Wikimedia\\Rdbms\\LoadMonitorMySQL' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitorMySQL.php',
        'Wikimedia\\Rdbms\\LoadMonitorNull' => __DIR__ . '/includes/libs/rdbms/loadmonitor/LoadMonitorNull.php',
+       'Wikimedia\\Rdbms\\MaintainableDBConnRef' => __DIR__ . '/includes/libs/rdbms/database/MaintainableDBConnRef.php',
        'Wikimedia\\Rdbms\\MssqlBlob' => __DIR__ . '/includes/libs/rdbms/encasing/MssqlBlob.php',
        'Wikimedia\\Rdbms\\MssqlField' => __DIR__ . '/includes/libs/rdbms/field/MssqlField.php',
        'Wikimedia\\Rdbms\\MssqlResultWrapper' => __DIR__ . '/includes/libs/rdbms/database/resultwrapper/MssqlResultWrapper.php',
index cd8f310..ece725c 100644 (file)
@@ -25,7 +25,7 @@
                "ext-xml": "*",
                "liuggio/statsd-php-client": "1.0.18",
                "mediawiki/at-ease": "1.1.0",
-               "oojs/oojs-ui": "0.20.0",
+               "oojs/oojs-ui": "0.20.2",
                "oyejorge/less.php": "1.7.0.13",
                "php": ">=5.5.9",
                "psr/log": "1.0.2",
                "monolog/monolog": "~1.18.2",
                "nikic/php-parser": "2.1.0",
                "nmred/kafka-php": "0.1.5",
-               "phpunit/phpunit": "4.8.31",
+               "phpunit/phpunit": "4.8.35",
                "wikimedia/avro": "1.7.7",
                "hamcrest/hamcrest-php": "^2.0",
                "wmde/hamcrest-html-matchers": "^0.1.0",
-               "psy/psysh": "0.8.1"
+               "psy/psysh": "0.8.3"
        },
        "suggest": {
                "ext-apc": "Local data and opcode cache",
index 3a57563..a38f9bb 100644 (file)
@@ -1404,10 +1404,12 @@ textarea in the edit form.
 &$buttons: Array of edit buttons "Save", "Preview", "Live", and "Diff"
 &$tabindex: HTML tabindex of the last edit check/button
 
-'EditPageBeforeEditChecks': Allows modifying the edit checks below the textarea
-in the edit form.
+'EditPageBeforeEditChecks': DEPRECATED! Use 'EditPageGetCheckboxesDefinition' instead,
+or 'EditPage::showStandardInputs:options' if you don't actually care about checkboxes
+and just want to add some HTML to the page.
+Allows modifying the edit checks below the textarea in the edit form.
 &$editpage: The current EditPage object
-&$checks: Array of edit checks like "watch this page"/"minor edit"
+&$checks: Array of the HTML for edit checks like "watch this page"/"minor edit"
 &$tabindex: HTML tabindex of the last edit check/button
 
 'EditPageBeforeEditToolbar': Allows modifying the edit toolbar above the
@@ -1420,6 +1422,12 @@ $title: title of page being edited
 &$msg: localization message name, overridable. Default is either
   'copyrightwarning' or 'copyrightwarning2'.
 
+'EditPageGetCheckboxesDefinition': Allows modifying the edit checkboxes
+below the textarea in the edit form.
+$editpage: The current EditPage object
+&$checkboxes: Array of checkbox definitions. See EditPage::getCheckboxesDefinition()
+for the format.
+
 'EditPageGetDiffContent': Allow modifying the wikitext that will be used in
 "Show changes". Note that it is preferable to implement diff handling for
 different data types using the ContentHandler facility.
index cf6642a..b6b3ae0 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  */
 
+use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\MediaWikiServices;
 
 class Block {
index 504b35f..595cf95 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * The "CategoryFinder" class takes a list of articles, creates an internal
  * representation of all their parent categories (as well as parents of
index bd92ff0..6bc70ed 100644 (file)
@@ -24,6 +24,8 @@ require_once __DIR__ . '/libs/mime/defines.php';
 require_once __DIR__ . '/libs/rdbms/defines.php';
 require_once __DIR__ . '/compat/normal/UtfNormalDefines.php';
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * @defgroup Constants MediaWiki constants
  */
index 7a58326..e4d217c 100644 (file)
@@ -2421,7 +2421,7 @@ class EditPage {
                # Show log extract when the user is currently blocked
                if ( $namespace == NS_USER || $namespace == NS_USER_TALK ) {
                        $username = explode( '/', $this->mTitle->getText(), 2 )[0];
-                       $user = User::newFromName( $username, false /* allow IP users*/ );
+                       $user = User::newFromName( $username, false /* allow IP users */ );
                        $ip = User::isIP( $username );
                        $block = Block::newFromTarget( $user, $user );
                        if ( !( $user && $user->isLoggedIn() ) && !$ip ) { # User does not exist
@@ -3058,6 +3058,7 @@ class EditPage {
         */
        protected function showSummaryInput( $isSubjectPreview, $summary = "" ) {
                global $wgOut;
+
                # Add a class if 'missingsummary' is triggered to allow styling of the summary line
                $summaryClass = $this->missingSummary ? 'mw-summarymissed' : 'mw-summary';
                if ( $isSubjectPreview ) {
@@ -3506,12 +3507,12 @@ HTML
 
                $message = $this->context->msg( 'edithelppage' )->inContentLanguage()->text();
                $edithelpurl = Skin::makeInternalOrExternalUrl( $message );
-               $attrs = [
-                       'target' => 'helpwindow',
-                       'href' => $edithelpurl,
-               ];
-               $edithelp = Html::linkButton( $this->context->msg( 'edithelp' )->text(),
-                       $attrs, [ 'mw-ui-quiet' ] ) .
+               $edithelp =
+                       Html::linkButton(
+                               $this->context->msg( 'edithelp' )->text(),
+                               [ 'target' => 'helpwindow', 'href' => $edithelpurl ],
+                               [ 'mw-ui-quiet' ]
+                       ) .
                        $this->context->msg( 'word-separator' )->escaped() .
                        $this->context->msg( 'newwindow' )->parse();
 
@@ -3571,18 +3572,16 @@ HTML
         */
        public function getCancelLink() {
                $cancelParams = [];
-               $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
                if ( !$this->isConflict && $this->oldid > 0 ) {
                        $cancelParams['oldid'] = $this->oldid;
                } elseif ( $this->getContextTitle()->isRedirect() ) {
                        $cancelParams['redirect'] = 'no';
                }
-               $attrs = [ 'id' => 'mw-editform-cancel' ];
 
-               return $linkRenderer->makeKnownLink(
+               return MediaWikiServices::getInstance()->getLinkRenderer()->makeKnownLink(
                        $this->getContextTitle(),
                        new HtmlArmor( $this->context->msg( 'cancel' )->parse() ),
-                       Html::buttonAttributes( $attrs, [ 'mw-ui-quiet' ] ),
+                       Html::buttonAttributes( [ 'id' => 'mw-editform-cancel' ], [ 'mw-ui-quiet' ] ),
                        $cancelParams
                );
        }
@@ -4006,72 +4005,114 @@ HTML
                return $toolbar;
        }
 
+       /**
+        * Return an array of checkbox definitions.
+        *
+        * Array keys correspond to the `<input>` 'name' attribute to use for each checkbox.
+        *
+        * Array values are associative arrays with the following keys:
+        *  - 'label-message' (required): message for label text
+        *  - 'id' (required): 'id' attribute for the `<input>`
+        *  - 'default' (required): default checkedness (true or false)
+        *  - 'title-message' (optional): used to generate 'title' attribute for the `<label>`
+        *  - 'tooltip' (optional): used to generate 'title' and 'accesskey' attributes
+        *    from messages like 'tooltip-foo', 'accesskey-foo'
+        *  - 'label-id' (optional): 'id' attribute for the `<label>`
+        *  - 'legacy-name' (optional): short name for backwards-compatibility
+        * @param array $checked Array of checkbox name (matching the 'legacy-name') => bool,
+        *   where bool indicates the checked status of the checkbox
+        * @return array
+        */
+       protected function getCheckboxesDefinition( $checked ) {
+               global $wgUser;
+               $checkboxes = [];
+
+               // don't show the minor edit checkbox if it's a new page or section
+               if ( !$this->isNew && $wgUser->isAllowed( 'minoredit' ) ) {
+                       $checkboxes['wpMinoredit'] = [
+                               'id' => 'wpMinoredit',
+                               'label-message' => 'minoredit',
+                               // Uses messages: tooltip-minoredit, accesskey-minoredit
+                               'tooltip' => 'minoredit',
+                               'label-id' => 'mw-editpage-minoredit',
+                               'legacy-name' => 'minor',
+                               'default' => $checked['minor'],
+                       ];
+               }
+
+               if ( $wgUser->isLoggedIn() ) {
+                       $checkboxes['wpWatchthis'] = [
+                               'id' => 'wpWatchthis',
+                               'label-message' => 'watchthis',
+                               // Uses messages: tooltip-watch, accesskey-watch
+                               'tooltip' => 'watch',
+                               'label-id' => 'mw-editpage-watch',
+                               'legacy-name' => 'watch',
+                               'default' => $checked['watch'],
+                       ];
+               }
+
+               $editPage = $this;
+               Hooks::run( 'EditPageGetCheckboxesDefinition', [ $editPage, &$checkboxes ] );
+
+               return $checkboxes;
+       }
+
        /**
         * Returns an array of html code of the following checkboxes:
         * minor and watch
         *
         * @param int $tabindex Current tabindex
-        * @param array $checked Array of checkbox => bool, where bool indicates the checked
-        *                 status of the checkbox
-        *
+        * @param array $checked See getCheckboxesDefinition()
         * @return array
         */
        public function getCheckboxes( &$tabindex, $checked ) {
-               global $wgUser, $wgUseMediaWikiUIEverywhere;
+               global $wgUseMediaWikiUIEverywhere;
 
                $checkboxes = [];
+               $checkboxesDef = $this->getCheckboxesDefinition( $checked );
 
-               // don't show the minor edit checkbox if it's a new page or section
+               // Backwards-compatibility for the EditPageBeforeEditChecks hook
                if ( !$this->isNew ) {
                        $checkboxes['minor'] = '';
-                       $minorLabel = $this->context->msg( 'minoredit' )->parse();
-                       if ( $wgUser->isAllowed( 'minoredit' ) ) {
-                               $attribs = [
-                                       'tabindex' => ++$tabindex,
-                                       'accesskey' => $this->context->msg( 'accesskey-minoredit' )->text(),
-                                       'id' => 'wpMinoredit',
-                               ];
-                               $minorEditHtml =
-                                       Xml::check( 'wpMinoredit', $checked['minor'], $attribs ) .
-                                       "&#160;<label for='wpMinoredit' id='mw-editpage-minoredit'" .
-                                       Xml::expandAttributes( [ 'title' => Linker::titleAttrib( 'minoredit', 'withaccess' ) ] ) .
-                                       ">{$minorLabel}</label>";
-
-                               if ( $wgUseMediaWikiUIEverywhere ) {
-                                       $checkboxes['minor'] = Html::openElement( 'div', [ 'class' => 'mw-ui-checkbox' ] ) .
-                                               $minorEditHtml .
-                                       Html::closeElement( 'div' );
-                               } else {
-                                       $checkboxes['minor'] = $minorEditHtml;
-                               }
-                       }
                }
-
-               $watchLabel = $this->context->msg( 'watchthis' )->parse();
                $checkboxes['watch'] = '';
-               if ( $wgUser->isLoggedIn() ) {
+
+               foreach ( $checkboxesDef as $name => $options ) {
+                       $legacyName = isset( $options['legacy-name'] ) ? $options['legacy-name'] : $name;
+                       $label = $this->context->msg( $options['label-message'] )->parse();
                        $attribs = [
                                'tabindex' => ++$tabindex,
-                               'accesskey' => $this->context->msg( 'accesskey-watch' )->text(),
-                               'id' => 'wpWatchthis',
+                               'id' => $options['id'],
                        ];
-                       $watchThisHtml =
-                               Xml::check( 'wpWatchthis', $checked['watch'], $attribs ) .
-                               "&#160;<label for='wpWatchthis' id='mw-editpage-watch'" .
-                               Xml::expandAttributes( [ 'title' => Linker::titleAttrib( 'watch', 'withaccess' ) ] ) .
-                               ">{$watchLabel}</label>";
+                       $labelAttribs = [
+                               'for' => $options['id'],
+                       ];
+                       if ( isset( $options['tooltip'] ) ) {
+                               $attribs['accesskey'] = $this->context->msg( "accesskey-{$options['tooltip']}" )->text();
+                               $labelAttribs['title'] = Linker::titleAttrib( $options['tooltip'], 'withaccess' );
+                       }
+                       if ( isset( $options['title-message'] ) ) {
+                               $labelAttribs['title'] = $this->context->msg( $options['title-message'] )->text();
+                       }
+                       if ( isset( $options['label-id'] ) ) {
+                               $labelAttribs['id'] = $options['label-id'];
+                       }
+                       $checkboxHtml =
+                               Xml::check( $name, $options['default'], $attribs ) .
+                               '&#160;' .
+                               Xml::tags( 'label', $labelAttribs, $label );
+
                        if ( $wgUseMediaWikiUIEverywhere ) {
-                               $checkboxes['watch'] = Html::openElement( 'div', [ 'class' => 'mw-ui-checkbox' ] ) .
-                                       $watchThisHtml .
-                                       Html::closeElement( 'div' );
-                       } else {
-                               $checkboxes['watch'] = $watchThisHtml;
+                               $checkboxHtml = Html::rawElement( 'div', [ 'class' => 'mw-ui-checkbox' ], $checkboxHtml );
                        }
+
+                       $checkboxes[ $legacyName ] = $checkboxHtml;
                }
 
                // Avoid PHP 7.1 warning of passing $this by reference
                $editPage = $this;
-               Hooks::run( 'EditPageBeforeEditChecks', [ &$editPage, &$checkboxes, &$tabindex ] );
+               Hooks::run( 'EditPageBeforeEditChecks', [ &$editPage, &$checkboxes, &$tabindex ], '1.29' );
                return $checkboxes;
        }
 
@@ -4095,34 +4136,41 @@ HTML
                } else {
                        $buttonLabelKey = !$this->mTitle->exists() ? 'savearticle' : 'savechanges';
                }
-               $buttonLabel = $this->context->msg( $buttonLabelKey )->text();
                $attribs = [
                        'id' => 'wpSave',
                        'name' => 'wpSave',
                        'tabindex' => ++$tabindex,
                ] + Linker::tooltipAndAccesskeyAttribs( 'save' );
-               $buttons['save'] = Html::submitButton( $buttonLabel, $attribs, [ 'mw-ui-progressive' ] );
+               $buttons['save'] = Html::submitButton(
+                       $this->context->msg( $buttonLabelKey )->text(),
+                       $attribs,
+                       [ 'mw-ui-progressive' ]
+               );
 
-               ++$tabindex; // use the same for preview and live preview
                $attribs = [
                        'id' => 'wpPreview',
                        'name' => 'wpPreview',
-                       'tabindex' => $tabindex,
+                       'tabindex' => ++$tabindex,
                ] + Linker::tooltipAndAccesskeyAttribs( 'preview' );
-               $buttons['preview'] = Html::submitButton( $this->context->msg( 'showpreview' )->text(),
-                       $attribs );
+               $buttons['preview'] = Html::submitButton(
+                       $this->context->msg( 'showpreview' )->text(),
+                       $attribs
+               );
 
                $attribs = [
                        'id' => 'wpDiff',
                        'name' => 'wpDiff',
                        'tabindex' => ++$tabindex,
                ] + Linker::tooltipAndAccesskeyAttribs( 'diff' );
-               $buttons['diff'] = Html::submitButton( $this->context->msg( 'showdiff' )->text(),
-                       $attribs );
+               $buttons['diff'] = Html::submitButton(
+                       $this->context->msg( 'showdiff' )->text(),
+                       $attribs
+               );
 
                // Avoid PHP 7.1 warning of passing $this by reference
                $editPage = $this;
                Hooks::run( 'EditPageBeforeEditButtons', [ &$editPage, &$buttons, &$tabindex ] );
+
                return $buttons;
        }
 
index 0c8d1c6..816271f 100644 (file)
@@ -164,10 +164,10 @@ class Linker {
        }
 
        /**
-        * Make appropriate markup for a link to the current article. This is
-        * currently rendered as the bold link text. The calling sequence is the
-        * same as the other make*LinkObj static functions, despite $query not
-        * being used.
+        * Make appropriate markup for a link to the current article. This is since
+        * MediaWiki 1.29.0 rendered as an <a> tag without an href and with a class
+        * showing the link text. The calling sequence is the same as for the other
+        * make*LinkObj static functions, but $query is not used.
         *
         * @since 1.16.3
         * @param Title $nt
@@ -179,7 +179,7 @@ class Linker {
         * @return string
         */
        public static function makeSelfLinkObj( $nt, $html = '', $query = '', $trail = '', $prefix = '' ) {
-               $ret = "<strong class=\"selflink\">{$prefix}{$html}</strong>{$trail}";
+               $ret = "<a class=\"mw-selflink selflink\">{$prefix}{$html}</a>{$trail}";
                if ( !Hooks::run( 'SelfLinkBegin', [ $nt, &$html, &$trail, &$prefix, &$ret ] ) ) {
                        return $ret;
                }
@@ -188,7 +188,7 @@ class Linker {
                        $html = htmlspecialchars( $nt->getPrefixedText() );
                }
                list( $inside, $trail ) = self::splitTrail( $trail );
-               return "<strong class=\"selflink\">{$prefix}{$html}{$inside}</strong>{$trail}";
+               return "<a class=\"mw-selflink selflink\">{$prefix}{$html}{$inside}</a>{$trail}";
        }
 
        /**
index 521c02c..ef0563e 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 use MediaWiki\Logger\LoggerFactory;
+use Psr\Log\LoggerInterface;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\ChronologyProtector;
 use Wikimedia\Rdbms\LBFactory;
@@ -942,24 +943,45 @@ class MediaWiki {
                        $n = intval( $jobRunRate );
                }
 
-               $runJobsLogger = LoggerFactory::getInstance( 'runJobs' );
+               $logger = LoggerFactory::getInstance( 'runJobs' );
 
-               // Fall back to running the job(s) while the user waits if needed
-               if ( !$this->config->get( 'RunJobsAsync' ) ) {
-                       $runner = new JobRunner( $runJobsLogger );
-                       $runner->run( [ 'maxJobs' => $n ] );
-                       return;
-               }
-
-               // Do not send request if there are probably no jobs
                try {
-                       $group = JobQueueGroup::singleton();
-                       if ( !$group->queuesHaveJobs( JobQueueGroup::TYPE_DEFAULT ) ) {
-                               return;
+                       if ( $this->config->get( 'RunJobsAsync' ) ) {
+                               // Send an HTTP request to the job RPC entry point if possible
+                               $invokedWithSuccess = $this->triggerAsyncJobs( $n, $logger );
+                               if ( !$invokedWithSuccess ) {
+                                       // Fall back to blocking on running the job(s)
+                                       $logger->warning( "Jobs switched to blocking; Special:RunJobs disabled" );
+                                       $this->triggerSyncJobs( $n, $logger );
+                               }
+                       } else {
+                               $this->triggerSyncJobs( $n, $logger );
                        }
                } catch ( JobQueueError $e ) {
+                       // Do not make the site unavailable (T88312)
                        MWExceptionHandler::logException( $e );
-                       return; // do not make the site unavailable
+               }
+       }
+
+       /**
+        * @param integer $n Number of jobs to try to run
+        * @param LoggerInterface $runJobsLogger
+        */
+       private function triggerSyncJobs( $n, LoggerInterface $runJobsLogger ) {
+               $runner = new JobRunner( $runJobsLogger );
+               $runner->run( [ 'maxJobs' => $n ] );
+       }
+
+       /**
+        * @param integer $n Number of jobs to try to run
+        * @param LoggerInterface $runJobsLogger
+        * @return bool Success
+        */
+       private function triggerAsyncJobs( $n, LoggerInterface $runJobsLogger ) {
+               // Do not send request if there are probably no jobs
+               $group = JobQueueGroup::singleton();
+               if ( !$group->queuesHaveJobs( JobQueueGroup::TYPE_DEFAULT ) ) {
+                       return true;
                }
 
                $query = [ 'title' => 'Special:RunJobs',
@@ -1026,12 +1048,6 @@ class MediaWiki {
                        $runJobsLogger->error( "Failed to start cron API (socket error $errno): $errstr" );
                }
 
-               // Fall back to running the job(s) while the user waits if needed
-               if ( !$invokedWithSuccess ) {
-                       $runJobsLogger->warning( "Jobs switched to blocking; Special:RunJobs disabled" );
-
-                       $runner = new JobRunner( $runJobsLogger );
-                       $runner->run( [ 'maxJobs'  => $n ] );
-               }
+               return $invokedWithSuccess;
        }
 }
index 8cf3af1..cc589c9 100644 (file)
@@ -25,6 +25,7 @@
  * @file
  */
 use Wikimedia\Timestamp\TimestampException;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Handles the backend logic of merging the histories of two
index 9ecfa23..d3e1373 100644 (file)
@@ -1568,6 +1568,7 @@ class OutputPage extends ContextSource {
                        // been changed somehow, and keep it if so.
                        $anonPO = ParserOptions::newFromAnon();
                        $anonPO->setEditSection( false );
+                       $anonPO->setAllowUnsafeRawHtml( false );
                        if ( !$options->matches( $anonPO ) ) {
                                wfLogWarning( __METHOD__ . ': Setting a changed bogus ParserOptions: ' . wfGetAllCallers( 5 ) );
                                $options->isBogus = false;
@@ -1581,6 +1582,7 @@ class OutputPage extends ContextSource {
                                // either.
                                $po = ParserOptions::newFromAnon();
                                $po->setEditSection( false );
+                               $po->setAllowUnsafeRawHtml( false );
                                $po->isBogus = true;
                                if ( $options !== null ) {
                                        $this->mParserOptions = empty( $options->isBogus ) ? $options : null;
@@ -1590,6 +1592,7 @@ class OutputPage extends ContextSource {
 
                        $this->mParserOptions = ParserOptions::newFromContext( $this->getContext() );
                        $this->mParserOptions->setEditSection( false );
+                       $this->mParserOptions->setAllowUnsafeRawHtml( false );
                }
 
                if ( $options !== null && !empty( $options->isBogus ) ) {
index 486abd8..bae974f 100644 (file)
@@ -19,6 +19,8 @@
  *
  * @file
  */
+
+use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\Linker\LinkTarget;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\ResultWrapper;
index d909a65..ccdedb8 100644 (file)
@@ -22,6 +22,7 @@
 
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * List for revision table items for a single page
@@ -36,7 +37,7 @@ abstract class RevisionListBase extends ContextSource implements Iterator {
        /** @var ResultWrapper|bool */
        protected $res;
 
-       /** @var bool|object */
+       /** @var bool|Revision */
        protected $current;
 
        /**
index 105a581..bc6b842 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Static accessor class for site_stats and related things
  */
index a5bb9c6..f16f0c5 100644 (file)
@@ -21,6 +21,8 @@
  *
  * @file
  */
+
+use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\Linker\LinkTarget;
 use MediaWiki\Interwiki\InterwikiLookup;
 use MediaWiki\MediaWikiServices;
@@ -3961,14 +3963,22 @@ class Title implements LinkTarget {
         * @return int|bool Old revision ID, or false if none exists
         */
        public function getPreviousRevisionID( $revId, $flags = 0 ) {
-               $db = ( $flags & self::GAID_FOR_UPDATE ) ? wfGetDB( DB_MASTER ) : wfGetDB( DB_REPLICA );
+               /* This function and getNextRevisionID have bad performance when
+                  used on a page with many revisions on mysql. An explicit extended
+                  primary key may help in some cases, if the PRIMARY KEY is banned:
+                  T159319 */
+               if ( $flags & self::GAID_FOR_UPDATE ) {
+                       $db = wfGetDB( DB_MASTER );
+               } else {
+                       $db = wfGetDB( DB_REPLICA, 'contributions' );
+               }
                $revId = $db->selectField( 'revision', 'rev_id',
                        [
                                'rev_page' => $this->getArticleID( $flags ),
                                'rev_id < ' . intval( $revId )
                        ],
                        __METHOD__,
-                       [ 'ORDER BY' => 'rev_id DESC' ]
+                       [ 'ORDER BY' => 'rev_id DESC', 'IGNORE INDEX' => 'PRIMARY' ]
                );
 
                if ( $revId === false ) {
@@ -3986,14 +3996,18 @@ class Title implements LinkTarget {
         * @return int|bool Next revision ID, or false if none exists
         */
        public function getNextRevisionID( $revId, $flags = 0 ) {
-               $db = ( $flags & self::GAID_FOR_UPDATE ) ? wfGetDB( DB_MASTER ) : wfGetDB( DB_REPLICA );
+               if ( $flags & self::GAID_FOR_UPDATE ) {
+                       $db = wfGetDB( DB_MASTER );
+               } else {
+                       $db = wfGetDB( DB_REPLICA, 'contributions' );
+               }
                $revId = $db->selectField( 'revision', 'rev_id',
                        [
                                'rev_page' => $this->getArticleID( $flags ),
                                'rev_id > ' . intval( $revId )
                        ],
                        __METHOD__,
-                       [ 'ORDER BY' => 'rev_id' ]
+                       [ 'ORDER BY' => 'rev_id', 'IGNORE INDEX' => 'PRIMARY' ]
                );
 
                if ( $revId === false ) {
@@ -4016,7 +4030,10 @@ class Title implements LinkTarget {
                        $row = $db->selectRow( 'revision', Revision::selectFields(),
                                [ 'rev_page' => $pageId ],
                                __METHOD__,
-                               [ 'ORDER BY' => 'rev_timestamp ASC', 'LIMIT' => 1 ]
+                               [
+                                       'ORDER BY' => 'rev_timestamp ASC',
+                                       'IGNORE INDEX' => 'rev_timestamp'
+                               ]
                        );
                        if ( $row ) {
                                return new Revision( $row );
index 825860a..a9ebd76 100644 (file)
@@ -45,6 +45,7 @@ class TrackingCategories {
                'expansion-depth-exceeded-category',
                'restricted-displaytitle-ignored',
                'deprecated-self-close-category',
+               'template-loop-category',
        ];
 
        /**
index bc57049..ba77074 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\Linker\LinkTarget;
 use Wikimedia\Assert\Assert;
 use Wikimedia\Rdbms\LoadBalancer;
index 6301576..93d5033 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Extension mechanism for WatchedItemQueryService
index caa3fdb..70fdbf1 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 
+use Wikimedia\Rdbms\IDatabase;
 use Liuggio\StatsdClient\Factory\StatsdDataFactoryInterface;
 use MediaWiki\Linker\LinkTarget;
 use MediaWiki\MediaWikiServices;
index 942b731..b2002ff 100644 (file)
@@ -42,7 +42,7 @@ class PurgeAction extends FormAction {
        }
 
        public function onSubmit( $data ) {
-               return $this->page->doPurge( WikiPage::PURGE_ALL );
+               return $this->page->doPurge();
        }
 
        public function show() {
index 0ba964f..134b8a4 100644 (file)
@@ -58,9 +58,6 @@ class ViewAction extends FormlessAction {
                                $touched = null;
                        }
 
-                       // If a page was purged on HTTP GET, relect that timestamp to avoid sending 304s
-                       $touched = max( $touched, $this->page->getLastPurgeTimestamp() );
-
                        // Send HTTP 304 if the IMS matches or otherwise set expiry/last-modified headers
                        if ( $touched && $this->getOutput()->checkLastModified( $touched ) ) {
                                wfDebug( __METHOD__ . ": done 304\n" );
index c03faf0..fec4234 100644 (file)
@@ -24,6 +24,8 @@
  * @file
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * This abstract class implements many basic API functions, and is the base of
  * all API classes.
index 7d16af8..85c6860 100644 (file)
@@ -25,6 +25,7 @@
  */
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * This class contains a list of pages that the client has requested.
index 287ffb7..b8d2641 100644 (file)
@@ -340,6 +340,9 @@ class ApiParse extends ApiBase {
                if ( isset( $prop['sections'] ) ) {
                        $result_array['sections'] = $p_result->getSections();
                }
+               if ( isset( $prop['parsewarnings'] ) ) {
+                       $result_array['parsewarnings'] = $p_result->getWarnings();
+               }
 
                if ( isset( $prop['displaytitle'] ) ) {
                        $result_array['displaytitle'] = $p_result->getDisplayTitle() ?:
@@ -452,6 +455,7 @@ class ApiParse extends ApiBase {
                        'modulestyles' => 'm',
                        'properties' => 'pp',
                        'limitreportdata' => 'lr',
+                       'parsewarnings' => 'pw'
                ];
                $this->setIndexedTagNames( $result_array, $result_mapping );
                $result->addValue( null, $this->getModuleName(), $result_array );
@@ -751,7 +755,8 @@ class ApiParse extends ApiBase {
                        ],
                        'prop' => [
                                ApiBase::PARAM_DFLT => 'text|langlinks|categories|links|templates|' .
-                                       'images|externallinks|sections|revid|displaytitle|iwlinks|properties',
+                                       'images|externallinks|sections|revid|displaytitle|iwlinks|' .
+                                       'properties|parsewarnings',
                                ApiBase::PARAM_ISMULTI => true,
                                ApiBase::PARAM_TYPE => [
                                        'text',
@@ -777,6 +782,7 @@ class ApiParse extends ApiBase {
                                        'limitreportdata',
                                        'limitreporthtml',
                                        'parsetree',
+                                       'parsewarnings'
                                ],
                                ApiBase::PARAM_HELP_MSG_PER_VALUE => [
                                        'parsetree' => [ 'apihelp-parse-paramvalue-prop-parsetree', CONTENT_MODEL_WIKITEXT ],
index 3124638..407497e 100644 (file)
@@ -56,7 +56,7 @@ class ApiPurge extends ApiBase {
                        $page = WikiPage::factory( $title );
                        if ( !$user->pingLimiter( 'purge' ) ) {
                                // Directly purge and skip the UI part of purge()
-                               $page->doPurge( WikiPage::PURGE_ALL );
+                               $page->doPurge();
                                $r['purged'] = true;
                        } else {
                                $this->addWarning( 'apierror-ratelimited' );
index ef6bb6a..8ce122c 100644 (file)
@@ -26,6 +26,8 @@
  * @file
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Query module to enumerate all available pages.
  *
@@ -85,6 +87,7 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                $db = $this->getDB();
 
                $params = $this->extractRequestParams();
+               $userId = !is_null( $params['user'] ) ? User::idFromName( $params['user'] ) : null;
 
                // Table and return fields
                $this->addTables( 'image' );
@@ -189,7 +192,11 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
 
                        // Image filters
                        if ( !is_null( $params['user'] ) ) {
-                               $this->addWhereFld( 'img_user_text', $params['user'] );
+                               if ( $userId ) {
+                                       $this->addWhereFld( 'img_user', $userId );
+                               } else {
+                                       $this->addWhereFld( 'img_user_text', $params['user'] );
+                               }
                        }
                        if ( $params['filterbots'] != 'all' ) {
                                $this->addTables( 'user_groups' );
@@ -269,7 +276,11 @@ class ApiQueryAllImages extends ApiQueryGeneratorBase {
                if ( $params['sort'] == 'timestamp' ) {
                        $this->addOption( 'ORDER BY', 'img_timestamp' . $sortFlag );
                        if ( !is_null( $params['user'] ) ) {
-                               $this->addOption( 'USE INDEX', [ 'image' => 'img_usertext_timestamp' ] );
+                               if ( $userId ) {
+                                       $this->addOption( 'USE INDEX', [ 'image' => 'img_user_timestamp' ] );
+                               } else {
+                                       $this->addOption( 'USE INDEX', [ 'image' => 'img_usertext_timestamp' ] );
+                               }
                        } else {
                                $this->addOption( 'USE INDEX', [ 'image' => 'img_timestamp' ] );
                        }
index d2e956c..14c9986 100644 (file)
        "apihelp-parse-paramvalue-prop-iwlinks": "Gibt Interwiki-Links des geparsten Wikitextes zurück.",
        "apihelp-parse-paramvalue-prop-wikitext": "Gibt den originalen Wikitext zurück, der geparst wurde.",
        "apihelp-parse-paramvalue-prop-properties": "Gibt verschiedene Eigenschaften zurück, die im geparsten Wikitext definiert sind.",
+       "apihelp-parse-paramvalue-prop-parsewarnings": "Gibt die Warnungen aus, die beim Parsen des Inhalts aufgetreten sind.",
        "apihelp-parse-param-section": "Parst nur den Inhalt dieser Abschnittsnummer.\n\nFalls <kbd>new</kbd>, parst <var>$1text</var> und <var>$1sectiontitle</var>, als ob ein neuer Abschnitt der Seite hinzugefügt wird.\n\n<kbd>new</kbd> ist nur erlaubt mit der Angabe <var>text</var>.",
        "apihelp-parse-param-sectiontitle": "Überschrift des neuen Abschnittes, wenn <var>section</var> = <kbd>new</kbd> ist.\n\nAnders als beim Bearbeiten der Seite wird der Parameter nicht durch die <var>summary</var> ersetzt, wenn er weggelassen oder leer ist.",
        "apihelp-parse-param-disablepp": "Benutze <var>$1disablelimitreport</var> stattdessen.",
index ab8a8a5..cd30960 100644 (file)
        "apihelp-parse-paramvalue-prop-limitreportdata": "Gives the limit report in a structured way. Gives no data, when <var>$1disablelimitreport</var> is set.",
        "apihelp-parse-paramvalue-prop-limitreporthtml": "Gives the HTML version of the limit report. Gives no data, when <var>$1disablelimitreport</var> is set.",
        "apihelp-parse-paramvalue-prop-parsetree": "The XML parse tree of revision content (requires content model <code>$1</code>)",
+       "apihelp-parse-paramvalue-prop-parsewarnings": "Gives the warnings that occurred while parsing content.",
        "apihelp-parse-param-pst": "Do a pre-save transform on the input before parsing it. Only valid when used with text.",
        "apihelp-parse-param-onlypst": "Do a pre-save transform (PST) on the input, but don't parse it. Returns the same wikitext, after a PST has been applied. Only valid when used with <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Includes language links supplied by extensions (for use with <kbd>$1prop=langlinks</kbd>).",
index afe3081..252e027 100644 (file)
        "apihelp-parse-paramvalue-prop-limitreportdata": "Fournit le rapport de limite d’une manière structurée. Ne fournit aucune donnée, si <var>$1disablelimitreport</var> est positionné.",
        "apihelp-parse-paramvalue-prop-limitreporthtml": "Fournit la version HTML du rapport de limite. Ne fournit aucune donnée, si <var>$1disablelimitreport</var> est positionné.",
        "apihelp-parse-paramvalue-prop-parsetree": "L’arbre d’analyse XML du contenu de la révision (nécessite le modèle de contenu <code>$1</code>)",
+       "apihelp-parse-paramvalue-prop-parsewarnings": "Fournit les messages d'avertissement qui sont apparus lors de l'analyse de contenu.",
        "apihelp-parse-param-pst": "Faire une transformation avant enregistrement de l’entrée avant de l’analyser. Valide uniquement quand utilisé avec du texte.",
        "apihelp-parse-param-onlypst": "Faire une transformation avant enregistrement (PST) de l’entrée, mais ne pas l’analyser. Renvoie le même wikitexte, après que la PST a été appliquée. Valide uniquement quand utilisé avec <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Inclut les liens de langue fournis par les extensions (à utiliser avec <kbd>$1prop=langlinks</kbd>).",
        "apihelp-query+random-param-limit": "Limiter le nombre de pages aléatoires renvoyées.",
        "apihelp-query+random-param-redirect": "Utilisez <kbd>$1filterredir=redirects</kbd> au lieu de ce paramètre.",
        "apihelp-query+random-param-filterredir": "Comment filtrer les redirections.",
-       "apihelp-query+random-example-simple": "Obtenir deux pages aléatoires de l’espace principal",
-       "apihelp-query+random-example-generator": "Renvoyer les informations de la page sur deux pages au hasard de l’espace de noms principal",
+       "apihelp-query+random-example-simple": "Obtenir deux pages aléatoires de l’espace de noms principal.",
+       "apihelp-query+random-example-generator": "Renvoyer les informations de la page sur deux pages au hasard de l’espace de noms principal.",
        "apihelp-query+recentchanges-description": "Énumérer les modifications récentes.",
        "apihelp-query+recentchanges-param-start": "L’horodatage auquel démarrer l’énumération.",
        "apihelp-query+recentchanges-param-end": "L’horodatage auquel arrêter l’énumération.",
        "apihelp-query+recentchanges-paramvalue-prop-timestamp": "Ajoute l’horodatage de la modification.",
        "apihelp-query+recentchanges-paramvalue-prop-title": "Ajoute le titre de la page modifiée.",
        "apihelp-query+recentchanges-paramvalue-prop-ids": "Ajoute l’ID de la page, l’ID des modifications récentes et l’ID de l’ancienne et la nouvelle révisions.",
-       "apihelp-query+recentchanges-paramvalue-prop-sizes": "Ajoute l’ancienne et la nouvelle tailles de la page en octets.",
+       "apihelp-query+recentchanges-paramvalue-prop-sizes": "Ajoute l’ancienne et la nouvelle taille de la page en octets.",
        "apihelp-query+recentchanges-paramvalue-prop-redirect": "Marque la modification si la page est une redirection.",
        "apihelp-query+recentchanges-paramvalue-prop-patrolled": "Marque les modifications patrouillables comme patrouillées ou non.",
        "apihelp-query+recentchanges-paramvalue-prop-loginfo": "Ajoute les informations du journal (Id du journal, type de trace, etc.) aux entrées du journal.",
index ec20f8a..0daf12f 100644 (file)
        "apihelp-delete-param-watch": "문서를 현재 사용자의 주시문서 목록에 추가합니다.",
        "apihelp-delete-param-unwatch": "문서를 현재 사용자의 주시문서 목록에서 제거합니다.",
        "apihelp-delete-example-simple": "<kbd>Main Page</kbd>를 삭제합니다.",
+       "apihelp-delete-example-reason": "<kbd>Preparing for move</kbd> 라는 이유로 <kbd>Main Page</kbd>를 삭제하기.",
        "apihelp-disabled-description": "이 모듈은 해제되었습니다.",
        "apihelp-edit-description": "문서를 만들고 편집합니다.",
+       "apihelp-edit-param-title": "편집할 문서의 제목. <var>$1pageid</var>과 같이 사용할 수 없습니다.",
        "apihelp-edit-param-section": "문단 번호입니다. <kbd>0</kbd>은 최상위 문단, <kbd>new</kbd>는 새 문단입니다.",
        "apihelp-edit-param-sectiontitle": "새 문단을 위한 제목.",
        "apihelp-edit-param-text": "문서 내용.",
        "apihelp-protect-example-protect": "문서 보호",
        "apihelp-purge-description": "주어진 제목을 위한 캐시를 새로 고침.",
        "apihelp-purge-param-forcelinkupdate": "링크 테이블을 업데이트합니다.",
+       "apihelp-purge-example-simple": "<kbd>Main Page</kbd>와 <kbd>API</kbd> 문서를 새로 고침.",
        "apihelp-query-param-prop": "조회된 페이지에 대해 가져올 속성입니다.",
        "apihelp-query-param-list": "가져올 목록입니다.",
        "apihelp-query-param-meta": "가져올 메타데이터입니다.",
        "apihelp-query+allusers-example-Y": "<kbd>Y</kbd>로 시작하는 사용자를 나열합니다.",
        "apihelp-query+authmanagerinfo-description": "현재의 인증 상태에 대한 정보를 검색합니다.",
        "apihelp-query+backlinks-param-namespace": "열거할 이름공간.",
+       "apihelp-query+backlinks-example-simple": "<kbd>Main Page</kbd>를 가리키는 링크를 보이기.",
+       "apihelp-query+backlinks-example-generator": "<kbd>Main Page</kbd>를 가리키는 문서의 정보를 보기.",
        "apihelp-query+blocks-description": "차단된 모든 사용자와 IP 주소를 나열합니다.",
        "apihelp-query+blocks-param-start": "나열을 시작할 타임스탬프",
        "apihelp-query+blocks-param-end": "나열을 끝낼 타임스탬프",
index c340d4a..7d5f7ea 100644 (file)
@@ -11,7 +11,8 @@
                        "Caçador de Palavras",
                        "LucyDiniz",
                        "Eduardo Addad de Oliveira",
-                       "Warley Felipe C."
+                       "Warley Felipe C.",
+                       "TheEduGobi"
                ]
        },
        "apihelp-main-param-action": "Qual ação executar.",
@@ -22,6 +23,7 @@
        "apihelp-main-param-requestid": "Qualquer valor dado aqui será incluído na resposta. Pode ser usado para distinguir requisições.",
        "apihelp-main-param-servedby": "Inclua o nome de host que atendeu a solicitação nos resultados.",
        "apihelp-main-param-curtimestamp": "Inclui a data atual no resultado.",
+       "apihelp-main-param-origin": "Ao acessar a API usando uma solicitação AJAX por domínio cruzado (CORS), defina isto como o domínio de origem. Isto deve estar incluso em toda solicitação ''pre-flight'', sendo portanto parte do URI da solicitação (ao invés do corpo do POST).\n\nPara solicitações autenticadas, isto deve corresponder a uma das origens no cabeçalho <code>Origin</code>, para que seja algo como <kbd>https://pt.wikipedia.org</kbd> ou <kbd>https://meta.wikimedia.org</kbd>. Se este parâmetro não corresponder ao cabeçalho <code>Origin</code>, uma resposta 403 será retornada. Se este parâmetro corresponder ao cabeçalho <code>Origin</code> e a origem for permitida (''whitelisted''), os cabeçalhos <code>Access-Control-Allow-Origin</code> e <code>Access-Control-Allow-Credentials</code> serão definidos.\n\nPara solicitações não autenticadas, especifique o valor <kbd>*</kbd>. Isto fará com que o cabeçalho <code>Access-Control-Allow-Origin</code> seja definido, porém o <code>Access-Control-Allow-Credentials</code> será <code>false</code> e todos os dados específicos para usuários tornar-se-ão restritos.",
        "apihelp-block-description": "Bloquear um usuário",
        "apihelp-block-param-user": "Nome de usuário, endereço IP ou faixa de IP para bloquear.",
        "apihelp-block-param-reason": "Razão do bloqueio.",
@@ -91,7 +93,7 @@
        "apihelp-feedcontributions-param-newonly": "Mostrar somente as edições que são criação de páginas.",
        "apihelp-feedcontributions-param-hideminor": "Ocultar edições menores.",
        "apihelp-feedcontributions-param-showsizediff": "Mostrar a diferença de tamanho entre as revisões.",
-       "apihelp-feedrecentchanges-description": "Retorna um feed de alterações recentes.",
+       "apihelp-feedrecentchanges-description": "Retorna um ''feed'' de mudanças recentes.",
        "apihelp-feedrecentchanges-param-feedformat": "O formato do feed.",
        "apihelp-feedrecentchanges-param-namespace": "Espaço nominal a partir do qual limitar resultados.",
        "apihelp-feedrecentchanges-param-invert": "Todos os espaços nominais, exceto o selecionado.",
        "apihelp-feedrecentchanges-param-hidecategorization": "Alterações de membros pertencentes à uma categoria.",
        "apihelp-feedrecentchanges-param-tagfilter": "Filtrar por tag.",
        "apihelp-feedrecentchanges-example-simple": "Mostrar as mudanças recentes.",
-       "apihelp-feedrecentchanges-example-30days": "Mostrar as alterações recentes por 30 dias.",
+       "apihelp-feedrecentchanges-example-30days": "Mostrar as mudanças recentes por 30 dias.",
        "apihelp-feedwatchlist-description": "Retornar um feed da lista de vigiados.",
        "apihelp-feedwatchlist-param-feedformat": "O formato do feed.",
        "apihelp-feedwatchlist-param-hours": "Lista páginas modificadas dentro dessa quantia de horas a partir de agora.",
index cca3a3c..6e70653 100644 (file)
        "apihelp-parse-paramvalue-prop-limitreportdata": "{{doc-apihelp-paramvalue|parse|prop|limitreportdata}}",
        "apihelp-parse-paramvalue-prop-limitreporthtml": "{{doc-apihelp-paramvalue|parse|prop|limitreporthtml}}",
        "apihelp-parse-paramvalue-prop-parsetree": "{{doc-apihelp-paramvalue|parse|prop|parsetree|params=* $1 - Value of the constant CONTENT_MODEL_WIKITEXT|paramstart=2}}",
+       "apihelp-parse-paramvalue-prop-parsewarnings": "{{doc-apihelp-paramvalue|parse|prop|parsewarnings}}",
        "apihelp-parse-param-pst": "{{doc-apihelp-param|parse|pst}}",
        "apihelp-parse-param-onlypst": "{{doc-apihelp-param|parse|onlypst}}",
        "apihelp-parse-param-effectivelanglinks": "{{doc-apihelp-param|parse|effectivelanglinks}}",
index 1396458..fb6698f 100644 (file)
        "apihelp-query+protectedtitles-example-simple": "Lista skyddade titlar.",
        "apihelp-query+recentchanges-example-simple": "Lista de senaste ändringarna.",
        "apihelp-query+revisions-example-first5-not-localhost": "Hämta första 5 revideringarna av \"huvudsidan\" och som inte gjorts av anonym användare \"127.0.0.1\"",
+       "apihelp-query+siteinfo-paramvalue-prop-languagevariants": "Returnerar en lista över språkkoder som [[mw:LanguageConverter|LanguageConverter]] har aktiverat och de varianter som varje stöder.",
        "apihelp-query+siteinfo-example-simple": "Hämta information om webbplatsen.",
        "apihelp-query+stashimageinfo-description": "Returnerar filinformation för temporära filer.",
        "apihelp-query+stashimageinfo-param-filekey": "Nyckel som identifierar en tidigare uppladdning som lagrats temporärt.",
        "api-help-param-multi-separate": "Separera värden med <kbd>|</kbd> eller [[Special:ApiHelp/main#main/datatypes|alternativ]].",
        "apierror-articleexists": "Artikeln du försökte skapa har redan skapats.",
        "apierror-baddiff": "Diff kan inte hämtas. En eller båda sidversioner finns inte eller du har inte behörighet för att visa dem.",
+       "apierror-invalidoldimage": "Parametern <var>oldimage</var> har ett ogiltigt format.",
        "apierror-invalidsection": "Parametern <var>section</var> måste vara ett giltigt avsnitts-ID eller <kbd>new</kbd>.",
        "apierror-nosuchuserid": "Det finns ingen användare med ID $1.",
        "apierror-protect-invalidaction": "Ogiltig skyddstyp \"$1\".",
index 996f26e..78f16d3 100644 (file)
        "apihelp-parse-paramvalue-prop-limitreportdata": "Дає звіт по обмеженнях у структурованому вигляді. Не видає даних, якщо встановлено <var>$1disablelimitreport</var>.",
        "apihelp-parse-paramvalue-prop-limitreporthtml": "Дає HTML-версію звіту по обмеженнях. Не видає даних, якщо встановлено <var>$1disablelimitreport</var>.",
        "apihelp-parse-paramvalue-prop-parsetree": "Синтаксичне дерево XML вмісту версії (передбачає модель вмісту <code>$1</code>)",
+       "apihelp-parse-paramvalue-prop-parsewarnings": "Виводить попередження, які з'явилися при обробці контенту.",
        "apihelp-parse-param-pst": "Зробіть трансформацію вхідних даних перед збереженням і аналізом. Дійсне лише при використанні з текстом.",
        "apihelp-parse-param-onlypst": "Зробіть трансформацію вхідних даних перед збереженням (PST), але не аналізуйте. Видає той самий вікітекст, після застосування PST. Дійсне лише у разі використання з <var>$1text</var>.",
        "apihelp-parse-param-effectivelanglinks": "Включає мовні посилання, додані розширеннями (для використання з <kbd>$1prop=langlinks</kbd>).",
index 731a9c0..93af817 100644 (file)
        "apihelp-parse-paramvalue-prop-limitreportdata": "以结构化的方式提供限制报告。如果<var>$1disablelimitreport</var>被设定则不提供数据。",
        "apihelp-parse-paramvalue-prop-limitreporthtml": "提供限制报告的HTML版本。当<var>$1disablelimitreport</var>被设置时不会提供数据。",
        "apihelp-parse-paramvalue-prop-parsetree": "修订内容的XML解析树(需要内容模型<code>$1</code>)",
+       "apihelp-parse-paramvalue-prop-parsewarnings": "在解析内容时提供发生的警告",
        "apihelp-parse-param-pst": "在解析输入前,对输入做一次保存前变换处理。仅当使用文本时有效。",
        "apihelp-parse-param-onlypst": "在输入内容中执行预保存转换(PST),但不解析它。在PST被应用后返回相同的wiki文本。只当与<var>$1text</var>一起使用时有效。",
        "apihelp-parse-param-effectivelanglinks": "包含由扩展提供的语言链接(用于与<kbd>$1prop=langlinks</kbd>一起使用)。",
        "apiwarn-unclearnowtimestamp": "为时间戳参数<var>$1</var>传递“$2”已被弃用。如因某些原因您需要明确指定当前时间而不计算客户端,请使用<kbd>now</kbd>。",
        "apiwarn-unrecognizedvalues": "参数<var>$1</var>有无法识别的{{PLURAL:$3|值}}:$2。",
        "apiwarn-unsupportedarray": "参数<var>$1</var>使用未受支持的PHP数组语法。",
+       "apiwarn-urlparamwidth": "为了获得衍生自<var>$1urlwidth</var>/<var>$1urlheight</var>的宽度值($3),正在忽略<var>$1urlparam</var>的宽度值集($2)。",
        "apiwarn-validationfailed-badchars": "关键词中的字符无效(只允许<code>a-z</code>、<code>A-Z</code>、<code>0-9</code>、<code>_</code>和<code>-</code>)。",
        "apiwarn-validationfailed-badpref": "不是有效的偏好。",
        "apiwarn-validationfailed-cannotset": "不能通过此模块设置。",
index 0a07a93..7215606 100644 (file)
@@ -28,6 +28,7 @@
 
 use Wikimedia\Rdbms\ResultWrapper;
 use Wikimedia\Rdbms\FakeResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Class for fetching backlink lists, approximate backlink counts and
index 77ab2d5..57d4581 100644 (file)
@@ -23,6 +23,7 @@
 use MediaWiki\Linker\LinkTarget;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Class representing a list of titles
index b720dec..57f66f1 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Cache
  */
+use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\Linker\LinkTarget;
 use MediaWiki\MediaWikiServices;
 
index 5d48c03..14baeeb 100644 (file)
@@ -238,6 +238,7 @@ class MessageBlobStore implements LoggerAwareInterface {
                }
 
                $json = FormatJson::encode( (object)$messages );
+               // @codeCoverageIgnoreStart
                if ( $json === false ) {
                        $this->logger->warning( 'Failed to encode message blob for {module} ({lang})', [
                                'module' => $module->getName(),
@@ -245,6 +246,7 @@ class MessageBlobStore implements LoggerAwareInterface {
                        ] );
                        $json = '{}';
                }
+               // codeCoverageIgnoreEnd
                return $json;
        }
 }
index 7cd489a..70e1d9a 100644 (file)
@@ -191,11 +191,16 @@ class MessageCache {
                                // either.
                                $po = ParserOptions::newFromAnon();
                                $po->setEditSection( false );
+                               $po->setAllowUnsafeRawHtml( false );
                                return $po;
                        }
 
                        $this->mParserOptions = new ParserOptions;
                        $this->mParserOptions->setEditSection( false );
+                       // Messages may take parameters that could come
+                       // from malicious sources. As a precaution, disable
+                       // the <html> parser tag when parsing messages.
+                       $this->mParserOptions->setAllowUnsafeRawHtml( false );
                }
 
                return $this->mParserOptions;
index e7e2d10..52611ec 100644 (file)
@@ -18,6 +18,8 @@
  * @file
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * LCStore implementation which uses the standard DB functions to store data.
  * This will work on any MediaWiki installation.
index b6be1f9..4117a11 100644 (file)
@@ -22,6 +22,8 @@
  * @author Matthew Flaschen
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * An individual filter in a boolean group
  *
@@ -95,11 +97,6 @@ class ChangesListBooleanFilter extends ChangesListFilter {
         *  to true.  It does not need to be set if the exact same filter is simply visible
         *  on both.
         * $filterDefinition['default'] bool Default
-        * $filterDefinition['isAllowedCallable'] callable Callable taking two parameters,
-        *  the class name of the special page and an IContextSource, and returning true
-        *  if and only if the current user is permitted to use this filter on the current
-        *  wiki.  If it returns false, it will both hide the UI (in all UIs) and prevent
-        *  the DB query modification from taking effect. (optional, defaults to allowed)
         * $filterDefinition['priority'] int Priority integer.  Higher value means higher
         *  up in the group's filter list.
         * $filterDefinition['queryCallable'] callable Callable accepting parameters, used
@@ -164,17 +161,16 @@ class ChangesListBooleanFilter extends ChangesListFilter {
        /**
         * @inheritdoc
         */
-       public function displaysOnUnstructuredUi( ChangesListSpecialPage $specialPage ) {
-               return $this->showHide &&
-                       $this->isAllowed( $specialPage );
+       public function displaysOnUnstructuredUi() {
+               return !!$this->showHide;
        }
 
        /**
         * @inheritdoc
         */
-       public function isFeatureAvailableOnStructuredUi( ChangesListSpecialPage $specialPage ) {
+       public function isFeatureAvailableOnStructuredUi() {
                return $this->isReplacedInStructuredUi ||
-                       parent::isFeatureAvailableOnStructuredUi( $specialPage );
+                       parent::isFeatureAvailableOnStructuredUi();
        }
 
        /**
index 22e797d..b3a16a8 100644 (file)
@@ -73,13 +73,6 @@ abstract class ChangesListFilter {
         */
        protected $description;
 
-       /**
-        * Callable used to check whether this filter is allowed to take effect
-        *
-        * @var callable $isAllowedCallable
-        */
-       protected $isAllowedCallable;
-
        /**
         * List of conflicting groups
         *
@@ -139,11 +132,6 @@ abstract class ChangesListFilter {
         * $filterDefinition['label'] string i18n key of label for structured UI.
         * $filterDefinition['description'] string i18n key of description for structured
         *  UI.
-        * $filterDefinition['isAllowedCallable'] callable Callable taking two parameters,
-        *  the class name of the special page and an IContextSource, and returning true
-        *  if and only if the current user is permitted to use this filter on the current
-        *  wiki.  If it returns false, it will both hide the UI (in all UIs) and prevent
-        *  the DB query modification from taking effect. (optional, defaults to allowed)
         * $filterDefinition['priority'] int Priority integer.  Higher value means higher
         *  up in the group's filter list.
         */
@@ -179,10 +167,6 @@ abstract class ChangesListFilter {
                        $this->description = $filterDefinition['description'];
                }
 
-               if ( isset( $filterDefinition['isAllowedCallable'] ) ) {
-                       $this->isAllowedCallable = $filterDefinition['isAllowedCallable'];
-               }
-
                $this->priority = $filterDefinition['priority'];
 
                $this->group->registerFilter( $this );
@@ -311,20 +295,18 @@ abstract class ChangesListFilter {
        /**
         * Checks whether the filter should display on the unstructured UI
         *
-        * @param ChangesListSpecialPage $specialPage Current special page
         * @return bool Whether to display
         */
-       abstract public function displaysOnUnstructuredUi( ChangesListSpecialPage $specialPage );
+       abstract public function displaysOnUnstructuredUi();
 
        /**
         * Checks whether the filter should display on the structured UI
         * This refers to the exact filter.  See also isFeatureAvailableOnStructuredUi.
         *
-        * @param ChangesListSpecialPage $specialPage Current special page
         * @return bool Whether to display
         */
-       public function displaysOnStructuredUi( ChangesListSpecialPage $specialPage ) {
-               return $this->label !== null && $this->isAllowed( $specialPage );
+       public function displaysOnStructuredUi() {
+               return $this->label !== null;
        }
 
        /**
@@ -333,8 +315,8 @@ abstract class ChangesListFilter {
         *
         * This can either be the exact filter, or a new filter that replaces it.
         */
-       public function isFeatureAvailableOnStructuredUi( ChangesListSpecialPage $specialPage ) {
-               return $this->displaysOnStructuredUi( $specialPage );
+       public function isFeatureAvailableOnStructuredUi() {
+               return $this->displaysOnStructuredUi();
        }
 
        /**
@@ -344,24 +326,6 @@ abstract class ChangesListFilter {
                return $this->priority;
        }
 
-       /**
-        * Checks whether the filter is allowed for the current context
-        *
-        * @param ChangesListSpecialPage $specialPage Current special page
-        * @return bool Whether it is allowed
-        */
-       public function isAllowed( ChangesListSpecialPage $specialPage ) {
-               if ( $this->isAllowedCallable === null ) {
-                       return true;
-               } else {
-                       return call_user_func(
-                               $this->isAllowedCallable,
-                               get_class( $specialPage ),
-                               $specialPage->getContext()
-                       );
-               }
-       }
-
        /**
         * Gets the CSS class
         *
index d2ad204..4ff5520 100644 (file)
@@ -332,12 +332,11 @@ abstract class ChangesListFilterGroup {
        /**
         * Gets the JS data in the format required by the front-end of the structured UI
         *
-        * @param ChangesListSpecialPage $specialPage
         * @return array|null Associative array, or null if there are no filters that
         *  display in the structured UI.  messageKeys is a special top-level value, with
         *  the value being an array of the message keys to send to the client.
         */
-       public function getJsData( ChangesListSpecialPage $specialPage ) {
+       public function getJsData() {
                $output = [
                        'name' => $this->name,
                        'type' => $this->type,
@@ -367,7 +366,7 @@ abstract class ChangesListFilterGroup {
                } );
 
                foreach ( $this->filters as $filterName => $filter ) {
-                       if ( $filter->displaysOnStructuredUi( $specialPage ) ) {
+                       if ( $filter->displaysOnStructuredUi() ) {
                                $filterData = $filter->getJsData();
                                $output['messageKeys'] = array_merge(
                                        $output['messageKeys'],
index b6a8774..1c977b9 100644 (file)
@@ -11,7 +11,7 @@ class ChangesListStringOptionsFilter extends ChangesListFilter {
        /**
         * @inheritdoc
         */
-       public function displaysOnUnstructuredUi( ChangesListSpecialPage $specialPage ) {
+       public function displaysOnUnstructuredUi() {
                return false;
        }
 }
index befc213..723ef39 100644 (file)
@@ -22,6 +22,8 @@
  * @author Matthew Flaschen
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Represents a filter group with multiple string options. They are passed to the server as
  * a single form parameter separated by a delimiter.  The parameter name is the
@@ -185,9 +187,7 @@ class ChangesListStringOptionsFilterGroup extends ChangesListFilterGroup {
 
                $allowedFilterNames = [];
                foreach ( $this->filters as $filter ) {
-                       if ( $filter->isAllowed( $specialPage ) ) {
-                               $allowedFilterNames[] = $filter->getName();
-                       }
+                       $allowedFilterNames[] = $filter->getName();
                }
 
                if ( $value === self::ALL ) {
@@ -232,8 +232,8 @@ class ChangesListStringOptionsFilterGroup extends ChangesListFilterGroup {
        /**
         * @inheritdoc
         */
-       public function getJsData( ChangesListSpecialPage $specialPage ) {
-               $output = parent::getJsData( $specialPage );
+       public function getJsData() {
+               $output = parent::getJsData();
 
                $output['separator'] = self::SEPARATOR;
                $output['default'] = $this->getDefault();
index dd8bab9..a37f5f2 100644 (file)
@@ -49,8 +49,9 @@ abstract class ChangeTagsList extends RevisionListBase {
                                $className = 'ChangeTagsLogList';
                                break;
                        default:
-                               throw new Exception( "Class $className requested, but does not exist" );
+                               throw new Exception( "Class $typeName requested, but does not exist" );
                }
+
                return new $className( $context, $title, $ids );
        }
 
index 480aace..271005f 100644 (file)
@@ -19,6 +19,8 @@
  * @ingroup Change tagging
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Stores a list of taggable log entries.
  * @since 1.25
index 8eae238..a0248c6 100644 (file)
@@ -19,6 +19,8 @@
  * @ingroup Change tagging
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Stores a list of taggable revisions.
  * @since 1.25
index c4921e2..809b660 100644 (file)
@@ -24,6 +24,7 @@
  * @ingroup Database
  */
 use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IMaintainableDatabase;
 
 class CloneDatabase {
        /** @var string Table prefix for cloning */
index 07c6fc7..fbbc962 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * The oci8 extension is fairly weak and doesn't support oci_num_rows, among
  * other things. We use a wrapper class to handle that and other
index 6585575..8b62989 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Deferrable Update for closure/callback updates via IDatabase::doAtomicSection()
  * @since 1.27
index d61dec2..f9297af 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Deferrable Update for closure/callback updates that should use auto-commit mode
  * @since 1.28
index 0a9755d..bbe8687 100644 (file)
@@ -19,6 +19,7 @@
  *
  * @file
  */
+use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\LBFactory;
 use Wikimedia\Rdbms\LoadBalancer;
index 7215696..ca29078 100644 (file)
@@ -21,6 +21,7 @@
  */
 use MediaWiki\MediaWikiServices;
 use Wikimedia\ScopedCallback;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Update object handling the cleanup of links tables after a page was deleted.
index 0133f19..5697960 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  */
 
+use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\ScopedCallback;
 
index 5247e97..5b822af 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Deferrable Update for closure/callback
  */
index 7426624..aefa7f5 100644 (file)
@@ -19,6 +19,7 @@
  */
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Assert\Assert;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Class for handling updates to the site_stats table
index 25e8841..2411bef 100644 (file)
@@ -21,6 +21,8 @@
  * @file
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * @deprecated Since 1.28 Use DataUpdate directly, injecting the database
  */
index 33ddc59..b12af19 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 use Psr\Log\LoggerInterface;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Class for fixing stale WANObjectCache keys using a purge event source
index e41ab54..a307468 100644 (file)
@@ -28,6 +28,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * @ingroup SpecialPage Dump
index d907c30..6bb1618 100644 (file)
@@ -21,6 +21,9 @@
  */
 
 use Wikimedia\Rdbms\LoadBalancer;
+use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\DBConnRef;
+use Wikimedia\Rdbms\MaintainableDBConnRef;
 
 /**
  * DB accessable external objects.
index 62e635d..d09c245 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Version of FileJournal that logs to a DB table
index 5936e7d..8510d0c 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * MySQL version of DBLockManager that supports shared locks.
  *
index 5bc60a0..856dc36 100644 (file)
@@ -23,6 +23,9 @@
  * @author Aaron Schulz
  */
 
+use Wikimedia\Rdbms\DBConnRef;
+use Wikimedia\Rdbms\MaintainableDBConnRef;
+
 /**
  * @brief Proxy backend that manages file layout rewriting for FileRepo.
  *
index 3e88508..29c017c 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup FileRepo
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * A foreign repository with an accessible MediaWiki database
  *
index d5e29ab..9c92bc0 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * A repository that stores files in the local filesystem and registers them
index a633fd2..c109fba 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use \MediaWiki\Logger\LoggerFactory;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Class to represent a local file in the wiki's own database
index fa2d5a3..889cb60 100644 (file)
@@ -53,6 +53,8 @@ class Http {
         *    - logger              A \Psr\Logger\LoggerInterface instance for debug logging
         *    - username            Username for HTTP Basic Authentication
         *    - password            Password for HTTP Basic Authentication
+        *    - originalRequest     Information about the original request (as a WebRequest object or
+        *                          an associative array with 'ip' and 'userAgent').
         * @param string $caller The method making this request, for profiling
         * @return string|bool (bool)false on failure or a string on success
         */
index e04402f..88cc510 100644 (file)
@@ -125,6 +125,9 @@ class MWHttpRequest implements LoggerAwareInterface {
                                'Basic ' . base64_encode( $options['username'] . ':' . $options['password'] )
                        );
                }
+               if ( isset( $options['originalRequest'] ) ) {
+                       $this->setOriginalRequest( $options['originalRequest'] );
+               }
 
                $members = [ "postData", "proxy", "noProxy", "sslVerifyHost", "caInfo",
                                "method", "followRedirects", "maxRedirects", "sslVerifyCert", "callback" ];
@@ -606,19 +609,17 @@ class MWHttpRequest implements LoggerAwareInterface {
                                }
                        }
 
-                       if ( $foundRelativeURI ) {
-                               if ( $domain ) {
-                                       return $domain . $locations[$countLocations - 1];
-                               } else {
-                                       $url = parse_url( $this->url );
-                                       if ( isset( $url['host'] ) ) {
-                                               return $url['scheme'] . '://' . $url['host'] .
-                                                       $locations[$countLocations - 1];
-                                       }
-                               }
-                       } else {
+                       if ( !$foundRelativeURI ) {
                                return $locations[$countLocations - 1];
                        }
+                       if ( $domain ) {
+                               return $domain . $locations[$countLocations - 1];
+                       }
+                       $url = parse_url( $this->url );
+                       if ( isset( $url['host'] ) ) {
+                               return $url['scheme'] . '://' . $url['host'] .
+                                       $locations[$countLocations - 1];
+                       }
                }
 
                return $this->url;
@@ -632,4 +633,34 @@ class MWHttpRequest implements LoggerAwareInterface {
        public function canFollowRedirects() {
                return true;
        }
+
+       /**
+        * Set information about the original request. This can be useful for
+        * endpoints/API modules which act as a proxy for some service, and
+        * throttling etc. needs to happen in that service.
+        * Calling this will result in the X-Forwarded-For and X-Original-User-Agent
+        * headers being set.
+        * @param WebRequest|array $originalRequest When in array form, it's
+        *   expected to have the keys 'ip' and 'userAgent'.
+        * @note IP/user agent is personally identifiable information, and should
+        *   only be set when the privacy policy of the request target is
+        *   compatible with that of the MediaWiki installation.
+        */
+       public function setOriginalRequest( $originalRequest ) {
+               if ( $originalRequest instanceof WebRequest ) {
+                       $originalRequest = [
+                               'ip' => $originalRequest->getIP(),
+                               'userAgent' => $originalRequest->getHeader( 'User-Agent' ),
+                       ];
+               } elseif (
+                       !is_array( $originalRequest )
+                       || array_diff( [ 'ip', 'userAgent' ], array_keys( $originalRequest ) )
+               ) {
+                       throw new InvalidArgumentException( __METHOD__ . ': $originalRequest must be a '
+                               . "WebRequest or an array with 'ip' and 'userAgent' keys" );
+               }
+
+               $this->reqHeaders['X-Forwarded-For'] = $originalRequest['ip'];
+               $this->reqHeaders['X-Original-User-Agent'] = $originalRequest['userAgent'];
+       }
 }
index 0305535..22717fc 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Deployment
  */
 use Wikimedia\Rdbms\LBFactorySingle;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Base class for DBMS-specific installation helper classes.
index f8ab1f2..8913c77 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Deployment
  */
+use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\MediaWikiServices;
 
 require_once __DIR__ . '/../../maintenance/Maintenance.php';
@@ -392,7 +393,7 @@ abstract class DatabaseUpdater {
         * Writes the schema updates desired to a file for the DB Admin to run.
         * @param array $schemaUpdate
         */
-       private function writeSchemaUpdateFile( $schemaUpdate = [] ) {
+       private function writeSchemaUpdateFile( array $schemaUpdate = [] ) {
                $updates = $this->updatesSkipped;
                $this->updatesSkipped = [];
 
@@ -425,7 +426,7 @@ abstract class DatabaseUpdater {
         *
         * @param array $what What updates to perform
         */
-       public function doUpdates( $what = [ 'core', 'extensions', 'stats' ] ) {
+       public function doUpdates( array $what = [ 'core', 'extensions', 'stats' ] ) {
                $this->db->setSchemaVars( $this->getSchemaVars() );
 
                $what = array_flip( $what );
index f03fe6a..0a2b808 100644 (file)
@@ -446,6 +446,8 @@ abstract class Installer {
                $this->parserTitle = Title::newFromText( 'Installer' );
                $this->parserOptions = new ParserOptions( $wgUser ); // language will be wrong :(
                $this->parserOptions->setEditSection( false );
+               // Don't try to access DB before user language is initialised
+               $this->setParserLanguage( Language::factory( 'en' ) );
        }
 
        /**
@@ -674,7 +676,7 @@ abstract class Installer {
                try {
                        $out = $wgParser->parse( $text, $this->parserTitle, $this->parserOptions, $lineStart );
                        $html = $out->getText();
-               } catch ( DBAccessError $e ) {
+               } catch ( MediaWiki\Services\ServiceDisabledException $e ) {
                        $html = '<!--DB access attempted during parse-->  ' . htmlspecialchars( $text );
 
                        if ( !empty( $this->debug ) ) {
index 79ae175..e262eda 100644 (file)
@@ -285,7 +285,7 @@ class OracleUpdater extends DatabaseUpdater {
         *
         * @param array $what
         */
-       public function doUpdates( $what = [ 'core', 'extensions', 'purge', 'stats' ] ) {
+       public function doUpdates( array $what = [ 'core', 'extensions', 'purge', 'stats' ] ) {
                parent::doUpdates( $what );
 
                $this->db->query( 'BEGIN fill_wiki_info; END;' );
index 9191d18..62a9267 100644 (file)
@@ -91,6 +91,7 @@
        "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-db-install-help": "Merkañ anv an implijer hag ar ger-tremen a vo implijet evit kevreañ ouzh an diaz roadennoù e-pad an argerzh staliañ.",
        "config-db-account-lock": "Implijout ar memes anv implijer ha ger-tremen e-kerzh oberiadurioù boutin",
        "config-db-wiki-account": "Kont implijer evit oberiadurioù boutin",
+       "config-db-wiki-help": "Merkañ an anv-implijer hag ar ger-tremen a vo implijet evit kevreañ ouzh an diaz roadennoù e-pad oberiadurioù normal ar wiki.\nMa n'eus ket eus ar gont ha ma'z eus gwirioù a-walc'h gant ar gont staliañ, e vo krouet ar gont implijer-mañ gant al live gwirioù rekis izelañ evit gallout lakaat ar wiki da vont en-dro.",
        "config-db-prefix": "Rakrann taolennoù an diaz roadennoù :",
+       "config-db-prefix-help": "Mard eo ret deoc'h rannañ un diaz roadennoù gant meur a wiki, pe etre MediaWiki hag un arload benak all e c'hallit dibab ouzhpennañ ur rakger da holl anvioù an taolennoù kuit na vije tabutoù.\nArabat ober gant esaouennoù.\n\nPeurliesañ e vez laosket goullo ar vaezienn-mañ.",
        "config-mysql-old": "Rekis eo MySQL $1 pe ur stumm nevesoc'h; ober a rit gant $2.",
        "config-db-port": "Porzh an diaz roadennoù :",
        "config-db-schema": "Brastres evit MediaWiki",
        "config-db-schema-help": "Peurliesañ e vo digudenn ar chema-mañ.\nArabat cheñch anezho ma n'hoc'h eus ket ezhomm d'en ober.",
        "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-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": "* $1 eo an dibab kentañ evit MediaWiki hag an hini skoret ar gwellañ ([http://www.php.net/manual/en/mysql.installation.php penaos kempunañ PHP gant skor MySQL])",
-       "config-dbsupport-postgres": "* Ur reizhiad diaz titouroù brudet ha digor eo $1. Gallout a ra ober evit MySQL ([http://www.php.net/manual/en/pgsql.installation.php Penaos kempunañ PHP gant skor PostgreSQL]). Gallout a ra bezañ un nebeud drein bihan enni ha n'eo ket erbedet he implijout en un endro produiñ.",
-       "config-dbsupport-sqlite": "* $1 zo ur reizhiad diaz titouroù 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": "* $1 zo un diaz titouroù kenwerzhel. ([http://www.php.net/manual/en/oci8.installation.php Penaos kempunañ PHP gant skor OCI8])",
+       "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. ([http://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. ([http://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]. ([http://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-missing-db-name": "Ret eo deoc'h merkañ un dalvoudenn evit \"{{int:config-db-name}}\".",
        "config-missing-db-host": "Ret eo deoc'h merkañ un dalvoudenn evit \"{{int:config-db-host}}\"",
        "config-missing-db-server-oracle": "Ret eo deoc'h merkañ un dalvoudenn evit \"{{int:config-db-host-oracle}}\".",
-       "config-invalid-db-server-oracle": "Direizh eo anv TNS an diaz titouroù \"$1\".\nOber hepken gant lizherennoù ASCII (a-z, A-Z), sifroù (0-9), arouezennoù islinennañ (_) ha pikoù (.).",
+       "config-invalid-db-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-help": "skoazell",
        "config-help-tooltip": "klikañ evit astenn",
        "config-nofile": "N'eus ket bet gallet kavout ar restr \"$1\". Daoust ha dilamet eo bet ?",
-       "mainpagetext": "'''Meziant MediaWiki staliet.'''",
+       "mainpagetext": "<strong>Staliet eo bet MediaWiki.</strong>",
        "mainpagedocfooter": "Sellit ouzh [https://meta.wikimedia.org/wiki/Help:Contents Sturlevr an implijerien] evit gouzout hiroc'h war an doare da implijout ar meziant wiki.\n\n== Kregiñ ganti ==\n\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Roll an arventennoù kefluniañ]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAG MediaWiki]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Roll ar c'haozeadennoù diwar-benn dasparzhoù MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Lec'hiañ MediaWiki en ho yezh"
 }
index 2f58947..540b8c5 100644 (file)
  * @file
  * @author Aaron Schulz
  */
+use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\ScopedCallback;
+use Wikimedia\Rdbms\DBConnRef;
 
 /**
  * Class to handle job queues stored in the DB
index d76d866..ba80c8e 100644 (file)
@@ -20,6 +20,7 @@
  *
  * @file
  */
+use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\MediaWikiServices;
 
 class PurgeJobUtils {
index b1cece8..bba07e2 100644 (file)
@@ -176,6 +176,12 @@ class CSSMin {
         * @return bool|string
         */
        public static function getMimeType( $file ) {
+               // Infer the MIME-type from the file extension
+               $ext = strtolower( pathinfo( $file, PATHINFO_EXTENSION ) );
+               if ( isset( self::$mimeTypes[$ext] ) ) {
+                       return self::$mimeTypes[$ext];
+               }
+
                $realpath = realpath( $file );
                if (
                        $realpath
@@ -186,12 +192,6 @@ class CSSMin {
                        return finfo_file( finfo_open( FILEINFO_MIME_TYPE ), $realpath );
                }
 
-               // Infer the MIME-type from the file extension
-               $ext = strtolower( pathinfo( $file, PATHINFO_EXTENSION ) );
-               if ( isset( self::$mimeTypes[$ext] ) ) {
-                       return self::$mimeTypes[$ext];
-               }
-
                return false;
        }
 
index b17b1a0..8ef8196 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup LockManager
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Version of LockManager based on using named/row DB locks.
  *
index fc00965..49b2fe6 100644 (file)
@@ -3,8 +3,6 @@
 namespace Wikimedia\Rdbms;
 
 use Database;
-use DBConnRef;
-use IDatabase;
 use InvalidArgumentException;
 
 /**
index fc3ebe0..0d5fbf5 100644 (file)
@@ -1,8 +1,9 @@
 <?php
 
-use Wikimedia\Rdbms\DatabaseDomain;
-use Wikimedia\Rdbms\ILoadBalancer;
-use Wikimedia\Rdbms\DBMasterPos;
+namespace Wikimedia\Rdbms;
+
+use Database;
+use InvalidArgumentException;
 
 /**
  * Helper class to handle automatically marking connections as reusable (via RAII pattern)
@@ -603,3 +604,5 @@ class DBConnRef implements IDatabase {
                }
        }
 }
+
+class_alias( 'Wikimedia\Rdbms\DBConnRef', 'DBConnRef' );
index 92adaf9..49ddd14 100644 (file)
@@ -33,6 +33,8 @@ use Wikimedia\Rdbms\ResultWrapper;
 use Wikimedia\Rdbms\DBMasterPos;
 use Wikimedia\Rdbms\Blob;
 use Wikimedia\Timestamp\ConvertibleTimestamp;
+use Wikimedia\Rdbms\IDatabase;
+use Wikimedia\Rdbms\IMaintainableDatabase;
 
 /**
  * Relational database abstraction object
@@ -366,7 +368,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                }
 
                $class = 'Database' . ucfirst( $driver );
-               if ( class_exists( $class ) && is_subclass_of( $class, 'IDatabase' ) ) {
+               if ( class_exists( $class ) && is_subclass_of( $class, IDatabase::class ) ) {
                        // Resolve some defaults for b/c
                        $p['host'] = isset( $p['host'] ) ? $p['host'] : false;
                        $p['user'] = isset( $p['user'] ) ? $p['user'] : false;
@@ -1949,7 +1951,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
        }
 
        /**
-        * Get the name of an index in a given table.
+        * Allows for index remapping in queries where this is not consistent across DBMS
         *
         * @param string $index
         * @return string
index e900027..6725090 100644 (file)
@@ -1335,4 +1335,38 @@ abstract class DatabaseMysqlBase extends Database {
        public function isView( $name, $prefix = null ) {
                return in_array( $name, $this->listViews( $prefix ) );
        }
+
+       /**
+        * Allows for index remapping in queries where this is not consistent across DBMS
+        *
+        * @param string $index
+        * @return string
+        */
+       protected function indexName( $index ) {
+               /**
+                * When SQLite indexes were introduced in r45764, it was noted that
+                * SQLite requires index names to be unique within the whole database,
+                * not just within a schema. As discussed in CR r45819, to avoid the
+                * need for a schema change on existing installations, the indexes
+                * were implicitly mapped from the new names to the old names.
+                *
+                * This mapping can be removed if DB patches are introduced to alter
+                * the relevant tables in existing installations. Note that because
+                * this index mapping applies to table creation, even new installations
+                * of MySQL have the old names (except for installations created during
+                * a period where this mapping was inappropriately removed, see
+                * T154872).
+                */
+               $renamed = [
+                       'ar_usertext_timestamp' => 'usertext_timestamp',
+                       'un_user_id' => 'user_id',
+                       'un_user_ip' => 'user_ip',
+               ];
+
+               if ( isset( $renamed[$index] ) ) {
+                       return $renamed[$index];
+               } else {
+                       return $index;
+               }
+       }
 }
index 6bc870b..0b146cd 100644 (file)
  * @file
  * @ingroup Database
  */
+namespace Wikimedia\Rdbms;
+
 use Wikimedia\ScopedCallback;
-use Wikimedia\Rdbms\Blob;
-use Wikimedia\Rdbms\LikeMatch;
-use Wikimedia\Rdbms\DBMasterPos;
-use Wikimedia\Rdbms\Field;
-use Wikimedia\Rdbms\IResultWrapper;
+use DBError;
+use DBConnectionError;
+use DBUnexpectedError;
+use DBQueryError;
+use Exception;
+use RuntimeException;
+use UnexpectedValueException;
+use stdClass;
 
 /**
  * Basic database interface for live and lazy-loaded relation database handles
@@ -1802,3 +1807,5 @@ interface IDatabase {
         */
        public function setTableAliases( array $aliases );
 }
+
+class_alias( 'Wikimedia\Rdbms\IDatabase', 'IDatabase' );
index 43cec28..138cf2d 100644 (file)
  * @file
  * @ingroup Database
  */
+namespace Wikimedia\Rdbms;
+
+use Exception;
+use RuntimeException;
+use DBUnexpectedError;
 
 /**
  * Advanced database interface for IDatabase handles that include maintenance methods
@@ -206,3 +211,5 @@ interface IMaintainableDatabase extends IDatabase {
                $oldName, $newName, $temporary = false, $fname = __METHOD__
        );
 }
+
+class_alias( 'Wikimedia\Rdbms\IMaintainableDatabase', 'IMaintainableDatabase' );
index fa3ddf9..30c62de 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+namespace Wikimedia\Rdbms;
+
 /**
  * Helper class to handle automatically marking connections as reusable (via RAII pattern)
  * as well handling deferring the actual network connection until the handle is used
@@ -66,3 +69,5 @@ class MaintainableDBConnRef extends DBConnRef implements IMaintainableDatabase {
                return $this->__call( __FUNCTION__, func_get_args() );
        }
 }
+
+class_alias( 'Wikimedia\Rdbms\MaintainableDBConnRef', 'MaintainableDBConnRef' );
index c3367e7..cbc8ca3 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 use Wikimedia\Rdbms\ILoadBalancer;
+use Wikimedia\Rdbms\IDatabase;
 
 /**@{
  * Database related constants
index 47f8c96..dca1302 100644 (file)
@@ -18,6 +18,7 @@
  * @file
  * @ingroup Database
  */
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * @ingroup Database
index 526596d..226c675 100644 (file)
@@ -18,6 +18,7 @@
  * @file
  * @ingroup Database
  */
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Database error base class
index 7d303b1..57538a8 100644 (file)
@@ -18,6 +18,7 @@
  * @file
  * @ingroup Database
  */
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Base class for the more common types of database errors. These are known to occur
index 002d253..b4c3d52 100644 (file)
@@ -18,6 +18,7 @@
  * @file
  * @ingroup Database
  */
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * @ingroup Database
index f05dabc..86547b9 100644 (file)
@@ -30,7 +30,6 @@ use EmptyBagOStuff;
 use WANObjectCache;
 use Exception;
 use RuntimeException;
-use IDatabase;
 use DBTransactionError;
 use DBReplicationWaitError;
 
@@ -508,7 +507,8 @@ abstract class LBFactory implements ILBFactory {
                        'errorLogger' => $this->errorLogger,
                        'hostname' => $this->hostname,
                        'cliMode' => $this->cliMode,
-                       'agent' => $this->agent
+                       'agent' => $this->agent,
+                       'chronologyProtector' => $this->getChronologyProtector()
                ];
        }
 
index 447b96f..0384588 100644 (file)
@@ -23,7 +23,6 @@
 
 namespace Wikimedia\Rdbms;
 
-use IDatabase;
 use InvalidArgumentException;
 
 /**
@@ -252,9 +251,7 @@ class LBFactoryMulti extends LBFactory {
        public function getMainLB( $domain = false ) {
                $section = $this->getSectionForDomain( $domain );
                if ( !isset( $this->mainLBs[$section] ) ) {
-                       $lb = $this->newMainLB( $domain );
-                       $this->getChronologyProtector()->initLB( $lb );
-                       $this->mainLBs[$section] = $lb;
+                       $this->mainLBs[$section] = $this->newMainLB( $domain );
                }
 
                return $this->mainLBs[$section];
@@ -283,7 +280,6 @@ class LBFactoryMulti extends LBFactory {
        public function getExternalLB( $cluster ) {
                if ( !isset( $this->extLBs[$cluster] ) ) {
                        $this->extLBs[$cluster] = $this->newExternalLB( $cluster );
-                       $this->getChronologyProtector()->initLB( $this->extLBs[$cluster] );
                }
 
                return $this->extLBs[$cluster];
index 15cd508..df0a806 100644 (file)
@@ -89,7 +89,6 @@ class LBFactorySimple extends LBFactory {
        public function getMainLB( $domain = false ) {
                if ( !isset( $this->mainLB ) ) {
                        $this->mainLB = $this->newMainLB( $domain );
-                       $this->getChronologyProtector()->initLB( $this->mainLB );
                }
 
                return $this->mainLB;
@@ -106,7 +105,6 @@ class LBFactorySimple extends LBFactory {
        public function getExternalLB( $cluster ) {
                if ( !isset( $this->extLBs[$cluster] ) ) {
                        $this->extLBs[$cluster] = $this->newExternalLB( $cluster );
-                       $this->getChronologyProtector()->initLB( $this->extLBs[$cluster] );
                }
 
                return $this->extLBs[$cluster];
index 5931d80..cd998c3 100644 (file)
@@ -23,7 +23,6 @@
 
 namespace Wikimedia\Rdbms;
 
-use IDatabase;
 use InvalidArgumentException;
 use BadMethodCallException;
 
index 4c277ff..2ea0e4e 100644 (file)
  */
 namespace Wikimedia\Rdbms;
 
-use IDatabase;
 use Database;
-use DBConnRef;
-use MaintainableDBConnRef;
 use DBError;
 use DBAccessError;
 use DBTransactionError;
@@ -105,6 +102,7 @@ interface ILoadBalancer {
         *  - srvCache : BagOStuff object for server cache [optional]
         *  - memCache : BagOStuff object for cluster memory cache [optional]
         *  - wanCache : WANObjectCache object [optional]
+        *  - chronologyProtector: ChronologyProtector object [optional]
         *  - hostname : The name of the current server [optional]
         *  - cliMode: Whether the execution context is a CLI script. [optional]
         *  - profiler : Class name or instance with profileIn()/profileOut() methods. [optional]
@@ -138,7 +136,7 @@ interface ILoadBalancer {
         * If a DB_REPLICA connection has been opened already, then wait immediately.
         * Otherwise sets a variable telling it to wait if such a connection is opened.
         *
-        * @param DBMasterPos $pos
+        * @param DBMasterPos|bool $pos Master position or false
         */
        public function waitFor( $pos );
 
@@ -147,7 +145,7 @@ interface ILoadBalancer {
         *
         * This can be used a faster proxy for waitForAll()
         *
-        * @param DBMasterPos $pos
+        * @param DBMasterPos|bool $pos Master position or false
         * @param int $timeout Max seconds to wait; default is mWaitTimeout
         * @return bool Success (able to connect and no timeouts reached)
         */
@@ -156,7 +154,7 @@ interface ILoadBalancer {
        /**
         * Set the master wait position and wait for ALL replica DBs to catch up to it
         *
-        * @param DBMasterPos $pos
+        * @param DBMasterPos|bool $pos Master position or false
         * @param int $timeout Max seconds to wait; default is mWaitTimeout
         * @return bool Success (able to connect and no timeouts reached)
         */
index 6878712..d178657 100644 (file)
@@ -25,10 +25,7 @@ namespace Wikimedia\Rdbms;
 use Psr\Log\LoggerInterface;
 use Psr\Log\NullLogger;
 use Wikimedia\ScopedCallback;
-use IDatabase;
 use Database;
-use DBConnRef;
-use MaintainableDBConnRef;
 use BagOStuff;
 use EmptyBagOStuff;
 use WANObjectCache;
@@ -69,6 +66,8 @@ class LoadBalancer implements ILoadBalancer {
 
        /** @var ILoadMonitor */
        private $loadMonitor;
+       /** @var ChronologyProtector|null */
+       private $chronProt;
        /** @var BagOStuff */
        private $srvCache;
        /** @var BagOStuff */
@@ -124,6 +123,8 @@ class LoadBalancer implements ILoadBalancer {
 
        /** @var boolean */
        private $disabled = false;
+       /** @var boolean */
+       private $chronProtInitialized = false;
 
        /** @var integer Warn when this many connection are held */
        const CONN_HELD_WARN_THRESHOLD = 10;
@@ -222,6 +223,10 @@ class LoadBalancer implements ILoadBalancer {
                        : ( gethostname() ?: 'unknown' );
                $this->cliMode = isset( $params['cliMode'] ) ? $params['cliMode'] : PHP_SAPI === 'cli';
                $this->agent = isset( $params['agent'] ) ? $params['agent'] : '';
+
+               if ( isset( $params['chronologyProtector'] ) ) {
+                       $this->chronProt = $params['chronologyProtector'];
+               }
        }
 
        /**
@@ -424,21 +429,24 @@ class LoadBalancer implements ILoadBalancer {
                return $i;
        }
 
-       /**
-        * @param DBMasterPos|false $pos
-        */
        public function waitFor( $pos ) {
+               $oldPos = $this->mWaitForPos;
                $this->mWaitForPos = $pos;
-               $i = $this->mReadIndex;
 
+               // If a generic reader connection was already established, then wait now
+               $i = $this->mReadIndex;
                if ( $i > 0 ) {
                        if ( !$this->doWait( $i ) ) {
                                $this->laggedReplicaMode = true;
                        }
                }
+
+               // Restore the older position if it was higher
+               $this->setWaitForPositionIfHigher( $oldPos );
        }
 
        public function waitForOne( $pos, $timeout = null ) {
+               $oldPos = $this->mWaitForPos;
                $this->mWaitForPos = $pos;
 
                $i = $this->mReadIndex;
@@ -456,10 +464,14 @@ class LoadBalancer implements ILoadBalancer {
                        $ok = true; // no applicable loads
                }
 
+               // Restore the older position if it was higher
+               $this->setWaitForPositionIfHigher( $oldPos );
+
                return $ok;
        }
 
        public function waitForAll( $pos, $timeout = null ) {
+               $oldPos = $this->mWaitForPos;
                $this->mWaitForPos = $pos;
                $serverCount = count( $this->mServers );
 
@@ -470,9 +482,25 @@ class LoadBalancer implements ILoadBalancer {
                        }
                }
 
+               // Restore the older position if it was higher
+               $this->setWaitForPositionIfHigher( $oldPos );
+
                return $ok;
        }
 
+       /**
+        * @param DBMasterPos|bool $pos
+        */
+       private function setWaitForPositionIfHigher( $pos ) {
+               if ( !$pos ) {
+                       return;
+               }
+
+               if ( !$this->mWaitForPos || $pos->hasReached( $this->mWaitForPos ) ) {
+                       $this->mWaitForPos = $pos;
+               }
+       }
+
        /**
         * @param int $i
         * @return IDatabase|bool
@@ -718,6 +746,13 @@ class LoadBalancer implements ILoadBalancer {
                        $domain = false; // local connection requested
                }
 
+               if ( !$this->chronProtInitialized && $this->chronProt ) {
+                       $this->connLogger->debug( __METHOD__ . ': calling initLB() before first connection.' );
+                       // Load CP positions before connecting so that doWait() triggers later if needed
+                       $this->chronProtInitialized = true;
+                       $this->chronProt->initLB( $this );
+               }
+
                if ( $domain !== false ) {
                        $conn = $this->openForeignConnection( $i, $domain );
                } elseif ( isset( $this->mConns['local'][$i][0] ) ) {
index 5e92c33..d120b6f 100644 (file)
@@ -24,7 +24,6 @@ namespace Wikimedia\Rdbms;
 use Psr\Log\LoggerInterface;
 use Psr\Log\NullLogger;
 use Wikimedia\ScopedCallback;
-use IDatabase;
 use BagOStuff;
 
 /**
index c9f1345..1c5899b 100644 (file)
@@ -28,6 +28,8 @@
  * @since 1.19
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Interface for log entries. Every log entry has these methods.
  *
index 4382910..317652a 100644 (file)
@@ -24,6 +24,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
 
 class LogEventsList extends ContextSource {
        const NO_ACTION_LINK = 1;
index f93b1b5..b7ebfc9 100644 (file)
@@ -97,7 +97,7 @@ class IPTC {
                                case '2#025': /* keywords */
                                        $data['Keywords'] = self::convIPTC( $val, $c );
                                        break;
-                               case '2#101': /* Country (shown)*/
+                               case '2#101': /* Country (shown) */
                                        $data['CountryDest'] = self::convIPTC( $val, $c );
                                        break;
                                case '2#095': /* state/province (shown) */
@@ -115,7 +115,7 @@ class IPTC {
                                case '2#040': /* special instructions */
                                        $data['SpecialInstructions'] = self::convIPTC( $val, $c );
                                        break;
-                               case '2#105': /* headline*/
+                               case '2#105': /* headline */
                                        $data['Headline'] = self::convIPTC( $val, $c );
                                        break;
                                case '2#110': /* credit */
index cf9033b..3370e5b 100644 (file)
@@ -246,8 +246,14 @@ class ObjectCache {
                global $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType;
                $candidates = [ $wgMainCacheType, $wgMessageCacheType, $wgParserCacheType ];
                foreach ( $candidates as $candidate ) {
+                       $cache = false;
                        if ( $candidate !== CACHE_NONE && $candidate !== CACHE_ANYTHING ) {
-                               return self::getInstance( $candidate );
+                               $cache = self::getInstance( $candidate );
+                               // CACHE_ACCEL might default to nothing if no APCu
+                               // See includes/ServiceWiring.php
+                               if ( !( $cache instanceof EmptyBagOStuff ) ) {
+                                       return $cache;
+                               }
                        }
                }
 
index 07581d7..8f94374 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Cache
  */
 
+use Wikimedia\Rdbms\IDatabase;
 use \MediaWiki\MediaWikiServices;
 use \Wikimedia\WaitConditionLoop;
 use \Wikimedia\Rdbms\TransactionProfiler;
index cb97126..ee0ff22 100644 (file)
@@ -1133,7 +1133,7 @@ class Article implements Page {
                        || $title->getNamespace() == NS_USER_TALK
                ) {
                        $rootPart = explode( '/', $title->getText() )[0];
-                       $user = User::newFromName( $rootPart, false /* allow IP users*/ );
+                       $user = User::newFromName( $rootPart, false /* allow IP users */ );
                        $ip = User::isIP( $rootPart );
                        $block = Block::newFromTarget( $user, $user );
 
@@ -2043,16 +2043,20 @@ class Article implements Page {
        /**
         * Call to WikiPage function for backwards compatibility.
         * @see WikiPage::doPurge
+        * @note In 1.28 (and only 1.28), this took a $flags parameter that
+        *  controlled how much purging was done.
         */
-       public function doPurge( $flags = WikiPage::PURGE_ALL ) {
-               return $this->mPage->doPurge( $flags );
+       public function doPurge() {
+               return $this->mPage->doPurge();
        }
 
        /**
         * Call to WikiPage function for backwards compatibility.
         * @see WikiPage::getLastPurgeTimestamp
+        * @deprecated since 1.29
         */
        public function getLastPurgeTimestamp() {
+               wfDeprecated( __METHOD__, '1.29' );
                return $this->mPage->getLastPurgeTimestamp();
        }
 
index 388e693..c2bfb07 100644 (file)
@@ -20,6 +20,7 @@
 
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Used to show archived pages and eventually restore them.
index e4b524b..66fadf5 100644 (file)
@@ -164,9 +164,12 @@ class WikiFilePage extends WikiPage {
                return $this->mDupes;
        }
 
-       public function doPurge( $flags = self::PURGE_ALL ) {
+       /**
+        * Override handling of action=purge
+        * @return bool
+        */
+       public function doPurge() {
                $this->loadFile();
-
                if ( $this->mFile->exists() ) {
                        wfDebug( 'ImagePage::doPurge purging ' . $this->mFile->getName() . "\n" );
                        DeferredUpdates::addUpdate( new HTMLCacheUpdate( $this->mTitle, 'imagelinks' ) );
@@ -182,8 +185,7 @@ class WikiFilePage extends WikiPage {
                        // Purge redirect cache
                        $this->mRepo->invalidateImageRedirect( $this->mTitle );
                }
-
-               return parent::doPurge( $flags );
+               return parent::doPurge();
        }
 
        /**
index 4bc8ad6..7044e6a 100644 (file)
@@ -23,6 +23,7 @@
 use \MediaWiki\Logger\LoggerFactory;
 use \MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\FakeResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Class representing a MediaWiki article and history.
@@ -84,9 +85,10 @@ class WikiPage implements Page, IDBAccessObject {
         */
        protected $mLinksUpdated = '19700101000000';
 
-       const PURGE_CDN_CACHE = 1; // purge CDN cache for page variant URLs
-       const PURGE_CLUSTER_PCACHE = 2; // purge parser cache in the local datacenter
-       const PURGE_GLOBAL_PCACHE = 4; // set page_touched to clear parser cache in all datacenters
+       /** @deprecated since 1.29. Added in 1.28 for partial purging, no longer used. */
+       const PURGE_CDN_CACHE = 1;
+       const PURGE_CLUSTER_PCACHE = 2;
+       const PURGE_GLOBAL_PCACHE = 4;
        const PURGE_ALL = 7;
 
        /**
@@ -574,35 +576,12 @@ class WikiPage implements Page, IDBAccessObject {
         * @return Revision|null
         */
        public function getOldestRevision() {
-
                // Try using the replica DB first, then try the master
-               $continue = 2;
-               $db = wfGetDB( DB_REPLICA );
-               $revSelectFields = Revision::selectFields();
-
-               $row = null;
-               while ( $continue ) {
-                       $row = $db->selectRow(
-                               [ 'revision' ],
-                               $revSelectFields,
-                               [
-                                       'rev_page' => $this->getId()
-                               ],
-                               __METHOD__,
-                               [
-                                       'ORDER BY' => 'rev_timestamp ASC'
-                               ]
-                       );
-
-                       if ( $row ) {
-                               $continue = 0;
-                       } else {
-                               $db = wfGetDB( DB_MASTER );
-                               $continue--;
-                       }
+               $rev = $this->mTitle->getFirstRevision();
+               if ( !$rev ) {
+                       $rev = $this->mTitle->getFirstRevision( Title::GAID_FOR_UPDATE );
                }
-
-               return $row ? Revision::newFromRow( $row ) : null;
+               return $rev;
        }
 
        /**
@@ -1119,10 +1098,11 @@ class WikiPage implements Page, IDBAccessObject {
 
        /**
         * Perform the actions of a page purging
-        * @param integer $flags Bitfield of WikiPage::PURGE_* constants
         * @return bool
+        * @note In 1.28 (and only 1.28), this took a $flags parameter that
+        *  controlled how much purging was done.
         */
-       public function doPurge( $flags = self::PURGE_ALL ) {
+       public function doPurge() {
                // Avoid PHP 7.1 warning of passing $this by reference
                $wikiPage = $this;
 
@@ -1130,30 +1110,15 @@ class WikiPage implements Page, IDBAccessObject {
                        return false;
                }
 
-               if ( ( $flags & self::PURGE_GLOBAL_PCACHE ) == self::PURGE_GLOBAL_PCACHE ) {
-                       // Set page_touched in the database to invalidate all DC caches
-                       $this->mTitle->invalidateCache();
-               } elseif ( ( $flags & self::PURGE_CLUSTER_PCACHE ) == self::PURGE_CLUSTER_PCACHE ) {
-                       // Delete the parser options key in the local cluster to invalidate the DC cache
-                       ParserCache::singleton()->deleteOptionsKey( $this );
-                       // Avoid sending HTTP 304s in ViewAction to the client who just issued the purge
-                       $cache = ObjectCache::getLocalClusterInstance();
-                       $cache->set(
-                               $cache->makeKey( 'page', 'last-dc-purge', $this->getId() ),
-                               wfTimestamp( TS_MW ),
-                               $cache::TTL_HOUR
-                       );
-               }
+               $this->mTitle->invalidateCache();
 
-               if ( ( $flags & self::PURGE_CDN_CACHE ) == self::PURGE_CDN_CACHE ) {
-                       // Clear any HTML file cache
-                       HTMLFileCache::clearFileCache( $this->getTitle() );
-                       // Send purge after any page_touched above update was committed
-                       DeferredUpdates::addUpdate(
-                               new CdnCacheUpdate( $this->mTitle->getCdnUrls() ),
-                               DeferredUpdates::PRESEND
-                       );
-               }
+               // Clear file cache
+               HTMLFileCache::clearFileCache( $this->getTitle() );
+               // Send purge after above page_touched update was committed
+               DeferredUpdates::addUpdate(
+                       new CdnCacheUpdate( $this->mTitle->getCdnUrls() ),
+                       DeferredUpdates::PRESEND
+               );
 
                if ( $this->mTitle->getNamespace() == NS_MEDIAWIKI ) {
                        $messageCache = MessageCache::singleton();
@@ -1168,11 +1133,11 @@ class WikiPage implements Page, IDBAccessObject {
         *
         * @return string|bool TS_MW timestamp or false
         * @since 1.28
+        * @deprecated since 1.29. It will always return false.
         */
        public function getLastPurgeTimestamp() {
-               $cache = ObjectCache::getLocalClusterInstance();
-
-               return $cache->get( $cache->makeKey( 'page', 'last-dc-purge', $this->getId() ) );
+               wfDeprecated( __METHOD__, '1.29' );
+               return false;
        }
 
        /**
index 4694890..0b867ef 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * IndexPager is an efficient pager which uses a (roughly unique) index in the
index c943b7c..438603a 100644 (file)
@@ -79,12 +79,25 @@ class CoreTagHooks {
         * @param array $attributes
         * @param Parser $parser
         * @throws MWException
-        * @return array
+        * @return array|string Output of tag hook
         */
        public static function html( $content, $attributes, $parser ) {
                global $wgRawHtml;
                if ( $wgRawHtml ) {
-                       return [ $content, 'markerType' => 'nowiki' ];
+                       if ( $parser->getOptions()->getAllowUnsafeRawHtml() ) {
+                               return [ $content, 'markerType' => 'nowiki' ];
+                       } else {
+                               // In a system message where raw html is
+                               // not allowed (but it is allowed in other
+                               // contexts).
+                               return Html::rawElement(
+                                       'span',
+                                       [ 'class' => 'error' ],
+                                       // Using ->text() not ->parse() as
+                                       // a paranoia measure against a loop.
+                                       wfMessage( 'rawhtml-notallowed' )->escaped()
+                               );
+                       }
                } else {
                        throw new MWException( '<html> extension tag encountered unexpectedly' );
                }
index 8db1fe3..be4557d 100644 (file)
@@ -3257,6 +3257,7 @@ class Parser {
                                $text = '<span class="error">'
                                        . wfMessage( 'parser-template-loop-warning', $titleText )->inContentLanguage()->text()
                                        . '</span>';
+                               $this->addTrackingCategory( 'template-loop-category' );
                                wfDebug( __METHOD__ . ": template loop broken at '$titleText'\n" );
                        }
                }
@@ -4974,7 +4975,7 @@ class Parser {
                $ig->setShowFilename( false );
                $ig->setParser( $this );
                $ig->setHideBadImages();
-               $ig->setAttributes( Sanitizer::validateTagAttributes( $params, 'table' ) );
+               $ig->setAttributes( Sanitizer::validateTagAttributes( $params, 'ul' ) );
 
                if ( isset( $params['showfilename'] ) ) {
                        $ig->setShowFilename( true );
index 7be8281..2cdd8c7 100644 (file)
@@ -243,6 +243,21 @@ class ParserOptions {
         */
        private $redirectTarget = null;
 
+       /**
+        * If the wiki is configured to allow raw html ($wgRawHtml = true)
+        * is it allowed in the specific case of parsing this page.
+        *
+        * This is meant to disable unsafe parser tags in cases where
+        * a malicious user may control the input to the parser.
+        *
+        * @note This is expected to be true for normal pages even if the
+        *  wiki has $wgRawHtml disabled in general. The setting only
+        *  signifies that raw html would be unsafe in the current context
+        *  provided that raw html is allowed at all.
+        * @var boolean
+        */
+       private $allowUnsafeRawHtml = true;
+
        public function getInterwikiMagic() {
                return $this->mInterwikiMagic;
        }
@@ -457,6 +472,15 @@ class ParserOptions {
        public function getMagicRFCLinks() {
                return $this->mMagicRFCLinks;
        }
+
+       /**
+        * @since 1.29
+        * @return bool
+        */
+       public function getAllowUnsafeRawHtml() {
+               return $this->allowUnsafeRawHtml;
+       }
+
        public function setInterwikiMagic( $x ) {
                return wfSetVar( $this->mInterwikiMagic, $x );
        }
@@ -596,6 +620,15 @@ class ParserOptions {
                return wfSetVar( $this->mIsPrintable, $x );
        }
 
+       /**
+        * @param bool|null Value to set or null to get current value
+        * @return bool Current value for allowUnsafeRawHtml
+        * @since 1.29
+        */
+       public function setAllowUnsafeRawHtml( $x ) {
+               return wfSetVar( $this->allowUnsafeRawHtml, $x );
+       }
+
        /**
         * Set the redirect target.
         *
index 6a6a3c2..19d5471 100644 (file)
@@ -67,23 +67,27 @@ class ResourceLoaderImage {
                                }
                        }
                }
+               // Remove 'deprecated' key
+               if ( is_array( $this->descriptor ) ) {
+                       unset( $this->descriptor[ 'deprecated' ] );
+               }
 
                // Ensure that all files have common extension.
                $extensions = [];
-               $descriptor = (array)$descriptor;
+               $descriptor = (array)$this->descriptor;
                array_walk_recursive( $descriptor, function ( $path ) use ( &$extensions ) {
                        $extensions[] = pathinfo( $path, PATHINFO_EXTENSION );
                } );
                $extensions = array_unique( $extensions );
                if ( count( $extensions ) !== 1 ) {
                        throw new InvalidArgumentException(
-                               "File type for different image files of '$name' not the same"
+                               "File type for different image files of '$name' not the same in module '$module'"
                        );
                }
                $ext = $extensions[0];
                if ( !isset( self::$fileTypes[$ext] ) ) {
                        throw new InvalidArgumentException(
-                               "Invalid file type for image files of '$name' (valid: svg, png, gif, jpg)"
+                               "Invalid file type for image files of '$name' (valid: svg, png, gif, jpg) in module '$module'"
                        );
                }
                $this->extension = $ext;
index 91e63e7..d72b3af 100644 (file)
@@ -23,8 +23,6 @@
 
 class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
 
-       /* Methods */
-
        /**
         * @param ResourceLoaderContext $context
         * @return array
@@ -77,13 +75,12 @@ class ResourceLoaderSkinModule extends ResourceLoaderFileModule {
                return false;
        }
 
-       /**
-        * @param ResourceLoaderContext $context
-        * @return string: Hash
-        */
-       public function getModifiedHash( ResourceLoaderContext $context ) {
-               $logo = $this->getConfig()->get( 'Logo' );
-               $logoHD = $this->getConfig()->get( 'LogoHD' );
-               return md5( parent::getModifiedHash( $context ) . $logo . json_encode( $logoHD ) );
+       public function getDefinitionSummary( ResourceLoaderContext $context ) {
+               $summary = parent::getDefinitionSummary( $context );
+               $summary[] = [
+                       'logo' => $this->getConfig()->get( 'Logo' ),
+                       'logoHD' => $this->getConfig()->get( 'LogoHD' ),
+               ];
+               return $summary;
        }
 }
index 48e4a0d..04b2f72 100644 (file)
@@ -342,7 +342,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
 
        /**
         * @param ResourceLoaderContext $context
-        * @return string
+        * @return string JavaScript code
         */
        public function getScript( ResourceLoaderContext $context ) {
                global $IP;
index 6632045..b9dc098 100644 (file)
@@ -37,7 +37,7 @@ class ResourceLoaderUserDefaultsModule extends ResourceLoaderModule {
 
        /**
         * @param ResourceLoaderContext $context
-        * @return string
+        * @return string JavaScript code
         */
        public function getScript( ResourceLoaderContext $context ) {
                return Xml::encodeJsCall(
index b3b3f16..0c332cf 100644 (file)
@@ -48,7 +48,7 @@ class ResourceLoaderUserOptionsModule extends ResourceLoaderModule {
 
        /**
         * @param ResourceLoaderContext $context
-        * @return string
+        * @return string JavaScript code
         */
        public function getScript( ResourceLoaderContext $context ) {
                return Xml::encodeJsCall( 'mw.user.options.set',
index cea1f39..bfa7326 100644 (file)
@@ -57,7 +57,7 @@ class ResourceLoaderUserTokensModule extends ResourceLoaderModule {
         * Add FILTER_NOMIN annotation to prevent needless minification and caching (T84960).
         *
         * @param ResourceLoaderContext $context
-        * @return string
+        * @return string JavaScript code
         */
        public function getScript( ResourceLoaderContext $context ) {
                return Xml::encodeJsCall(
index f6f14b3..3eac5df 100644 (file)
@@ -22,6 +22,8 @@
  * @author Roan Kattouw
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Abstraction for ResourceLoader modules which pull from wiki pages
  *
@@ -146,7 +148,7 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
        protected function getContent( $titleText ) {
                $title = Title::newFromText( $titleText );
                if ( !$title ) {
-                       return null;
+                       return null; // Bad title
                }
 
                // If the page is a redirect, follow the redirect.
@@ -154,7 +156,7 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
                        $content = $this->getContentObj( $title );
                        $title = $content ? $content->getUltimateRedirectTarget() : null;
                        if ( !$title ) {
-                               return null;
+                               return null; // Dead redirect
                        }
                }
 
@@ -164,12 +166,12 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
                } elseif ( $handler->isSupportedFormat( CONTENT_FORMAT_JAVASCRIPT ) ) {
                        $format = CONTENT_FORMAT_JAVASCRIPT;
                } else {
-                       return null;
+                       return null; // Bad content model
                }
 
                $content = $this->getContentObj( $title );
                if ( !$content ) {
-                       return null;
+                       return null; // No content found
                }
 
                return $content->serialize( $format );
@@ -196,7 +198,7 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
 
        /**
         * @param ResourceLoaderContext $context
-        * @return string
+        * @return string JavaScript code
         */
        public function getScript( ResourceLoaderContext $context ) {
                $scripts = '';
index ad9259b..9afaf40 100644 (file)
@@ -19,6 +19,8 @@
  * @ingroup RevisionDelete
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * List for archive table items, i.e. revisions deleted via action=delete
  */
index afee637..1d80d86 100644 (file)
@@ -19,6 +19,8 @@
  * @ingroup RevisionDelete
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * List for filearchive table items
  */
index 9beafc9..62bafe9 100644 (file)
@@ -19,6 +19,8 @@
  * @ingroup RevisionDelete
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Item class for an oldimage table row
  */
index 00cb2e1..77cf976 100644 (file)
@@ -19,6 +19,8 @@
  * @ingroup RevisionDelete
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * List for oldimage table items
  */
index ff1d2ed..1932778 100644 (file)
@@ -19,6 +19,8 @@
  * @ingroup RevisionDelete
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * List for logging table items
  */
index 453c6cc..1ea6a38 100644 (file)
@@ -20,6 +20,7 @@
  */
 
 use Wikimedia\Rdbms\FakeResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * List for revision table items
index 7f41eb2..7812fb9 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup RevisionDelete
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Backend functions for suppressing and unsuppressing all references to a given user,
  * used when blocking with HideUser enabled.  This was spun out of SpecialBlockip.php
index 38c60d0..d51e525 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Search
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Base search engine base class for database-backed searches
  * @ingroup Search
index a767bc3..613d33c 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Factory class for SearchEngine.
  * Allows to create engine of the specific type.
index 8e9629d..ad9a248 100644 (file)
@@ -22,6 +22,7 @@
  */
 use MediaWiki\Logger\LoggerFactory;
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Special page which uses a ChangesList to show query results.
@@ -58,6 +59,13 @@ abstract class ChangesListSpecialPage extends SpecialPage {
         */
        private $filterGroupDefinitions;
 
+       // Same format as filterGroupDefinitions, but for a single group (reviewStatus)
+       // that is registered conditionally.
+       private $reviewStatusFilterGroupDefinition;
+
+       // Single filter registered conditionally
+       private $hideCategorizationFilterDefinition;
+
        /**
         * Filter groups, and their contained filters
         * This is an associative array (with group name as key) of ChangesListFilterGroup objects.
@@ -177,11 +185,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                                        &$query_options, &$join_conds ) {
 
                                                        $user = $ctx->getUser();
-                                                       if ( $user->getId() ) {
-                                                               $conds[] = 'rc_user != ' . $dbr->addQuotes( $user->getId() );
-                                                       } else {
-                                                               $conds[] = 'rc_user_text != ' . $dbr->addQuotes( $user->getName() );
-                                                       }
+                                                       $conds[] = 'rc_user_text != ' . $dbr->addQuotes( $user->getName() );
                                                },
                                                'cssClassSuffix' => 'self',
                                                'isRowApplicableCallable' => function ( $ctx, $rc ) {
@@ -197,11 +201,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                                        &$query_options, &$join_conds ) {
 
                                                        $user = $ctx->getUser();
-                                                       if ( $user->getId() ) {
-                                                               $conds[] = 'rc_user = ' . $dbr->addQuotes( $user->getId() );
-                                                       } else {
-                                                               $conds[] = 'rc_user_text = ' . $dbr->addQuotes( $user->getName() );
-                                                       }
+                                                       $conds[] = 'rc_user_text = ' . $dbr->addQuotes( $user->getName() );
                                                },
                                                'cssClassSuffix' => 'others',
                                                'isRowApplicableCallable' => function ( $ctx, $rc ) {
@@ -252,57 +252,13 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                ]
                        ],
 
-                       [
-                               'name' => 'reviewStatus',
-                               'title' => 'rcfilters-filtergroup-reviewstatus',
-                               'class' => ChangesListBooleanFilterGroup::class,
-                               'filters' => [
-                                       [
-                                               'name' => 'hidepatrolled',
-                                               'label' => 'rcfilters-filter-patrolled-label',
-                                               'description' => 'rcfilters-filter-patrolled-description',
-                                               // rcshowhidepatr-show, rcshowhidepatr-hide
-                                               // wlshowhidepatr
-                                               'showHideSuffix' => 'showhidepatr',
-                                               'default' => false,
-                                               'isAllowedCallable' => function ( $pageClassName, $context ) {
-                                                       return $context->getUser()->useRCPatrol();
-                                               },
-                                               'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds,
-                                                       &$query_options, &$join_conds ) {
-
-                                                       $conds[] = 'rc_patrolled = 0';
-                                               },
-                                               'cssClassSuffix' => 'patrolled',
-                                               'isRowApplicableCallable' => function ( $ctx, $rc ) {
-                                                       return $rc->getAttribute( 'rc_patrolled' );
-                                               },
-                                       ],
-                                       [
-                                               'name' => 'hideunpatrolled',
-                                               'label' => 'rcfilters-filter-unpatrolled-label',
-                                               'description' => 'rcfilters-filter-unpatrolled-description',
-                                               'default' => false,
-                                               'isAllowedCallable' => function ( $pageClassName, $context ) {
-                                                       return $context->getUser()->useRCPatrol();
-                                               },
-                                               'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds,
-                                                       &$query_options, &$join_conds ) {
-
-                                                       $conds[] = 'rc_patrolled = 1';
-                                               },
-                                               'cssClassSuffix' => 'unpatrolled',
-                                               'isRowApplicableCallable' => function ( $ctx, $rc ) {
-                                                       return !$rc->getAttribute( 'rc_patrolled' );
-                                               },
-                                       ],
-                               ],
-                       ],
+                       // reviewStatus (conditional)
 
                        [
                                'name' => 'significance',
                                'title' => 'rcfilters-filtergroup-significance',
                                'class' => ChangesListBooleanFilterGroup::class,
+                               'priority' => -6,
                                'filters' => [
                                        [
                                                'name' => 'hideminor',
@@ -351,6 +307,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                                'label' => 'rcfilters-filter-pageedits-label',
                                                'description' => 'rcfilters-filter-pageedits-description',
                                                'default' => false,
+                                               'priority' => -2,
                                                'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds,
                                                        &$query_options, &$join_conds ) {
 
@@ -366,6 +323,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                                'label' => 'rcfilters-filter-newpages-label',
                                                'description' => 'rcfilters-filter-newpages-description',
                                                'default' => false,
+                                               'priority' => -3,
                                                'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds,
                                                        &$query_options, &$join_conds ) {
 
@@ -376,44 +334,91 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                                        return $rc->getAttribute( 'rc_source' ) === RecentChange::SRC_NEW;
                                                },
                                        ],
+
+                                       // hidecategorization
+
                                        [
-                                               'name' => 'hidecategorization',
-                                               'label' => 'rcfilters-filter-categorization-label',
-                                               'description' => 'rcfilters-filter-categorization-description',
-                                               // rcshowhidecategorization-show, rcshowhidecategorization-hide.
-                                               // wlshowhidecategorization
-                                               'showHideSuffix' => 'showhidecategorization',
-                                               'isAllowedCallable' => function ( $pageClassName, $context ) {
-                                                       return $context->getConfig()->get( 'RCWatchCategoryMembership' );
+                                               'name' => 'hidelog',
+                                               'label' => 'rcfilters-filter-logactions-label',
+                                               'description' => 'rcfilters-filter-logactions-description',
+                                               'default' => false,
+                                               'priority' => -5,
+                                               'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds,
+                                                       &$query_options, &$join_conds ) {
+
+                                                       $conds[] = 'rc_type != ' . $dbr->addQuotes( RC_LOG );
                                                },
+                                               'cssClassSuffix' => 'src-mw-log',
+                                               'isRowApplicableCallable' => function ( $ctx, $rc ) {
+                                                       return $rc->getAttribute( 'rc_source' ) === RecentChange::SRC_LOG;
+                                               }
+                                       ],
+                               ],
+                       ],
+               ];
+
+               $this->reviewStatusFilterGroupDefinition = [
+                       [
+                               'name' => 'reviewStatus',
+                               'title' => 'rcfilters-filtergroup-reviewstatus',
+                               'class' => ChangesListBooleanFilterGroup::class,
+                               'priority' => -5,
+                               'filters' => [
+                                       [
+                                               'name' => 'hidepatrolled',
+                                               'label' => 'rcfilters-filter-patrolled-label',
+                                               'description' => 'rcfilters-filter-patrolled-description',
+                                               // rcshowhidepatr-show, rcshowhidepatr-hide
+                                               // wlshowhidepatr
+                                               'showHideSuffix' => 'showhidepatr',
                                                'default' => false,
                                                'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds,
                                                        &$query_options, &$join_conds ) {
 
-                                                       $conds[] = 'rc_type != ' . $dbr->addQuotes( RC_CATEGORIZE );
+                                                       $conds[] = 'rc_patrolled = 0';
                                                },
-                                               'cssClassSuffix' => 'src-mw-categorize',
+                                               'cssClassSuffix' => 'patrolled',
                                                'isRowApplicableCallable' => function ( $ctx, $rc ) {
-                                                       return $rc->getAttribute( 'rc_source' ) === RecentChange::SRC_CATEGORIZE;
+                                                                                    return $rc->getAttribute( 'rc_patrolled' );
                                                },
                                        ],
                                        [
-                                               'name' => 'hidelog',
-                                               'label' => 'rcfilters-filter-logactions-label',
-                                               'description' => 'rcfilters-filter-logactions-description',
+                                               'name' => 'hideunpatrolled',
+                                               'label' => 'rcfilters-filter-unpatrolled-label',
+                                               'description' => 'rcfilters-filter-unpatrolled-description',
                                                'default' => false,
                                                'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds,
                                                        &$query_options, &$join_conds ) {
 
-                                                       $conds[] = 'rc_type != ' . $dbr->addQuotes( RC_LOG );
+                                                       $conds[] = 'rc_patrolled = 1';
                                                },
-                                               'cssClassSuffix' => 'src-mw-log',
+                                               'cssClassSuffix' => 'unpatrolled',
                                                'isRowApplicableCallable' => function ( $ctx, $rc ) {
-                                                       return $rc->getAttribute( 'rc_source' ) === RecentChange::SRC_LOG;
-                                               }
+                                                                                    return !$rc->getAttribute( 'rc_patrolled' );
+                                               },
                                        ],
                                ],
-                       ],
+                       ]
+               ];
+
+               $this->hideCategorizationFilterDefinition = [
+                       'name' => 'hidecategorization',
+                       'label' => 'rcfilters-filter-categorization-label',
+                       'description' => 'rcfilters-filter-categorization-description',
+                       // rcshowhidecategorization-show, rcshowhidecategorization-hide.
+                       // wlshowhidecategorization
+                       'showHideSuffix' => 'showhidecategorization',
+                       'default' => false,
+                       'priority' => -4,
+                       'queryCallable' => function ( $specialClassName, $ctx, $dbr, &$tables, &$fields, &$conds,
+                               &$query_options, &$join_conds ) {
+
+                               $conds[] = 'rc_type != ' . $dbr->addQuotes( RC_CATEGORIZE );
+                       },
+                       'cssClassSuffix' => 'src-mw-categorize',
+                       'isRowApplicableCallable' => function ( $ctx, $rc ) {
+                               return $rc->getAttribute( 'rc_source' ) === RecentChange::SRC_CATEGORIZE;
+                       },
                ];
        }
 
@@ -434,6 +439,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                if ( $rows === false ) {
                        if ( !$this->including() ) {
                                $this->doHeader( $opts, 0 );
+                               $this->outputNoResults();
                                $this->getOutput()->setStatusCode( 404 );
                        }
 
@@ -453,7 +459,6 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        }
                }
                $batch->execute();
-
                $this->webOutput( $rows, $opts );
 
                $rows->free();
@@ -467,6 +472,17 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                }
        }
 
+       /**
+        * Add the "no results" message to the output
+        */
+       protected function outputNoResults() {
+               $this->getOutput()->addHTML(
+                       '<div class="mw-changeslist-empty">' .
+                       $this->msg( 'recentchanges-noresult' )->parse() .
+                       '</div>'
+               );
+       }
+
        /**
         * Get the database result for this special page instance. Used by ApiFeedRecentChanges.
         *
@@ -499,7 +515,8 @@ abstract class ChangesListSpecialPage extends SpecialPage {
        }
 
        /**
-        * Register all filters and their groups, plus conflicts
+        * Register all filters and their groups (including those from hooks), plus handle
+        * conflicts and defaults.
         *
         * You might want to customize these in the same method, in subclasses.  You can
         * call getFilterGroup to access a group, and (on the group) getFilter to access a
@@ -509,6 +526,27 @@ abstract class ChangesListSpecialPage extends SpecialPage {
        protected function registerFilters() {
                $this->registerFiltersFromDefinitions( $this->filterGroupDefinitions );
 
+               // Make sure this is not being transcluded (we don't want to show this
+               // information to all users just because the user that saves the edit can
+               // patrol)
+               if ( !$this->including() && $this->getUser()->useRCPatrol() ) {
+                       $this->registerFiltersFromDefinitions( $this->reviewStatusFilterGroupDefinition );
+               }
+
+               $changeTypeGroup = $this->getFilterGroup( 'changeType' );
+
+               if ( $this->getConfig()->get( 'RCWatchCategoryMembership' ) ) {
+                       $transformedHideCategorizationDef = $this->transformFilterDefinition(
+                               $this->hideCategorizationFilterDefinition
+                       );
+
+                       $transformedHideCategorizationDef['group'] = $changeTypeGroup;
+
+                       $hideCategorization = new ChangesListBooleanFilter(
+                               $transformedHideCategorizationDef
+                       );
+               }
+
                Hooks::run( 'ChangesListSpecialPageStructuredFilters', [ $this ] );
 
                $unstructuredGroupDefinition =
@@ -532,7 +570,6 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                        'rcfilters-filter-unregistered-conflicts-user-experience-level'
                );
 
-               $changeTypeGroup = $this->getFilterGroup( 'changeType' );
                $categoryFilter = $changeTypeGroup->getFilter( 'hidecategorization' );
                $logactionsFilter = $changeTypeGroup->getFilter( 'hidelog' );
                $pagecreationFilter = $changeTypeGroup->getFilter( 'hidenewpages' );
@@ -540,12 +577,15 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                $significanceTypeGroup = $this->getFilterGroup( 'significance' );
                $hideMinorFilter = $significanceTypeGroup->getFilter( 'hideminor' );
 
-               $hideMinorFilter->conflictsWith(
-                       $categoryFilter,
-                       'rcfilters-hideminor-conflicts-typeofchange-global',
-                       'rcfilters-hideminor-conflicts-typeofchange',
-                       'rcfilters-typeofchange-conflicts-hideminor'
-               );
+               // categoryFilter is conditional; see registerFilters
+               if ( $categoryFilter !== null ) {
+                       $hideMinorFilter->conflictsWith(
+                               $categoryFilter,
+                               'rcfilters-hideminor-conflicts-typeofchange-global',
+                               'rcfilters-hideminor-conflicts-typeofchange',
+                               'rcfilters-typeofchange-conflicts-hideminor'
+                       );
+               }
                $hideMinorFilter->conflictsWith(
                        $logactionsFilter,
                        'rcfilters-hideminor-conflicts-typeofchange-global',
@@ -560,23 +600,46 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                );
        }
 
+       /**
+        * Transforms filter definition to prepare it for constructor.
+        *
+        * See overrides of this method as well.
+        *
+        * @param array $filterDefinition Original filter definition
+        *
+        * @return array Transformed definition
+        */
+       protected function transformFilterDefinition( array $filterDefinition ) {
+               return $filterDefinition;
+       }
+
        /**
         * Register filters from a definition object
         *
         * Array specifying groups and their filters; see Filter and
         * ChangesListFilterGroup constructors.
         *
-        * There is light processing to simplify core maintenance.  See overrides
-        * of this method as well.
+        * There is light processing to simplify core maintenance.
         */
        protected function registerFiltersFromDefinitions( array $definition ) {
-               $priority = -1;
+               $autoFillPriority = -1;
                foreach ( $definition as $groupDefinition ) {
-                       $groupDefinition['priority'] = $priority;
-                       $priority--;
+                       if ( !isset( $groupDefinition['priority'] ) ) {
+                               $groupDefinition['priority'] = $autoFillPriority;
+                       } else {
+                               // If it's explicitly specified, start over the auto-fill
+                               $autoFillPriority = $groupDefinition['priority'];
+                       }
+
+                       $autoFillPriority--;
 
                        $className = $groupDefinition['class'];
                        unset( $groupDefinition['class'] );
+
+                       foreach ( $groupDefinition['filters'] as &$filterDefinition ) {
+                               $filterDefinition = $this->transformFilterDefinition( $filterDefinition );
+                       }
+
                        $this->registerFilterGroup( new $className( $groupDefinition ) );
                }
        }
@@ -842,7 +905,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                        $query_options, $join_conds, $opts[$filterGroup->getName()] );
                        } else {
                                foreach ( $filterGroup->getFilters() as $filter ) {
-                                       if ( $opts[$filter->getName()] && $filter->isAllowed( $this ) ) {
+                                       if ( $opts[$filter->getName()] ) {
                                                $filter->modifyQuery( $dbr, $this, $tables, $fields, $conds,
                                                        $query_options, $join_conds );
                                        }
index bafee65..59abefd 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Variant of QueryPage which uses a gallery to output results, thus
index 45cef2b..76b1535 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Variant of QueryPage which formats the result as a simple link to the page
index 7bc2dfa..68d2d30 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * This is a class for doing query pages; since they're almost all the same,
index e7bc496..d788f2b 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Class definition for a wanted query page like
index 9aba41e..cd9345d 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * A special page listing redirects to non existent page. Those should be
index 59351dc..d7e99db 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * A special page listing redirects to redirecting page.
index a1f5efa..dae6074 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Special:LinkSearch to search the external-links table.
index 52c710d..d5fb001 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Special:ListDuplicatedFiles Lists all files where the current version is
index b2d6a33..5f38629 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Special:Listredirects - Lists all the redirects on the wiki.
index a88767a..7c4b490 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * @ingroup SpecialPage
index 0776eec..bebed12 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * A special page that list pages that have highest category count
index 8560dca..c140ee9 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * A special page that listed pages that have highest interwiki count
index ff8550d..fbfaa73 100644 (file)
@@ -26,6 +26,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * A special page to show pages ordered by the number of pages linking to them.
index 699940b..956207f 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * A querypage to show categories ordered in descending order by the pages in them
index f5c2c5f..dee1c8e 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Special page lists templates with a large number of
index 9e3a750..12dae8b 100644 (file)
@@ -39,6 +39,7 @@ class SpecialNewFiles extends IncludableSpecialPage {
                $opts = new FormOptions();
 
                $opts->add( 'like', '' );
+               $opts->add( 'user', '' );
                $opts->add( 'showbots', false );
                $opts->add( 'hidepatrolled', false );
                $opts->add( 'limit', 50 );
@@ -75,6 +76,12 @@ class SpecialNewFiles extends IncludableSpecialPage {
                                'name' => 'like',
                        ],
 
+                       'user' => [
+                               'type' => 'text',
+                               'label-message' => 'newimages-user',
+                               'name' => 'user',
+                       ],
+
                        'showbots' => [
                                'type' => 'check',
                                'label-message' => 'newimages-showbots',
index 205f7cf..ae0887d 100644 (file)
@@ -78,9 +78,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
 
                        $out->addHTML(
                                ResourceLoader::makeInlineScript(
-                                       Xml::encodeJsCall( 'mw.messages.set', [
-                                               $messages
-                                       ] )
+                                       ResourceLoader::makeMessageSetScript( $messages )
                                )
                        );
 
@@ -91,16 +89,12 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
        /**
         * @inheritdoc
         */
-       protected function registerFiltersFromDefinitions( array $definition ) {
-               foreach ( $definition as $groupName => &$groupDefinition ) {
-                       foreach ( $groupDefinition['filters'] as &$filterDefinition ) {
-                               if ( isset( $filterDefinition['showHideSuffix'] ) ) {
-                                       $filterDefinition['showHide'] = 'rc' . $filterDefinition['showHideSuffix'];
-                               }
-                       }
+       protected function transformFilterDefinition( array $filterDefinition ) {
+               if ( isset( $filterDefinition['showHideSuffix'] ) ) {
+                       $filterDefinition['showHide'] = 'rc' . $filterDefinition['showHideSuffix'];
                }
 
-               parent::registerFiltersFromDefinitions( $definition );
+               return $filterDefinition;
        }
 
        /**
@@ -120,12 +114,18 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                $hideBots->setDefault( true );
 
                $reviewStatus = $this->getFilterGroup( 'reviewStatus' );
-               $hidePatrolled = $reviewStatus->getFilter( 'hidepatrolled' );
-               $hidePatrolled->setDefault( $user->getBoolOption( 'hidepatrolled' ) );
+               if ( $reviewStatus !== null ) {
+                       // Conditional on feature being available and rights
+                       $hidePatrolled = $reviewStatus->getFilter( 'hidepatrolled' );
+                       $hidePatrolled->setDefault( $user->getBoolOption( 'hidepatrolled' ) );
+               }
 
                $changeType = $this->getFilterGroup( 'changeType' );
                $hideCategorization = $changeType->getFilter( 'hidecategorization' );
-               $hideCategorization->setDefault( $user->getBoolOption( 'hidecategorization' ) );
+               if ( $hideCategorization !== null ) {
+                       // Conditional on feature being available
+                       $hideCategorization->setDefault( $user->getBoolOption( 'hidecategorization' ) );
+               }
        }
 
        /**
@@ -398,11 +398,7 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
                $rclistOutput .= $list->endRecentChangesList();
 
                if ( $rows->numRows() === 0 ) {
-                       $this->getOutput()->addHTML(
-                               '<div class="mw-changeslist-empty">' .
-                               $this->msg( 'recentchanges-noresult' )->parse() .
-                               '</div>'
-                       );
+                       $this->outputNoResults();
                        if ( !$this->including() ) {
                                $this->getOutput()->setStatusCode( 404 );
                        }
index a5e5113..3282a7a 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * SpecialShortpages extends QueryPage. It is used to return the shortest
index e82279e..fea7e21 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * A special page that displays a list of pages that are not on anyones watchlist.
index 4a17533..365736f 100644 (file)
@@ -23,6 +23,7 @@
 
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * A special page that lists last changes made to the wiki,
@@ -107,16 +108,12 @@ class SpecialWatchlist extends ChangesListSpecialPage {
        /**
         * @inheritdoc
         */
-       protected function registerFiltersFromDefinitions( array $definition ) {
-               foreach ( $definition as $groupName => &$groupDefinition ) {
-                       foreach ( $groupDefinition['filters'] as &$filterDefinition ) {
-                               if ( isset( $filterDefinition['showHideSuffix'] ) ) {
-                                       $filterDefinition['showHide'] = 'wl' . $filterDefinition['showHideSuffix'];
-                               }
-                       }
+       protected function transformFilterDefinition( array $filterDefinition ) {
+               if ( isset( $filterDefinition['showHideSuffix'] ) ) {
+                         $filterDefinition['showHide'] = 'wl' . $filterDefinition['showHideSuffix'];
                }
 
-               parent::registerFiltersFromDefinitions( $definition );
+               return $filterDefinition;
        }
 
        /**
@@ -142,8 +139,11 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                $hideLiu->setDefault( $user->getBoolOption( 'watchlisthideliu' ) );
 
                $reviewStatus = $this->getFilterGroup( 'reviewStatus' );
-               $hidePatrolled = $reviewStatus->getFilter( 'hidepatrolled' );
-               $hidePatrolled->setDefault( $user->getBoolOption( 'watchlisthidepatrolled' ) );
+               if ( $reviewStatus !== null ) {
+                       // Conditional on feature being available and rights
+                       $hidePatrolled = $reviewStatus->getFilter( 'hidepatrolled' );
+                       $hidePatrolled->setDefault( $user->getBoolOption( 'watchlisthidepatrolled' ) );
+               }
 
                $authorship = $this->getFilterGroup( 'authorship' );
                $hideMyself = $authorship->getFilter( 'hidemyself' );
@@ -151,7 +151,10 @@ class SpecialWatchlist extends ChangesListSpecialPage {
 
                $changeType = $this->getFilterGroup( 'changeType' );
                $hideCategorization = $changeType->getFilter( 'hidecategorization' );
-               $hideCategorization->setDefault( $user->getBoolOption( 'watchlisthidecategorization' ) );
+               if ( $hideCategorization !== null ) {
+                       // Conditional on feature being available
+                       $hideCategorization->setDefault( $user->getBoolOption( 'watchlisthidecategorization' ) );
+               }
        }
 
        /**
index 439b6ab..6f91c46 100644 (file)
@@ -21,6 +21,8 @@
  * @todo Use some variant of Pager or something; the pagination here is lousy.
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Implements Special:Whatlinkshere
  *
index 5126bad..1133625 100644 (file)
@@ -26,6 +26,7 @@
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\ResultWrapper;
 use Wikimedia\Rdbms\FakeResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 class ContribsPager extends ReverseChronologicalPager {
 
index 3789dfa..47b059b 100644 (file)
@@ -193,7 +193,8 @@ class ImageListPager extends TablePager {
                }
                $sortable = [ 'img_timestamp', 'img_name', 'img_size' ];
                /* For reference, the indicies we can use for sorting are:
-                * On the image table: img_usertext_timestamp, img_size, img_timestamp
+                * On the image table: img_user_timestamp, img_usertext_timestamp,
+                * img_size, img_timestamp
                 * On oldimage: oi_usertext_timestamp, oi_name_timestamp
                 *
                 * In particular that means we cannot sort by timestamp when not filtering
index 4bf5dff..b781930 100644 (file)
@@ -55,6 +55,16 @@ class NewFilesPager extends ReverseChronologicalPager {
                $fields = [ 'img_name', 'img_user', 'img_timestamp' ];
                $options = [];
 
+               $user = $opts->getValue( 'user' );
+               if ( $user !== '' ) {
+                       $userId = User::idFromName( $user );
+                       if ( $userId ) {
+                               $conds['img_user'] = $userId;
+                       } else {
+                               $conds['img_user_text'] = $user;
+                       }
+               }
+
                if ( !$opts->getValue( 'showbots' ) ) {
                        $groupsWithBotPermission = User::getGroupsWithPermission( 'bot' );
 
index 59ca31c..81a4083 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Represents a "user group membership" -- a specific instance of a user belonging
  * to a group. For example, the fact that user Mary belongs to the sysop group is a
index d801fa0..4df73f7 100644 (file)
@@ -20,6 +20,8 @@
  * @file
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Cut-down copy of User interface for local-interwiki-database
  * user rights manipulation.
index 43bccba..e107fb1 100644 (file)
@@ -1,4 +1,7 @@
 <?php
+
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Allows iterating a large number of rows in batches transparently.
  * By default when iterated over returns the full query result as an
index a6e47c8..70afb91 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Maintenance
  */
+use Wikimedia\Rdbms\IDatabase;
 use \MediaWiki\MediaWikiServices;
 
 class BatchRowWriter {
index b1b8c73..1911c79 100644 (file)
@@ -131,7 +131,7 @@ class InterwikiSearchResultSetWidget implements SearchResultSetWidget {
                        : "";
 
                if ( isset( $this->customCaptions[$iwPrefix] ) ) {
-                       /* customCaptions composed by loadCustomCaptions() with pre-escaped content.*/
+                       /* customCaptions composed by loadCustomCaptions() with pre-escaped content. */
                        $caption = $this->customCaptions[$iwPrefix];
                } else {
                        $interwiki = $this->iwLookup->fetch( $iwPrefix );
index 1c350d0..39e02e6 100644 (file)
@@ -71,6 +71,7 @@ class Names {
                'as' => 'অসমীয়া', # Assamese
                'ase' => 'American sign language', # American sign language
                'ast' => 'asturianu', # Asturian
+               'atj' => 'Atikamekw', # Atikamekw
                'av' => 'авар', # Avar
                'avk' => 'Kotava', # Kotava
                'awa' => 'अवधी', # Awadhi
index b4a66a0..51c69e6 100644 (file)
        "post-expand-template-argument-warning": "'''تحذير:''' هذه الصفحة تحتوي على عامل قالب واحد على الأقل له حجم تمدد كبير جدا.\nهذه العوامل تم حذفها.",
        "post-expand-template-argument-category": "تجاوزات معطيات القوالب",
        "parser-template-loop-warning": "تم كشف حلقة قالب: [[$1]]",
+       "template-loop-category": "الصفحات بحلقات قالب",
+       "template-loop-category-desc": "الصفحة تحتوي على حلقة قالب، أي أن القالب يستدعي نفسه.",
        "parser-template-recursion-depth-warning": "تم تجاوز حد عمق فرد القوالب ($1)",
        "language-converter-depth-warning": "تم تخطي حد عمق محول اللغة ($1)",
        "node-count-exceeded-category": "تجاوزات تعداد العقد",
        "newimages-summary": "هذه الصفحة الخاصة تعرض آخر الملفات المرفوعة.",
        "newimages-legend": "المرشح",
        "newimages-label": "اسم الملف (أو جزء منه):",
+       "newimages-user": "عنوان الأيبي أو اسم المستخدم",
        "newimages-showbots": "أظهر التحميلات بواسطة البوتات",
        "newimages-hidepatrolled": "أخف المرفوعات المنظورة",
        "noimages": "لا شيء للعرض.",
index 0120e9b..9de4469 100644 (file)
@@ -10,7 +10,8 @@
                        "Ramsis II",
                        "아라",
                        "Oldstoneage",
-                       "Macofe"
+                       "Macofe",
+                       "Abdelrhaman Eid"
                ]
        },
        "tog-underline": "حط خط تحت اللينكات:",
        "externaldberror": "يا إما فى حاجة غلط فى الدخول على قاعدة البيانات الخارجية أو انت مش مسموح لك تعمل تحديث لحسابك الخارجي.",
        "login": "دخول",
        "nav-login-createaccount": "تسجيل دخول / فتح حساب",
-       "userlogin": "دخول / فتح حساب",
-       "userloginnocreate": "دخول",
        "logout": "خروج",
        "userlogout": "خروج",
        "notloggedin": "انت مش مسجل دخولك",
        "userlogin-noaccount": "معندكش حساب؟",
        "userlogin-joinproject": "انضم ل {{SITENAME}}",
-       "nologin": "معندكش حساب؟ '''$1'''.",
-       "nologinlink": "افتح حساب",
        "createaccount": "افتح حساب",
-       "gotaccount": "عندك حساب؟ '''$1'''.",
-       "gotaccountlink": "دخول",
-       "userlogin-resetlink": "نسيت تفاصيل الدخول؟",
        "userlogin-helplink2": "مساعده ف الدخول",
        "createacct-email-ph": "أكتب عنوان الإيميل بتاعك",
        "createaccountmail": "استخدم باسورد مؤقته و إبعتها ع الايميل المحدد ده",
-       "createaccountreason": "السبب:",
        "createacct-reason": "سبب:",
        "createacct-submit": "افتح حسابك",
        "createacct-benefit-body1": "$1 {{PLURAL:$1|تعديل|تعديلات}}",
        "logentry-newusers-create": "تم فتح حساب {{GENDER:$2|اليوزر|اليوزره}} $1",
        "logentry-upload-upload": " {{GENDER:$2|رفع|اترفعت}} $1 $3",
        "rightsnone": "(فاضى)",
-       "revdelete-summary": "ملخص التعديل",
        "searchsuggest-search": "تدوير",
        "searchsuggest-containing": "جوّاه...",
        "expandtemplates": "تكبير القوالب",
index bd95460..6c90b1f 100644 (file)
        "nstab-special": "Ka ici wectakaniok",
        "nstab-project": "nohwe ma",
        "nstab-image": "Masinhikan",
+       "nstab-template": "Tapapitcikan",
        "nstab-category": "Ka ici arimotcikatek",
        "mainpage-nstab": "Otitikowin",
        "error": "Oniparin",
        "databaseerror-error": "Oniparin: $1",
        "badtitle": "nama mia icinikatew",
+       "badtitletext": "Nama takon nohwe e icinikatek paskickwemikan ,cikoctew,kekotc nama mia ki otci icinikatcikatew e itectamakaniwok nte arimwewinik kekotc nte otamirowinik.\nPotc osam nipira aitisinihikana actetikena nama tca ki actakaniwona tan e icinikatcikateki kekwan.",
        "viewsource": "Nte ici nta kanawapata e otciparik",
        "yourname": "Icinikasowin:",
        "userlogin-yourname": "Icinikasowin",
        "login": "Posi",
        "logout": "Piskeapikenakan",
        "userlogout": "Piskeapikenakan",
+       "userlogin-noaccount": " Nama takon ki mockinesinihikan?",
+       "userlogin-joinproject": "Pe natcipicta {{ohwe itipiwin}}",
        "createaccount": "Masinahotiso",
        "userlogin-resetpassword-link": "Ki onikan kipitakesinihikan?",
+       "userlogin-helplink2": "Witcihewin kata pitakeapikecinaniwok",
        "createacct-emailrequired": "Pamikicikwepitcikan matcetcicihikan",
        "createacct-emailoptional": "Pamikicikwepitcikan matcetcicihikan (kir kotc)",
        "createacct-email-ph": "Pitakesinaha ki pamikicikwepitcikan matcetcicihikan",
        "botpasswords-label-cancel": "Ponipita",
        "botpasswords-label-delete": "Wepina",
        "resetpass-submit-cancel": "Ponipita",
+       "passwordreset": "Ka ocehikaniin itewin koski masinaha",
        "passwordreset-username": "Icinikasowin:",
        "passwordreset-email": "Pamikicikwepitcikan matcetcicihikan:",
        "bold_sample": "Atisokesinahikan e makatewasinatek",
        "templatesused": "{{PLURAL:$1|tapapitcikan ka apatak |tapapitcikan ka apatak}} nta paskickwemakanik:",
        "template-protected": "(nakatweritcikatew)",
        "template-semiprotected": "(apita nakatoweritakon)",
+       "moveddeleted-notice": "Paskickwemakan ka ki wepinikatek.\nOhwe wapatcikan nitc ici nokon  paskickwemakanik ka ki wepinikateki acit ka ki atcipitcikateki .",
        "content-model-javascript": "JavaScript",
        "viewpagelogs": "Kinawapta kekwan kaki isparik ota masinhikanik",
        "revisionasof": "Kiwe wapata $1",
        "searchprofile-advanced": "Awocamec nantona",
        "searchprofile-articles-tooltip": "Nantowapita $1",
        "searchprofile-images-tooltip": "ka nantopitcikatek nakwe masinhikan",
+       "searchprofile-everything-tooltip": "Nantona nta kitciwe natosinahikanik (acit nte paskickwemakanik taci e ici aiarimotcikatek)",
        "searchprofile-advanced-tooltip": "Nantona taci e ici actek  ka mihikok",
        "search-result-size": "$1 ({{PLURAL:$2|1 itewin e masinatek|$2 itewina e masinateki}})",
        "search-redirect": "(Taci e kiweckwemokok $1)",
        "enhancedrc-history": "isparik",
        "recentchanges": "Ka ki meckotcitakanioki",
        "recentchanges-legend": " Ka meckotcitain matcenikana",
+       "recentchanges-summary": "Paskickwemikan ke ici nosanetain ka ki ocki meckotcisinihikatekai wikik.",
        "recentchanges-label-newpage": "Ocki paskickwemikan ki ocitamakan",
        "recentchanges-label-minor": "Apicic meckotciparin",
        "recentchanges-label-bot": "Icike ki meckotciparin",
        "booksources": "E otciparik",
        "booksources-search-legend": "Nantowapata nta kotakahi wapatcikana",
        "booksources-search": "Nanto kiskeritcikatek",
+       "log": "Pamikickwepitcikana masinihikana",
        "logeventslist-submit": "Wapata",
        "checkbox-all": "Kaskina",
        "allpages": "Kaskina paskickwemikana",
        "historyaction-submit": "Wapata",
        "dellogpage": " Nesitc ka wepinikatek kanaweritcikan",
        "rollbacklink": "e maninikatek",
+       "protectlogpage": "Nanakatisiwina wapatcikan",
        "restriction-edit": "Meckotcita",
        "undeleteviewlink": "tapwatcike",
        "undelete-search-submit": "Nantokaskeritcikatek",
        "isredirect": "masinhikan ke kweskiticohemikok",
        "isimage": "e ici tapitik masinahikaniwoc",
        "whatlinkshere-links": "← ka patiki",
+       "whatlinkshere-hideredirs": "$1 itapihikina",
+       "whatlinkshere-hidetrans": "$1 pitcititawina",
        "whatlinkshere-hidelinks": "$1 ka patiki",
+       "whatlinkshere-filters": "cikopesinikan",
        "whatlinkshere-submit": "Tapowata",
        "ipblocklist-submit": "Nantokaskeritcikatek",
        "blocklink": "nokipita",
        "tooltip-t-whatlinkshere": "Ka masinateti ite e ici itohikemakak",
        "tooltip-t-recentchangeslinked": "Ka masinateki anihi kaki atcitakaniwok",
        "tooltip-feed-atom": "Atom itapihikan ohwe otci paskickwemikan",
+       "tooltip-t-contributions": "Ka masinasotcik ka witcihiwetcik{{GENDER:$1|ka ntotcitatc}}",
        "tooltip-t-upload": "Matceticiha masinhikan",
        "tooltip-t-specialpages": "Kotahaki masinhikana",
        "tooltip-t-print": "Matci keki orowipitaman kitci masinatekipan",
        "tooltip-ca-nstab-special": "Ohowe kitcickwemakinikan,nama actew kitci meckotcitaparik.",
        "tooltip-ca-nstab-project": "Kitci wapataman nehe masinihikan ocki otamirowinik otci",
        "tooltip-ca-nstab-image": "Kitci wapitaman nehe masinhikan",
+       "tooltip-ca-nstab-template": "kanawapata orictawisinihikan",
        "tooltip-ca-nstab-category": "Kitci wapitaman nehe mia ka ici arimotcikatek",
        "tooltip-save": "Kinokepita ka meckotcisinihaman",
        "tooltip-preview": "Mikwetc pitaman e kanawapataman kaki meckotcitain, e pwamici actain pamikicikwepitcikanik.",
        "tooltip-diff": "Nokota nohwe ka ki meckotcisinihaham  masinihikanik",
+       "tooltip-rollback": "\"Nakaha\" nikanikatew kotc peikwa e makohotc nohwe makonakan kaskina ka ki meckotcisinihikateki nta paskickwemakanik nohwe ka ki orisinihiketc mamitcit",
+       "tooltip-undo": "\"Nama ntowatc\"nihictamikan nictam meckotcisinihikan minawatc cepirihomikon taci e ici meckotcisinihikaniwok ke ici kanawapataman.Matci kaie ki ka acotcitan kekwan espirik  nta nosem masinihikanik.",
        "tooltip-summary": "Acta e arimotaman masinihikan apicic",
        "simpleantispam-label": "Ntokiskeritcike piciriwe masinihikan \n\nNte nota <strong>nama kekwan</strong> masinaha ota!",
        "pageinfo-toolboxlink": "Tipatcimo masinahikan",
        "pageinfo-contentpage-yes": "Ehe",
        "pageinfo-protect-cascading-yes": "Ehe",
        "confirm-markpatrolled-button": "OK",
+       "nextdiff": "Tec meckotcisinihikan",
        "show-big-image": "E otciparik masinahikaniwoc",
        "show-big-image-preview": "E irikweckwemikisitc$1",
        "show-big-image-size": "$1 x $2 pixels",
        "saturday-at": "mari kicikaw $1",
        "sunday-at": "manactakaniwon $1",
        "metadata": "E ici tipatcitcikatek",
+       "metadata-fields": "Nohwe e aitotwakaniwitc masinasowin nta kata ici actew paskickwemakanik ka ici tipatcimonaniwok ickwa atciwonikateke nta kitci tipatcimoniwocik. Minawatc kotakahi kata katcictakaniwona.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-orientation": "Itactamictew",
        "exif-datetime": "Apitc ka meckotcitakaniwok",
        "exif-make": "Ka ki ocitatatc masinapiskihikaniw",
        "exif-model": "E icinakok masinapiskohewin",
+       "exif-software": "Tipatcimocikimiwesinikan ka totcikatek",
+       "exif-colorspace": "Icipekihikanik",
        "exif-datetimeoriginal": "E tato piponikak nictam ka masinohaniwok",
        "exif-datetimedigitized": "e tato konekisit pisimw ka capwapiskipitcikatek",
        "exif-source": "Ite wetciparik",
index fa43219..3a9d7c4 100644 (file)
        "login": "گیریش",
        "login-security": "کیملیگینیزی تائید ائدین",
        "nav-login-createaccount": "گیریش / حساب یارات",
-       "userlogin": "گیریش / حساب یارات",
-       "userloginnocreate": "گیریش",
        "logout": "چیخیش",
        "userlogout": "چیخیش",
        "notloggedin": "گیرمه‌میسینیز",
        "userlogin-noaccount": "حسابینیز یوخدورمو؟",
        "userlogin-joinproject": "{{SITENAME}}-ه قوشولون",
-       "nologin": "حسابینیز یوخدومو؟ $1.",
-       "nologinlink": "حساب یارات",
        "createaccount": "حساب یارات",
-       "gotaccount": "اؤنجه‌دن حسابینیز وارمی؟ $1.",
-       "gotaccountlink": "گیریش",
-       "userlogin-resetlink": "گیریش بیلگیلرینیزی اونوتموسونوز؟",
        "userlogin-resetpassword-link": "رمزینیزی اونوتموسوز مو؟",
        "userlogin-helplink2": "گیریش ایله کؤمک",
        "userlogin-loggedin": "سیر حال حاضیردا {{GENDER:$1|$1}} عونوانیندا گیریش ائدیب سیز.\nآشاغیداکی فورمودان بیر آیری ایشلدن عونوانیندا گیریش اوچون ایشلدین.",
        "createacct-another-email-ph": "ایمیل آدرسینیزی یازین",
        "createaccountmail": "بیر گئچیجی راست‌گله رمز ایشلت و اونو آشاغیدا بللندیرن ایمیل آدرسینه گؤندر",
        "createacct-realname": "دوغرو آد (ایستگه باغلی)",
-       "createaccountreason": "نَدَن‌لیک:",
        "createacct-reason": "سبب",
        "createacct-reason-ph": "ندن سیز باشقا حساب یارادیرسینیز",
        "createacct-reason-help": "حساب یاراتماق لیستینده گؤستریلن مساژ",
        "savearticle": "صفحه‌نی ذخیره ائت",
        "savechanges": "دَییشیکلیکلری ذخیره ائت",
        "publishpage": "صفحه‌نی یاییملا",
-       "publishchanges": "دَییشیک‌لیک‌لری یاییملا",
+       "publishchanges": "دَییشیک‌لیکلری یای",
        "preview": "اؤن‌گؤستریش",
        "showpreview": "سیناق گؤستریش",
        "showdiff": "دَییشیکلیکلری گؤستر",
        "log-name-managetags": "اِتیکت ایداره گئچمیشی",
        "log-name-tag": "اِتیکت ژورنالی",
        "rightsnone": "(هئچ)",
-       "revdelete-summary": "دَییشدیرمه قیساسی",
        "feedback-adding": "صحیفه‌یه گئری-بیلدیریم آرتیریلیر...",
        "feedback-back": "دالی",
        "feedback-bugcheck": "گؤزل! فقط لوطفاً باخین او [$1 تانینمیش خطالار]دان اولماسین.",
index bc6a601..9925369 100644 (file)
        "watchthis": "Күҙәтеү исемлегенә",
        "savearticle": "Яҙҙырып ҡуйырға",
        "savechanges": "Яҙҙырып ҡуйырға",
-       "publishpage": "Ð\91иÑ\82Ñ\82е Ð±Ð°Ò«Ñ\82Ñ\8bÑ\80ырға",
+       "publishpage": "ЯÒ\99Ò\99Ñ\8bÑ\80Ñ\8bп Ò¡Ñ\83йырға",
        "publishchanges": "Яҙҙырып ҡуйырға",
        "preview": "Ҡарап сығыу",
        "showpreview": "Ҡарап сығырға",
        "userrights-nodatabase": "$1 базаһы юҡ йәки урындағы (локаль) база түгел.",
        "userrights-changeable-col": "Һеҙ үҙгәртә алған төркөмдәр",
        "userrights-unchangeable-col": "Һеҙ үҙгәртә алмаған төркөмдәр",
+       "userrights-expiry-options": "1 көн:1 day,1 аҙна:1 week,1 ай:1 mopnth, 3 ай:3 months,6 ай:6 months,1 йыл:1 year",
        "userrights-conflict": "Ҡатнашыусының хоҡуҡтарын үҙгәртеү яраманы! Зинһар, үҙгәрештәрҙе тикшерегеҙ һәм яңынан индерегеҙ.",
        "group": "Төркөм:",
        "group-user": "Ҡулланыусылар",
index 9e0ced8..2c410bc 100644 (file)
        "post-expand-template-argument-warning": "<strong>Увага</strong>: гэтая старонка ўтрымлівае прынамсі адзін парамэтар шаблёну, які мае занадта вялікі выгляд у разгорнутым выглядзе.\nГэтыя парамэтры былі прапушчаныя.",
        "post-expand-template-argument-category": "Старонкі, у якіх прапушчаныя парамэтры шаблёнаў",
        "parser-template-loop-warning": "Выяўлены цыкль у шаблёнах: [[$1]]",
+       "template-loop-category": "Старонкі з цыклямі шаблёнаў",
+       "template-loop-category-desc": "Старонка ўтрымлівае цыкль шаблёну, г. зн., шаблён уключае сам сябе рэкурсіўна.",
        "parser-template-recursion-depth-warning": "Перавышаны ліміт глыбіні рэкурсіі шаблёну ($1)",
        "language-converter-depth-warning": "Перавышанае абмежаваньне глыбіні канвэртару варыянтаў мовы ($1)",
        "node-count-exceeded-category": "Старонкі зь перавышанай колькасьцю вузлоў",
        "newimages-summary": "Гэтая спэцыяльная старонка паказвае нядаўна загружаныя файлы.",
        "newimages-legend": "Фільтар",
        "newimages-label": "Назва файла (альбо яе частка):",
+       "newimages-user": "IP-адрас ці імя ўдзельніка",
        "newimages-showbots": "Паказаць загружаныя робатамі",
        "newimages-hidepatrolled": "Схаваць патруляваныя загрузкі",
        "noimages": "Выявы адсутнічаюць.",
        "authmanager-password-help": "Пароль для аўтэнтыфікацыі.",
        "authmanager-domain-help": "Дамэн для вонкавай аўтэнтыфікацыі.",
        "authmanager-retype-help": "Пароль яшчэ раз для пацьверджаньня.",
+       "authmanager-email-label": "Электронная пошта",
+       "authmanager-email-help": "Адрас электроннай пошты",
        "authmanager-realname-label": "Сапраўднае імя",
+       "authmanager-realname-help": "Сапраўднае імя ўдзельніка",
        "authmanager-provider-temporarypassword": "Часовы пароль",
        "changecredentials": "Зьмена ўліковых зьвестак",
        "removecredentials": "Выдаленьне ўліковых зьвестак",
index acc2b37..d076f51 100644 (file)
        "default-skin-not-found-no-skins": "Упс! Прадвызначаная вокладка для вашай вікі (<code>$wgDefaultSkin</code>), <code>$1</code>, недаступна.\n\nВы не ўстанавілі вокладкі.\n\n; Калі вы толькі што ўстанавілі ці абнавілі MediaWiki:\n: Магчыма, вы ўстанавілі з git, ці наўпрост з зыходнага коду, выкарыстаўшы іншы метад. Гэта нармальна. MediaWiki 1.24 і навейшыя не ўключаюць вокладкі ў асноўнае сховішча. Паспрабуйце ўстанавіць некалькі вокладак з [https://www.mediawiki.org/wiki/Category:All_skins каталога вокладак mediawiki.org], такім чынам:\n:* Узяўшы [https://www.mediawiki.org/wiki/Download tarball-інсталятар], які ўтрымлівае некалькі вокладак і прыставак. Вы можаце скапіяваць і ўставіць каталог <code>skins/</code> адтуль.\n:* Зрабіўшы клон аднаго з сховішчаў <code>mediawiki/skins/*</code> праз git у каталог <code>skins/</code> вашай інсталяцыі MediaWiki.\n: Калі вы распрацоўшчык MediaWiki, гэта не павінна адбіцца на вашым git-сховішчы. Гл. [https://www.mediawiki.org/wiki/Manual:Skin_configuration Інструкцыя: Настройка вокладак] дзеля інфармацыі па ўключэнні вокладак і выбары прадвызначэння.",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (уключана)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>выключана</strong>)",
+       "mediastatistics-table-extensions": "Магчымыя прыстаўкі",
        "mediastatistics-table-count": "Колькасць файлаў",
        "mediastatistics-table-totalbytes": "Агульны памер",
        "mediastatistics-header-unknown": "Невядомыя",
index 55ec264..7fa8402 100644 (file)
                        "Elias Ahmmad"
                ]
        },
-       "tog-underline": "সà¦\82যà§\8bà¦\97à¦\97à§\81লির নিচে দাগ দেখানো হোক:",
-       "tog-hideminor": "à¦\85নà§\81লà§\8dলà§\87à¦\96à§\8dয à¦¸à¦®à§\8dপাদনাà¦\97à§\81লà§\8b à¦¸à¦¾à¦®à§\8dপà§\8dরতিà¦\95 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনসমà§\82হà§\87 à¦\86ড়াল à¦\95রà§\8b",
-       "tog-hidepatrolled": "পরীক্ষিত সম্পাদনাগুলি সাম্প্রতিক পরিবর্তনসমূহে আড়াল করা হোক",
-       "tog-newpageshidepatrolled": "পরà§\80à¦\95à§\8dষিত à¦ªà¦¾à¦¤à¦¾à¦\97à§\81লিà¦\95à§\87 à¦¨à¦¤à§\81ন à¦ªà¦¾à¦¤à¦¾à¦° à¦¤à¦¾à¦²à¦¿à¦\95ায় à¦\86ড়াল à¦\95রা হোক",
-       "tog-hidecategorization": "পà§\83ষà§\8dঠাসমà§\82হà§\87র à¦¶à§\8dরà§\87ণà§\80à¦\95রণ à¦²à§\81à¦\95ানà§\8b হোক",
+       "tog-underline": "সà¦\82যà§\8bà¦\97à§\87র নিচে দাগ দেখানো হোক:",
+       "tog-hideminor": "à¦\85নà§\81লà§\8dলà§\87à¦\96à§\8dয à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦¸à¦¾à¦®à§\8dপà§\8dরতিà¦\95 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦²à§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96া à¦¹à§\8bà¦\95",
+       "tog-hidepatrolled": "পরীক্ষিত সম্পাদনাগুলি সাম্প্রতিক পরিবর্তন পাতায় লুকিয়ে রাখা হোক",
+       "tog-newpageshidepatrolled": "পরà§\80à¦\95à§\8dষিত à¦ªà¦¾à¦¤à¦¾à¦\97à§\81লিà¦\95à§\87 à¦¨à¦¤à§\81ন à¦ªà¦¾à¦¤à¦¾à¦° à¦¤à¦¾à¦²à¦¿à¦\95ায় à¦²à§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96া হোক",
+       "tog-hidecategorization": "পাতাà¦\97à§\81লির à¦¶à§\8dরà§\87ণà§\80à¦\95রণ à¦²à§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96া হোক",
        "tog-extendwatchlist": "শুধু সাম্প্রতিক পরিবর্তনই নয়, সকল পরিবর্তন দেখতে নজর তালিকা সম্প্রসারণ করা হোক",
        "tog-usenewrc": "সাম্প্রতিক পরিবর্তনসমূহ এবং নজরতালিকা পাতায় পরিবর্তনগুলি একত্রে প্রদর্শন করা হোক",
        "tog-numberheadings": "শিরোনামগুলিকে স্বয়ংক্রিয়ভাবে ক্রমিক নম্বর দেয়া হোক",
        "tog-showtoolbar": "সম্পাদনা সরঞ্জামদণ্ড দেখানো হোক",
        "tog-editondblclick": "দুইবার ক্লিক করে পাতা সম্পাদনা করা হোক",
-       "tog-editsectiononrightclick": "পরিচ্ছেদের শিরোনাম ডান ক্লিকের মাধ্যমে সম্পাদনা করার ক্ষমতা দেয়া হোক",
+       "tog-editsectiononrightclick": "পরিচ্ছেদের শিরোনামে ডান ক্লিক করার মাধ্যমে পরিচ্ছেদ সম্পাদনা করার সুবিধাটি সক্রিয় করা হোক",
        "tog-watchcreations": "আমার তৈরি করা পাতাগুলি এবং আপলোড করা ফাইলগুলি আমার নজরতালিকায় যোগ করা হোক",
        "tog-watchdefault": "আমার সম্পাদিত পাতাগুলি এবং ফাইলগুলি আমার নজরতালিকায় যোগ করা হোক",
        "tog-watchmoves": "আমার দ্বারা স্থানান্তরিত পাতাগুলি এবং ফাইলগুলি আমার নজরতালিকায় যোগ করা হোক",
        "tog-enotifwatchlistpages": "আমার নজরতালিকায় আছে এমন কোন পাতা অথবা ফাইলে পরিবর্তন হলে আমাকে ই-মেইল করা হোক",
        "tog-enotifusertalkpages": "আমার ব্যবহারকারী আলোচনা পাতার পরিবর্তন হলে আমাকে ই-মেইল করা হোক",
        "tog-enotifminoredits": "পাতা এবং ফাইলগুলিতে অনুল্লেখ্য সম্পাদনার জন্যও আমাকে ই-মেইল করা হোক",
-       "tog-enotifrevealaddr": "বিজ্ঞপ্তি ই-মেইলগুলিতে আমার ই-মেইল ঠিকানা প্রকাশ করা হোক",
+       "tog-enotifrevealaddr": "বিজ্ঞপ্তি ই-মেইলগুলিতে আমার ই-মেইল ঠিকানা প্রকাশ করা হোক",
        "tog-shownumberswatching": "নজরদারী করছে এমন ব্যবহারকারীর সংখ্যা দেখানো হোক",
        "tog-oldsig": "আপনার বর্তমান স্বাক্ষর:",
        "tog-fancysig": "স্বাক্ষরকে উইকিটেক্সট হিসেবে মনে করা হোক (কোন স্বয়ংক্রিয় সংযোগ ছাড়া)",
        "tog-uselivepreview": "তাৎক্ষণিক প্রাকদর্শন ব্যবহার করা হোক",
        "tog-forceeditsummary": "খালি সম্পাদনা সারাংশ প্রবেশ করানোর সময় আমাকে জানানো হোক",
-       "tog-watchlisthideown": "à¦\86মার à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦\86মার à¦¨à¦\9cরতালিà¦\95ায় à¦\86ড়াল à¦\95রে রাখা হোক",
-       "tog-watchlisthidebots": "বà¦\9fà§\87র à¦\95রা à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦¨à¦\9cরতালিà¦\95ায় à¦\86ড়াল à¦\95রে রাখা হোক",
-       "tog-watchlisthideminor": "à¦\85নà§\81লà§\8dলà§\87à¦\96à§\8dয à¦¸à¦®à§\8dপাদনাà¦\97à§\81লà§\8b à¦¨à¦\9cরতালিà¦\95ায় à¦\86ড়াল à¦\95রে রাখা হোক",
-       "tog-watchlisthideliu": "à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শà¦\95à§\83ত à¦¬à§\8dযবহারà¦\95ারà§\80দà§\87র à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦¨à¦\9cরতালিà¦\95ায় à¦\86ড়াল à¦\95রে রাখা হোক",
-       "tog-watchlistreloadautomatically": "পà§\8dরতিবার à¦\8fà¦\95à¦\9fি à¦\9bাà¦\81à¦\95নি à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦¹à¦\93য়া à¦®à¦¾à¦¤à§\8dরà¦\87 à¦¸à§\8dবয়à¦\82à¦\95à§\8dরিয়ভাবà§\87 à¦¨à¦\9cরতালিà¦\95াà¦\9fি à¦ªà§\81নà¦\83পà§\8dরà¦\95াশ করা হোক (জাভাস্ক্রিপ্ট প্রয়োজন)",
+       "tog-watchlisthideown": "à¦\86মার à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦\86মার à¦¨à¦\9cরতালিà¦\95ায় à¦²à§\81à¦\95িয়ে রাখা হোক",
+       "tog-watchlisthidebots": "বà¦\9fà§\87র à¦\95রা à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦¨à¦\9cরতালিà¦\95ায় à¦²à§\81à¦\95িয়ে রাখা হোক",
+       "tog-watchlisthideminor": "à¦\85নà§\81লà§\8dলà§\87à¦\96à§\8dয à¦¸à¦®à§\8dপাদনাà¦\97à§\81লà§\8b à¦¨à¦\9cরতালিà¦\95ায় à¦²à§\81à¦\95িয়ে রাখা হোক",
+       "tog-watchlisthideliu": "à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শà¦\95à§\83ত à¦¬à§\8dযবহারà¦\95ারà§\80দà§\87র à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦¨à¦\9cরতালিà¦\95ায় à¦²à§\81à¦\95িয়ে রাখা হোক",
+       "tog-watchlistreloadautomatically": "পà§\8dরতিবার à¦\8fà¦\95à¦\9fি à¦\9bাà¦\81à¦\95নি à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦¹à¦\93য়া à¦®à¦¾à¦¤à§\8dরà¦\87 à¦¸à§\8dবয়à¦\82à¦\95à§\8dরিয়ভাবà§\87 à¦¨à¦\9cরতালিà¦\95াà¦\9fি à¦ªà§\81নà¦\83লà§\8bড করা হোক (জাভাস্ক্রিপ্ট প্রয়োজন)",
        "tog-watchlisthideanons": "বেনামী ব্যবহারকারীদের সম্পাদনাগুলি নজরতালিকায় আড়ালে রাখা হোক",
-       "tog-watchlisthidepatrolled": "পরà§\80à¦\95à§\8dষিত à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦¨à¦\9cরতালিà¦\95ায় à¦\86ড়ালে রাখা হোক",
-       "tog-watchlisthidecategorization": "পাতার à¦¶à§\8dরà§\87ণà§\80বদà§\8dধà¦\95রণ à¦\86ড়াল à¦\95রে রাখা হোক",
-       "tog-ccmeonemails": "à¦\85নà§\8dয à¦¬à§\8dযবহারà¦\95ারà§\80র à¦\95াà¦\9bà§\87 à¦\86মার à¦ªà¦¾à¦ à¦¾à¦¨à§\8b à¦\87মà§\87à¦\87লà§\87র à¦\8fà¦\95à¦\9fি à¦\85নà§\81লিপি আমাকে পাঠানো হোক",
+       "tog-watchlisthidepatrolled": "পরà§\80à¦\95à§\8dষিত à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦¨à¦\9cরতালিà¦\95ায় à¦²à§\81à¦\95িয়ে রাখা হোক",
+       "tog-watchlisthidecategorization": "পাতার à¦¶à§\8dরà§\87ণà§\80বদà§\8dধà¦\95রণ à¦²à§\81à¦\95িয়ে রাখা হোক",
+       "tog-ccmeonemails": "à¦\85নà§\8dয à¦¬à§\8dযবহারà¦\95ারà§\80র à¦\95াà¦\9bà§\87 à¦\86মার à¦ªà¦¾à¦ à¦¾à¦¨à§\8b à¦\87মà§\87à¦\87লà§\87র à¦\8fà¦\95à¦\9fি à¦ªà§\8dরতিলিপি আমাকে পাঠানো হোক",
        "tog-diffonly": "পার্থক্যের নিচে পাতার বিষয়বস্তু না দেখানো হোক",
-       "tog-showhiddencats": "à¦\86ড়ালà§\87 à¦°à¦¾à¦\96া à¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§\8dরà§\87ণà§\80à¦\97à§\81লি দেখানো হোক",
+       "tog-showhiddencats": "লà§\81à¦\95ায়িত à¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§\8dরà§\87ণà§\80সমà§\82হ দেখানো হোক",
        "tog-norollbackdiff": "রোলব্যাকের পরে সংস্করণগুলির পার্থক্য না দেখানো হোক",
        "tog-useeditwarning": "কোনো সম্পাদনা পাতা ত্যাগের সময় পরিবর্তনগুলি সংরক্ষিত না হয়ে থাকলে আমাকে সাবধান করা হোক",
        "tog-prefershttps": "অ্যাকাউন্টে প্রবেশ করার সময় সবসময় নিরাপদ সংযোগ ব্যবহার করুন",
        "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",
+       "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": "উপবিষয়শ্রেণীসমূহ",
        "category-media-header": "\"$1\" বিষয়শ্রেণীতে অন্তর্ভুক্ত মিডিয়া ফাইলগুলি",
-       "category-empty": "''এই বিষয়শ্রণীতে বর্তমানে কোন পাতা বা মিডিয়া ফাইল নেই।''",
-       "hidden-categories": "{{PLURAL:$1|লুকায়িত বিষয়শ্রেণী|লুকায়িত বিষয়শ্রেণীসমূহ}}",
+       "category-empty": "<em>এই বিষয়শ্রণীতে বর্তমানে কোন পাতা বা মিডিয়া ফাইল নেই।</em>",
+       "hidden-categories": "{{PLURAL:$1|লুকায়িত বিষয়শ্রেণী}}",
        "hidden-category-category": "লুকায়িত বিষয়শ্রেণীসমূহ",
-       "category-subcat-count": "{{PLURAL:$2|এই বিষয়শ্রেণীতে কেবলমাত্র নিচের উপবিষয়শ্রেণীটি আছে।|এই বিষয়শ্রেণীতে অন্তর্ভুক্ত মোট $2টি উপবিষয়শ্রেণীর মধ্যে {{PLURAL:$1|টি উপবিষয়শ্রেণী|$1টি উপবিষয়শ্রেণী}} নিচে দেখানো হয়েছে।}}",
-       "category-subcat-count-limited": "à¦\8fà¦\87 à¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§\8dরà§\87ণà§\80তà§\87 à¦¨à¦¿à¦\9aà§\87র {{PLURAL:$1|à¦\9fি à¦\89পবিষয়শà§\8dরà§\87ণà§\80|$1à¦\9fি à¦\89পবিষয়শà§\8dরà§\87ণà§\80 à¦\86à¦\9bà§\87}}।",
-       "category-article-count": "{{PLURAL:$2|এই বিষয়শ্রেণীতে কেবল নিচের পাতাটি আছে।|এই বিষয়শ্রেণীতে অন্তর্ভুক্ত মোট $2টি পাতার মধ্যে {{PLURAL:$1|টি পাতা|$1টি পাতা}} নিচে দেখানো হল।}}",
-       "category-article-count-limited": "à¦\8fà¦\87 {{PLURAL:$1|পাতাà¦\9fি|$1 à¦ªà¦¾à¦¤à¦¾à¦\97à§\81লà§\8b}} à¦\8f বিষয়শ্রেণীতে রয়েছে।",
-       "category-file-count": "{{PLURAL:$2|এই বিষয়শ্রেণীতে কেবল নিচের পাতাটি আছে।|এই বিষয়শ্রেণীতে অন্তর্ভুক্ত মোট $2টি পাতার মধ্যে {{PLURAL:$1|টি পাতা|$1টি পাতা}} নিচে দেখানো হলো।}}",
+       "category-subcat-count": "{{PLURAL:$2|এই বিষয়শ্রেণীতে কেবলমাত্র নিচের উপবিষয়শ্রেণীটি আছে।|এই বিষয়শ্রেণীতে অন্তর্ভুক্ত মোট $2টি উপবিষয়শ্রেণীর মধ্যে {{PLURAL:$1|$1টি উপবিষয়শ্রেণী}} নিচে দেখানো হয়েছে।}}",
+       "category-subcat-count-limited": "à¦\8fà¦\87 à¦¬à¦¿à¦·à¦¯à¦¼à¦¶à§\8dরà§\87ণà§\80তà§\87 à¦¨à¦¿à¦\9aà§\87র {{PLURAL:$1|à¦\89পবিষয়শà§\8dরà§\87ণà§\80|$1à¦\9fি à¦\89পবিষয়শà§\8dরà§\87ণà§\80}} à¦\86à¦\9bà§\87।",
+       "category-article-count": "{{PLURAL:$2|এই বিষয়শ্রেণীতে কেবল নিচের পাতাটি আছে।|এই বিষয়শ্রেণীতে অন্তর্ভুক্ত মোট $2টি পাতার মধ্যে {{PLURAL:$1|$1টি পাতা}} নিচে দেখানো হল।}}",
+       "category-article-count-limited": "নিà¦\9aà§\87র {{PLURAL:$1|পাতাà¦\9fি|$1 à¦ªà¦¾à¦¤à¦¾à¦\97à§\81লà§\8b}} à¦\8fà¦\87 বিষয়শ্রেণীতে রয়েছে।",
+       "category-file-count": "{{PLURAL:$2|এই বিষয়শ্রেণীতে কেবল নিচের পাতাটি আছে।|এই বিষয়শ্রেণীতে অন্তর্ভুক্ত মোট $2টি পাতার মধ্যে {{PLURAL:$1|$1টি পাতা}} নিচে দেখানো হলো।}}",
        "category-file-count-limited": "নিচের {{PLURAL:$1|ফাইলটি|$1 ফাইলগুলো}} এই বিষয়শ্রেণীতে রয়েছে।",
        "listingcontinuesabbrev": "আরও আছে",
        "index-category": "নির্ঘণ্ট পাতা",
        "noindex-category": "নির্ঘণ্ট নয় এমন পাতা",
-       "broken-file-category": "à¦\85à¦\95ারà§\8dযà¦\95র à¦\9aিতà§\8dর সংযোগসহ পাতাসমূহ",
+       "broken-file-category": "à¦\85à¦\95ারà§\8dযà¦\95র à¦«à¦¾à¦\87ল সংযোগসহ পাতাসমূহ",
        "about": "পরিচিতি",
        "article": "বিষয়বস্তুর পাতা",
        "newwindow": "(নতুন উইন্ডোতে খুলবে)",
        "qbbrowse": "ব্রাউজ",
        "qbedit": "সম্পাদনা",
        "qbpageoptions": "এই পাতা",
-       "qbmyoptions": "à¦\86মার à¦ªà¦¾à¦¤à¦¾à¦¸à¦®à§\82হ",
+       "qbmyoptions": "à¦\86মার à¦ªà¦¾à¦¤à¦¾à¦\97à§\81লি",
        "faq": "প্রাজিপ্র",
        "faqpage": "Project:প্রাজিপ্র",
        "actions": "কার্যক্রম",
        "namespaces": "নামস্থান",
        "variants": "বিকল্পসমূহ",
-       "navigation-heading": "পরিভà§\8dরমণ à¦®à§\87নà§\81",
+       "navigation-heading": "পরিভà§\8dরমণ à¦¬à¦¾à¦\9bাà¦\87তালিà¦\95া",
        "errorpagetitle": "ত্রুটি",
        "returnto": "$1 পাতায় ফেরত যান।",
        "tagline": "{{SITENAME}} থেকে",
        "help": "সাহায্য",
        "search": "অনুসন্ধান",
-       "search-ignored-headings": " #<!-- এই লাইনটিকে ঠিক যেমন আছে তেমনটি রেখে দিন --> <pre>\n# যেসব শিরোনাম অনুসন্ধানে অগ্রাহ্য করা হবে।\n# যখনই শিরোনামযুক্ত পাতাটি সূচীভুক্ত হবে, তখনই এখানকার কোন পরিবর্তন বাস্তবায়িত হবে।\n# আপনি একটি নাল/শূন্য সম্পাদনা করে পাতাটিকে বলপূর্বক পুনঃসূচীভুক্ত করতে পারেন।\n# সিনট্যাক্স বা পদক্রম/পদবিন্যাসের নিয়মগুলি নিম্নরূপ:\n#   * অক্ষর থেকে শুরু করে লাইনের শেষ পর্যন্ত সবকিছু হচ্ছে একটি মন্তব্য বা কমেন্ট।\n#   * প্রতিটি অশূন্য লাইন হচ্ছে যে শিরোনামটি অগ্রাহ্য করা হবে, বড় হাতের লেখা এবং অন্যান্য সবকিছু গণনায় ধরে।\nতথ্যসূত্র\nবহিঃসংযোগসমূহ\nআরও দেখুন\n#</pre> <!-- এই লাইনটিকে ঠিক যেমন আছে তেমনটি রেখে দিন -->",
+       "search-ignored-headings": " #<!-- এই লাইনটিকে ঠিক যেমন আছে তেমনটি রেখে দিন --> <pre>\n# যেসব শিরোনাম অনুসন্ধানে অগ্রাহ্য করা হবে।\n# যখনই শিরোনামযুক্ত পাতাটি সূচীভুক্ত হবে, তখনই এখানকার কোন পরিবর্তন বাস্তবায়িত হবে।\n# আপনি একটি নাল/শূন্য সম্পাদনা করে পাতাটিকে বলপূর্বক পুনঃসূচীভুক্ত করতে পারেন।\n# সিনট্যাক্স বা পদক্রম/পদবিন্যাসের নিয়মগুলি নিম্নরূপ:\n#   * অক্ষর থেকে শুরু করে লাইনের শেষ পর্যন্ত সবকিছু হচ্ছে একটি মন্তব্য বা কমেন্ট।\n#   * প্রতিটি অশূন্য লাইন হচ্ছে যে শিরোনামটি অগ্রাহ্য করা হবে, বড় হাতের লেখা এবং অন্যান্য সবকিছু গণনায় ধরে।\nতথ্যসূত্র\nবহিঃসংযোগ\nআরও দেখুন\n#</pre> <!-- এই লাইনটিকে ঠিক যেমন আছে তেমনটি রেখে দিন -->",
        "searchbutton": "অনুসন্ধান",
        "go": "চলো",
        "searcharticle": "চলো",
        "printableversion": "ছাপার যোগ্য সংস্করণ",
        "permalink": "স্থায়ী সংযোগ",
        "print": "মুদ্রণ",
-       "view": "দà§\87à¦\96াà¦\93",
+       "view": "দà§\87à¦\96à§\81ন",
        "view-foreign": "$1-এ দেখুন",
        "edit": "সম্পাদনা",
        "edit-local": "স্থানীয় বিবরণ সম্পাদনা করুন",
-       "create": "তৈরি",
+       "create": "তৈরি করুন",
        "create-local": "স্থানীয় বিবরণ যোগ করুন",
        "editthispage": "এই পাতাটি সম্পাদনা করুন",
-       "create-this-page": "পাতাà¦\9fি à¦¤à§\88রি à¦\95রà§\8b",
+       "create-this-page": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦¤à§\88রি à¦\95রà§\81ন",
        "delete": "অপসারণ",
-       "deletethispage": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦®à§\81à¦\9bà§\87 à¦«à§\87লুন",
-       "undeletethispage": "পাতাà¦\9fি à¦ªà§\81নরà§\81দà§\8dধার à¦\95রà§\8b",
+       "deletethispage": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\85পসারণ à¦\95রুন",
+       "undeletethispage": "পাতাà¦\9fি à¦ªà§\81নরà§\81দà§\8dধার à¦\95রà§\81ন",
        "undelete_short": "{{PLURAL:$1|১টি সম্পাদনা|$1টি সম্পাদনা}} পুনঃস্থাপন করুন",
-       "viewdeleted_short": "{{PLURAL:$1|à¦\8fà¦\95à¦\9fি à¦\85পসারিত à¦¸à¦®à§\8dপাদনা|$1à¦\9fি à¦\85পসারিত à¦¸à¦®à§\8dপাদনা}} à¦¦à§\87à¦\96াà¦\93",
+       "viewdeleted_short": "{{PLURAL:$1|à¦\8fà¦\95à¦\9fি à¦\85পসারিত à¦¸à¦®à§\8dপাদনা|$1à¦\9fি à¦\85পসারিত à¦¸à¦®à§\8dপাদনা}} à¦¦à§\87à¦\96à§\81ন",
        "protect": "সুরক্ষা",
        "protect_change": "পরিবর্তন করুন",
-       "protectthispage": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\95à§\87 à¦¸à§\81রà¦\95à§\8dষিত à¦\95রà§\8b",
+       "protectthispage": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦¸à§\81রà¦\95à§\8dষিত à¦\95রà§\81ন",
        "unprotect": "সুরক্ষা পরিবর্তন",
        "unprotectthispage": "এই পাতার সুরক্ষা পরিবর্তন করুন",
        "newpage": "নতুন পাতা",
        "tool-link-userrights": "{{GENDER:$1|ব্যবহারকারী}} দল পরিবর্তন করুন",
        "tool-link-userrights-readonly": "{{GENDER:$1|ব্যবহারকারী}} দল দেখুন",
        "tool-link-emailuser": "এই {{GENDER:$1|ব্যবহারকারী}}কে ইমেইল পাঠান",
-       "userpage": "বà§\8dযাবহারà¦\95ারà§\80র à¦ªà¦¾à¦¤à¦¾ à¦¦à§\87à¦\96à§\81ন",
-       "projectpage": "মà§\87à¦\9fা-পাতা দেখুন",
+       "userpage": "ব্যবহারকারীর পাতা দেখুন",
+       "projectpage": "পà§\8dরà¦\95লà§\8dপ à¦ªà¦¾à¦¤à¦¾à¦\9fি দেখুন",
        "imagepage": "ফাইল পাতা দেখুন",
        "mediawikipage": "বার্তার পাতা দেখুন",
        "templatepage": "টেমপ্লেট পাতা দেখুন",
        "redirectpagesub": "পুনর্নির্দেশ পাতা",
        "redirectto": "পুননির্দেশিত হয়েছে:",
        "lastmodifiedat": "এ পাতায় শেষ পরিবর্তন হয়েছিল $2টার সময়, $1 তারিখে।",
-       "viewcount": "এ পাতাটি {{PLURAL:$1|বার|$1 বার}} দেখা হয়েছে।",
+       "viewcount": "এই পাতাটি {{PLURAL:$1|একবার|$1 বার}} দেখা হয়েছে।",
        "protectedpage": "সুরক্ষিত পাতা",
-       "jumpto": "à¦\9dাà¦\81প à¦¦াও:",
+       "jumpto": "সরাসরি à¦¯াও:",
        "jumptonavigation": "পরিভ্রমণ",
        "jumptosearch": "অনুসন্ধান",
        "view-pool-error": "দুঃখিত, সার্ভারে এ মূহুর্তে অতিরিক্ত চাপ রয়েছে।\nঅনেক বেশি সংখ্যক ব্যবহারকারী এই পাতাটি দেখার চেষ্টা করছেন।\nনতুন করে এ পাতাটি দেখার চেষ্টা করার আগে কিছুক্ষণ অপেক্ষা করুন।\n\n$1",
        "generic-pool-error": "দুঃখিত, সার্ভারে এ মূহুর্তে অতিরিক্ত চাপ রয়েছে।\nঅনেক বেশি সংখ্যক ব্যবহারকারী এই পাতাটি দেখার চেষ্টা করছেন।\nনতুন করে এ পাতাটি দেখার চেষ্টা করার আগে কিছুক্ষণ অপেক্ষা করুন।",
-       "pool-timeout": "সময় à¦\89তà§\8dতিরà§\8dণ à¦²à¦\95-à¦\8fর à¦\9cনà§\8dয à¦\85পà§\87à¦\95à§\8dষারত",
+       "pool-timeout": "à¦\85বরà§\8bধà§\87র à¦\9cনà§\8dয à¦\85পà§\87à¦\95à§\8dষা à¦\95রতà§\87 à¦\97িয়à§\87 à¦¸à¦®à¦¯à¦¼ à¦\89তà§\8dতà§\80রà§\8dণ",
        "pool-queuefull": "পুলের লাইন পূর্ণ",
        "pool-errorunknown": "অজানা ত্রুটি",
        "pool-servererror": "পুল কাউন্টার সার্ভিস নিষ্ক্রিয় ($1)।",
        "youhavenewmessagesmulti": "আপনার $1টি নতুন বার্তা এসেছে",
        "editsection": "সম্পাদনা",
        "editold": "সম্পাদনা",
-       "viewsourceold": "à¦\89à§\8eস à¦¦à§\87à¦\96াà¦\93",
+       "viewsourceold": "à¦\89à§\8eস à¦¦à§\87à¦\96à§\81ন",
        "editlink": "সম্পাদনা",
        "viewsourcelink": "উৎস দেখুন",
        "editsectionhint": "অনুচ্ছেদ সম্পাদনা: $1",
        "toc": "পরিচ্ছেদসমূহ",
        "showtoc": "দেখাও",
-       "hidetoc": "à¦\86ড়ালà§\87 à¦°à¦¾à¦\96à§\8b",
+       "hidetoc": "লà§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96à§\81ন",
        "collapsible-collapse": "সংকোচন",
        "collapsible-expand": "প্রসারণ",
        "confirmable-confirm": "{{GENDER:$1|আপনি}} কি নিশ্চিত?",
        "confirmable-yes": "হ্যাঁ",
        "confirmable-no": "না",
-       "thisisdeleted": "$1 à¦¦à§\87à¦\96ানà§\8b à¦¬à¦¾ à¦ªà§\81নà¦\83সà§\83ষà§\8dà¦\9fি à¦\95রা à¦¹à§\8bà¦\95?",
-       "viewdeleted": "$1 à¦¦à§\87à¦\96ানà§\8b à¦¹à§\8bà¦\95?",
+       "thisisdeleted": "$1 à¦¦à§\87à¦\96বà§\87ন à¦¬à¦¾ à¦ªà§\81নরà§\81দà§\8dধার à¦\95রবà§\87ন?",
+       "viewdeleted": "$1 à¦¦à§\87à¦\96বà§\87ন?",
        "restorelink": "{{PLURAL:$1|একটি মুছে ফেলা সম্পাদনা|$1টি মুছে ফেলা সম্পাদনা}}",
        "feedlinks": "ফিড:",
        "feed-invalid": "গ্রাহক ফিডের ধরন অবৈধ।",
        "page-atom-feed": "\"$1\" অ্যাটম ফিড",
        "feed-atom": "অ্যাটম",
        "red-link-title": "$1 (পাতার অস্তিত্ব নেই)",
-       "sort-descending": "à¦\89লà§\8dà¦\9fà§\8b à¦¬à¦°à§\8dণà¦\95à§\8dরমà§\87 à¦¸à¦¾à¦\9cাà¦\93",
-       "sort-ascending": "বরà§\8dণানà§\81à¦\95à§\8dরমà§\87 à¦¸à¦¾à¦\9cাà¦\93",
+       "sort-descending": "à¦\89লà§\8dà¦\9fà§\8b à¦¬à¦°à§\8dণà¦\95à§\8dরমà§\87 à¦¸à¦¾à¦\9cান",
+       "sort-ascending": "বরà§\8dণানà§\81à¦\95à§\8dরমà§\87 à¦¸à¦¾à¦\9cান",
        "nstab-main": "পাতা",
        "nstab-user": "ব্যবহারকারীর পাতা",
        "nstab-media": "মিডিয়া পাতা",
        "nosuchspecialpage": "এমন কোন বিশেষ পাতা নেই",
        "nospecialpagetext": "<strong>আপনি একটি অবৈধ বিশেষ পাতার অনুরোধ করেছেন।</strong>\n\n[[Special:SpecialPages|{{int:specialpages}}]]-এ বৈধ বিশেষ পাতাগুলির একটি তালিকা পাবেন।",
        "error": "ত্রুটি",
-       "databaseerror": "ডাà¦\9fাবà§\87স ত্রুটি",
-       "databaseerror-text": "ডাটাবেজ অনুসন্ধান ত্রুটি।\nএটি সফটওয়্যারের একটি ত্রুটি হতে পারে।",
-       "databaseerror-textcl": "ডাটাবেজ অনুসন্ধান ত্রুটি।",
+       "databaseerror": "ডাà¦\9fাবà§\87à¦\9c ত্রুটি",
+       "databaseerror-text": "ডাটাবেজ অনুসন্ধানে একটি ত্রুটি উৎপন্ন হয়েছে।\nএটি সফটওয়্যারের কোন ত্রুটির কারণে হতে পারে।",
+       "databaseerror-textcl": "ডাটাবেজ অনুসন্ধানে একটি ত্রুটি উৎপন্ন হয়েছে।",
        "databaseerror-query": "অনুসন্ধান: $1",
        "databaseerror-function": "ফাংশন: $1",
        "databaseerror-error": "ত্রুটি: $1",
-       "transaction-duration-limit-exceeded": "দীর্ঘ পুনঃসৃষ্টি বিলম্ব এড়ানোর জন্য এই ট্রানজাকশন বা হস্তান্তরটি বাতিল করা হল, কারণ লিখনের স্থায়ীত্ব ($1) $2 সেকেন্ড সীমাটিকে অতিক্রম করে গিয়েছিল। \nযদি আপনি অনেকগুলি আইটেম একসাথে পরিবর্তন করতে চান, তাহলে একাধিক ক্ষুদ্রতর অপারেশন করার চেষ্টা করুন।",
-       "laggedslavemode": "সতর্কীকরণ: পাতাটি সম্ভবত সম্প্রতি হালনাগাদকৃত নয়।",
-       "readonly": "ডà§\87à¦\9fাবà§\87à¦\9cà§\87র à¦¬à§\8dযবহার à¦¸à§\80মাবদ্ধ",
-       "enterlockreason": "তালাবদà§\8dধ à¦\95রার à¦\95ারণ à¦\95ি à¦¤à¦¾ à¦¬à¦²à§\81ন, à¦¸à¦¾à¦¥à§\87 à¦\95à¦\96ন à¦¤à¦¾à¦²à¦¾ à¦\96à§\81লবà§\87ন à¦¤à¦¾à¦° à¦\86নà§\81মানিà¦\95 à¦¸à¦®à¦¯à¦¼ à¦\89লà§\8dলà¦\96à§\8dয করুন",
-       "readonlytext": "নতà§\81ন à¦­à§\81à¦\95à§\8dতি à¦\8fবà¦\82 à¦\85নà§\8dযানà§\8dয à¦¸à¦®à§\8dপাদনার à¦\9cনà§\8dয à¦¡à¦¾à¦\9fাবà§\87à¦\9c à¦¬à¦°à§\8dতমানà§\87 à¦¬à¦¨à§\8dধ à¦\95রা à¦\86à¦\9bà§\87। à¦¸à¦®à§\8dভবত à¦¡à¦¾à¦\9fাবà§\87à¦\9c à¦°à¦\95à§\8dষণাবà§\87à¦\95à§\8dষণà§\87র à¦¨à¦¿à¦¯à¦¼à¦®à¦¿à¦¤ à¦\95াà¦\9c à¦\9aলà¦\9bà§\87। à¦\95িà¦\9bà§\81à¦\95à§\8dষণ à¦ªà¦°à§\87 à¦\8fà¦\9fি à¦¸à§\8dবাভাবিà¦\95 à¦\85বসà§\8dথায় à¦«à¦¿à¦°à§\87 à¦\86সবà§\87।\n\nসিসà§\8dà¦\9fà§\87ম à¦ªà§\8dরশাসà¦\95 à¦¯à¦¿à¦¨à¦¿ à¦\8fà¦\9fি à¦¬à¦¨à§\8dধ à¦\95রà§\87à¦\9bà§\87ন তিনি এই ব্যাখ্যা দিয়েছেন: $1",
-       "missing-article": "\"$1\" $2 লেখাটি ডাটাবেসের কোন পাতায় খুজে পাওয়া যায়নি।\n\nমুছে ফেলা কোন পাতায় সংযোগ থাকার কারনেই সাধারণত এমনটি ঘটে।\n\nযদি এমনটি না হয়, তাহলে আপনি সফটওয়্যারে কোন ত্রুটি খুজে পেয়েছেন।\nদয়াকরে এ ব্যাপার সম্পর্কে ইউআরএল সহ কোন [[Special:ListUsers/sysop|প্রশাসককে]] জানান।",
+       "transaction-duration-limit-exceeded": "দীর্ঘ পুনঃসৃষ্টি বিলম্ব এড়ানোর জন্য এই ট্রানজাকশনটি বাতিল করা হল, কারণ লিখনের স্থায়িত্ব ($1) $2 সেকেন্ড সীমাটিকে অতিক্রম করে গিয়েছিল। \nযদি আপনি অনেকগুলি আইটেম একসাথে পরিবর্তন করতে চান, তাহলে একাধিক ক্ষুদ্রতর অপারেশন সম্পন্ন করার চেষ্টা করুন।",
+       "laggedslavemode": "<strong>সতর্ক বার্তা:</strong> পাতাটি সম্ভবত সম্প্রতি হালনাগাদ করা হয়নি।",
+       "readonly": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দ্ধ",
+       "enterlockreason": "à¦\85বরà§\81দà§\8dধ à¦\95রার à¦\95ারণ à¦\95à§\80 à¦¤à¦¾ à¦¬à¦²à§\81ন, à¦¸à¦¾à¦¥à§\87 à¦\95à¦\96ন à¦\85বরà§\8bধ à¦\96à§\81লবà§\87ন à¦¤à¦¾à¦° à¦\86নà§\81মানিà¦\95 à¦¸à¦®à¦¯à¦¼ à¦\89লà§\8dলà§\87à¦\96 করুন",
+       "readonlytext": "নতà§\81ন à¦­à§\81à¦\95à§\8dতি à¦\8fবà¦\82 à¦\85নà§\8dযানà§\8dয à¦¸à¦®à§\8dপাদনার à¦\9cনà§\8dয à¦¡à¦¾à¦\9fাবà§\87à¦\9c à¦¬à¦°à§\8dতমানà§\87 à¦\85বরà§\81দà§\8dধ à¦\95রা à¦\86à¦\9bà§\87। à¦¸à¦®à§\8dভবত à¦¡à¦¾à¦\9fাবà§\87à¦\9c à¦°à¦\95à§\8dষণাবà§\87à¦\95à§\8dষণà§\87র à¦¨à¦¿à¦¯à¦¼à¦®à¦¿à¦¤ à¦\95াà¦\9c à¦\9aলà¦\9bà§\87। à¦\95াà¦\9c à¦¶à§\87ষ à¦¹à¦²à§\87 à¦\8fà¦\9fি à¦¸à§\8dবাভাবিà¦\95 à¦\85বসà§\8dথায় à¦«à¦¿à¦°à§\87 à¦\86সবà§\87।\n\nযà§\87 à¦¸à¦¿à¦¸à§\8dà¦\9fà§\87ম à¦ªà§\8dরশাসà¦\95 à¦\8fà¦\9fি à¦\85বরà§\81দà§\8dধ à¦\95রà§\87à¦\9bà§\87ন, তিনি এই ব্যাখ্যা দিয়েছেন: $1",
+       "missing-article": "\"$1\" পাতাটির $2 লেখাটি ডাটাবেজ খুঁজে পায়নি, যদিও খুঁজে পাওয়ার কথা ছিল।\n\nসাধারণত কোন মেয়াদোত্তীর্ণ সংশোধন পার্থক্য অনুসরণ করলে অথবা  \nমুছে ফেলা কোন পাতার ইতিহাসের সংযোগ অনুসরণ করলে এমনটি ঘটে।\n\nযদি এমনটি না হয়, তাহলে আপনি হয়ত সফটওয়্যারে কোন ত্রুটি খুঁজে পেয়েছেন।\n\nঅনুগ্রহ করে ইউআরএল-টি উল্লেখ করে এ ব্যাপারে কোন [[Special:ListUsers/sysop|প্রশাসককে]] অবহিত করুন।",
        "missingarticle-rev": "(সংস্করণ#: $1)",
        "missingarticle-diff": "(পার্থক্য: $1, $2)",
-       "readonly_lag": "ডাà¦\9fাবà§\87à¦\9c à¦¸à§\8dবয়à¦\82à¦\95à§\8dরিয়ভাবà§\87 à¦¬à¦¨্ধ করে দেয়া হয়েছে, যাতে অধীন ডাটাবেজ সার্ভারগুলি প্রধান ডাটাবেজ সার্ভারের অবস্থায় আসতে পারে।",
+       "readonly_lag": "ডাà¦\9fাবà§\87à¦\9c à¦¸à§\8dবয়à¦\82à¦\95à§\8dরিয়ভাবà§\87 à¦\85বরà§\81দ্ধ করে দেয়া হয়েছে, যাতে অধীন ডাটাবেজ সার্ভারগুলি প্রধান ডাটাবেজ সার্ভারের অবস্থায় আসতে পারে।",
        "nonwrite-api-promise-error": "'Promise-Non-Write-API-Action' HTTP শিরলেখে পাঠানো হয়েছিল কিন্তু অনুরোধটি একটি API লিখন মডিউলে ছিল।",
-       "internalerror": "à¦\86ভ্যন্তরীণ ত্রুটি",
-       "internalerror_info": "à¦\86ভ্যন্তরীণ ত্রুটি: $1",
+       "internalerror": "à¦\85ভ্যন্তরীণ ত্রুটি",
+       "internalerror_info": "à¦\85ভ্যন্তরীণ ত্রুটি: $1",
        "internalerror-fatal-exception": "\"$1\" ধরনের মারাত্মক ব্যতিক্রম",
-       "filecopyerror": "\"$1\" à¦¥à§\87à¦\95à§\87 \"$2\" à¦«à¦¾à¦\87ল à¦\85নà§\81লিপি করা যায়নি।",
-       "filerenameerror": "\"$1\" à¦«à¦¾à¦\87লà¦\9fির à¦¨à¦¾à¦® à¦¬à¦¦à¦²à§\87 \"$2\" à¦\95রা à¦¸à¦®à§\8dভব à¦¹à¦\9aà§\8dà¦\9bà§\87 à¦¨à¦¾।",
-       "filedeleteerror": "\"$1\" à¦«à¦¾à¦\87লà¦\9fি à¦®à§\81à¦\9bà§\87 à¦«à§\87লা à¦¸à¦®à§\8dভব à¦¹à¦\9aà§\8dà¦\9bà§\87 à¦¨à¦¾।",
-       "directorycreateerror": "\"$1\" à¦¡à¦¾à¦\87রà§\87à¦\95à§\8dà¦\9fরি তৈরি করা যায়নি।",
-       "directoryreadonlyerror": "নির্দেশিকা \"$1\" শুধুমাত্র পাঠযোগ্য।",
-       "directorynotreadableerror": "নির্দেশিকা \"$1\" পাঠযোগ্য নয়।",
-       "filenotfound": "\"$1\" à¦«à¦¾à¦\87লà¦\9fি à¦\96à§\81à¦\81à¦\9cà§\87 à¦ªà¦¾à¦\93য়া à¦¯à¦¾à¦\9aà§\8dà¦\9bà§\87 à¦¨à¦¾।",
+       "filecopyerror": "\"$1\" à¦¨à¦¾à¦® à¦¥à§\87à¦\95à§\87 \"$2\" à¦¨à¦¾à¦®à§\87 à¦«à¦¾à¦\87ল à¦ªà§\8dরতিলিপি করা যায়নি।",
+       "filerenameerror": "\"$1\" à¦«à¦¾à¦\87লà¦\9fির à¦¨à¦¾à¦® à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রà§\87 \"$2\" à¦\95রা à¦¸à¦®à§\8dভব à¦¹à¦¯à¦¼à¦¨à¦¿।",
+       "filedeleteerror": "\"$1\" à¦«à¦¾à¦\87লà¦\9fি à¦®à§\81à¦\9bà§\87 à¦«à§\87লা à¦¸à¦®à§\8dভব à¦¹à¦¯à¦¼à¦¨à¦¿।",
+       "directorycreateerror": "\"$1\" à¦¨à¦¿à¦°à§\8dদà§\87শিà¦\95া তৈরি করা যায়নি।",
+       "directoryreadonlyerror": "\"$1\" নির্দেশিকাটি শুধুমাত্র পাঠযোগ্য।",
+       "directorynotreadableerror": "\"$1\" নির্দেশিকাটি পাঠযোগ্য নয়।",
+       "filenotfound": "\"$1\" à¦«à¦¾à¦\87লà¦\9fি à¦\96à§\81à¦\81à¦\9cà§\87 à¦ªà¦¾à¦\93য়া à¦¯à¦¾à¦¯à¦¼à¦¨à¦¿।",
        "unexpected": "অপ্রত্যাশিত মান: \"$1\"=\"$2\"।",
-       "formerror": "তà§\8dরà§\81à¦\9fি: à¦«à¦°à¦®à¦\9fি à¦\9cমা à¦¦à§\87à¦\93য়া à¦¯à¦¾à¦¯à¦¼à¦¨à¦¿",
+       "formerror": "তà§\8dরà§\81à¦\9fি: à¦«à¦°à¦®à¦\9fি à¦\9cমা à¦¦à§\87à¦\93য়া à¦¸à¦®à§\8dভব à¦¹à¦¯à¦¼à¦¨à¦¿à¥¤",
        "badarticleerror": "এই পাতায় এই কাজটি করা সম্ভব নয়।",
-       "cannotdelete": "\"$1\" à¦ªà¦¾à¦¤à¦¾ à¦¬à¦¾ à¦«à¦¾à¦\87লà¦\9fি à¦®à§\8bà¦\9bা à¦¸à¦®à§\8dভব à¦¨à¦¾।\nসম্ভবত অন্য কেউ আগেই এটিকে মুছে ফেলেছেন।",
-       "cannotdelete-title": "\"$1\" à¦ªà§\83ষà§\8dঠা à¦®à§\81à¦\9bà§\87 à¦«à§\87লা à¦¯à¦¾à¦\9aà§\8dà¦\9bà§\87 à¦¨à¦¾à¥¤",
-       "delete-hook-aborted": "হà§\82à¦\95 à¦¦à§\8dবারা à¦¸à¦®à§\8dপাদনা à¦ªà¦°à¦¿à¦¤à§\8dযà¦\95à§\8dত à¦¹à¦¯à¦¼à§\87à¦\9bà§\87।\nà¦\8fর à¦\95à§\8bন à¦¬à§\8dযাà¦\96à§\8dযা à¦¨à¦¾à¦\87।",
+       "cannotdelete": "\"$1\" à¦ªà¦¾à¦¤à¦¾ à¦¬à¦¾ à¦«à¦¾à¦\87লà¦\9fি à¦®à§\8bà¦\9bা à¦¸à¦®à§\8dভব à¦¹à¦¯à¦¼à¦¨à¦¿।\nসম্ভবত অন্য কেউ আগেই এটিকে মুছে ফেলেছেন।",
+       "cannotdelete-title": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦®à§\81à¦\9bà§\87 à¦«à§\87লা à¦¯à¦¾à¦\9aà§\8dà¦\9bà§\87 à¦¨à¦¾",
+       "delete-hook-aborted": "হà§\81à¦\95à§\87র à¦\95ারণà§\87 à¦ªà¦¾à¦¤à¦¾ à¦®à§\8bà¦\9bার à¦\95াà¦\9cà¦\9fি à¦ªà¦°à¦¿à¦¤à§\8dযà¦\95à§\8dত à¦¹à¦¯à¦¼à§\87à¦\9bà§\87।\nà¦\95à§\8bন à¦¬à§\8dযাà¦\96à§\8dযা à¦¦à§\87য়া à¦¹à¦¯à¦¼à¦¨à¦¿।",
        "no-null-revision": "\"$1\" পাতার জন্য ফাঁকা সংস্করণ তৈরী করা যায়নি",
-       "badtitle": "শিরà§\8bনামà¦\9fি à¦\97à§\8dরহনযà§\8bà¦\97à§\8dয à¦¨à¦¯à¦¼à¥¤",
+       "badtitle": "ভà§\81ল à¦¶à¦¿à¦°à§\8bনাম",
        "badtitletext": "অনুরোধকৃত পাতার শিরোনামটি অবৈধ, খালি কিংবা কোন ভুল আন্তঃভাষা বা আন্তঃউইকি শিরোনাম সংযোগ ছিল। এটিতে সম্ভবত এমন এক (একাধিক) ক্যারেক্টার আছে, যা (যেগুলি) শিরোনামে ব্যবহারযোগ্য নয়।",
        "title-invalid-empty": "অনুরোধকৃত পাতার শিরোনামটি খালি বা শুধুমাত্র একটি নামস্থানের নাম ধারণ করে।",
        "title-invalid-utf8": "অনুরোধকৃত পাতার শিরোনামটিতে একটি অবৈধ ইউটিএফ-৮ অনুক্রম রয়েছে।",
        "title-invalid-interwiki": "অনুরোধকৃত পাতার শিরোনামে একটি আন্তঃউইকি সংযোগ উপস্থিত রয়েছে যা শিরোনামে ব্যবহার করা যাবে না।",
-       "title-invalid-talk-namespace": "অনুরোধকৃত পাতার শিরোনাম একটি আলাপ পাতা নির্দেশ করে যার অস্তিত্ব থাকতে পারে না।",
+       "title-invalid-talk-namespace": "à¦\85নà§\81রà§\8bধà¦\95à§\83ত à¦ªà¦¾à¦¤à¦¾à¦° à¦¶à¦¿à¦°à§\8bনাম à¦\8fমন à¦\8fà¦\95à¦\9fি à¦\86লাপ à¦ªà¦¾à¦¤à¦¾ à¦¨à¦¿à¦°à§\8dদà§\87শ à¦\95রà§\87 à¦¯à¦¾à¦° à¦\85সà§\8dতিতà§\8dব à¦¥à¦¾à¦\95তà§\87 à¦ªà¦¾à¦°à§\87 à¦¨à¦¾à¥¤",
        "title-invalid-characters": "অনুরোধকৃত পাতার শিরোনামে অবৈধ অক্ষর রয়েছে: \"$1\"।",
        "title-invalid-relative": "শিরনামে রিলেটিভ পাথ ব্যবহার করা হয়েছে (./, ../), রিলেটিভ পাথ ব্যবহার উপযোগী নয়, কারণ ব্যবহারকারীর ব্রাউজারে এটি সঠিকভাবে কাজ করে না।",
        "title-invalid-magic-tilde": "অনুরোধকৃত পাতার শিরোনামে অবৈধ জাদু টিল্ডা অনুক্রম (<nowiki>~~~</nowiki>) রয়েছে।",
-       "title-invalid-too-long": "পাতার à¦¶à¦¿à¦°à§\8bনামà¦\9fি à¦\85তà§\8dযাধিà¦\95 à¦¦à§\80রà§\8dà¦\98। à¦\87à¦\89à¦\9fিà¦\8fফ-৮ à¦\8fনà¦\95à§\8bডিà¦\82 à¦\85নà§\81যায়à§\80 à¦\8fà¦\9fি $1 {{PLURAL:$1|বাà¦\87à¦\9fà§\87র}} à¦¥à§\87à¦\95à§\87 à¦¦à§\80রà§\8dà¦\98 হতে পারবে না।",
-       "title-invalid-leading-colon": "à¦\85নà§\81রà§\8bধà¦\95à§\83ত à¦ªà¦¾à¦¤à¦¾à¦° à¦¶à¦¿à¦°à§\8bনামà§\87র à¦¶à§\81রà§\81তà§\87 à¦\8fà¦\95à¦\9fি à¦\85বà§\88ধ à¦\95à§\8bলন রয়েছে।",
+       "title-invalid-too-long": "à¦\85নà§\81রà§\8bধà¦\95à§\83ত à¦ªà¦¾à¦¤à¦¾à¦° à¦¶à¦¿à¦°à§\8bনামà¦\9fি à¦\85তà§\8dযধিà¦\95 à¦¦à§\80রà§\8dà¦\98। à¦\87à¦\89à¦\9fিà¦\8fফ-৮ à¦¸à¦¾à¦\82à¦\95à§\87তিà¦\95à§\80à¦\95রণ à¦\85নà§\81যায়à§\80 à¦\8fà¦\9fি $1 {{PLURAL:$1|বাà¦\87à¦\9fà§\87র}} à¦¥à§\87à¦\95à§\87 à¦¦à§\80রà§\8dà¦\98তর হতে পারবে না।",
+       "title-invalid-leading-colon": "à¦\85নà§\81রà§\8bধà¦\95à§\83ত à¦ªà¦¾à¦¤à¦¾à¦° à¦¶à¦¿à¦°à§\8bনামà¦\9fির à¦¶à§\81রà§\81তà§\87 à¦\8fà¦\95à¦\9fি à¦\85বà§\88ধ à¦\95à§\8bলন à¦\9aিহà§\8dন (:) রয়েছে।",
        "perfcached": "নিচের উপাত্তগুলো ক্যাশ থেকে নেয়া এবং সম্পূর্ণ হালনাগাদকৃত না-ও হতে পারে। সর্বোচ্চ {{PLURAL:$1|একটি ফলাফল|$1 টি ফলাফল}} ক্যাশে থাকতে পারে।",
-       "perfcachedts": "নিচের উপাত্তগুলো ক্যাশ থেকে নেয়া এবং $1 তারিখে হালনাগাদ করা হয়েছে। সর্বোচ্চ {{PLURAL:$4|একটি ফলাফল|$4 টি ফলাফল}} ক্যাশে থাকতে পারে।",
-       "querypage-no-updates": "এই পাতার জন্য হালনাগাদ নিষ্ক্রিয় করা হয়েছে। এখানে রাখা উপাত্ত এ মুহূর্তে রিফ্রেশ করা হবে না।",
+       "perfcachedts": "নিচের উপাত্তগুলো ক্যাশ থেকে নেয়া এবং সর্বশেষ $1 তারিখে হালনাগাদ করা হয়েছে। সর্বোচ্চ {{PLURAL:$4|একটি ফলাফল|$4টি ফলাফল}} ক্যাশে থাকতে পারে।",
+       "querypage-no-updates": "এই পাতার জন্য হালনাগাদ নিষ্ক্রিয় করা হয়েছে। এখানে রাখা উপাত্তগুলি এ মুহূর্তে হালনাগাদ করা হবে না।",
        "viewsource": "উৎস দেখুন",
-       "viewsource-title": "$1 এর উৎস দেখুন",
+       "viewsource-title": "$1-এর উৎস দেখুন",
        "actionthrottled": "কাজের গতি ধীরকরণ",
-       "actionthrottledtext": "সà§\8dপà§\8dযাম-রà§\8bধà§\80 à¦¸à¦®à¦¾à¦§à¦¾à¦¨ à¦¹à¦¿à¦¸à§\87বà§\87 à¦\8fà¦\87 à¦\95াà¦\9cà¦\9fি à¦\96à§\81ব à¦\95ম à¦¸à¦®à¦¯à¦¼à§\87 à¦\85নà§\87à¦\95 à¦¬à§\87শিবার à¦¸à¦®à§\8dপাদনা à¦\95রার সীমা বেঁধে দেওয়া হয়েছে, এবং আপনি সেই সীমা অতিক্রম করেছেন।\nঅনুগ্রহ করে কয়েক মিনিট পরে আবার চেষ্টা করুন।",
-       "protectedpagetext": "সমà§\8dপাদনা à¦\85থবা à¦¸à§\8dথানানà§\8dতর à¦\8fড়াতà§\87 à¦\8f à¦ªà¦¾à¦¤à¦¾à¦\9fির à¦¬à§\8dযবহার à¦¨à¦¿à¦¯à¦¼à¦¨à§\8dতà§\8dরণ à¦\95রা হয়েছে।",
-       "viewsourcetext": "à¦\8f à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\86পনি à¦¦à§\87à¦\96তà§\87 à¦\8fবà¦\82 à¦\89à§\8eসà§\87র à¦\85নà§\81লিপি à¦¨à¦¿তে পারবেন।",
-       "viewyourtext": "আপনি এই পাতায় <strong>আপনার সম্পাদনা</strong>দেখতে এবং অনুলিপি করতে পারেন।",
-       "protectedinterface": "এই পাতার বিষয়বস্তু এই উইকি সফটওয়্যারের একটি ইন্টারফেস বার্তা প্রদান করে, তাই এটিকে সুরক্ষিত করে রাখা হয়েছে।\nসকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে, অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করন প্রকল্প [https://translatewiki.net/ translatewiki.net] ব্যবহার করুন।",
-       "editinginterface": "<strong>সতর্কীকরণ:</strong> আপনি এমন একটি পাতা সম্পাদনা করছেন যা সফটওয়্যারের জন্য ইন্টারফেস টেক্সট প্রদান করে।\nএই পাতাতে সংঘটিত পরিবর্তন এই উইকির ব্যবহারকারীদের ইন্টারফেসে প্রভাব ফেলবে, যা অন্য ব্যবহারকারীরা দেখতে পাবেন।",
-       "translateinterface": "সকল উইকির জন্য অনুবাদ যোগ বা পরিবর্তন করতে, দয়া করে [https://translatewiki.net/ translatewiki.net], মিডিয়াউইকি স্থানীয়করণ প্রকল্প ব্যবহার করুন।",
-       "cascadeprotected": "এই পাতাটি সম্পাদনা থেকে সুরক্ষিত কারণ এটি নিম্নোক্ত {{PLURAL:$1|পাতায়|পাতাসমূহে}} অন্তর্ভুক্ত, যা \"প্রপাতাকার\" বৈশিষ্ট্য সহযোগে সুরক্ষিত করা আছে:\n$2",
-       "namespaceprotected": "'''$1''' নামস্থানে কোন পাতা আপনার সম্পাদনা করার অনুমতি নেই।",
+       "actionthrottledtext": "à¦\85পবà§\8dযবহার à¦ªà§\8dরতিরà§\8bধà¦\95 à¦¸à¦®à¦¾à¦§à¦¾à¦¨ à¦¹à¦¿à¦¸à§\87বà§\87 à¦\8fà¦\87 à¦\95াà¦\9cà¦\9fি à¦\96à§\81ব à¦\95ম à¦¸à¦®à¦¯à¦¼à§\87 à¦\85নà§\87à¦\95 à¦¬à§\87শিবার à¦¸à¦®à§\8dপাদন à¦\95রার à¦\89পর সীমা বেঁধে দেওয়া হয়েছে, এবং আপনি সেই সীমা অতিক্রম করেছেন।\nঅনুগ্রহ করে কয়েক মিনিট পরে আবার চেষ্টা করুন।",
+       "protectedpagetext": "সমà§\8dপাদনা à¦\85থবা à¦\85নà§\8dযানà§\8dয à¦\95াà¦\9cà§\87 à¦¬à¦¾à¦§à¦¾ à¦¦à¦¿à¦¤à§\87 à¦ªà¦¾à¦¤à¦¾à¦\9fিà¦\95à§\87 à¦¸à§\81রà¦\95à§\8dষিত হয়েছে।",
+       "viewsourcetext": "à¦\8f à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\86পনি à¦¦à§\87à¦\96তà§\87 à¦\8fবà¦\82 à¦\89à§\8eসà§\87র à¦ªà§\8dরতিলিপি à¦\95রতে পারবেন।",
+       "viewyourtext": "আপনি এই পাতায় করা <strong>আপনার সম্পাদনাগুলি</strong> দেখতে এবং প্রতিলিপি করতে পারেন।",
+       "protectedinterface": "এই পাতার বিষয়বস্তু এই উইকি সফটওয়্যারের একটি ইন্টারফেস বার্তা প্রদান করে, তাই এটি যাতে অপব্যবহারে না করা হয়, সেজন্য এটিকে সুরক্ষিত করে রাখা হয়েছে।\nসকল উইকির অনুবাদে কোনো ধরনের সংযোজন বা পরিবর্তন করতে অনুগ্রহ করে মিডিয়াউইকি স্থানীয়করণ প্রকল্প [https://translatewiki.net/ translatewiki.net] ব্যবহার করুন।",
+       "editinginterface": "<strong>সতর্ক বার্তা:</strong> আপনি এমন একটি পাতা সম্পাদনা করছেন যা সফটওয়্যারের জন্য ইন্টারফেস লেখা সরবরাহ করে।\nএই পাতাতে সংঘটিত পরিবর্তন এই উইকির অন্যান্য ব্যবহারকারীদের জন্য দৃশ্যমান ইন্টারফেসে প্রভাব ফেলবে।",
+       "translateinterface": "সকল উইকির জন্য অনুবাদ যোগ বা পরিবর্তন করতে দয়া করে [https://translatewiki.net/ translatewiki.net], মিডিয়াউইকি স্থানীয়করণ প্রকল্প ব্যবহার করুন।",
+       "cascadeprotected": "এই পাতাটিকে সম্পাদনা থেকে সুরক্ষিত করা হয়েছে, কারণ এটি নিম্নোক্ত {{PLURAL:$1|পাতায়|পাতাগুলিতে}} অন্তর্ভুক্ত, যেগুলি \"প্রপাতাকার\" বৈশিষ্ট্য সহযোগে সুরক্ষিত করা আছে:\n$2",
+       "namespaceprotected": "<strong>$1</strong> নামস্থানের কোন পাতা আপনার সম্পাদনা করার অনুমতি নেই।",
        "customcssprotected": "আপনার এই সিএসএস পাতাটি সম্পাদনা করার অনুমতি নেই, কারণ এ পাতায় অন্য ব্যবহারকারীর নিজস্ব সেটিংস রয়েছে।",
        "customjsprotected": "আপনার এই জাভাস্ক্রিপ্ট পাতাটি সম্পাদনা করার অনুমতি নেই, কারণ এ পাতায় অন্য ব্যবহারকারীর নিজস্ব সেটিংস রয়েছে।",
        "mycustomcssprotected": "আপনার এই সিএসএস পাতাটি সম্পাদনা করার অনুমতি নেই।",
        "mypreferencesprotected": "আপনার পছন্দসমূহ সম্পাদনা করতে আপনার অনুমতি নেই",
        "ns-specialprotected": "বিশেষ পাতাসমূহ সম্পাদনা করা যাবে না।",
        "titleprotected": "[[User:$1|$1]] কর্তৃক এই শিরোনামটি সৃষ্টি করা থেকে সুরক্ষিত করা হয়েছে। কারণ: <em>$2</em>।",
-       "filereadonlyerror": "\"$1\" à¦«à¦¾à¦\87লà¦\9fিà¦\95à§\87 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রা à¦¸à¦®à§\8dভব à¦¹à¦\9aà§\8dà¦\9bà§\87 à¦¨à¦¾ à¦\95ারণ \"$2\" à¦«à¦¾à¦\87ল à¦¸à¦\82à¦\97à§\8dরহসà§\8dথল à¦¶à§\81ধà§\81মাতà§\8dর-পঠন à¦®à§\8bডà§\87 à¦\86à¦\9bà§\87।\n\nসিসà§\8dà¦\9fà§\87ম à¦ªà§\8dরশাসà¦\95 à¦¯à¦¿à¦¨à¦¿ à¦\8fà¦\9fি à¦¬à¦¨্ধ করেছেন তিনি এই ব্যাখ্যা দিয়েছেন: \"$3\"।",
+       "filereadonlyerror": "\"$1\" à¦«à¦¾à¦\87লà¦\9fিà¦\95à§\87 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রা à¦¸à¦®à§\8dভব à¦¹à¦\9aà§\8dà¦\9bà§\87 à¦¨à¦¾ à¦\95ারণ \"$2\" à¦«à¦¾à¦\87ল à¦¸à¦\82à¦\97à§\8dরহশালাà¦\9fি à¦¶à§\81ধà§\81মাতà§\8dর-পঠন à¦®à§\8bডà§\87 à¦\86à¦\9bà§\87।\n\nসিসà§\8dà¦\9fà§\87ম à¦ªà§\8dরশাসà¦\95 à¦¯à¦¿à¦¨à¦¿ à¦«à¦¾à¦\87লà¦\9fি à¦\85বরà§\81দ্ধ করেছেন তিনি এই ব্যাখ্যা দিয়েছেন: \"$3\"।",
        "invalidtitle-knownnamespace": "অবৈধ শিরোনাম, যেখানে নামস্থান \"$2\" এবং লেখা হয়েছে \"$3\"",
        "invalidtitle-unknownnamespace": "অবৈধ শিরোনাম, যেখানে ব্যবহৃত হয়েছে অপরিচিত নামস্থান সংখ্যা $1 এবং লেখা হয়েছে \"$2\"",
        "exception-nologin": "প্রবেশ করেন নি",
        "exception-nologin-text": "এই কাজ করা বা পাতাটি দেখার জন্য অনুগ্রহ করে প্রবেশ করুন।",
        "exception-nologin-text-manual": "অনুগ্রহ করে এই পাতা দেখতে অথবা পরিবর্তন করতে $1 করুন।",
-       "virus-badscanner": "ভুল কনফিগারেশন: অজ্ঞাত ভাইরাস স্কেনার: ''$1''",
+       "virus-badscanner": "ভুল কনফিগারেশন: অজ্ঞাত ভাইরাস স্কেনার: <em>$1</em>",
        "virus-scanfailed": "স্ক্যান করা যাচ্ছে না (কোড $1)",
        "virus-unknownscanner": "অজানা এন্টিভাইরাস:",
        "logouttext": "'''আপনি এখন আপনার অ্যাকাউন্ট থেকে প্রস্থান করেছেন।'''\n\nনোট করুন যে কিছু পাতায় আপনাকে এখনও প্রবেশ অবস্থায় দেখাবে, যতক্ষণ না আপনি ব্রাউজার ক্যাশ পরিষ্কার করছেন।",
        "cannotloginnow-title": "এখন প্রবেশ করা যাবে না",
        "cannotloginnow-text": "$1 ব্যবহার করার সময় প্রবেশ করা সম্ভব নয়।",
        "cannotcreateaccount-title": "অ্যাকাউন্ট তৈরি করা যাবে না",
-       "cannotcreateaccount-text": "সরাসরি à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¸à§\83ষà§\8dà¦\9fিà¦\95রণ à¦\8fà¦\87 à¦\89à¦\87à¦\95িতà§\87 à¦¸à¦\95à§\8dরিয় নয়।",
+       "cannotcreateaccount-text": "সরাসরি à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¤à§\88রিà¦\95রণ à¦\8fà¦\87 à¦\89à¦\87à¦\95িতà§\87 à¦¸à¦®à§\8dভব নয়।",
        "yourdomainname": "আপনার ডোমেইন:",
        "password-change-forbidden": "আপনি এই উইকিতে পাসওয়ার্ড পরিবর্তন করতে পারবেন না।",
        "externaldberror": "হয় কোন বহিঃস্থ যাচাইকরণ ডাটাবেজ ত্রুটি ঘটেছে অথবা আপনার বহিঃস্থ অ্যাকাউন্ট হালনাগাদ করার অনুমতি নেই।",
        "usernameinprogress": "এই ব্যবহারকারী নামের জন্য একটি অ্যাকাউন্ট তৈরি আগে থেকেই চলছে। দয়া করে অপেক্ষা করুন।",
        "userexists": "এই ব্যবহারকারী নামটি ইতমধ্যে ব্যবহার করা হয়েছে।\nঅনুগ্রহ করে অন্য নাম বেছে নিন।",
        "loginerror": "প্রবেশ করতে সমস্যা হয়েছে",
-       "createacct-error": "অ্যাকাউন্ট তৈরি ত্রুটি",
+       "createacct-error": "অ্যাকাউন্ট তৈরিতে ত্রুটি",
        "createaccounterror": "অ্যাকাউন্ট তৈরি হয়নি: $1",
        "nocookiesnew": "ব্যবহারকারীর অ্যাকাউন্টটি সৃষ্টি করা হয়েছে, কিন্তু আপনি এখনও অ্যাকাউন্টে প্রবেশ করেননি। {{SITENAME}}-তে কুকি ব্যবহার করে ব্যবহারকারীদের অ্যাকাউন্টে প্রবেশ করানো হয়। আপনার ব্রাউজারে কুকিগুলি নিষ্ক্রিয় করা আছে। অনুগ্রহ করে কুকিগুলি সক্রিয় করুন এবং আপনার নতুন ব্যবহারকারী নাম ও পাসওয়ার্ড ব্যবহার করে অ্যাকাউন্টে প্রবেশ করুন।",
        "nocookieslogin": "ব্যবহারকারীদের প্রবেশ সম্পন্ন করতে {{SITENAME}} কুকি ব্যবহার করে। আপনার ব্রাউজারে কুকি নিষ্ক্রিয় করা আছে। কুকি চালু করে আবার চেষ্টা করুন।",
        "emaildisabled": "এই সাইটটিতে ই-মেইল প্রদানের সুবিধা নেই।",
        "accountcreated": "অ্যাকাউন্ট তৈরি করা হয়েছে",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|আলাপ]]) এর জন্য ব্যবহারকারী অ্যাকাউন্ট তৈরি করা হয়েছে।",
-       "createaccount-title": "{{SITENAME}}-à¦\8fর à¦\9cনà§\8dয à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¸à§\83ষà§\8dà¦\9fি",
-       "createaccount-text": "à¦\95à§\87à¦\89 $2-à¦\8fর à¦\9cনà§\8dয {{SITENAME}}-à¦\8f à¦\8fà¦\95à¦\9fি à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¸à§\83ষà§\8dà¦\9fি à¦\95রà§\87à¦\9bà§\87ন ($4)। \"$2\"-à¦\8fর à¦\9cনà§\8dয à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¹à¦² \"$3\"। à¦\86পনার à¦\8fà¦\96ন à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শ à¦\95রà§\87 à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রা à¦\89à¦\9aিত।\n\nযদি à¦­à§\81ল à¦\95রà§\87 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\9fি à¦¸à§\83ষà§\8dà¦\9fি হয়ে থাকে, তাহলে এই বার্তাটি উপেক্ষা করুন।",
+       "createaccount-title": "{{SITENAME}}-à¦\8fর à¦\9cনà§\8dয à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¤à§\88রিà¦\95রণ",
+       "createaccount-text": "à¦\95à§\87à¦\89 $2-à¦\8fর à¦\9cনà§\8dয {{SITENAME}}-à¦\8f à¦\8fà¦\95à¦\9fি à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¤à§\88রি à¦\95রà§\87à¦\9bà§\87ন ($4)। \"$2\"-à¦\8fর à¦\9cনà§\8dয à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¹à¦² \"$3\"। à¦\86পনার à¦\8fà¦\96ন à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শ à¦\95রà§\87 à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রা à¦\89à¦\9aিত।\n\nযদি à¦­à§\81ল à¦\95রà§\87 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\9fি à¦¤à§\88রি হয়ে থাকে, তাহলে এই বার্তাটি উপেক্ষা করুন।",
        "login-throttled": "আপনি সাম্প্রতিক সময়ে পরপর বেশ কয়েকবার প্রবেশের চেষ্টা করেছেন।\nপুনরায় চেষ্টা করার পূর্বে অনুগ্রহ করে $1 অপেক্ষা করুন।",
        "login-abort-generic": "আপনার প্রবেশ ব্যর্থ হয়েছে - বাতিল করা হয়েছে",
        "login-migrated-generic": "আপনার অ্যাকাউন্ট স্থানান্তরিত করা হয়েছে, এবং আপনার ব্যবহারকারী নাম আর এই উইকিতে বিদ্যমান নয়।",
        "loginlanguagelabel": "ভাষা: $1",
-       "suspicious-userlogout": "à¦\86পনার à¦ªà§\8dরসà§\8dথানà§\87র à¦\85নà§\81রà§\8bধ à¦¬à¦¾à¦¤à¦¿à¦² à¦¹à¦¯à¦¼à§\87à¦\9bà§\87 à¦\95ারণ à¦\85নà§\81মিত à¦¯à§\87 à¦\86পনার à¦¬à§\8dরাà¦\89à¦\9cার à¦\85সমà§\8dপà§\82রà§\8dণ à¦\85থবা à¦ªà§\82বরà§\8dবতà§\80 à¦¤à¦¥à§\8dয প্রেরণ করেছে।",
+       "suspicious-userlogout": "à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¥à§\87à¦\95à§\87 à¦\86পনার à¦ªà§\8dরসà§\8dথানà§\87র à¦\85নà§\81রà§\8bধ à¦ªà§\8dরতà§\8dযাà¦\96ান à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87 à¦\95ারণ à¦®à¦¨à§\87 à¦¹à¦\9aà§\8dà¦\9bà§\87 à¦¯à§\87 à¦\85নà§\81রà§\8bধà¦\9fি à¦\8fà¦\95à¦\9fি à¦\85à¦\95ারà§\8dযà¦\95র à¦¬à§\8dরাà¦\89à¦\9cার à¦\85থবা à¦\95à§\8dযাশ à¦\95রà§\87 à¦\8fমন à¦ªà§\8dরà¦\95à§\8dসি à¦¸à¦¾à¦°à§\8dভার প্রেরণ করেছে।",
        "createacct-another-realname-tip": "আসল নাম ঐচ্ছিক।\nআপনি যদি তা দিতে চান, তাহলে তা ব্যবহারকারীকে তাদের কাজের জন্য স্বীকৃতিদানে ব্যবহার করা হবে।",
        "pt-login": "প্রবেশ",
        "pt-login-button": "প্রবেশ",
        "oldpassword": "পুরনো পাসওয়ার্ড:",
        "newpassword": "নতুন পাসওয়ার্ড:",
        "retypenew": "নতুন পাসওয়ার্ড আবার লিখুন:",
-       "resetpass_submit": "পাসà¦\93য়ারà§\8dড à¦¦à¦¾à¦\93 à¦\8fবà¦\82 à¦²à¦\97-à¦\87ন à¦\95রà§\8b",
+       "resetpass_submit": "পাসà¦\93য়ারà§\8dড à¦¨à¦¿à¦°à§\8dধারণ à¦\95রà§\87 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শ à¦\95রà§\81ন",
        "changepassword-success": "আপনার পাসওয়ার্ড পরিবর্তন করা হয়েছে!",
-       "changepassword-throttled": "আপনি সম্প্রতি পরপর বেশ কয়েকবার প্রবেশের চেষ্টা করেছেন। পুনরায় চেষ্টা করার পূর্বে অনুগ্রহ করে $1 অপেক্ষা করুন।",
+       "changepassword-throttled": "à¦\86পনি à¦¸à¦®à§\8dপà§\8dরতি à¦ªà¦°à¦ªà¦° à¦¬à§\87শ à¦\95য়à§\87à¦\95বার à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শà§\87র à¦\9aà§\87ষà§\8dà¦\9fা à¦\95রà§\87à¦\9bà§\87ন। à¦ªà§\81নরায় à¦\9aà§\87ষà§\8dà¦\9fা à¦\95রার à¦ªà§\82রà§\8dবà§\87 à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 $1 à¦\85পà§\87à¦\95à§\8dষা à¦\95রà§\81ন।",
        "botpasswords": "বট পাসওয়ার্ড",
-       "botpasswords-summary": "<em>বà¦\9f à¦ªà¦¾à¦¸à¦\93য়ারà§\8dডà¦\97à§\81লি</em> à¦\8fপিà¦\86à¦\87-à¦\8fর à¦®à¦¾à¦§à§\8dযমà§\87 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87র à¦²à¦\97-à¦\87নà§\87র à¦\9cনà§\8dয à¦¦à¦°à¦\95ারà§\80 à¦®à§\82ল à¦ªà¦°à¦¿à¦\9aয়সà§\82à¦\9aà¦\95 à¦¤à¦¥à§\8dয à¦\9bাড়াà¦\87 à¦¬à§\8dযবহারà¦\95ারà§\80র à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শাধিà¦\95ার à¦ªà§\8dরদান à¦\95রà§\87। à¦¬à¦\9f à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¦à¦¿à¦¯à¦¼à§\87 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শ à¦¬à¦¾ à¦²à¦\97-à¦\87ন করলে ব্যবহারকারীর জন্য লভ্য অধিকারগুলি সীমিত হতে পারে।  \n\nএ কাজটি কেন করবেন, তা যদি অবগত না থাকেন, তাহলে সম্ভবত আপনার কাজটি করা উচিত নয়। অন্য কোনও ব্যক্তির কথায় কখনো এধরনের কিছু সৃষ্টি করবেন না এবং তাকে বা তাদেরকে এটি দেবেন না।",
-       "botpasswords-disabled": "বট পাসওয়ার্ড নিষ্ক্রিয় করা।",
-       "botpasswords-no-central-id": "বট পাসওয়ার্ড ব্যবহার করার জন্য, আপনাকে একটি কেন্দ্রীভূত অ্যাকাউন্টে প্রবেশ করতে হবে।",
-       "botpasswords-existing": "বিদà§\8dযমান à¦¬à¦\9f à¦¶à¦¬à§\8dদà¦\9aাবি",
+       "botpasswords-summary": "<em>বà¦\9f à¦ªà¦¾à¦¸à¦\93য়ারà§\8dডà¦\97à§\81লি</em> à¦\8fপিà¦\86à¦\87-à¦\8fর à¦®à¦¾à¦§à§\8dযমà§\87 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87র à¦ªà§\8dরবà§\87শà§\87র à¦\9cনà§\8dয à¦¦à¦°à¦\95ারà§\80 à¦®à§\82ল à¦ªà¦°à¦¿à¦\9aয়সà§\82à¦\9aà¦\95 à¦¤à¦¥à§\8dয à¦\9bাড়াà¦\87 à¦¬à§\8dযবহারà¦\95ারà§\80র à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শাধিà¦\95ার à¦ªà§\8dরদান à¦\95রà§\87। à¦¬à¦\9f à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¦à¦¿à¦¯à¦¼à§\87 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শ করলে ব্যবহারকারীর জন্য লভ্য অধিকারগুলি সীমিত হতে পারে।  \n\nএ কাজটি কেন করবেন, তা যদি অবগত না থাকেন, তাহলে সম্ভবত আপনার কাজটি করা উচিত নয়। অন্য কোনও ব্যক্তির কথায় কখনো এধরনের কিছু সৃষ্টি করবেন না এবং তাকে বা তাদেরকে এটি দেবেন না।",
+       "botpasswords-disabled": "বট পাসওয়ার্ডগুলি নিষ্ক্রিয় রয়েছে।",
+       "botpasswords-no-central-id": "বট পাসওয়ার্ড ব্যবহার করার জন্য আপনাকে একটি কেন্দ্রীভূত অ্যাকাউন্টে প্রবেশ করতে হবে।",
+       "botpasswords-existing": "বিদà§\8dযমান à¦¬à¦\9f à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড",
        "botpasswords-createnew": "একটি নতুন বট পাসওয়ার্ড তৈরি করুন",
        "botpasswords-editexisting": "একটি বিদ্যমান বট পাসওয়ার্ড পরিবর্তন করুন",
        "botpasswords-label-appid": "বটের নাম:",
-       "botpasswords-label-create": "তৈরি করো",
-       "botpasswords-label-update": "হালনাগাদ",
-       "botpasswords-label-cancel": "বাতিল",
-       "botpasswords-label-delete": "অপসারণ",
-       "botpasswords-label-resetpassword": "পাসওয়ার্ড পুনঃস্থাপন",
-       "botpasswords-label-grants": "প্রয়োগযোগ্য মঞ্জুরি:",
+       "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\" à¦¨à¦¾à¦®à§\87র à¦¬à¦\9f à¦¯à§\81à¦\95à§\8dত à¦\95রা à¦¯à¦¾à¦¯à¦¼à¦¨à¦¿à¥¤ à¦\86à¦\97à§\87 à¦¥à§\87à¦\95à§\87à¦\87 তালিকায় রয়েছে?",
-       "botpasswords-update-failed": "\"$1\" নামের বট যুক্ত করা যায়নি। আগে অপসারণ করা হয়েছিল?",
+       "botpasswords-insert-failed": "\"$1\" à¦¨à¦¾à¦®à§\87র à¦¬à¦\9f à¦¯à§\81à¦\95à§\8dত à¦\95রা à¦¯à¦¾à¦¯à¦¼à¦¨à¦¿à¥¤ à¦\8fà¦\9fি à¦\95ি à¦\86à¦\97à§\87 à¦¥à§\87à¦\95à§\87à¦\87 à¦¬à¦\9fà§\87র তালিকায় রয়েছে?",
+       "botpasswords-update-failed": "\"$1\" à¦¨à¦¾à¦®à§\87র à¦¬à¦\9f à¦¯à§\81à¦\95à§\8dত à¦\95রা à¦¯à¦¾à¦¯à¦¼à¦¨à¦¿à¥¤ à¦\8fà¦\9fি à¦\95ি à¦\86à¦\97à§\87 à¦\85পসারণ à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bিল?",
        "botpasswords-created-title": "বট পাসওয়ার্ড তৈরী করা হয়েছে",
        "botpasswords-created-body": "ব্যবহারকারী \"$2\"-এর \"$1\" নামের বটের জন্য বট পাসওয়ার্ড তৈরী করা হয়েছে।",
-       "botpasswords-updated-title": "বà¦\9f à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦\86পডà§\87à¦\9f করা হয়েছে",
+       "botpasswords-updated-title": "বà¦\9f à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¹à¦¾à¦²à¦¨à¦¾à¦\97াদ করা হয়েছে",
        "botpasswords-updated-body": "ব্যবহারকারী \"$2\"-এর \"$1\" নামের বটের জন্য বট পাসওয়ার্ড হালনাগাদ করা হয়েছে।",
-       "botpasswords-deleted-title": "বà¦\9f à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦\85পসারণ à¦\95রা হয়েছে",
+       "botpasswords-deleted-title": "বà¦\9f à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦®à§\81à¦\9bà§\87 à¦«à§\87লা হয়েছে",
        "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-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\" নামক বট পাসওয়ার্ডটি নেই।",
        "resetpass_forbidden": "পাসওয়ার্ড পরিবর্তন করা সম্ভব নয়",
        "resetpass_forbidden-reason": "পাসওয়ার্ড পরিবর্তন করা যাবে না: $1",
-       "resetpass-no-info": "এই পাতাটিতে সরাসরি প্রবেশাধিকার পেতে আপনাকে অবশ্যই প্রবেশ করতে হবে।",
-       "resetpass-submit-loggedin": "পাসওয়ার্ড পরিবর্তন",
+       "resetpass-no-info": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fিতà§\87 à¦¸à¦°à¦¾à¦¸à¦°à¦¿ à¦ªà§\8dরবà§\87শাধিà¦\95ার à¦ªà§\87তà§\87 à¦\86পনাà¦\95à§\87 à¦\85বশà§\8dযà¦\87 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শ à¦\95রতà§\87 à¦¹à¦¬à§\87।",
+       "resetpass-submit-loggedin": "পাসওয়ার্ড পরিবর্তন করুন",
        "resetpass-submit-cancel": "বাতিল",
        "resetpass-wrong-oldpass": "ভুল অস্থায়ী অথবা বর্তমান পাসওয়ার্ড।\nসম্ভবতঃ আপনি ইতোমধ্যেই আপনার পাসওয়ার্ডটি পরিবর্তন করেছেন অথবা একটি নতুন অস্থায়ী পাসওয়ার্ডের জন্য অনুরোধ করেছেন।",
-       "resetpass-recycled": "à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦¬à¦°à§\8dতমানà§\87 à¦¬à§\8dযবহার à¦\95রà¦\9bà§\87ন à¦\8fমন পাসওয়ার্ডের পরিবর্তে নতুন একটি পাসওয়ার্ড নির্ধারণ করুন।",
-       "resetpass-temp-emailed": "আপনি ইমেইলকৃত সাময়িক কোড দিয়ে প্রবেশ করেছেন।\nপ্রবেশ করার জন্য আপনাকে অবশ্যই একটি নতুন পাসওয়ার্ড নির্ধারণ করতে হবে:",
+       "resetpass-recycled": "à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦¬à¦¿à¦¦à§\8dযমান পাসওয়ার্ডের পরিবর্তে নতুন একটি পাসওয়ার্ড নির্ধারণ করুন।",
+       "resetpass-temp-emailed": "আপনি ইমেইলকৃত সাময়িক কোড দিয়ে প্রবেশ করেছেন। অ্যাকাউন্টে\nপ্রবেশ সম্পন্ন করার জন্য আপনাকে অবশ্যই একটি নতুন পাসওয়ার্ড নির্ধারণ করতে হবে:",
        "resetpass-temp-password": "অস্থায়ী পাসওয়ার্ড:",
        "resetpass-abort-generic": "পাসওয়ার্ড পরিবর্তন একটি এক্সটেনশনের কারণে স্থগিত করা হয়েছে।",
-       "resetpass-expired": "আপনার পাসওয়ার্ডের মেয়াদ উত্তীর্ণ হয়েছে। অনুগ্রহ করে নতুন পাসওয়ার্ড নির্ধারণ করুন।",
+       "resetpass-expired": "à¦\86পনার à¦ªà¦¾à¦¸à¦\93য়ারà§\8dডà§\87র à¦®à§\87য়াদ à¦\89তà§\8dতà§\80রà§\8dণ à¦¹à¦¯à¦¼à§\87à¦\9bà§\87। à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শà§\87র à¦\9cনà§\8dয à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦¨à¦¤à§\81ন à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦¨à¦¿à¦°à§\8dধারণ à¦\95রà§\81ন।",
        "resetpass-expired-soft": "আপনার পাসওয়ার্ডের মেয়াদ উত্তীর্ণ হয়েছে এবং আপনাকে একটি নতুন পাসওয়ার্ড নির্ধারণ করতে হবে। অনুগ্রহ করে এখনই একটি নতুন পাসওয়ার্ড নির্ধারণ করুন অথবা পরে পরিবর্তন করতে চাইলে \"{{int:authprovider-resetpass-skip-label}}\" বাটনে ক্লিক করুন।",
        "resetpass-validity-soft": "আপনার পাসওয়ার্ড বৈধ নয়: $1\n\nদয়া করে একটি নতুন পাসওয়ার্ড নির্ধারণ করুন অথবা পরে করার জন্য \"{{int:authprovider-resetpass-skip-label}}\" ক্লিক করুন।",
        "passwordreset": "পাসওয়ার্ড রিসেট",
        "passwordreset-nosuchcaller": "আহ্বানকারীর অস্তিত্ব নেই: $1",
        "passwordreset-ignored": "পাসওয়ার্ড পুনঃধার্যকরণ করা যায়নি। হয়তো কোন প্রদানকারী কনফিগার করা হয়েনি?",
        "passwordreset-invalidemail": "ভুল ইমেইল ঠিকানা",
-       "passwordreset-nodata": "à¦\8fà¦\95à¦\9fি à¦¬à§\8dযবহারà¦\95ারà§\80র à¦¨à¦¾à¦® à¦¬à¦¾ à¦\8fà¦\95à¦\9fি à¦\87মà§\87ল à¦ à¦¿à¦\95ানা à¦¦à§\81à¦\9fির à¦\8fà¦\95à¦\9fিà¦\93 à¦¸à¦°à¦¬à¦°à¦¾ à¦¦à§\87য়া হয়নি",
+       "passwordreset-nodata": "বà§\8dযবহারà¦\95ারà§\80র à¦¨à¦¾à¦® à¦¬à¦¾ à¦\87মà§\87ল à¦ à¦¿à¦\95ানা à¦¦à§\81à¦\9fির à¦\8fà¦\95à¦\9fিà¦\93 à¦¸à¦°à¦¬à¦°à¦¾à¦¹ à¦\95রা হয়নি",
        "changeemail": "ই-মেইল ঠিকানা পরিবর্তন বা বাতিল",
-       "changeemail-header": "à¦\86পনার à¦\87মà§\87ল à¦ à¦¿à¦\95ানা à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রতà§\87 à¦\8fà¦\87 à¦«à¦°à¦®à¦\9fি à¦ªà§\82রণ à¦\95রà§\81ন। à¦\86পনি à¦¯à¦¦à¦¿ à¦\86পনার à¦\8fà¦\95াà¦\89নà§\8dà¦\9f à¦¥à§\87à¦\95à§\87 à¦¯à§\87 à¦\95à§\8bন à¦\87মà§\87ল à¦ à¦¿à¦\95ানার à¦\8fসà§\8bসিয়à§\87শন à¦\85পসারণ à¦\95রতà§\87 চান, তাহলে ফরমটি জমা দেওয়ার সময় নতুন ইমেইল ঠিকানা খালি রাখুন।",
-       "changeemail-no-info": "এই পাতাটিতে সরাসরি প্রবেশাধিকার পেতে আপনাকে অবশ্যই প্রবেশ করতে হবে।",
-       "changeemail-oldemail": "বর্তমান ই-মেইল ঠিকানা:",
-       "changeemail-newemail": "নতুন ই-মেইল ঠিকানা:",
-       "changeemail-newemail-help": "à¦\86পনার à¦\87মà§\87à¦\87ল à¦ à¦¿à¦\95ানা à¦\85পসরণ à¦\95রতà§\87 à¦\9aাà¦\87লà§\87 à¦\8fà¦\87 à¦\9cায়à¦\97াà¦\9fি à¦«à¦¾à¦\81à¦\95া à¦\9bà§\87ড়à§\87 à¦¦à§\87à¦\93য়া à¦\89à¦\9aিত। à¦\87মà§\87à¦\87ল à¦ à¦¿à¦\95ানা à¦\85পসরণ à¦\95রলà§\87 à¦\86পনি à¦­à§\81লà§\87 à¦¯à¦¾à¦\93য়া à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦ªà§\81নà¦\83ধারà§\8dয করতে পারবেন না এবং এই উইকি থেকে আপনাকে কোন ইমেইল পাঠানো হবে না।",
-       "changeemail-none": "(à¦\95িà¦\9bà§\81 à¦¨à¦¾ই)",
+       "changeemail-header": "à¦\86পনার à¦\87মà§\87ল à¦ à¦¿à¦\95ানা à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রতà§\87 à¦\8fà¦\87 à¦«à¦°à¦®à¦\9fি à¦ªà§\82রণ à¦\95রà§\81ন। à¦\86পনি à¦¯à¦¦à¦¿ à¦\86পনার à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87র à¦¸à¦¾à¦¥à§\87 à¦\95à§\8bনà¦\93 à¦\87মà§\87à¦\87ল à¦ à¦¿à¦\95ানার à¦¸à¦\82শà§\8dলিষà§\8dà¦\9fতা à¦°à¦¾à¦\96তà§\87 à¦¨à¦¾ চান, তাহলে ফরমটি জমা দেওয়ার সময় নতুন ইমেইল ঠিকানা খালি রাখুন।",
+       "changeemail-no-info": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fিতà§\87 à¦¸à¦°à¦¾à¦¸à¦°à¦¿ à¦ªà§\8dরবà§\87শাধিà¦\95ার à¦ªà§\87তà§\87 à¦\86পনাà¦\95à§\87 à¦\85বশà§\8dযà¦\87 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শ à¦\95রতà§\87 à¦¹à¦¬à§\87।",
+       "changeemail-oldemail": "বর্তমান ইমেইল ঠিকানা:",
+       "changeemail-newemail": "নতুন ইমেইল ঠিকানা:",
+       "changeemail-newemail-help": "à¦\86পনার à¦\87মà§\87à¦\87ল à¦ à¦¿à¦\95ানা à¦\85পসারণ à¦\95রতà§\87 à¦\9aাà¦\87লà§\87 à¦\8fà¦\87 à¦\9cায়à¦\97াà¦\9fি à¦«à¦¾à¦\81à¦\95া à¦°à§\87à¦\96à§\87 à¦¦à§\87à¦\93য়া à¦\89à¦\9aিত। à¦\87মà§\87à¦\87ল à¦ à¦¿à¦\95ানা à¦\85পসারণ à¦\95রলà§\87 à¦\86পনি à¦­à§\81লà§\87 à¦¯à¦¾à¦\93য়া à¦ªà¦¾à¦¸à¦\93য়ারà§\8dড à¦ªà§\81নà¦\83নিরà§\8dধারণ করতে পারবেন না এবং এই উইকি থেকে আপনাকে কোন ইমেইল পাঠানো হবে না।",
+       "changeemail-none": "(নà§\87ই)",
        "changeemail-password": "আপনার {{SITENAME}} পাসওয়ার্ড:",
-       "changeemail-submit": "ই-মেইল পরিবর্তন",
-       "changeemail-throttled": "আপনি পরপর বেশ কয়েকবার প্রবেশের চেষ্টা করেছেন। পুনরায় চেষ্টা করার পূর্বে অনুগ্রহ করে $1 অপেক্ষা করুন।",
-       "changeemail-nochange": "দয়া à¦\95রà§\87 à¦\8fà¦\95à¦\9fি à¦­à¦¿à¦¨à§\8dন à¦¨à¦¤à§\81ন à¦\87মà§\87à¦\87ল à¦ à¦¿à¦\95ানা à¦²à¦¿à¦\96à§\81ন।",
-       "resettokens": "টোকেন পুনঃস্থাপন করুন",
-       "resettokens-text": "à¦\86পনি à¦\9fà§\8bà¦\95à§\87ন à¦ªà§\81নà¦\83সà§\8dথাপন à¦\95রতà§\87 à¦ªà¦¾à¦°à§\87ন, à¦¯à¦¾ à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87র à¦¸à¦¾à¦¥à§\87 à¦¸à¦®à§\8dপরà§\8dà¦\95িত à¦\86পনার à¦¬à§\8dযà¦\95à§\8dতিà¦\97ত à¦¤à¦¥à§\8dয à¦¦à§\87à¦\96ার à¦\95াà¦\9cà§\87 à¦¬à§\8dযবহার à¦\95রা à¦¹à¦¯à¦¼।",
-       "resettokens-no-tokens": "পà§\81নà¦\83সà§\8dথাপন করার মত কোনো টোকেন নেই।",
+       "changeemail-submit": "ইমেইল ঠিকানা পরিবর্তন",
+       "changeemail-throttled": "à¦\86পনি à¦ªà¦°à¦ªà¦° à¦¬à§\87শ à¦\95য়à§\87à¦\95বার à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শà§\87র à¦\9aà§\87ষà§\8dà¦\9fা à¦\95রà§\87à¦\9bà§\87ন। à¦ªà§\81নরায় à¦\9aà§\87ষà§\8dà¦\9fা à¦\95রার à¦ªà§\82রà§\8dবà§\87 à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 $1 à¦\85পà§\87à¦\95à§\8dষা à¦\95রà§\81ন।",
+       "changeemail-nochange": "দয়া à¦\95রà§\87 à¦\8fà¦\95à¦\9fি à¦­à¦¿à¦¨à§\8dন à¦\93 à¦¨à¦¤à§\81ন à¦\87মà§\87à¦\87ল à¦ à¦¿à¦\95ানা à¦ªà§\8dরবà§\87শ à¦\95রান।",
+       "resettokens": "টোকেনগুলি পুনঃনির্ধারণ করুন",
+       "resettokens-text": "যà§\87 à¦\9fà§\8bà¦\95à§\87নà¦\97à§\81লি à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87র à¦¸à¦¾à¦¥à§\87 à¦¸à¦®à§\8dপরà§\8dà¦\95িত à¦\86পনার à¦¨à¦¿à¦°à§\8dদিষà§\8dà¦\9f à¦\95িà¦\9bà§\81 à¦¬à§\8dযà¦\95à§\8dতিà¦\97ত à¦¤à¦¥à§\8dয à¦¦à§\87à¦\96ার à¦\95াà¦\9cà§\87 à¦¬à§\8dযবহার à¦\95রা à¦¹à¦¯à¦¼, à¦¸à§\87à¦\97à§\81লি à¦\86পনি à¦ªà§\81নà¦\83নিরà§\8dধারণ à¦\95রতà§\87 à¦ªà¦¾à¦°à§\87ন।\n\nযদি à¦¦à§\81রà§\8dà¦\98à¦\9fনাà¦\95à§\8dরমà§\87 à¦\9fà§\8bà¦\95à§\87নà¦\97à§\81লি à¦\95াà¦\89à¦\95à§\87 à¦¦à¦¿à¦¯à¦¼à§\87 à¦¥à¦¾à¦\95à§\87ন à¦\85থবা à¦\86পনার à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¯à¦¦à¦¿ à¦¬à¦¹à¦¿à¦\83à¦\86à¦\95à§\8dরমণà§\87র à¦¶à¦¿à¦\95ার à¦¹à¦¯à¦¼, à¦¤à¦¾à¦¹à¦²à§\87 à¦\86পনার à¦\8f à¦\95াà¦\9cà¦\9fি à¦\95রা à¦\89à¦\9aিত।",
+       "resettokens-no-tokens": "পà§\81নà¦\83নিরà§\8dধারণ করার মত কোনো টোকেন নেই।",
        "resettokens-tokens": "টোকেন:",
        "resettokens-token-label": "$1 (বর্তমান: $2)",
-       "resettokens-watchlist-token": "ওয়েব ফিড (Atom/RSS) টোকেন পরিবর্তনের জন্য [[Special:Watchlist|নজরতালিকায় থাকা পাতাগুলোতে পরিবর্তন এসেছে]]",
-       "resettokens-done": "টোকেন পুনঃস্থাপন।",
-       "resettokens-resetbutton": "নির্বাচিত টোকেন পুনঃস্থাপন করুন",
+       "resettokens-watchlist-token": "[[Special:Watchlist|নজরতালিকায় থাকা পাতাগুলোতে পরিবর্তন]] সংক্রান্ত ওয়েব ফিডের (Atom বা RSS) টোকেন",
+       "resettokens-done": "টোকেনগুলি সফলভাবে পুনঃনির্ধারিত হয়েছে।",
+       "resettokens-resetbutton": "নির্বাচিত টোকেনগুলি পুনঃনির্ধারণ করুন",
        "bold_sample": "গাঢ় লেখা",
        "bold_tip": "গাঢ় লেখা",
-       "italic_sample": "তà§\80র্যক লেখা",
-       "italic_tip": "তà§\80র্যক লেখা",
-       "link_sample": "সংযোগের শিরোনাম",
-       "link_tip": "à¦\86ভ্যন্তরীণ সংযোগ",
-       "extlink_sample": "http://www.example.com সংযোগ শিরোনাম",
-       "extlink_tip": "বহিঃসংযোগ (মনে রাখবেন http:// উপসর্গ)",
+       "italic_sample": "তির্যক লেখা",
+       "italic_tip": "তির্যক লেখা",
+       "link_sample": "à¦\85ভà§\8dযনà§\8dতরà§\80ণ à¦¸à¦\82যà§\8bà¦\97à§\87র à¦¶à¦¿à¦°à§\8bনাম",
+       "link_tip": "à¦\85ভ্যন্তরীণ সংযোগ",
+       "extlink_sample": "http://www.example.com à¦¬à¦¹à¦¿à¦\83সà¦\82যà§\8bà¦\97 à¦¶à¦¿à¦°à§\8bনাম",
+       "extlink_tip": "বহিঃসংযোগ (http:// উপসর্গটি যোগ করতে ভুলবেন না)",
        "headline_sample": "শিরোনাম",
        "headline_tip": "২য় স্তরের শিরোনাম",
-       "nowiki_sample": "অ-ফরম্যাটকৃত টেক্সট এখানে যোগ করুন",
-       "nowiki_tip": "à¦\89à¦\87à¦\95ি à¦«à¦°à¦®à§\8dযাà¦\9fিà¦\82 উপেক্ষা করা হোক",
+       "nowiki_sample": "অবিন্যাসকৃত পাঠ্য এখানে যোগ করুন",
+       "nowiki_tip": "à¦\89à¦\87à¦\95ি à¦¬à¦¿à¦¨à§\8dযাসন উপেক্ষা করা হোক",
        "image_sample": "উদাহরণ.jpg",
        "image_tip": "গ্রথিত ফাইল",
        "media_tip": "ফাইল সংযোগ",
        "preview": "প্রাকদর্শন",
        "showpreview": "প্রাকদর্শন",
        "showdiff": "পরিবর্তনসমূহ",
-       "blankarticle": "<strong>সতরà§\8dà¦\95 à¦¬à¦¾à¦°à§\8dতা:</strong> à¦\86পনি à¦\8fà¦\95à¦\9fি à¦\96ালি à¦ªà¦¾à¦¤à¦¾ à¦¤à§\88রà§\80 à¦\95রতà§\87 à¦¯à¦¾à¦\9aà§\8dà¦\9bà§\87ন।\nà¦\86পনি à¦¯à¦¦à¦¿ à¦ªà§\81নরায় \"{{int:savearticle}}\" à¦¬à¦¾à¦\9fন à¦\95à§\8dলিà¦\95 à¦\95রà§\87ন à¦¤à¦¾à¦¹à¦²à§\87, à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦¤à§\88রà§\80 à¦¹à¦¬à§\87 à¦¯à§\87à¦\96ানà§\87 à¦\95à§\8bনà§\8b à¦¤à¦¥à§\8dয à¦²à§\87à¦\96া à¦¨à§\87à¦\87।",
-       "anoneditwarning": "<strong>সতর্কতা:</strong> আপনি বর্তমানে প্রবেশ করেননি। যদি আপনি সম্পাদনা করেন এই পাতার সম্পাদনার ইতিহাসে আপনার আইপি ঠিকানা সার্বজনীনভাবে সংরক্ষিত হবে। যদি আপনি  <strong>[$1 প্রবেশ করেন]</strong> বা  <strong>[$2 একটি অ্যাকাউন্ট তৈরি করেন]</strong>, তাহলে আপনি আপনার আইপি ঠিকানা গোপন রাখতে পারবেন ও অন্যান্য অনেক কিছু সুবিধা পাবেন।",
-       "anonpreviewwarning": "<em>à¦\86পনি à¦ªà§\8dরবà§\87শ à¦\95রà§\87ননি। à¦¸à¦®à§\8dপাদনা করলে এই পাতার সম্পাদনার ইতিহাসে আপনার আইপি ঠিকানা সংরক্ষিত হবে।</em>",
-       "missingsummary": "'''à¦\96à§\87য়াল à¦\95রà§\81ন''':  à¦\86পনি à¦\95িনà§\8dতà§\81 à¦¸à¦®à§\8dপাদনার à¦¸à¦¾à¦°à¦¾à¦\82শ à¦¦à§\87ননি। à¦\86বার à¦¯à¦¦à¦¿ \"সà¦\82রà¦\95à§\8dষণ\" বোতামে ক্লিক করেন, তাহলে ঐ সারাংশ বাক্যটি ছাড়াই আপনার সম্পাদনা সংরক্ষিত হবে।",
+       "blankarticle": "<strong>সতরà§\8dà¦\95 à¦¬à¦¾à¦°à§\8dতা:</strong> à¦\86পনি à¦\8fà¦\95à¦\9fি à¦\96ালি à¦ªà¦¾à¦¤à¦¾ à¦¤à§\88রà§\80 à¦\95রতà§\87 à¦¯à¦¾à¦\9aà§\8dà¦\9bà§\87ন।\nà¦\86পনি à¦¯à¦¦à¦¿ à¦ªà§\81নরায় \"{{int:savearticle}}\" à¦¬à§\8bতামà¦\9fি à¦\95à§\8dলিà¦\95 à¦\95রà§\87ন à¦¤à¦¾à¦¹à¦²à§\87 à¦\95à§\8bন à¦ªà¦¾à¦ à§\8dয à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à¦¸à§\8dতà§\81 à¦\9bাড়াà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦¤à§\88রà§\80 à¦¹à¦¬à§\87।",
+       "anoneditwarning": "<strong>সতর্ক বার্তা:</strong> আপনি বর্তমানে আপনার অ্যাকাউন্টে প্রবেশ করেননি। যদি এ অবস্থায় আপনি সম্পাদনা সংরক্ষণ করেন তাহলে এই পাতার সম্পাদনার ইতিহাসে আপনার আইপি ঠিকানা জনসমক্ষে দৃশ্যমান হবে। যদি আপনি  <strong>[$1 অ্যাকাউন্টে প্রবেশ করেন]</strong> বা  <strong>[$2 একটি অ্যাকাউন্ট তৈরি করেন]</strong>, তাহলে আপনি আপনার আইপি ঠিকানা গোপন রাখতে পারবেন ও অন্যান্য বেশ কিছু সুবিধা পাবেন।",
+       "anonpreviewwarning": "<em>à¦\86পনি à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শ à¦\95রà§\87ননি। à¦¸à¦®à§\8dপাদনা à¦¸à¦\82রà¦\95à§\8dষণ করলে এই পাতার সম্পাদনার ইতিহাসে আপনার আইপি ঠিকানা সংরক্ষিত হবে।</em>",
+       "missingsummary": "'''à¦\96à§\87য়াল à¦\95রà§\81ন''':  à¦\86পনি à¦\86পনার à¦¸à¦®à§\8dপাদনার à¦\95à§\8bনà¦\93 à¦¸à¦¾à¦°à¦¾à¦\82শ à¦¦à§\87ননি। à¦\86বার à¦¯à¦¦à¦¿ \"{{int:savearticle}}\" বোতামে ক্লিক করেন, তাহলে ঐ সারাংশ বাক্যটি ছাড়াই আপনার সম্পাদনা সংরক্ষিত হবে।",
        "selfredirect": "<strong>সতর্কতা:</strong> আপনি এই পাতাকে এর নিজের দিকে পুনঃনির্দেশিত করছেন।\nআপনাকে পুনঃনির্দেশিত করার জন্য হয় ভুল লক্ষ্য নির্দিষ্ট করেছেন, অথবা আপনি ভুল পাতা সম্পাদনা করছেন।\nআপনি যদি আবার \"{{int:savearticle}}\" ক্লিক করেন, পুনর্নির্দেশ যেকোনোভাবেই হোক তৈরি করা হবে।",
        "missingcommenttext": "দয়া করে নিচে মন্তব্য যোগ করুন।",
-       "missingcommentheader": "<strong>খেয়াল করুন:</strong> আপনি এই মন্তব্যের জন্য কোন বিষয় প্রদান করেননি।আপনি যদি আবার \"{{int:savearticle}}\" বোতামে ক্লিক করেন, আপনার এই সম্পাদনা কোন বিষয় ছাড়াই সংরক্ষিত হবে।",
+       "missingcommentheader": "<strong>খেয়াল করুন:</strong> আপনি এই মন্তব্যের জন্য কোনও বিষয় প্রদান করেননি। আপনি যদি আবার \"{{int:savearticle}}\" বোতামে ক্লিক করেন, আপনার এই সম্পাদনা কোন বিষয় ছাড়াই সংরক্ষিত হবে।",
        "summary-preview": "সম্পাদনা সারাংশের প্রাকদর্শন:",
        "subject-preview": "বিষয়ের প্রাকদর্শন:",
        "previewerrortext": "আপনার পরিবর্তনগুলি প্রাকদর্শন করার চেষ্টা করার সময় একটি ত্রুটি ঘটেছে।",
        "blockedtitle": "ব্যবহারকারীকে বাধা দেয়া হয়েছে",
-       "blockedtext": "আপনার ব্যবহারকারী নাম বা আইপি ঠিকানার ঊপর নিষেধাজ্ঞা আরোপিত হয়েছে।\n\n$1 নিষেধাজ্ঞা আরোপ করেছেন। নিষেধের কারণ হিসেবে বলা হয়েছে:''$2''।\n\n* নিষেধাজ্ঞা শুরুর সময়:$8\n* নিষেধাজ্ঞা উঠিয়ে নেয়ার সময়: $6\n* যার উপর নিষেধাজ্ঞা আরোপ করা হয়েছে: $7\n\nআপনি $1 অথবা [[{{MediaWiki:Grouppage-sysop}}|প্রশাসকদের]] কারও সাথে এই নিষেধাজ্ঞা সংক্রান্ত বিষয়ে আলোচনা করতে পারেন।\n\nআপনি '(ব্যবহারকারীকে) ইমেইল করুন' ফিচারটি ব্যবহার করতে পারবেন না। তবে [[Special:Preferences|আপনার পছন্দ তালিকাতে]] যদি একটি বৈধ ই-মেইল ঠিকানা নির্দিষ্ট করা হয়ে থাকে এবং ফিচারটি ব্যবহারে যদি আপনাকে বাধা না দেওয়া হয়ে থাকে, তবে আপনি ফিচারটি ব্যবহার করতে পারবেন।\n\nআপনার বর্তমান আইপি ঠিকানা $3, এবং আপনার নিষেধাজ্ঞা নং হল #$5।\n\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
-       "autoblockedtext": "à¦\86পনার à¦\86à¦\87পি à¦ à¦¿à¦\95ানাà¦\95à§\87 à¦¸à§\8dবয়à¦\82à¦\95à§\8dরিয়ভাবà§\87 à¦¬à¦¾à¦§à¦¾ à¦¦à§\87য়া à¦¹à¦¯à¦¼à§\87à¦\9bà§\87 à¦\95ারণ à¦\8fà¦\9fি à¦\86রà§\87à¦\95à¦\9cন à¦¬à§\8dযবহারà¦\95ারà§\80 à¦¦à§\8dবারা à¦¬à§\8dযবহà§\83ত à¦¹à¦¯à¦¼à§\87à¦\9bà§\87, à¦¯à¦¾à¦\95à§\87 $1 à¦¬à¦¾à¦§à¦¾ à¦¦à¦¿à¦¯à¦¼à§\87à¦\9bà§\87ন।\nযà§\87 à¦\95ারণà§\87 à¦¬à¦¾à¦§à¦¾ à¦¦à§\87য়া à¦¹à¦¯à¦¼à§\87à¦\9bà§\87:\n\n:''$2''\n\n* à¦¬à¦¾à¦§à¦¾ à¦¶à§\81রà§\81র à¦¸à¦®à¦¯à¦¼: $8\n* à¦¬à¦¾à¦§à¦¾ à¦¶à§\87ষà§\87র à¦¸à¦®à¦¯à¦¼: $6\n* à¦¯à¦¾à¦\95à§\87 à¦¬à¦¾à¦§à¦¾ à¦¦à§\87à¦\93য়ার à¦\9aà§\87ষà§\8dà¦\9fা à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87: $7\n\nà¦\86পনি $1-à¦\8fর à¦¸à¦¾à¦¥à§\87 à¦\95িà¦\82বা à¦\85নà§\8dয à¦¯à§\87à¦\95à§\8bন [[{{MediaWiki:Grouppage-sysop}}|পà§\8dরশাসà¦\95à§\87র]] à¦¸à¦¾à¦¥à§\87 à¦¯à§\8bà¦\97াযà§\8bà¦\97 à¦\95রà§\87 à¦¬à¦¾à¦§à¦¾à¦° à¦¬à§\8dযাপারà¦\9fি à¦\86লà§\8bà¦\9aনা à¦\95রতà§\87 à¦ªà¦¾à¦°à§\87ন।\n\nলà¦\95à§\8dষà§\8dয à¦\95রà§\81ন, à¦¯à¦¦à¦¿ à¦\86পনি \"à¦\8fà¦\87 à¦¬à§\8dযবহারà¦\95ারà§\80à¦\95à§\87 à¦\87-মà§\87à¦\87ল à¦\95রà§\81ন\" à¦¬à§\88শিষà§\8dà¦\9fà§\8dযà¦\9fি à¦¬à§\8dযবহার à¦\95রতà§\87 à¦\9aান, à¦¤à¦¬à§\87 à¦\86পনার [[Special:Preferences|পà¦\9bনà§\8dদ]] à¦\85পশনà§\87 à¦\8fà¦\95à¦\9fি à¦¬à§\88ধ à¦\87মà§\87à¦\87ল à¦ à¦¿à¦\95ানা à¦¨à¦¿à¦¬à¦¨à§\8dধিত à¦¥à¦¾à¦\95তà§\87 à¦¹à¦¬à§\87 à¦\8fবà¦\82 à¦\86পনার à¦¸à§\87à¦\9fি à¦¬à§\8dযবহারà§\87 à¦\95à§\8bন à¦¬à¦¾à¦§à¦¾ à¦¥à¦¾à¦\95তà§\87 à¦ªà¦¾à¦°à¦¬à§\87 à¦¨à¦¾à¥¤\n\nà¦\86পনার à¦¬à¦°à§\8dতমান à¦\86à¦\87পি à¦ à¦¿à¦\95ানা à¦¹à¦\9aà§\8dà¦\9bà§\87 $3, à¦\8fবà¦\82 à¦¬à¦¾à¦§à¦¾ à¦¦à¦¾à¦¨à§\87র à¦\86à¦\87ডি à¦¹à¦² #$5।\nযà§\87à¦\95à§\8bন à¦ªà§\8dরশà§\8dন à¦\95রার à¦¸à¦®à¦¯à¦¼ à¦\89পরà§\87র à¦¸à¦\95ল à¦¤à¦¥à§\8dয à¦\89লà§\8dলà§\87à¦\96 করুন।",
-       "systemblockedtext": "আপনার ব্যবহারকারী নাম অথবা আইপি ঠিকানাটিকে স্বয়ংক্রিয়ভাবে মিডিয়াউইকি দ্বারা বাধাদান করা হয়েছে। যে কারণটি দেওয়া হয়েছে, সেটি হল:\n\n:<em>$2</em>\n\n* বাধাদান শুরুর সময়: $8\n* বাধাদানের সমাপ্তি: $6\n* যাকে বাধাদান করা হয়েছে: $7\n\nআপনার বর্তমান আইপি ঠিকানাটি হল $3।\nজানার জন্যে কোন প্রশ্ন করার সময় অনুগ্রহ করে উপরের সমস্ত  বিস্তারিত তথ্য অন্তর্ভুক্ত করুন।",
+       "blockedtext": "<strong>আপনার ব্যবহারকারী নাম বা আইপি ঠিকানাটিকে সম্পাদনায় বাধাদান করা হয়েছে।</strong>\n\n$1 এই বাধাটি প্রদান করেছেন। বাধার কারণ হিসেবে বলা হয়েছে:<em>$2</em>।\n\n* বাধা শুরুর সময়:$8\n* বাধা উঠিয়ে নেয়ার সময়: $6\n* যাকে বাধাদান করা হয়েছে: $7\n\nআপনি $1 অথবা [[{{MediaWiki:Grouppage-sysop}}|প্রশাসকদের]] কারও সাথে এই বাধা সংক্রান্ত বিষয়ে আলোচনা করতে পারেন।\n\nআপনি \"(ব্যবহারকারীকে) ইমেইল করুন\" সুবিধাটি ব্যবহার করতে পারবেন না। তবে [[Special:Preferences|আপনার পছন্দ তালিকাতে]] যদি একটি বৈধ ইমেইল ঠিকানা নির্দিষ্ট করা হয়ে থাকে এবং সুবিধাটি ব্যবহারে যদি আপনাকে বাধা না দেওয়া হয়ে থাকে, তবে আপনি সুবিধাটি ব্যবহার করতে পারবেন।\n\nআপনার বর্তমান আইপি ঠিকানা হল $3, এবং আপনার বাধা নং হল #$5।\n\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
+       "autoblockedtext": "à¦\86পনার à¦\86à¦\87পি à¦ à¦¿à¦\95ানাà¦\9fিà¦\95à§\87 à¦¸à§\8dবয়à¦\82à¦\95à§\8dরিয়ভাবà§\87 à¦¸à¦®à§\8dপাদনায় à¦¬à¦¾à¦§à¦¾à¦¦à¦¾à¦¨ à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87 à¦\95ারণ à¦\8fমন à¦\86রà§\87à¦\95à¦\9cন à¦¬à§\8dযবহারà¦\95ারà§\80 à¦\8fà¦\9fি à¦¬à§\8dযবহার à¦\95রà§\87à¦\9bà§\87ন, à¦¯à¦¾à¦\95à§\87 $1 à¦¬à¦¾à¦§à¦¾ à¦¦à¦¿à¦¯à¦¼à§\87à¦\9bà§\87ন।\nযà§\87 à¦\95ারণà§\87 à¦¬à¦¾à¦§à¦¾ à¦¦à§\87à¦\93য়া à¦¹à¦¯à¦¼à§\87à¦\9bà§\87 à¦¸à§\87à¦\9fি à¦¹à¦²:\n\n:<em>$2</em>\n\n* à¦¬à¦¾à¦§à¦¾ à¦¶à§\81রà§\81র à¦¸à¦®à¦¯à¦¼: $8\n* à¦¬à¦¾à¦§à¦¾ à¦¶à§\87ষà§\87র à¦¸à¦®à¦¯à¦¼: $6\n* à¦¯à¦¾à¦\95à§\87 à¦¬à¦¾à¦§à¦¾à¦¦à¦¾à¦¨ à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87: $7\n\nà¦\86পনি $1-à¦\8fর à¦¸à¦¾à¦¥à§\87 à¦\95িà¦\82বা à¦\85নà§\8dয à¦¯à§\87à¦\95à§\8bন [[{{MediaWiki:Grouppage-sysop}}|পà§\8dরশাসà¦\95à§\87র]] à¦¸à¦¾à¦¥à§\87 à¦¯à§\8bà¦\97াযà§\8bà¦\97 à¦\95রà§\87 à¦\8fà¦\87 à¦¬à¦¾à¦§à¦¾ à¦¸à¦\82à¦\95à§\8dরানà§\8dত à¦¬à¦¿à¦·à¦¯à¦¼à§\87 à¦\86লà§\8bà¦\9aনা à¦\95রতà§\87 à¦ªà¦¾à¦°à§\87ন।\n\nলà¦\95à§\8dষà§\8dয à¦\95রà§\81ন, à¦¯à¦¦à¦¿ à¦\86পনি \"à¦\8fà¦\87 à¦¬à§\8dযবহারà¦\95ারà§\80à¦\95à§\87 à¦\87-মà§\87à¦\87ল à¦\95রà§\81ন\" à¦¸à§\81বিধাà¦\9fি à¦¬à§\8dযবহার à¦\95রতà§\87 à¦\9aান, à¦¤à¦¬à§\87 [[Special:Preferences|à¦\86পনার à¦ªà¦\9bনà§\8dদ à¦¤à¦¾à¦²à¦¿à¦\95াতà§\87]] à¦¯à¦¦à¦¿ à¦\8fà¦\95à¦\9fি à¦¬à§\88ধ à¦\87মà§\87à¦\87ল à¦ à¦¿à¦\95ানা à¦¨à¦¿à¦°à§\8dদিষà§\8dà¦\9f  à¦¥à¦¾à¦\95তà§\87 à¦¹à¦¬à§\87 à¦\8fবà¦\82 à¦\86পনার à¦¸à§\87à¦\9fি à¦¬à§\8dযবহারà§\87 à¦\95à§\8bন à¦¬à¦¾à¦§à¦¾ à¦¥à¦¾à¦\95তà§\87 à¦ªà¦¾à¦°à¦¬à§\87 à¦¨à¦¾à¥¤\n\nà¦\86পনার à¦¬à¦°à§\8dতমান à¦\86à¦\87পি à¦ à¦¿à¦\95ানা à¦¹à¦\9aà§\8dà¦\9bà§\87 $3, à¦\8fবà¦\82 à¦¬à¦¾à¦§à¦¾ à¦¨à¦\82 à¦¹à¦² #$5।\n\nদয়া à¦\95রà§\87 à¦\86পনার à¦¯à§\87à¦\95à§\8bন à¦\9cিà¦\9cà§\8dà¦\9eাসাতà§\87 à¦\89পরà§\87র à¦¸à¦®à¦¸à§\8dত à¦¬à¦¿à¦¬à¦°à¦£ à¦\85নà§\8dতরà§\8dভà§\81à¦\95à§\8dত করুন।",
+       "systemblockedtext": "আপনার ব্যবহারকারী নাম অথবা আইপি ঠিকানাটিকে স্বয়ংক্রিয়ভাবে মিডিয়াউইকি দ্বারা বাধাদান করা হয়েছে। যে কারণটি দেওয়া হয়েছে, সেটি হল:\n\n:<em>$2</em>\n\n* বাধা শুরুর সময়: $8\n* বাধা উঠিয়ে নেয়ার সময়: $6\n* যাকে বাধাদান করা হয়েছে: $7\n\nআপনার বর্তমান আইপি ঠিকানাটি হল $3।\nদয়া করে আপনার যেকোন জিজ্ঞাসাতে উপরের সমস্ত বিবরণ অন্তর্ভুক্ত করুন।",
        "blockednoreason": "কোন কারণ দেওয়া হয়নি",
-       "whitelistedittext": "পাতায় à¦¸à¦®à§\8dপাদনা à¦\95রতà§\87 à¦\86বশà§\8dযà¦\87 $1 à¦\95রতà§\87 à¦¹à¦¬à§\87।",
+       "whitelistedittext": "পাতায় à¦¸à¦®à§\8dপাদনা à¦\95রতà§\87 à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 $1 à¦\95রà§\81ন।",
        "confirmedittext": "কোন সম্পাদনা করার আগে আপনার ই-মেইল ঠিকানাটি অবশ্যই নিশ্চিত করতে হবে। দয়া করে আপনার ই-মেইল ঠিকানাটি [[Special:Preferences|ব্যবহারকারীর পছন্দতালিকায়]] ঠিকমত দিন।",
        "nosuchsectiontitle": "অনুচ্ছেদ পাওয়া যায়নি",
        "nosuchsectiontext": "আপনি এমন একটি অনুচ্ছেদ সম্পাদনার চেষ্টা করেছেন, যার কোন অস্তিত্ব নেই।\nযখন এই পাতাটি দেখার চেষ্টা করছে, তখন হয়তো এটি সরিয়ে অথবা অপসারণ করা হয়েছে।",
        "missing-revision": "\"{{FULLPAGENAME}}\" এর #$1তম সংস্করণটি প্রদর্শন সম্ভব নয়।\n\nসাধারণত মুছে ফেলা হয়েছে এমন পাতার মেয়াদ উত্তীর্ণ ইতিহাস পাতার লিংক ওপেন করার কারণে এটি হতে পারে। \n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] বিস্তারিত তথ্য জানা যাবে।",
        "userpage-userdoesnotexist": "\"<nowiki>$1</nowiki>\" নামের কোন ব্যবহারকারী অ্যাকাউন্ট নিবন্ধিত হয়নি। অনুগ্রহ করে পরীক্ষা করে দেখুন আপনি এই পাতাটি সৃষ্টি/সম্পাদনা করতে চান কি না।",
        "userpage-userdoesnotexist-view": "ব্যবহারকারী অ্যাকাউন্ট \"$1\" অনিবন্ধিত।",
-       "blocked-notice-logextract": "à¦\8fà¦\87 à¦¬à§\8dযবহারà¦\95ারà§\80 à¦¬à¦°à§\8dতমানà§\87 à¦¬à§\8dলà¦\95 à¦°à¦¯à¦¼à§\87à¦\9bà§\87।\nরà§\87ফারà§\87নà§\8dসà§\87র à¦\9cনà§\8dয à¦¸à¦¾à¦®à§\8dপà§\8dরতিà¦\95 à¦¬à§\8dলà¦\95 à¦²à¦\97 à¦­à§\81à¦\95à§\8dতি নিচে দেওয়া হল:",
+       "blocked-notice-logextract": "à¦\8fà¦\87 à¦¬à§\8dযবহারà¦\95ারà§\80 à¦¬à¦°à§\8dতমানà§\87 à¦\85বরà§\81দà§\8dধ à¦°à¦¯à¦¼à§\87à¦\9bà§\87ন।\nসà§\82তà§\8dরà§\87র à¦\9cনà§\8dয à¦¸à¦¾à¦®à§\8dপà§\8dরতিà¦\95 à¦¬à¦¾à¦§à¦¾à¦¦à¦¾à¦¨ à¦²à¦\97à§\87র à¦­à§\81à¦\95à§\8dতিà¦\9fি নিচে দেওয়া হল:",
        "clearyourcache": "<strong>লক্ষ্য করুন:</strong> সংরক্ষণের পর, পরিবর্তনগুলো দেখতে আপনাকে আপনার ব্রাউজারের ক্যাশে পরিষ্কার করার প্রয়োজন হতে পারে।\n* <strong>ফায়ারফক্স / সাফারি:</strong> <em>Shift</em> ধরে রাখা অবস্থায়<em>পুনঃলোড করুন</em>-এ ক্লিক করুন, অথবা <em>Ctrl-F5</em> বা <em>Ctrl-R</em> (ম্যাক-এ <em>⌘-R</em>) চাপুন\n* <strong>গুগল ক্রোম:</strong> <em>Ctrl-Shift-R</em> (ম্যাক-এ <em>⌘-Shift-R</em>) চাপুন\n* <strong>ইন্টারনেট এক্সপ্লোরার:</strong> <em>Ctrl</em> ধরে রাখা অবস্থায় <em>Refresh</em>-এ ক্লিক করুন, অথবা <em>Ctrl-F5</em> চাপুন\n* <strong>অপেরা:</strong> <em>মেনু → ব্যবস্থাপনাসমূহ</em>-এ যান (ম্যাকে <em>অপেরা → পছন্দসমূহ</em>) এবং এরপর <em>গোপনীয়তা ও সুরক্ষা → ব্রাউজিং-এর তথ্য পরিষ্কার করুন → ক্যাশে করা ছবি ও ফাইলগুলি</em>।",
        "usercssyoucanpreview": "'''পরামর্শ:''' \"{{int:showpreview}}\" বোতাম ব্যবহার করে সংরক্ষণের আগে আপনার নতুন CSS পরীক্ষা করুন।",
        "userjsyoucanpreview": "'''পরামর্শ:''' \"{{int:showpreview}}\" বোতাম ব্যবহার করে সংরক্ষণের আগে আপনার নতুন JavaScript পরীক্ষা করুন।",
        "continue-editing": "সম্পাদনা করুন",
        "previewconflict": "এই প্রাকদর্শনটি সম্পাদনা ক্ষেত্রের উপরের অংশটির টেক্সট সংরক্ষণ করলে যেরকম দেখাবে, তা দেখাচ্ছে।",
        "session_fail_preview": "দুঃখিত! সেশন ডাটা হারিয়ে যাওয়ার কারণে আপনার সম্পাদনাটি সংরক্ষণ করা সম্ভব হয়নি।\n\nআপনি সম্ভবত সংযোগ হারিয়েছন। <strong>দয়া করে যাচাই করুন যে আপনি এখনও প্রবেশরত রয়েছেন এবং আবার চেষ্টা করুন</strong>। যদি এটি এখনও কাজ না করে, তাহলে দয়া করে [[Special:UserLogout|অ্যাকাউন্ট থেকে প্রস্থান করুন]] এবং আবার অ্যাকাউন্টে প্রবেশ করে চেষ্টা করুন এবং এবং পরীক্ষা করুন যে আপনার ব্রাউজার এই সাইটে কুকি ব্যবহারের অনুমতি দেয়।",
-       "session_fail_preview_html": "দুঃখিত! সেশন উপাত্ত হারিয়ে যাওয়ার কারণে আমরা আপনার সম্পাদনাটি প্রক্রিয়া করতে পারিনি।\n\n<em>{{SITENAME}}-এ raw HTML সক্রিয় আছে বলে জাভাস্ক্রিপ্ট ভিত্তিক আক্রমণ থেকে প্রতিরক্ষার জন্য প্রাকদর্শনটি দেখানো হচ্ছে না।</em>\n\n<strong>যদি এটি সম্পাদনার একটি বৈধ প্রচেষ্টা হয়, তবে অনুগ্রহ করে আবার চেষ্টা করুন।</strong>\nযদি তারপরেও কাজ না হয়, তবে অ্যাকাউন্ট থেকে [[Special:UserLogout|বেরিয়ে গিয়ে]] আবার প্রবেশ করুন, এবং পরীক্ষা করে দেখুন যে আপনার ব্রাউজারে এই সাইট থেকে কুকি অনুমতি দেয়।",
+       "session_fail_preview_html": "দুঃখিত! সেশনের উপাত্ত হারিয়ে যাওয়ার কারণে আমরা আপনার সম্পাদনাটি প্রক্রিয়াভুক্ত করতে পারিনি।\n\n<em>{{SITENAME}}-এ raw HTML সক্রিয় আছে বলে জাভাস্ক্রিপ্ট ভিত্তিক আক্রমণ থেকে প্রতিরক্ষার জন্য প্রাকদর্শনটি দেখানো হচ্ছে না।</em>\n\n<strong>যদি এটি সম্পাদনার একটি বৈধ প্রচেষ্টা হয়, তবে অনুগ্রহ করে আবার চেষ্টা করুন।</strong>\nযদি তারপরেও কাজ না হয়, তবে অ্যাকাউন্ট থেকে [[Special:UserLogout|বেরিয়ে গিয়ে]] আবার প্রবেশ করুন, এবং পরীক্ষা করে দেখুন যে আপনার ব্রাউজারে এই সাইট থেকে কুকি রাখার অনুমতি আছে কি না।",
        "token_suffix_mismatch": "'''আপনার সম্পাদনাটি প্রত্যাখ্যান করা হয়েছে, কারণ আপনার ক্লায়েন্ট প্রোগ্রামটি সম্পাদনা টেক্সটের বিরামচিহ্নগুলি গুলিয়ে ফেলেছে। পাতাটির টেক্সটে যাতে ক্ষতি না হয় সেজন্য সম্পাদনাটি প্রত্যাখ্যান করা হয়েছে। আপনি কোন ত্রুটিপূর্ণ ওয়েব-ভিত্তিক বেনামী প্রক্সি সেবা ব্যবহার করলে এরকম হতে পারে।'''",
        "edit_form_incomplete": "'''আপনার সম্পাদনার কিছু অংশ সার্ভারে পৌছায় নি; আপনার সম্পাদনা সম্পূর্ণরুপে আছে কিনা নিশ্চিত হয়ে আবার চেষ্টা করুন'''",
        "editing": "সম্পাদনা করছেন: $1",
        "copyrightwarning2": "অনুগ্রহ করে লক্ষ করুন: {{SITENAME}}-এর এই ভুক্তিতে আপনার লেখা বা অবদান অন্যান্য ব্যবহারকারীরা পরিবর্তন বা পরিবর্ধন করতে, এমনকি মুছে ফেলতে পারবেন। {{SITENAME}} এ আপনার সকল লেখালেখি/অবদান গনু ফ্রি ডকুমেন্টেশনের ($1) আওতায় বিনামূল্যে প্রাপ্য ও হস্তান্তরযোগ্য। আপনার জমা দেয়া লেখা যে কেউ হৃদয়হীনভাবে সম্পাদনা করতে এবং যথেচ্ছভাবে ব্যবহার করতে পারেন। আপনি যদি এ ব্যাপারে একমত না হন, তাহলে এখানে আপনার লেখা জমা দেবেন না। আপনি আরো প্রতিজ্ঞা করছেন যে, এই লেখাগুলো আপনি নিজে লিখেছেন (তবে কোন মৌলিক গবেষণা নয়) বা সাধারণের ব্যবহারের জন্য উন্মুক্ত কোন উৎস থেকে সংগ্রহ করেছেন। '''স্বত্ব সংরক্ষিত কোন লেখা স্বত্বাধিকারীর অনুমতি ছাড়া এখানে জমা দেবেন না।'''",
        "editpage-cannot-use-custom-model": "এই পাতার বিষয়বস্তুর রূপ পরিবর্তন করা যাবে না।",
        "longpageerror": "'''ত্রুটি:  আপনার জমা দেয়া টেক্সটের পরিমাণ {{PLURAL:$1|এক কিলোবাইট|$1 কিলোবাইট}}, যা সর্বোচ্চ সীমা {{PLURAL:$2|এক কিলোবাইটের|$2 কিলোবাইটের}} চেয়ে বেশি।'''\nএটি সংরক্ষণ করা সম্ভব নয়।",
-       "readonlywarning": "<strong>সতরà§\8dà¦\95à§\80à¦\95রণ: à¦°à¦\95à§\8dষণাবà§\87à¦\95à§\8dষণà§\87র à¦\9cনà§\8dয à¦¡à¦¾à¦\9fাবà§\87à¦\9c à¦\85বরà§\81দà§\8dধ à¦°à¦¾à¦\96া à¦¹à¦¯à¦¼à§\87à¦\9bà§\87, à¦¤à¦¾à¦\87 à¦\8fà¦\87 à¦®à§\81হà§\82রà§\8dতà§\87 à¦\86পনি à¦\86পনার à¦¸à¦®à§\8dপাদনা à¦¸à¦\82রà¦\95à§\8dষণ à¦\95রতà§\87 à¦ªà¦¾à¦°à¦¬à§\87ন à¦¨à¦¾à¥¤</strong>\nà¦\86পনি à¦\9aাà¦\87লà§\87 à¦²à§\87à¦\96াà¦\9fি à¦\85নà§\81লিপি à¦\95রà§\87 à¦\93 à¦\95à§\8bন à¦\9fà§\87à¦\95à§\8dসà¦\9f à¦«à¦¾à¦\87লà§\87 à¦ªà§\8dরতিলà§\87পন à¦\95রার à¦¦à§\8dবারা à¦­à¦¬à¦¿à¦·à§\8dযতà§\87র à¦\9cনà§\8dয à¦¸à¦\82রà¦\95à§\8dষণ à¦\95রতà§\87 à¦ªà¦¾à¦°à§\87ন।\n\nসিসà§\8dà¦\9fà§\87ম à¦ªà§\8dরশাসà¦\95 à¦¯à¦¿à¦¨à¦¿ à¦\8fà¦\9fি à¦¬à¦¨্ধ করেছেন তিনি এই ব্যাখ্যা দিয়েছেন: $1",
+       "readonlywarning": "<strong>সতরà§\8dà¦\95বারà§\8dতা: à¦°à¦\95à§\8dষণাবà§\87à¦\95à§\8dষণà§\87র à¦\9cনà§\8dয à¦¡à¦¾à¦\9fাবà§\87à¦\9c à¦\85বরà§\81দà§\8dধ à¦°à¦¾à¦\96া à¦¹à¦¯à¦¼à§\87à¦\9bà§\87, à¦¤à¦¾à¦\87 à¦\8fà¦\87 à¦®à§\81হà§\82রà§\8dতà§\87 à¦\86পনি à¦\86পনার à¦¸à¦®à§\8dপাদনা à¦¸à¦\82রà¦\95à§\8dষণ à¦\95রতà§\87 à¦ªà¦¾à¦°à¦¬à§\87ন à¦¨à¦¾à¥¤</strong>\nà¦\86পনি à¦\9aাà¦\87লà§\87 à¦²à§\87à¦\96াà¦\9fি à¦ªà§\8dরতিলিপি à¦\95রà§\87 à¦\95à§\8bন à¦\9fà§\87à¦\95à§\8dসà¦\9f à¦«à¦¾à¦\87লà§\87 à¦¸à§\87à¦\81à¦\9fà§\87 à¦­à¦¬à¦¿à¦·à§\8dযতà§\87র à¦\9cনà§\8dয à¦¸à¦\82রà¦\95à§\8dষণ à¦\95রতà§\87 à¦ªà¦¾à¦°à§\87ন।\n\nযà§\87 à¦¸à¦¿à¦¸à§\8dà¦\9fà§\87ম à¦ªà§\8dরশাসà¦\95 à¦¡à¦¾à¦\9fাবà§\87à¦\9cà¦\9fি  à¦\85বরà§\81দ্ধ করেছেন তিনি এই ব্যাখ্যা দিয়েছেন: $1",
        "protectedpagewarning": "'''সতর্কীকরণ: এই পাতাটি বন্ধ করা হয়েছে; কেবলমাত্র প্রশাসক মর্যাদার ব্যবহারকারীরাই এটি সম্পাদনা করতে পারবেন।'''\nআপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো।",
        "semiprotectedpagewarning": "'''নোট:''' এই পাতাটির ব্যবহার নিয়ন্ত্রণ করা হয়েছে তাই নিবন্ধনকৃত ব্যবহারকারী এটি সম্পাদনা করতে পারবেন।\nআপনার সুবিধার্থে পাতাটির সাম্প্রতিক সংরক্ষণ লগের বিবরণ নিচে দেওয়া হলো।",
        "cascadeprotectedwarning": "<strong>সতর্কীকরণ:</strong> এই পাতাটি সুরক্ষিত, ফলে এটি শুধুমাত্র প্রশাসক অধিকারপ্রাপ্ত ব্যবহারকারীগণ সম্পাদনা করতে পারেন, কারণ এটি নিচের প্রপাতাকার-সুরক্ষিত {{PLURAL:$1|পাতায়|পাতাসমূহে}} অন্তর্ভুক্ত আছে:",
        "edittools": "<!-- সম্পাদনা এবং আপলোড ফরমের নীচে এখানের লেখা দেখানো হবে। -->",
        "edittools-upload": "-",
        "nocreatetext": "{{SITENAME}}-এ নতুন পাতা সৃষ্টি করার ক্ষমতা সীমাবদ্ধ করা হয়েছে।\nআপনি ফিরে গিয়ে ইতিমধ্যে বিদ্যমান কোন পাতা সম্পাদনা করতে পারেন, অথবা [[Special:UserLogin|অ্যাকাউন্টে প্রবেশ কিংবা অ্যাকাউন্ট সৃষ্টি করতে পারেন]]।",
-       "nocreate-loggedin": "নতà§\81ন à¦ªà¦¾à¦¤à¦¾ à¦¤à§\88রিতà§\87 à¦\86পনাà¦\95à§\87 à¦\85নà§\81মà§\8bতি à¦¦à§\87à¦\93য়া à¦¹à¦¯à¦¼à¦¨à¦¿।",
+       "nocreate-loggedin": "à¦\86পনার à¦¨à¦¤à§\81ন à¦ªà¦¾à¦¤à¦¾ à¦¤à§\88রি à¦\95রার à¦\85নà§\81মà§\8bদন à¦¨à§\87à¦\87।",
        "sectioneditnotsupported-title": "অনুচ্ছেদ সম্পাদনা সমর্থন করে না",
        "sectioneditnotsupported-text": "এই সম্পাদনা পাতায় অনুচ্ছেদ সম্পাদনা সমর্থন করে না",
        "permissionserrors": "অনুমতি ত্রুটিসমূহ",
-       "permissionserrorstext": "à¦\86পনার à¦\8fà¦\9fা à¦\95রার à¦\85নà§\81মতি à¦¨à§\87à¦\87, à¦¨à¦¿à¦\9aà§\87র {{PLURAL:$1|à¦\9fি à¦\95ারণà§\87র|à¦\9fি à¦\95ারণà§\87র}} à¦\9cনà§\8dয:",
-       "permissionserrorstext-withaction": "আপনার $2 অনুমতি নেই, যার {{PLURAL:$1|কারণ|কারণসমূহ}} হল:",
+       "permissionserrorstext": "নিনà§\8dমলিà¦\96িত {{PLURAL:$1|à¦\95ারণà¦\9fির|à¦\95ারণà¦\97à§\81লির}} à¦\9cনà§\8dয à¦\86পনার à¦\8fà¦\9fা à¦\95রার à¦\85নà§\81মতি à¦¨à§\87à¦\87:",
+       "permissionserrorstext-withaction": "আপনার $2 অনুমতি নেই, যার {{PLURAL:$1|কারণটি|কারণগুলি}} হল:",
        "contentmodelediterror": "আপনি এই পুনর্বিবেচনা সম্পাদনা করতে পারবেন না কারণ এর বিষয়বস্তু মডেল <code>$1</code>, যা বর্তমান বিষয়বস্তু মডেল <code>$2</code>-এর থেকে ভিন্ন।",
        "recreate-moveddeleted-warn": "'''সতর্কীকরণ: আপনি এমন একটি পাতা পুনরায় তৈরি করছেন যা পূর্বে অপসারণ করা হয়েছিল।'''\n\nআপনি পাতাটি সম্পাদনা চালিয়ে যাওয়া ঠিক হবে কিনা, তা বিবেচনা করুন।\nআপনার সুবিধার্থে পাতাটির অপলুপ্তি লগ এখানে দেয়া হলো:",
        "moveddeleted-notice": "এই পাতাটি অপসারণ করা হয়েছে।\nসূত্র হিসেবে নিচে এ পাতার অবলুপ্তি লগ দেওয়া হলো।",
        "moveddeleted-notice-recent": "দুঃখিত, এই পাতাটি সাম্প্রতি অপসারিত হয়েছে (সর্বশেষ ২৪ ঘণ্টায়)।\nসূত্র হিসেবে নিচে এই পাতা অপসারণ ও স্থানান্তর লগ দেয়া হয়েছে।",
-       "log-fulllog": "সমà§\8dপà§\82রà§\8dণ à¦²à¦\97 à¦¦à§\87à¦\96াà¦\93",
+       "log-fulllog": "সমà§\8dপà§\82রà§\8dণ à¦²à¦\97 à¦¦à§\87à¦\96à§\81ন",
        "edit-hook-aborted": "হূক দ্বারা সম্পাদনা পরিত্যক্ত হয়েছে।\nএর কোন ব্যাখ্যা নাই।",
        "edit-gone-missing": "পাতাটি হালনাগাদ হয়নি।\nসম্ভবতঃ পাতাটি মুছে ফেলা হয়েছে।",
        "edit-conflict": "সম্পাদনা সংঘাত।",
        "edit-no-change": "আপনার সম্পাদনাটি উপেক্ষা করা হয়েছে, কারণ লেখাতে কোনো পরিবর্তন করা হয়নি।",
-       "postedit-confirmation-created": "পাতাটি তৈরি হয়েছে।",
+       "postedit-confirmation-created": "পাতাà¦\9fি à¦¤à§\88রি à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87।",
        "postedit-confirmation-restored": "পাতাটি পুনরুদ্ধার করা হয়েছে।",
        "postedit-confirmation-saved": "আপনার সম্পাদনা সংরক্ষিত হয়েছে।",
        "edit-already-exists": "নতুন পাতা সৃষ্টি করা যায়নি।\nপাতাটি ইতিমধ্যেই বিদ্যমান।",
        "post-expand-template-argument-warning": "' ' ' সাবধান: ' ' ' এই পাতাটিতে অন্তত একটি ফর্মা যুক্তি আছে যা একটি খুব বড় বিস্তার আকার ধারণ করেছে।\nতাই এই আর্গুমেন্টটি বাদ দেওয়া হয়েছে।",
        "post-expand-template-argument-category": "বাদ ফর্মা আর্গুমেন্ট ধারণকারী পাতা",
        "parser-template-loop-warning": "টেমপ্লেট লুপ সনাক্ত হয়েছে: [[$1]]",
-       "parser-template-recursion-depth-warning": "টেমপ্লেট পুনরাবৃত্তি (রিকার্শন) ডেপথ্‌ সীমা অতক্রম করেছে ($1)",
-       "language-converter-depth-warning": "ভাষা পরিবর্তন ডেপথ্‌ সীমা অতক্রম করেছে ($1)",
+       "template-loop-category": "টেমপ্লেট লুপসহ পাতা",
+       "template-loop-category-desc": "এই পাতায় একটি টেমপ্লেট লুপ আছে, অর্থাৎ এটি এমন একটি টেমপ্লেট যা নিজেকেই পুনরাবৃত্তভাবে আহ্বান করে।",
+       "parser-template-recursion-depth-warning": "টেমপ্লেট পুনরাবৃত্তি (রিকার্শন) গভীরতা সীমা অতক্রম করেছে ($1)",
+       "language-converter-depth-warning": "ভাষা পরিবর্তন গভীরতা সীমা অতক্রম করেছে ($1)",
        "node-count-exceeded-category": "যে সকল পাতার নোড কাউন্ট সীমানা পার হয়েছে",
        "node-count-exceeded-category-desc": "পাতার সর্বোচ্চ নোড কাউন্ট সীমানা অতিক্রম করেছে।",
        "node-count-exceeded-warning": "পাতাটি নোড কাউন্ট সীমানা পার করেছে",
        "expansion-depth-exceeded-warning": "পাতাটি এক্সেপশন সীমানা অতিক্রম করেছে",
        "parser-unstrip-loop-warning": "ত্রুটিপূর্ণ লুপ খুঁজে পাওয়া গিয়েছে",
        "parser-unstrip-recursion-limit": "লুপ রিকারশন সীমানা অতিক্রম করেছে ($1)",
-       "converter-manual-rule-error": "ভাষা à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦°à§\81লে ত্রুটি পাওয়া গিয়েছে",
+       "converter-manual-rule-error": "মà§\8dযানà§\81য়াল à¦­à¦¾à¦·à¦¾ à¦°à§\82পানà§\8dতর à¦¨à¦¿à¦¯à¦¼à¦®ে ত্রুটি পাওয়া গিয়েছে",
        "undo-success": "সম্পাদনাটি বাতিল করা যাবে। অনুগ্রহ করে নিচের তুলনাটি পরীক্ষা করে দেখুন ও নিশ্চিত করুন যে এটাই আপনি করতে চান, এবং তারপর নিচের সম্পাদনাগুলি সংরক্ষণ করে সম্পাদনাটির বাতিল প্রক্রিয়া সমাপ্ত করুন।",
        "undo-failure": "এ সম্পাদনা মধ্যবর্তী সম্পাদনাসমূহের কারণে পূর্বাবস্থায় ফিরিয়ে নেওয়া যাবে না।",
        "undo-norev": "সম্পাদনাটি বাতিল করা যাচ্ছেনা কারণ এটি আর নেই বা মুছে ফেলা হয়েছে।",
        "undo-nochange": "সম্পাদনাটি পূর্বেই বাতিল করা হয়েছে।",
        "undo-summary": "[[Special:Contributions/$2|$2]] ([[User talk:$2|আলাপ]])-এর সম্পাদিত $1 নম্বর সংশোধনটি বাতিল করা হয়েছে",
-       "undo-summary-username-hidden": "à¦\8fà¦\95à¦\9cন à¦²à§\81à¦\95ানà§\8b à¦¬à§\8dযবহারà¦\95ারà§\80 $1 à¦¸à¦\82শà§\8bধন à¦ªà§\81নরায় à¦«à¦¿à¦°à¦¿à¦¯à¦¼à§\87 à¦\8fনà§\87à¦\9bà§\87ন",
+       "undo-summary-username-hidden": "à¦\8fà¦\95à¦\9cন à¦²à§\81à¦\95ায়িত à¦¬à§\8dযবহারà¦\95ারà§\80র à¦\95রা $1 à¦¨à¦\82 à¦¸à¦\82শà§\8bধনà¦\9fি à¦¬à¦¾à¦¤à¦¿à¦² à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87",
        "cantcreateaccount-text": "[[User:$3|$3]] এই আইপি ঠিকানা('''$1''') থেকে অ্যাকাউন্ট সৃষ্টিতে বাধা দিয়েছেন।\n\n$3-এর দেয়া কারণ হল ''$2''",
        "cantcreateaccount-range-text": "[[User:$3|$3]] কর্তৃক আইপি ঠিকানার ব্যাপ্তি <strong>$1</strong>-এর মধ্যে অ্যাকাউন্ট তৈরি করা অবরুদ্ধ করা হয়েছে। যাতে আপনার আইপি ঠিকানাও (<strong>$4</strong>) রয়েছে। \n\n$3 কর্তৃক <em>$2</em> কারণ দেখানো হয়েছে।",
        "viewpagelogs": "এই পাতার জন্য লগগুলো দেখুন",
        "nohistory": "এই পাতার কোন সম্পাদনার ইতিহাস নেই।",
        "currentrev": "সর্বশেষ সংস্করণ",
-       "currentrev-asof": "$1 à¦¤à¦¾à¦°à¦¿à¦\96à§\87 à¦¸à¦®à§\8dপাদিত à¦¬à¦°à§\8dতমান সংস্করণ",
-       "revisionasof": "$1 তারিখে সংস্করণ",
-       "revision-info": "$2 কর্তৃক $1 পর্যন্ত সংস্করণে $7",
-       "previousrevision": "←পুর্বের সংস্করণ",
-       "nextrevision": "পরবর্তী সংস্করণ→",
+       "currentrev-asof": "$1 à¦¤à¦¾à¦°à¦¿à¦\96à§\87 à¦¸à¦®à§\8dপাদিত à¦¸à¦°à§\8dবশà§\87ষ সংস্করণ",
+       "revisionasof": "$1 তারিখে সংশোধিত সংস্করণ",
+       "revision-info": "{{GENDER:$6|$2}} কর্তৃক $1 তারিখে সংশোধিত সংস্করণ$7",
+       "previousrevision": "← পূর্বের সংস্করণ",
+       "nextrevision": "পরবর্তী সংস্করণ →",
        "currentrevisionlink": "সর্বশেষ সংস্করণ",
        "cur": "বর্তমান",
        "next": "পরবর্তী",
        "last": "পূর্ববর্তী",
        "page_first": "প্রথম",
        "page_last": "শেষ",
-       "histlegend": "পারà§\8dথà¦\95à§\8dয à¦¨à¦¿à¦°à§\8dবাà¦\9aন: à¦¯à§\87 à¦¸à¦\82সà§\8dà¦\95রণà¦\97à§\81লà§\8b à¦¤à§\81লনা à¦\95রতà§\87 à¦\9aান, à¦¸à§\87à¦\97à§\81লà§\8b à¦\9aিহà§\8dনিত à¦\95রà§\87 à¦\8fনà§\8dà¦\9fার à¦¬à¦¾ à¦¨à¦¿à¦\9aà§\87র à¦¬à§\8bতামà¦\9fি à¦\9fিপà§\81ন।<br />\nনিরà§\8dদà§\87শিà¦\95া: (বরà§\8dতমান) = à¦¬à¦°à§\8dতমান à¦¸à¦\82সà§\8dà¦\95রণà§\87র à¦¸à¦¾à¦¥à§\87 à¦ªà¦¾à¦°à§\8dথà¦\95à§\8dয, (পà§\82রà§\8dববরà§\8dতà§\80) =  à¦ªà§\82রà§\8dবà§\87র à¦¸à¦\82সà§\8dà¦\95রণà§\87র à¦¸à¦¾à¦¥à§\87 à¦ªà¦¾à¦°à§\8dথà¦\95à§\8dয, à¦\85 = অনুল্লেখ্য সম্পাদনা।",
-       "history-fieldset-title": "সংস্করণের জন্য অনুসন্ধান করুন",
+       "histlegend": "পারà§\8dথà¦\95à§\8dয à¦¨à¦¿à¦°à§\8dবাà¦\9aন: à¦¯à§\87 à¦¸à¦\82সà§\8dà¦\95রণà¦\97à§\81লি à¦¤à§\81লনা à¦\95রতà§\87 à¦\9aান, à¦¸à§\87à¦\97à§\81লি à¦\9aিহà§\8dনিত à¦\95রà§\87 à¦\8fনà§\8dà¦\9fার à¦¬à¦¾ à¦¨à¦¿à¦\9aà§\87র à¦¬à§\8bতামà¦\9fি à¦\9fিপà§\81ন।<br />\nনিরà§\8dদà§\87শিà¦\95া: <strong>({{int:cur}})</strong> = à¦¬à¦°à§\8dতমান à¦¸à¦\82সà§\8dà¦\95রণà§\87র à¦¸à¦¾à¦¥à§\87 à¦ªà¦¾à¦°à§\8dথà¦\95à§\8dয, <strong>({{int:last}})</strong> = à¦ªà§\82রà§\8dবà§\87র à¦¸à¦\82সà§\8dà¦\95রণà§\87র à¦¸à¦¾à¦¥à§\87 à¦ªà¦¾à¦°à§\8dথà¦\95à§\8dয,  <strong>{{int:minoreditletter}}</strong> = অনুল্লেখ্য সম্পাদনা।",
+       "history-fieldset-title": "সà¦\82শà§\8bধিত à¦¸à¦\82সà§\8dà¦\95রণà§\87র à¦\9cনà§\8dয à¦\85নà§\81সনà§\8dধান à¦\95রà§\81ন",
        "history-show-deleted": "শুধুমাত্র অপসারিত সংশোধন",
        "histfirst": "সবচেয়ে পুরনো",
        "histlast": "সবচেয়ে নতুন",
        "historysize": "({{PLURAL:$1|১ বাইট|$1 বাইট}})",
        "historyempty": "(খালি)",
-       "history-feed-title": "সংশোধন ইতিহাস",
-       "history-feed-description": "এ উইকিতে এই পাতার সংশোধনের ইতিহাস",
+       "history-feed-title": "সংশোধনের ইতিহাস",
+       "history-feed-description": "এ উইকিতে এই পাতার সংশোধনের ইতিহাস",
        "history-feed-item-nocomment": "$2-এ $1",
        "history-feed-empty": "অনুরোধকৃত পাতাটির কোন অস্তিত্ব নেই।\nহয়ত পাতাটি উইকি থেকে মুছে ফেলা হয়েছে, কিংবা নতুন নামকরণ করা হয়েছে।\nপ্রাসঙ্গিক নতুন পাতাগুলির জন্য [[Special:Search|উইকি অনুসন্ধানের]] চেষ্টা করুন।",
        "history-edit-tags": "নির্বাচিত সংশোধনের ট্যাগ সম্পাদনা করুন",
        "rev-deleted-comment": "(সম্পাদনা সারাংশ অপসারিত)",
        "rev-deleted-user": "(ব্যবহারকারীর নাম সরিয়ে নেওয়া হয়েছে)",
        "rev-deleted-event": "(লগ তথ্য সরানো হয়েছে)",
-       "rev-deleted-user-contribs": "ব্যবহারকারীর নাম অথবা আইপি ঠিকানা অপসারিত হয়েছে - অবদান থেকে সম্পাদনা আড়াল করা হয়েছে",
+       "rev-deleted-user-contribs": "[ব্যবহারকারীর নাম অথবা আইপি ঠিকানা সরানো হয়েছে - অবদান থেকে সম্পাদনা লুকিয়ে রাখা হয়েছে]",
        "rev-deleted-text-permission": "পাতার এই সংস্করণটি '''অপসারিত''' হয়েছে।\nবিস্তারিত কারণ এর [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] পাওয়া যেতে পারে।",
        "rev-suppressed-text-permission": "পাতার সংশোধনটি <strong>গোপন</strong> করা হয়েছে।\nবিস্তারিত বিবরণ [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} গোপনকার্যের লগে] থাকতে পারে।",
        "rev-deleted-text-unhide": "পাতার এই সংস্করণটি '''অপসারিত''' হয়েছে।\nবিস্তারিত কারণ এর [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] পাওয়া যেতে পারে।\nআপনি ইচ্ছা পোষণ করলে [$1 এই সংস্করণটি দেখতে পারেন]।",
        "rev-showdeleted": "দেখাও",
        "revisiondelete": "অবলুপ্ত/পুনঃস্থাপন সংশোধনসমূহ",
        "revdelete-nooldid-title": "বেঠিক লক্ষ্য সংশোধন",
-       "revdelete-nooldid-text": "à¦\8fà¦\87 à¦\95াà¦\9cà¦\9fি à¦¸à¦®à§\8dপনà§\8dন à¦\95রার à¦\9cনà§\8dয à¦\86পনি à¦\95à§\8bন à¦²à¦\95à§\8dষà§\8dয à¦¸à¦\82শà§\8bধন à¦¨à¦¿à¦°à§\8dবাà¦\9aন à¦\95রà§\87ননি à¦¯à§\87à¦\96ানà§\87 à¦\8fà¦\87 à¦\95াà¦\9cà¦\9fি à¦¸à¦®à§\8dপাদন à¦\95রা à¦¹à¦¬à§\87, à¦\85থবা à¦¨à¦¿à¦°à§\8dবাà¦\9aিত à¦¸à¦\82শà§\8bধনà¦\9fি à¦¨à§\87à¦\87, à¦\85থবা à¦\86পনি à¦¬à¦°à§\8dতমান à¦¸à¦\82শà§\8bধন à¦\86ড়াল à¦\95রার চেষ্টা করছেন।",
+       "revdelete-nooldid-text": "à¦\8fà¦\87 à¦\95াà¦\9cà¦\9fি à¦¸à¦®à§\8dপনà§\8dন à¦\95রার à¦\9cনà§\8dয à¦\86পনি à¦\95à§\8bন à¦²à¦\95à§\8dষà§\8dয à¦¸à¦\82শà§\8bধন à¦¨à¦¿à¦°à§\8dবাà¦\9aন à¦\95রà§\87ননি à¦¯à§\87à¦\96ানà§\87 à¦\8fà¦\87 à¦\95াà¦\9cà¦\9fি à¦¸à¦®à§\8dপাদন à¦\95রা à¦¹à¦¬à§\87, à¦\85থবা à¦¨à¦¿à¦°à§\8dবাà¦\9aিত à¦¸à¦\82শà§\8bধনà¦\9fি à¦¨à§\87à¦\87, à¦\85থবা à¦\86পনি à¦¬à¦°à§\8dতমান à¦¸à¦\82শà§\8bধন à¦²à§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96ার চেষ্টা করছেন।",
        "revdelete-no-file": "নির্ধারিত ফাইলটি নেই।",
        "revdelete-show-file-confirm": "আপনি কি নিশ্চিত যে \"<nowiki>$1</nowiki>\" ফাইলের $2 তারিখের $3 টার অপসারণ লগ দেখানো হবে?",
        "revdelete-show-file-submit": "হ্যাঁ",
        "revdelete-text-text": "অপসারিত সংস্করণসমূহ এখনও পাতা ইতিহাসে প্রদর্শিত হয়, কিন্তু সেই বিষয়বস্তুর অংশগুলি সর্বসাধারণ দেখতে পারবে না।",
        "revdelete-text-file": "অপসারিত ফাইলের সংস্করণসমূহ এখনও ফাইল ইতিহাসে প্রদর্শিত হয়, কিন্তু সেই বিষয়বস্তুর অংশগুলি সর্বসাধারণ দেখতে পারবে না।",
        "logdelete-text": "অপসারিত লগ ইভেন্টসমূহ এখনও লগে প্রদর্শিত হয়, কিন্তু সেই বিষয়বস্তুর অংশগুলি সর্বসাধারণ দেখতে পারেবে না।",
-       "revdelete-text-others": "à¦\85নà§\8dযানà§\8dয à¦ªà§\8dরশাষà¦\95à¦\97ণ à¦\8fà¦\87 à¦²à§\81à¦\95ানà§\8b à¦¤à¦¥à§\8dয à¦\97à§\81লà§\8b দেখতে পারবেন এবং প্রয়োজনে সেগুলো ফিরিয়ে আনতে পারবেন, যদি অন্যান্য কোনো বাধা না থাকে।",
+       "revdelete-text-others": "à¦\85নà§\8dযানà§\8dয à¦ªà§\8dরশাসà¦\95à§\87রা à¦¤à¦¾à¦° à¦ªà¦°à§\87à¦\93 à¦\8fà¦\87 à¦²à§\81à¦\95ানà§\8b à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à¦¸à§\8dতà§\81à¦\97à§\81লি দেখতে পারবেন এবং প্রয়োজনে সেগুলো ফিরিয়ে আনতে পারবেন, যদি অন্যান্য কোনো বাধা না থাকে।",
        "revdelete-confirm": "অনুগ্রহ করে নিশ্চিত করুন যে আপনি এটি করতে চাচ্ছিলেন, আপনি এর ফলাফল সম্পর্কে অবগত আছেন, এবং [[{{MediaWiki:Policy-url}}|নীতিমালার]] উপর ভিত্তি করেই এই কাজটি করছেন।",
        "revdelete-suppress-text": "নিচের বিষয়গুলোর ক্ষেত্রেই '''কেবলমাত্র'''  চাপাচাপি করা যাবে:\n* সম্ভাব্য মানহানিকর তথ্য\n* ভুল ব্যক্তিগত তথ্য\n*: ''বাসার ঠিকানা এবং ফোন নম্বর, সোসাল সিকিউরিটি নম্বর, ইত্যাদি।''",
        "revdelete-legend": "দৃষ্টিপাত সীমাবদ্ধ করো",
-       "revdelete-hide-text": "সà¦\82সà§\8dà¦\95রণের লেখা",
-       "revdelete-hide-image": "ফাà¦\87লà§\87র à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à¦¸à§\8dতà§\81 à¦\86ড়াল à¦\95রà§\8b",
+       "revdelete-hide-text": "সà¦\82শà§\8bধনের লেখা",
+       "revdelete-hide-image": "ফাà¦\87লà§\87র à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à¦¸à§\8dতà§\81 à¦²à§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96া à¦¹à§\8bà¦\95",
        "revdelete-hide-name": "লক্ষ্য ও প্যারামিটার আড়াল করো",
        "revdelete-hide-comment": "সম্পাদনা সারাংশ",
-       "revdelete-hide-user": "সম্পাদকে ব্যবহারকারীর নাম/আইপি",
+       "revdelete-hide-user": "সম্পাদকের ব্যবহারকারী নাম/আইপি ঠিকানা",
        "revdelete-hide-restricted": "প্রশাসকবৃন্দ এবং অন্যদের ক্ষেত্রে এই ডাটা রোধ করো",
-       "revdelete-radio-same": "পরিবর্তন নয়",
-       "revdelete-radio-set": "লà§\81à¦\95ানà§\8b",
+       "revdelete-radio-same": "(পরিবর্তন করবেন না)",
+       "revdelete-radio-set": "লà§\81à¦\95ায়িত",
        "revdelete-radio-unset": "দৃশ্যমান",
        "revdelete-suppress": "সব প্রশাসক ও অন্যান্যদের কাছ থেকে উপাত্ত লুকিয়ে রাখা হোক।",
        "revdelete-unsuppress": "সংশোধন পুনঃস্থাপনের উপর সীমাবদ্ধতা দূর করো",
        "revdel-restore": "দৃশ্যমানতা পরিবর্তন করো",
        "pagehist": "পাতার ইতিহাস",
        "deletedhist": "ইতিহাস মুছে ফেলো",
-       "revdelete-hide-current": "$2, $1 সময়ের বিষয়টি লুকানো যাচ্ছে না: এটি বর্তমান সংস্করণ।\nএটি লুকানো সম্ভব নয়।",
+       "revdelete-hide-current": "$2 সময় ও $1 তারিখের আইটেমটি লুকানো যাচ্ছে না: এটি বর্তমান সংস্করণ।\nএটি লুকানো সম্ভব নয়।",
        "revdelete-show-no-access": "$2, $1 তারিখের ছবিটি দেখাতে সমস্যা হচ্ছে: এটি ''রেসট্রিটেড'' হিসাবে চিহ্নিত করা রয়েছে।\nআপনার এটি দেখার অনুমতি নেই।",
        "revdelete-modify-no-access": "$2, $1 তারিখের ছবিটি সম্পাদনা করতে সমস্যা হচ্ছে: এটি ''রেসট্রিটেড'' হিসাবে চিহ্নিত করা রয়েছে।\nআপনার এটি দেখার অনুমতি নেই।",
        "revdelete-modify-missing": "$1 আইডি সম্বলিত তথ্যটি সম্পাদনা করা যাচ্ছে না: এটি ডাটাবেজ থেকে হারিয়ে গিয়েছে!",
        "revdelete-edit-reasonlist": "অপসারণের কারণ সম্পাদনা",
        "revdelete-offender": "সংশোধন লেখক:",
        "suppressionlog": "দমন লগ",
-       "suppressionlogtext": "নিà¦\9aà§\87র à¦¤à¦¾à¦²à¦¿à¦\95ায় à¦ªà§\8dরশাসà¦\95দà§\87র à¦¥à§\87à¦\95à§\87 à¦²à§\81à¦\95ানà§\8b à¦°à¦¯à¦¼à§\87à¦\9bà§\87 à¦\8fমন à¦¤à¦¥à§\8dযসহ à¦\85নà§\8dযনà§\8dয অপসারণ এবং বাধাদানের লগ রয়েছে।\nঅনুগ্রহ করে অস্থায়ী ব্যান এবং বাধাদানের লগ সম্পর্কে বিস্তারিত জানতে [[Special:BlockList|বাধাদানের লগ দেখুন]]।",
+       "suppressionlogtext": "নিà¦\9aà§\87র à¦¤à¦¾à¦²à¦¿à¦\95ায় à¦ªà§\8dরশাসà¦\95দà§\87র à¦\95াà¦\9b à¦¥à§\87à¦\95à§\87 à¦²à§\81à¦\95ানà§\8b à¦°à¦¯à¦¼à§\87à¦\9bà§\87 à¦\8fমন à¦¤à¦¥à§\8dযসহ অপসারণ এবং বাধাদানের লগ রয়েছে।\nঅনুগ্রহ করে অস্থায়ী ব্যান এবং বাধাদানের লগ সম্পর্কে বিস্তারিত জানতে [[Special:BlockList|বাধাদানের লগ দেখুন]]।",
        "mergehistory": "পাতার ইতিহাসগুলি একত্র করা হোক",
        "mergehistory-header": "এই পাতাটির মাধ্যমে আপনি একটি উৎস পাতার ইতিহাস একটি নতুনতর পাতার সাথে একত্র করতে পারবেন।\nপাতার ইতিহাসের পারম্পর্য যেন রক্ষা পায়, সে ব্যাপারটি নিশ্চিত করুন।",
        "mergehistory-box": "দুইটি পাতার একত্রীকরণ সংশোধনগুলি:",
        "mergehistory-list": "একীকরণযোগ্য সম্পাদনা ইতিহাস",
        "mergehistory-merge": "[[:$1]]-এর নিচের সংশোধনগুলি [[:$2]]-এর সাথে একত্র করা যাবে। রেডিও বোতাম কলামটি ব্যবহার করে কেবলমাত্র নির্দেশিত সময় ও তার আগের সমস্ত সংশোধন একত্র করুন। লক্ষ্য করুন, পরিভ্রমণ সংযোগ ব্যবহার করলে কলামটি আদি অবস্থায় ফেরত যাবে।",
        "mergehistory-go": "একত্রীকরণযোগ্য সম্পাদনাগুলি দেখানো হোক",
-       "mergehistory-submit": "সংশোধনগুলি একত্র করা হোক",
+       "mergehistory-submit": "সংশোধনগুলি একত্রীত করুন",
        "mergehistory-empty": "কোন সংশোধন একত্র করা যাবে না.",
        "mergehistory-done": "$1-এর $3{{PLURAL:$3|টি সংশোধন}} [[:$2]]-এর সাথে একত্রিত করা হয়েছে।",
        "mergehistory-fail": "ইতিহাস একত্র করা গেল না। অনুগ্রহ করে পাতাটি ও সময়ের প্যারামিটারগুলি আবার পরীক্ষা করে দেখুন।",
        "mergehistory-no-destination": "$1 বলে কোন গন্তব্য পাতার অস্তিত্ব নেই।",
        "mergehistory-invalid-source": "উৎস পাতার অবশ্যই একটি বৈধ শিরোনাম থাকতে হবে।",
        "mergehistory-invalid-destination": "গন্তব্য পাতার একটি বৈধ শিরোনাম থাকতে হবে।",
-       "mergehistory-autocomment": "[[:$1]] à¦\95à§\87 [[:$2]] -à¦\8f à¦\8fà¦\95তà§\8dরà§\80ত করা হয়েছে",
-       "mergehistory-comment": "[[:$1]] à¦\95à§\87 [[:$2]] -à¦\8f à¦\8fà¦\95তà§\8dরà§\80ত করা হয়েছে: $3",
+       "mergehistory-autocomment": "[[:$1]] à¦ªà¦¾à¦¤à¦¾à¦\9fিà¦\95à§\87 [[:$2]] à¦ªà¦¾à¦¤à¦¾à¦\9fির à¦¸à¦¾à¦¥à§\87 à¦\8fà¦\95তà§\8dরিত করা হয়েছে",
+       "mergehistory-comment": "[[:$1]] à¦ªà¦¾à¦¤à¦¾à¦\9fিà¦\95à§\87 [[:$2]] à¦ªà¦¾à¦¤à¦¾à¦\9fির à¦¸à¦¾à¦¥à§\87 à¦\8fà¦\95তà§\8dরিত করা হয়েছে: $3",
        "mergehistory-same-destination": "উৎস এবং গন্তব্য পাতা একই হতে পারবে না",
        "mergehistory-reason": "কারণ:",
        "mergelog": "একত্রীকরণ লগ",
        "revertmerge": "একত্রীকরণ বাতিল",
        "mergelogpagetext": "নিচে সবচেয়ে সাম্প্রতিক ঘটা এক পাতার ইতিহাসের সাথে অন্য পাতার ইতিহাসের একত্রীকরণের একটি তালিকা দেওয়া হল।",
-       "history-title": "\"$1\" à¦\8fর সংশোধনের ইতিহাস",
-       "difference-title": "\"$1\"-এর বিভিন্ন সংস্করণের মধ্যে পার্থক্য",
-       "difference-title-multipage": "\"$1\" ও \"$2\"-পাতার মধ্যে পার্থক্য",
-       "difference-multipage": "পাতাগুলোর মধ্যে পার্থক্য",
+       "history-title": "\"$1\" à¦ªà¦¾à¦¤à¦¾à¦\9fির সংশোধনের ইতিহাস",
+       "difference-title": "\"$1\" পাতাটির দুইটি সংশোধিত সংস্করণের মধ্যে পার্থক্য",
+       "difference-title-multipage": "\"$1\" ও \"$2\" পাতাগুলির মধ্যে পার্থক্য",
+       "difference-multipage": "(পাতাগুলির মধ্যে পার্থক্য)",
        "lineno": "$1 নং লাইন:",
-       "compareselectedversions": "নিরà§\8dবাà¦\9aিত à¦¸à¦\82সà§\8dà¦\95রণà¦\97à§\81লà§\8b à¦¤à§\81লনা à¦\95রà§\8b",
-       "showhideselectedversions": "নিরà§\8dবাà¦\9aিত à¦¸à¦\82শà§\8bধনà¦\97à§\81লà§\8b দেখাও/লুকাও",
-       "editundo": "পà§\82রà§\8dবাবসà§\8dথায় à¦\86নà§\8b",
+       "compareselectedversions": "নিরà§\8dবাà¦\9aিত à¦¸à¦\82শà§\8bধিত à¦¸à¦\82সà§\8dà¦\95রণà¦\97à§\81লির à¦¤à§\81লনা",
+       "showhideselectedversions": "নিরà§\8dবাà¦\9aিত à¦¸à¦\82শà§\8bধনà¦\97à§\81লি দেখাও/লুকাও",
+       "editundo": "পà§\82রà§\8dবাবসà§\8dথায় à¦«à§\87রত",
        "diff-empty": "(কোন পার্থক্য নেই)",
        "diff-multi-sameuser": "(একই ব্যবহারকারী দ্বারা সম্পাদিত {{PLURAL:$1|একটি মধ্যবর্তী সংশোধন|$1টি মধ্যবর্তী সংশোধন}} দেখানো হচ্ছে না)",
        "diff-multi-otherusers": "({{PLURAL:$2|একজন|$2 জন}} ব্যবহারকারী দ্বারা সম্পাদিত {{PLURAL:$1|একটি|$1টি}} মধ্যবর্তী সংশোধন দেখানো হচ্ছে না)",
-       "diff-multi-manyusers": "($2 জন {{PLURAL:$2|ব্যবহারাকারীর}} সম্পাদিত {{PLURAL:$1|একটি সাম্প্রতিক সংস্করণ|$1 টি সাম্প্রতিক সংস্করণ}} প্রদর্শিত হচ্ছে না)",
-       "difference-missing-revision": "$1 পার্থক্যের {{PLURAL:$2|একটি সংস্করণ|$2টি সংস্করণ}} খুঁজে পাওয়া যাচ্ছে না।\n\nসাধারণত মুছে ফেলা হয়েছে এমন পাতার মেয়াদ উত্তীর্ণ ইতিহাস পাতার লিংক খোলার কারণে এটি হতে পারে। \n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} অপসারণ লগে] বিস্তারিত তথ্য জানা যাবে।",
+       "diff-multi-manyusers": "($2 জনের বেশি {{PLURAL:$2|ব্যবহারকারীর}} সম্পাদিত {{PLURAL:$1|একটি মধ্যবর্তী সংশোধন|$1টি মধ্যবর্তী সংশোধন}} প্রদর্শিত হচ্ছে না)",
+       "difference-missing-revision": "এই পার্থক্যের ($1) অন্তর্গত {{PLURAL:$2|একটি সংশোধিত সংস্করণ|$2টি সংশোধিত সংস্করণ}} খুঁজে পাওয়া যাচ্ছে না।\n\nসাধারণত মুছে ফেলা হয়েছে এমন পাতার মেয়াদ উত্তীর্ণ ইতিহাস পাতার লিংক খোলার কারণে এটি হতে পারে। \n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} পাতা অবলুপ্তি লগে] বিস্তারিত তথ্য জানা যাবে।",
        "searchresults": "অনুসন্ধানের ফলাফল",
        "searchresults-title": "\"$1\" অনুসন্ধানের ফলাফল",
        "titlematches": "নিবন্ধের শিরোনাম মিলেছে",
        "textmatches": "পাতার লেখার সাথে মিলেছে",
-       "notextmatches": "কোন পাতার লেখার সাথে মিলে নেই",
+       "notextmatches": "কোন পাতার লেখার সাথে মিলেনি",
        "prevn": "পূর্ববর্তী {{PLURAL:$1|$1}}টি",
        "nextn": "পরবর্তী {{PLURAL:$1|$1}}টি",
        "prev-page": "পূর্ববর্তী পাতা",
        "prevn-title": "পূর্ববর্তী $1{{PLURAL:$1|টি ফলাফল}}",
        "nextn-title": "পরবর্তী $1টি {{PLURAL:$1|ফলাফল}}",
        "shown-title": "প্রতি পাতায় $1টি {{PLURAL:$1|ফলাফল}} দেখাও",
-       "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) à¦¦à§\87à¦\96ানà§\8b à¦¹à§\8bà¦\95।",
+       "viewprevnext": "($1 {{int:pipe-separator}} $2) ($3) à¦¦à§\87à¦\96à§\81ন",
        "searchmenu-exists": "'''এই উইকিতে \"[[:$1]]\" নামে একটি পাতা রয়েছে'''",
-       "searchmenu-new": "<strong>\"[[:$1]]\" পাতাটি এই উইকিতে তৈরি করুন!</strong> {{PLURAL:$2|0=|এছাড়া আপনার অনুসন্ধানের সাথে পাওয়া পাতা দেখুন।|এছাড়া অনুসন্ধানে পাওয়া ফলাফলগুলি দেখুন।}}",
-       "searchprofile-articles": "বিষয়বসà§\8dতà§\81র পাতা",
+       "searchmenu-new": "<strong>\"[[:$1]]\" পাতাটি এই উইকিতে তৈরি করুন!</strong> {{PLURAL:$2|0=|এছাড়া আপনার অনুসন্ধানের সাথে পাওয়া পাতাটি দেখুন।|এছাড়া অনুসন্ধানে পাওয়া ফলাফলগুলিও দেখুন।}}",
+       "searchprofile-articles": "বিষয়বসà§\8dতà§\81সমà§\83দà§\8dধ পাতা",
        "searchprofile-images": "মাল্টিমিডিয়া",
        "searchprofile-everything": "সমস্তকিছু",
-       "searchprofile-advanced": "à¦\89à¦\9aà§\8dà¦\9aতর",
+       "searchprofile-advanced": "à¦\89নà§\8dনত",
        "searchprofile-articles-tooltip": "$1 এ অনুসন্ধান",
        "searchprofile-images-tooltip": "ফাইলের জন্য অনুসন্ধান",
-       "searchprofile-everything-tooltip": "সà¦\95ল à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à¦¸à§\8dতà§\81 à¦\85নà§\81সনà§\8dধান à¦\95রà§\8b (à¦\86লাপà§\87র à¦ªà¦¾à¦¤à¦¾ সহ)",
-       "searchprofile-advanced-tooltip": "সà§\8dবনিরà§\8dধারিত à¦¨à¦¾à¦®à¦¸à§\8dথানà§\87 à¦\85নà§\81সনà§\8dধান à¦\95রà§\8b",
+       "searchprofile-everything-tooltip": "সà¦\95ল à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à¦¸à§\8dতà§\81 à¦\85নà§\81সনà§\8dধান à¦\95রà§\81ন (à¦\86লাপà§\87র à¦ªà¦¾à¦¤à¦¾সহ)",
+       "searchprofile-advanced-tooltip": "সà§\8dবনিরà§\8dধারিত à¦¨à¦¾à¦®à¦¸à§\8dথানà§\87 à¦\85নà§\81সনà§\8dধান à¦\95রà§\81ন",
        "search-result-size": "$1 ({{PLURAL:$2|১টি শব্দ|$2টি শব্দ}})",
-       "search-result-category-size": "{{PLURAL:$1 |১টি সদস্য |$1টি সদস্য}} ({{PLURAL:$2 |১টি উপবিষয়শ্রেণী|$2টি উপবিষয়শ্রেণী}}, {{PLURAL:$3 |১টি ফাইল |$3টি ফাইল}})",
+       "search-result-category-size": "{{PLURAL:$1|১টি সদস্য|$1টি সদস্য}} ({{PLURAL:$2|১টি উপবিষয়শ্রেণী|$2টি উপবিষয়শ্রেণী}}, {{PLURAL:$3|১টি ফাইল |$3টি ফাইল}})",
        "search-redirect": "($1 থেকে পুনর্নির্দেশিত)",
-       "search-section": "(অনুচ্ছেদ $1)",
-       "search-category": "(বিষয়শ্রেণী $1)",
-       "search-file-match": "(নথির à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à¦¸à§\8dতà§\81 মিলে যায়)",
-       "search-suggest": "à¦\86পনি à¦¸à¦®à§\8dভবত à¦¬à§\81à¦\9dাতà§\87 à¦\9aাà¦\87à¦\9bà§\87ন: $1",
-       "search-rewritten": "$1-এর জন্য ফলাফল দেখানো হচ্ছে। এর পরিবর্তে $2-এর জন্য অনুসন্ধান করুন।",
+       "search-section": "($1 পরিচ্ছেদ)",
+       "search-category": "($1 বিষয়শ্রেণী)",
+       "search-file-match": "(ফাà¦\87লà§\87র à¦¬à¦¿à¦·à¦¯à¦¼à¦¬à¦¸à§\8dতà§\81র à¦¸à¦¾à¦¥à§\87 মিলে যায়)",
+       "search-suggest": "à¦\86পনি à¦\95ি \"$1\" à¦¬à§\8bà¦\9dাতà§\87 à¦\9aাà¦\9aà§\8dà¦\9bà§\87ন?",
+       "search-rewritten": "$1-à¦\8fর à¦\9cনà§\8dয à¦\85নà§\81সনà§\8dধানà§\87র à¦«à¦²à¦¾à¦«à¦² à¦¦à§\87à¦\96ানà§\8b à¦¹à¦\9aà§\8dà¦\9bà§\87। à¦\8fর à¦ªà¦°à¦¿à¦¬à¦°à§\8dতà§\87 $2-à¦\8fর à¦\9cনà§\8dয à¦\85নà§\81সনà§\8dধান à¦\95রà§\81ন।",
        "search-interwiki-caption": "সহপ্রকল্পসমূহ",
-       "search-interwiki-default": "$1 থেকে ফলাফলসমূহ:",
+       "search-interwiki-default": "$1 à¦¥à§\87à¦\95à§\87 à¦ªà§\8dরাপà§\8dত à¦«à¦²à¦¾à¦«à¦²à¦¸à¦®à§\82হ:",
        "search-interwiki-more": "(আরও)",
        "search-interwiki-more-results": "আরও ফলাফল",
        "search-relatedarticle": "সম্পর্কিত",
        "searchall": "সমস্ত",
        "showingresults": "নিচে '''$2''' নং থেকে শুরু করে {{PLURAL:$1|'''1''' ফলাফল|'''$1''' ফলাফলসমূহ}} দেখানো হল।",
        "showingresultsinrange": "#<strong>$2</strong> থেকে #<strong>$3</strong> পরিসীমার মধ্যে {{PLURAL:$1|<strong>১টি</strong> ফলাফল|<strong>$1টি</strong> ফলাফল}} নিচে দেখানো হচ্ছে।",
-       "search-showingresults": "{{PLURAL:$4|<strong>$3</strong>-এর মধ্যে <strong>$1</strong>টি ফলাফল|<strong>$3</strong>-এর মধ্যে <strong>$1 - $2</strong>টি ফলাফল}}",
-       "search-nonefound": "à¦\96à§\8bà¦\81à¦\9cà¦\95à§\83ত à¦ªà¦¾à¦¤ার সাথে মিলে যায় এমন কোনো ফলাফল নেই।",
-       "search-nonefound-thiswiki": "à¦\96à§\8bà¦\81à¦\9c à¦\95রার সাথে মিলে যায় এমন কোনো ফলাফল এই সাইটে নেই।",
+       "search-showingresults": "মোট {{PLURAL:$4|<strong>$3</strong>টি ফলাফলের মধ্যে <strong>$1</strong>টি ফলাফল|মোট <strong>$3</strong>টি ফলাফলের মধ্যে <strong>$1 - $2</strong> নং ফলাফল}}",
+       "search-nonefound": "à¦\85নà§\81সনà§\8dধানà¦\95à§\83ত à¦\9cিà¦\9cà§\8dà¦\9eাসার সাথে মিলে যায় এমন কোনো ফলাফল নেই।",
+       "search-nonefound-thiswiki": "à¦\85নà§\81সনà§\8dধানà¦\95à§\83ত à¦\9cিà¦\9cà§\8dà¦\9eাসার সাথে মিলে যায় এমন কোনো ফলাফল এই সাইটে নেই।",
        "powersearch-legend": "উন্নত অনুসন্ধান",
-       "powersearch-ns": "নামসà§\8dথানà§\87 à¦\85নà§\81সনà§\8dধান à¦\95রà§\8b:",
-       "powersearch-togglelabel": "পরà§\80à¦\95à§\8dষা:",
-       "powersearch-toggleall": "সà¦\95ল",
-       "powersearch-togglenone": "à¦\95িà¦\9bà§\81 নয়",
-       "powersearch-remember": "ভবিষà§\8dযত à¦\85নà§\81সনà§\8dধানà¦\97à§\81লির à¦\9cনà§\8dয à¦¨à¦¿à¦°à§\8dবাà¦\9aন à¦®à¦¨à§\87 à¦°à¦¾à¦\96à§\81ন",
+       "powersearch-ns": "নামসà§\8dথানà¦\97à§\81লিতà§\87 à¦\85নà§\81সনà§\8dধান à¦\95রà§\81ন:",
+       "powersearch-togglelabel": "নিরà§\8dবাà¦\9aন à¦\95রà§\81ন:",
+       "powersearch-toggleall": "সবà¦\97à§\81লি",
+       "powersearch-togglenone": "à¦\95à§\8bনà¦\9fিà¦\87 নয়",
+       "powersearch-remember": "ভবিষà§\8dযত à¦\85নà§\81সনà§\8dধানà¦\97à§\81লির à¦\9cনà§\8dয à¦¨à¦¿à¦°à§\8dবাà¦\9aন à¦®à¦¨à§\87 à¦°à¦¾à¦\96া à¦¹à§\8bà¦\95",
        "search-external": "বহিঃস্থ অনুসন্ধান",
        "searchdisabled": "{{SITENAME}} অনুসন্ধান এখন নিষ্ক্রিয় আছে। আপনি গুগলের মাধ্যমে অনুসন্ধান চালাতে পারেন। লক্ষ্য করুন যে {{SITENAME}}-এর বিষয়বস্তুর উপর গুগলের ইন্ডেক্সগুলি হালনাগাদ না-ও করা থাকতে পারে।",
-       "search-error": "অনুসন্ধানের সময় একটি ত্রুটি হয়েছে: $1",
-       "search-warning": "অনুসন্ধানের সময় একটি সতর্কীকরণ দেখিয়েছে: $1",
+       "search-error": "à¦\85নà§\81সনà§\8dধানà§\87র à¦¸à¦®à¦¯à¦¼ à¦\8fà¦\95à¦\9fি à¦¤à§\8dরà§\81à¦\9fি à¦\89à§\8eপনà§\8dন à¦¹à¦¯à¦¼à§\87à¦\9bà§\87: $1",
+       "search-warning": "অনুসন্ধানের সময় একটি সতর্ক বার্তা উৎপন্ন হয়েছে: $1",
        "preferences": "আমার পছন্দ",
        "mypreferences": "পছন্দসমূহ",
        "prefs-edits": "সম্পাদনা সংখ্যা:",
-       "prefsnologintext2": "à¦\86পনার à¦ªà¦\9bনà§\8dদসমà§\82হ à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রতে প্রবেশ করুন।",
+       "prefsnologintext2": "à¦\86পনার à¦ªà¦\9bনà§\8dদà¦\97à§\81লি à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রতà§\87 à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fে প্রবেশ করুন।",
        "prefs-skin": "আবরণ",
        "skin-preview": "প্রাকদর্শন",
        "datedefault": "কোন পছন্দ নেই",
-       "prefs-labs": "পরà§\80à¦\95à§\8dষাà¦\97ার à¦¬à§\88শিষà§\8dà¦\9fসমূহ",
+       "prefs-labs": "পরà§\80à¦\95à§\8dষাà¦\97ার à¦¸à§\81বিধাসমূহ",
        "prefs-user-pages": "ব্যবহারকারীর পাতা",
        "prefs-personal": "ব্যবহারকারীর বৃত্তান্ত",
        "prefs-rc": "সাম্প্রতিক পরিবর্তনসমূহ",
        "prefs-watchlist": "নজরতালিকা",
-       "prefs-editwatchlist": "নজরতালিকা সম্পাদনা করো",
+       "prefs-editwatchlist": "নজরতালিকা সম্পাদনা",
        "prefs-editwatchlist-label": "আপনার নজরতালিকার ভুক্তিসমূহ সম্পাদনা করুন:",
-       "prefs-editwatchlist-edit": "আপনার নজরতালিকায় থাকা শিরোনাম দেখুন ও সরান",
+       "prefs-editwatchlist-edit": "আপনার নজরতালিকায় থাকা শিরোনামগুলি দেখুন ও সরিয়ে ফেলুন",
        "prefs-editwatchlist-raw": "অশোধিত নজরতালিকা সম্পাদনা করুন",
-       "prefs-editwatchlist-clear": "নà¦\9cরতালিà¦\95া à¦ªà¦°à¦¿à¦¸à§\8dà¦\95ার করুন",
-       "prefs-watchlist-days": "যত দিনের নজরতালিকা দেখানো হবে:",
+       "prefs-editwatchlist-clear": "নà¦\9cরতালিà¦\95া à¦\96ালি করুন",
+       "prefs-watchlist-days": "যতসংখ্যক দিনের নজরতালিকা দেখানো হবে:",
        "prefs-watchlist-days-max": "সর্বোচ্চ $1 {{PLURAL:$1|দিন|দিন}}",
-       "prefs-watchlist-edits": "সম্প্রসারিত নজর তালিকায় সর্বোচ্চ সংখ্যার পরিবর্তন দেখানোর জন্য:",
-       "prefs-watchlist-edits-max": "সরà§\8dবà§\8bà¦\9aà§\8dà¦\9a à¦¨à¦®à§\8dবর: ১০০০",
+       "prefs-watchlist-edits": "সম্প্রসারিত নজরতালিকায় প্রদর্শিত পরিবর্তনের সর্বোচ্চ সংখ্যা:",
+       "prefs-watchlist-edits-max": "সরà§\8dবà§\8bà¦\9aà§\8dà¦\9a à¦¸à¦\82à¦\96à§\8dযা: ১০০০",
        "prefs-watchlist-token": "নজরতালিকা টোকেন:",
        "prefs-misc": "বিবিধ",
        "prefs-resetpass": "পাসওয়ার্ড পরিবর্তন",
        "prefs-changeemail": "ইমেইল ঠিকানা পরিবর্তন বা বাতিল করুন",
-       "prefs-setemail": "একটি ই-মেইল ঠিকানা নির্ধারণ করুন",
-       "prefs-email": "ই-মেইল অপশন",
+       "prefs-setemail": "একটি ইমেইল ঠিকানা নির্ধারণ করুন",
+       "prefs-email": "ইমেইলের পছন্দগুলি",
        "prefs-rendering": "অবয়ব",
        "saveprefs": "সংরক্ষণ",
-       "restoreprefs": "সà¦\95ল à¦ªà§\82রà§\8dবনিরà§\8dধারিত à¦¸à§\87à¦\9fিà¦\82 à¦«à¦¿à¦°à¦¿à¦¯à¦¼à§\87 à¦\86নà§\8b (সà¦\95ল à¦\85নà§\81à¦\9aà§\8dà¦\9bà§\87দে)",
+       "restoreprefs": "সà¦\95ল à¦ªà§\82রà§\8dবনিরà§\8dধারিত à¦¸à§\87à¦\9fিà¦\82 à¦«à¦¿à¦°à¦¿à¦¯à¦¼à§\87 à¦\86নà§\8b (সà¦\95ল à¦\85à¦\82শে)",
        "prefs-editing": "সম্পাদনা",
        "searchresultshead": "অনুসন্ধান",
-       "stub-threshold": "à¦\85সমà§\8dপà§\82রà§\8dণ à¦²à¦¿à¦\99à§\8dà¦\95 à¦¬à¦¿à¦¨à§\8dযাসà§\87র à¦\9cনà§\8dয à¦ªà§\8dরানà§\8dতিà¦\95 à¦®à¦¾à¦ª ($1):",
+       "stub-threshold": "à¦\85সমà§\8dপà§\82রà§\8dণ à¦¨à¦¿à¦¬à¦¨à§\8dধà§\87র à¦¸à¦\82যà§\8bà¦\97 à¦«à¦°à¦®à§\8dযাà¦\9fিà¦\82-à¦\8fর à¦\9cনà§\8dয à¦\8fরà¦\95ম à¦¨à¦¿à¦¬à¦¨à§\8dধà§\87র à¦\86à¦\95ারà§\87র à¦ªà§\8dরানà§\8dতসà§\80মা ($1):",
        "stub-threshold-sample-link": "নমুনা",
        "stub-threshold-disabled": "নিস্ক্রিয়",
-       "recentchangesdays": "সাম্প্রতিক পরিবর্তনে দিনসমূহ দেখানোর জন্য:",
-       "recentchangesdays-max": "সর্বোচ্চ $1 {{PLURAL:$1|দিন|দিন}}",
-       "recentchangescount": "সাম্প্রতিক পরিবর্তনে প্রদর্শিত সম্পাদনার সংখ্যা:",
-       "prefs-help-recentchangescount": "à¦\8fতà§\87 à¦¸à¦¾à¦®à§\8dপà§\8dরতিà¦\95 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনসমà§\82হ, à¦ªà¦¾à¦¤à¦¾à¦° à¦\87তিহাস à¦\8fবà¦\82 à¦²à¦\97 অন্তর্ভুক্ত।",
-       "prefs-help-watchlist-token2": "à¦\8fà¦\9fি à¦\86পনার à¦¨à¦\9cরতালিà¦\95ার à¦\93য়à§\87ব à¦«à¦¿à¦¡à§\87র à¦\97à§\8bপন à¦\9aাবি। à¦¯à§\87 à¦\95à§\87à¦\89 à¦¯à¦¿à¦¨à¦¿ à¦\8fà¦\9fা à¦\9cানà§\87ন তিনি আপনার নজরতালিকা পড়তে সক্ষম হবেন, তাই এটি প্রকাশ করবেন না। [[Special:ResetTokens|আপনার এটি পুনঃনির্ধারণ করার প্রয়োজন হলে এখানে ক্লিক করুন]]।",
-       "savedprefs": "à¦\86পনার à¦ªà¦\9bনà§\8dদà¦\97à§\81লà§\8b সংরক্ষণ করা হয়েছে।",
+       "recentchangesdays": "সাম্প্রতিক পরিবর্তন পাতায় প্রদর্শিত দিনের সংখ্যা:",
+       "recentchangesdays-max": "সর্বোচ্চ $1 {{PLURAL:$1|দিনের}}",
+       "recentchangescount": "সামà§\8dপà§\8dরতিà¦\95 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনà§\87 à¦ªà§\8dরদরà§\8dশিত à¦¸à¦®à§\8dপাদনার à¦ªà§\82রà§\8dবনিরà§\8dধারিত à¦¸à¦\82à¦\96à§\8dযা:",
+       "prefs-help-recentchangescount": "à¦\8fতà§\87 à¦¸à¦¾à¦®à§\8dপà§\8dরতিà¦\95 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনà¦\97à§\81লি, à¦ªà¦¾à¦¤à¦¾à¦° à¦\87তিহাসà¦\97à§\81লি à¦\8fবà¦\82 à¦²à¦\97à¦\97à§\81লি অন্তর্ভুক্ত।",
+       "prefs-help-watchlist-token2": "à¦\8fà¦\9fি à¦\86পনার à¦¨à¦\9cরতালিà¦\95ার à¦\93য়à§\87ব à¦«à¦¿à¦¡à§\87র à¦\97à§\8bপন à¦\9aাবি। à¦\95à§\87à¦\89 à¦¯à¦¦à¦¿ à¦\8fà¦\9fি à¦\9cানতà§\87 à¦ªà¦¾à¦°à§\87ন, à¦¤à¦¾à¦¹à¦²à§\87 তিনি আপনার নজরতালিকা পড়তে সক্ষম হবেন, তাই এটি প্রকাশ করবেন না। [[Special:ResetTokens|আপনার এটি পুনঃনির্ধারণ করার প্রয়োজন হলে এখানে ক্লিক করুন]]।",
+       "savedprefs": "à¦\86পনার à¦ªà¦\9bনà§\8dদà¦\97à§\81লি সংরক্ষণ করা হয়েছে।",
        "savedrights": "{{GENDER:$1|$1}}-এর ব্যবহারকারী দল সংরক্ষিত হয়েছে।",
-       "timezonelegend": "সময়স্থান:",
+       "timezonelegend": "সময় অঞ্চল:",
        "localtime": "স্থানীয় সময়:",
        "timezoneuseserverdefault": "উইকির পূর্বনির্ধারিত সময় ব্যবহার করো ($1)",
        "timezoneuseoffset": "অন্য (অফসেট নির্দিষ্ট করুন)",
        "prefs-signature": "স্বাক্ষর",
        "prefs-dateformat": "তারিখ বিন্যাস",
        "prefs-timeoffset": "সময় অফসেট",
-       "prefs-advancedediting": "সাধারণ à¦\85পশন",
+       "prefs-advancedediting": "সাধারণ à¦ªà¦\9bনà§\8dদà¦\97à§\81লি",
        "prefs-editor": "সম্পাদক",
        "prefs-preview": "প্রাকদর্শন",
-       "prefs-advancedrc": "à¦\89à¦\9aà§\8dà¦\9aতর à¦\85পশন",
+       "prefs-advancedrc": "à¦\89à¦\9aà§\8dà¦\9aতর à¦ªà¦\9bনà§\8dদà¦\97à§\81লি",
        "prefs-advancedrendering": "উচ্চতর অপশন",
-       "prefs-advancedsearchoptions": "à¦\89à¦\9aà§\8dà¦\9aতর à¦\85পশন",
+       "prefs-advancedsearchoptions": "à¦\89à¦\9aà§\8dà¦\9aতর à¦ªà¦\9bনà§\8dদà¦\97à§\81লি",
        "prefs-advancedwatchlist": "উচ্চতর অপশন",
-       "prefs-displayrc": "প্রদর্শনী অপশন",
+       "prefs-displayrc": "প্রদর্শনীর পছন্দগুলি",
        "prefs-displaywatchlist": "প্রদর্শনী অপশন",
        "prefs-tokenwatchlist": "টোকেন",
        "prefs-diffs": "পার্থক্য",
        "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": "ব্যবহারকারীগণ",
        "grouppage-sysop": "{{ns:project}}:প্রশাসক",
        "grouppage-bureaucrat": "{{ns:project}}:ব্যুরোক্র্যাট",
        "grouppage-suppress": "{{ns:project}}:দমনকারী",
-       "right-read": "পাতাসমà§\82হ à¦ªà¦¡à¦¼à§\81ন",
-       "right-edit": "পাতা à¦¸à¦®à§\8dপাদনা à¦\95রà§\81ন",
-       "right-createpage": "পাতা à¦¤à§\88রি à¦\95রà§\8b (à¦\86লাপà§\87র à¦ªà¦¾à¦¤à¦¾ à¦¨à¦¯à¦¼)",
-       "right-createtalk": "à¦\86লà§\8bà¦\9aনা à¦ªà¦¾à¦¤à¦¾ à¦¤à§\88রি à¦\95রà§\81ন",
+       "right-read": "যà§\87à¦\95à§\8bন à¦ªà¦¾à¦¤à¦¾ à¦ªà¦¡à¦¼à¦¾",
+       "right-edit": "পাতা à¦¸à¦®à§\8dপাদনা à¦\95রা",
+       "right-createpage": "à¦\86লাপ à¦ªà¦¾à¦¤à¦¾ à¦¨à¦¯à¦¼, à¦\8fমন à¦ªà¦¾à¦¤à¦¾ à¦¤à§\88রি à¦\95রা",
+       "right-createtalk": "à¦\86লাপ à¦ªà¦¾à¦¤à¦¾ à¦¤à§\88রি à¦\95রা",
        "right-createaccount": "নতুন ব্যবহারকারীর অ্যাকাউন্ট তৈরি করুন",
        "right-autocreateaccount": "স্বয়ংক্রিয়ভাবে একটি বাহ্যিক ব্যবহারকারী অ্যাকাউন্ট দিয়ে প্রবেশ করুন",
-       "right-minoredit": "à¦\85নà§\81লà§\8dলà§\87à¦\96à§\8dয à¦¸à¦®à§\8dপাদনা à¦¹à¦¿à¦¸à§\87বà§\87 à¦\9aিহà§\8dনিত",
+       "right-minoredit": "à¦\95à§\8bনà¦\93 à¦¸à¦®à§\8dপাদনা à¦\85নà§\81লà§\8dলà§\87à¦\96à§\8dয à¦¹à¦¿à¦¸à§\87বà§\87 à¦\9aিহà§\8dনিত à¦\95রা",
        "right-move": "পাতা সরান",
        "right-move-subpages": "পাতাগুলোকে তার উপপাতাসহ সরিয়ে নিন",
        "right-move-rootuserpages": "root ব্যবহারকারীর পাতাগুলো সরিয়ে ফেলুন",
        "right-suppressredirect": "পাতা স্থানান্তরের সময় মূল পাতা থেকে পুনর্নির্দেশ তৈরী করছে না",
        "right-upload": "ফাইল আপলোড করুন",
        "right-reupload": "বিদ্যমান ফাইল প্রতিস্থাপন করো",
-       "right-reupload-own": "à¦\95ারà¦\93 à¦\86পলà§\8bডà¦\95à§\83ত à¦«à¦¾à¦\87ল à¦\93ভাররাà¦\87à¦\9f à¦\95রà§\81ন",
+       "right-reupload-own": "নিà¦\9cà§\87র à¦¦à§\8dবারা à¦\86পলà§\8bডà¦\95à§\83ত à¦«à¦¾à¦\87ল à¦¯à¦¾ à¦\87তিমধà§\8dযà§\87à¦\87 à¦¬à¦¿à¦¦à§\8dযমান, à¦¸à§\87à¦\9fি à¦®à§\81à¦\9bà§\87 à¦ªà§\81নরায় à¦¨à¦¤à§\81ন à¦\95রà§\87 à¦\86পলà§\8bড à¦\95রা",
        "right-reupload-shared": "স্থানীয়ভাবে শেয়ার্ড মিডিয়া রিপোজিটরীর ফাইল ওভাররাইড",
        "right-upload_by_url": "URL থেকে ফাইল আপলোড",
-       "right-purge": "নিশà§\8dà¦\9aিতà¦\95রণ à¦\9bাড়াà¦\87 à¦¸à¦¾à¦\87à¦\9fà§\87র à¦\95à§\8dযাশ à¦ªà¦¾à¦°à§\8dà¦\9c à¦\95রà§\81ন",
+       "right-purge": "নিশà§\8dà¦\9aিতà¦\95রণ à¦\9bাড়াà¦\87 à¦¸à¦¾à¦\87à¦\9fà§\87র à¦\95à§\8dযাশ à¦¶à§\8bধন à¦\95রা",
        "right-autoconfirmed": "অর্ধ-সুরক্ষিত পাতা সম্পাদনা",
        "right-bot": "সয়ংক্রিয় পদ্ধতি হিসাবে চিহ্নিত করণ",
        "right-nominornewtalk": "বার্তা লেখার মত আলাপ পাতায় কোনো অনুল্লেখ্য সম্পাদনা নেই",
        "right-deletedtext": "অপরাসারিত সংশোধনের অপরাসারিত লেখা এবং পরিবর্তনসমূহ দেখাও",
        "right-browsearchive": "অপসারিত পাতা অনুসন্ধান করো",
        "right-undelete": "পাতাটি পুনরুদ্ধার করুন",
-       "right-suppressrevision": "যà§\87à¦\95à§\8bন à¦¬à§\8dযবহারà¦\95ারà§\80 à¦¥à§\87à¦\95à§\87 à¦ªà¦¾à¦¤à¦¾à¦° à¦¨à¦¿à¦°à§\8dদিষà§\8dà¦\9f à¦¸à¦\82শà§\8bধন à¦¦à§\87à¦\96à§\81ন, à¦\86ড়াল à¦\95রà§\81ন à¦\8fবà¦\82 à¦\85-à¦\86ড়াল à¦\95রুন",
-       "right-viewsuppressed": "সà¦\95ল à¦¬à§\8dযবহারà¦\95ারà§\80র à¦\9cনà§\8dয à¦²à§\81à¦\95িয়াত à¦¸à¦\82শà§\8bধন à¦ªà§\8dরদরà§\8dশন à¦\95র",
+       "right-suppressrevision": "যà§\87à¦\95à§\8bন à¦¬à§\8dযবহারà¦\95ারà§\80 à¦¥à§\87à¦\95à§\87 à¦ªà¦¾à¦¤à¦¾à¦° à¦¨à¦¿à¦°à§\8dদিষà§\8dà¦\9f à¦¸à¦\82শà§\8bধন à¦¦à§\87à¦\96à§\81ন, à¦²à§\81à¦\95িয়à§\87  à¦°à¦¾à¦\96à§\81ন à¦\8fবà¦\82 à¦ªà§\8dরà¦\95াশà§\8dযà§\87 à¦\86নুন",
+       "right-viewsuppressed": "যà§\87à¦\95à§\8bন à¦¬à§\8dযবহারà¦\95ারà§\80র à¦\95াà¦\9b à¦¥à§\87à¦\95à§\87 à¦²à§\81à¦\95ায়িত à¦¸à¦\82সà§\8dà¦\95রণà¦\97à§\81লি à¦¦à§\87à¦\96à§\81ন",
        "right-suppressionlog": "ব্যক্তিগত লগ দেখাও",
        "right-block": "সম্পাদনা করতে কোনো ব্যবহারকারীকে বাঁধা দাও",
        "right-blockemail": "ই-মেইল পাঠাতে কোনো ব্যবহারকারীকে বাঁধা দাও",
        "right-rollback": "একটি নির্দিষ্ট পাতার সর্বশেষ ব্যবহারকারীর সম্পদনা পূর্বাবস্থায় ফিরিয়ে আনুন",
        "right-markbotedits": "ফেরত আনা সম্পাদনাসমূহকে বট সম্পাদনা হিসেবে চিহ্নিত করে",
        "right-noratelimit": "রেট লিমিটের ভিত্তিতে পরিবর্তন হবে না",
-       "right-import": "à¦\85নà§\8dয à¦\89à¦\87à¦\95ি à¦¥à§\87à¦\95à§\87 à¦ªà¦¾à¦¤à¦¾ à¦\86মদানà§\80 à¦\95রà§\8b",
+       "right-import": "à¦\85নà§\8dয à¦\89à¦\87à¦\95ি à¦¥à§\87à¦\95à§\87 à¦ªà¦¾à¦¤à¦¾ à¦\86মদানি à¦\95রা",
        "right-importupload": "ফাইল আপলোড থেকে এই পাতাগুলো আমদানী করো",
        "right-patrol": "অন্যের সম্পাদনা পরীক্ষিত বলে চিহ্নিত করো",
        "right-autopatrol": "কারও নিজের সম্পাদনা সয়ংক্রিয়ভাবে পরীক্ষাণ হিসাবে চিহ্নিত",
        "right-mergehistory": "পাতার ইতিহাস একীকরণ করুন।",
        "right-userrights": "সকল ব্যবহারকারী অধিকার সম্পাদনা করুন",
        "right-userrights-interwiki": "অন্যান্য উইকির ব্যবহারকারীদের অধিকারসমূহ সম্পাদনা করুন।",
-       "right-siteadmin": "ডাà¦\9fাবà§\87à¦\9c à¦¬à¦¨à§\8dধ à¦\8fবà¦\82 à¦\96à§\81লà§\81ন",
+       "right-siteadmin": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দà§\8dধ à¦\95রা à¦\8fবà¦\82 à¦\96à§\8bলা",
        "right-override-export-depth": "৫ম স্তর পর্যন্ত সংযুক্তিসহ একটি পাতা রপ্তানী করুন",
-       "right-sendemail": "অন্য ব্যবহারকারীকে ইমেইল পাঠান",
+       "right-sendemail": "অন্য ব্যবহারকারীকে ইমেইল পাঠান",
        "right-managechangetags": "[[Special:Tags|ট্যাগ]] তৈরি ও সক্রিয়/নিষ্ক্রিয় করুন",
-       "right-applychangetags": "সমà§\8dপাদনার à¦¸à¦¾à¦¥à§\87 [[Special:Tags|à¦\9fà§\8dযাà¦\97]] à¦¯à§\81à¦\95à§\8dত à¦\95রà§\81ন",
+       "right-applychangetags": "নিà¦\9cসà§\8dব à¦¸à¦®à§\8dপাদনার à¦¸à¦¾à¦¥à§\87 [[Special:Tags|à¦\9fà§\8dযাà¦\97]] à¦¯à§\81à¦\95à§\8dত à¦\95রা",
        "right-changetags": "নির্দিষ্ট সংস্করণ এবং দীর্ঘ সম্পাদনাগুলোতে [[Special:Tags|ট্যাগ]] সংযোজন ও অপসারণ করুন",
        "right-deletechangetags": "ডাটাবেজ থেকে [[Special:Tags|ট্যাগ]] অপসারণ করা",
        "grant-generic": "\"$1\" অধিকার স্তর",
        "grant-editpage": "বিদ্যমান পাতা সম্পাদনা করুন",
        "grant-editprotected": "সংরক্ষিত পাতা সম্পাদনা করুন",
        "grant-highvolume": "উচ্চ-মাত্রার সম্পাদনা",
-       "grant-oversight": "বà§\8dযবহারà¦\95ারà§\80 à¦²à§\81à¦\95ান à¦\93 à¦\87তিহাস à¦\85পসারণ",
+       "grant-oversight": "বà§\8dযবহারà¦\95ারà§\80 à¦²à§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96া à¦\93 à¦¸à¦\82শà§\8bধন à¦¦à¦®à¦¨",
        "grant-patrol": "পাতার পরিবর্তনে টহল দেয়া",
        "grant-privateinfo": "ব্যক্তিগত তথ্যে প্রবেশাধিকার",
        "grant-protect": "পাতাসমূহ সুরক্ষা ও অরক্ষিত করুন",
        "action-autocreateaccount": "স্বয়ংক্রিয়ভাবে এই বাহ্যিক ব্যবহারকারী অ্যাকাউন্ট তৈরি করার",
        "action-history": "এই পাতার ইতিহাস দেখার",
        "action-minoredit": "এই সম্পাদনাটি অনুল্লেখ্য হিসেবে চিহ্নিত করার",
-       "action-move": "পাতাà¦\9fি à¦¸à¦°à¦¿à¦¯à¦¼à§\87 à¦«à§\87লà§\81ন",
-       "action-move-subpages": "পাতাà¦\9fি à¦\8fবà¦\82 à¦\8fর à¦\89পপাতাà¦\97à§\81লà§\8b à¦¸à¦°à¦¿à¦¯à¦¼à§\87 à¦«à§\87লà§\81ন",
+       "action-move": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦¸à§\8dথানানà§\8dতর à¦\95রার",
+       "action-move-subpages": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\8fবà¦\82 à¦\8fর à¦\89পপাতাà¦\97à§\81লি à¦¸à§\8dথানানà§\8dতর à¦\95রার",
        "action-move-rootuserpages": "root ব্যবহারকারীর পাতাগুলো সরিয়ে ফেলুন",
-       "action-move-categorypages": "বিষয়শ্রেণী পাতাসমূহ স্থানান্তর করুন",
+       "action-move-categorypages": "বিষয়শ্রেণীর পাতা স্থানান্তর করার",
        "action-movefile": "এই ফাইল স্থানান্তর করার",
        "action-upload": "এই ফাইল আপলোড করার",
-       "action-reupload": "বিদà§\8dযমান à¦«à¦¾à¦\87ল à¦ªà§\8dরতিসà§\8dথাপন à¦\95রà§\8b",
+       "action-reupload": "à¦\8fà¦\87 à¦¬à¦¿à¦¦à§\8dযমান à¦«à¦¾à¦\87ল à¦ªà§\8dরতিসà§\8dথাপন à¦\95রার",
        "action-reupload-shared": "শেয়ার্ড রিপোজিটরীতে এই ফাইলটি হালনাগাদ করার",
-       "action-upload_by_url": "à¦\95à§\8bন à¦\87à¦\89à¦\86রà¦\8fল à¦¥à§\87à¦\95à§\87 à¦«à¦¾à¦\87লà¦\9fি à¦\86পলà§\8bড à¦\95রà§\8b",
-       "action-writeapi": "রাà¦\87à¦\9f à¦\8fপিà¦\86à¦\87 à¦¬à§\8dযবহার à¦\95রà§\81ন",
-       "action-delete": "পাতাà¦\9fি à¦®à§\81à¦\9bà§\87 à¦«à§\87লà§\8b",
+       "action-upload_by_url": "à¦\8fà¦\95à¦\9fি à¦\87à¦\89à¦\86রà¦\8fল à¦¥à§\87à¦\95à§\87 à¦\8fà¦\87 à¦«à¦¾à¦\87লà¦\9fি à¦\86পলà§\8bড à¦\95রার",
+       "action-writeapi": "à¦\8fপিà¦\86à¦\87 à¦²à§\87à¦\96া à¦¬à§\8dযবহার à¦\95রার",
+       "action-delete": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦\85পসারণ à¦\95রার",
        "action-deleterevision": "সংশোধনটি মুছে ফেলার",
        "action-deletelogentry": "লগের ভুক্তি অপসারণ করার",
        "action-deletedhistory": "পাতার অপসারিত ইতিহাস দেখার",
        "action-deletedtext": "অপসারিত সংশোধনের লেখা দেখার",
-       "action-browsearchive": "অপসারিত পাতায় অনুসন্ধান করুন",
+       "action-browsearchive": "অপসারিত পাতা অনুসন্ধান করার",
        "action-undelete": "পাতাটি পুনরুদ্ধার করার",
        "action-suppressrevision": "লুকানো সংস্করণগুলো পর্যালোচনা এবং পুনঃস্থাপন করার",
        "action-suppressionlog": "এই ব্যক্তিগত লগ দেখার",
        "action-block": "এই ব্যবহারকারীকে সম্পাদনা করতে বাঁধা দেয়ার",
        "action-protect": "এই পাতার সুরক্ষার মাত্রা পরিবর্তন করার",
        "action-rollback": "একটি নির্দিষ্ট পাতার সর্বশেষ ব্যবহারকারীর সম্পদনা পূর্বাবস্থায় ফিরিয়ে আনুন",
-       "action-import": "à¦\85নà§\8dয à¦\89à¦\87à¦\95ি à¦¥à§\87à¦\95à§\87 à¦ªà¦¾à¦¤à¦¾ à¦\86মদানà§\80 à¦\95রà§\8b",
-       "action-importupload": "ফাà¦\87ল à¦\86পলà§\8bড à¦¥à§\87à¦\95à§\87 à¦ªà¦¾à¦¤à¦¾ à¦\86মদানà§\80 à¦\95রà§\8b",
-       "action-patrol": "à¦\85নà§\8dযদà§\87র à¦¸à¦®à§\8dপাদনা à¦ªà¦°à§\80à¦\95à§\8dষিত à¦¬à¦²à§\87 à¦\9aিহà§\8dনিত à¦\95রà§\8b",
+       "action-import": "à¦\85নà§\8dয à¦\89à¦\87à¦\95ি à¦¥à§\87à¦\95à§\87 à¦ªà¦¾à¦¤à¦¾ à¦\86মদানি à¦\95রার",
+       "action-importupload": "ফাà¦\87ল à¦\86পলà§\8bড à¦¥à§\87à¦\95à§\87 à¦ªà¦¾à¦¤à¦¾ à¦\86মদানি à¦\95রার",
+       "action-patrol": "à¦\85নà§\8dযদà§\87র à¦¸à¦®à§\8dপাদনা à¦ªà¦°à§\80à¦\95à§\8dষিত à¦¬à¦²à§\87 à¦\9aিহà§\8dনিত à¦\95রার",
        "action-autopatrol": "পরীক্ষিত বলে চিহ্নিত কি আপনি সম্পাদনা করেছেন",
-       "action-unwatchedpages": "নà¦\9cরতালিà¦\95া à¦¬à¦¹à¦¿à¦°à§\8dভà§\82ত à¦ªà¦¾à¦¤à¦¾à¦\97à§\81লির à¦¤à¦¾à¦²à¦¿à¦\95া à¦¦à§\87à¦\96াà¦\93",
+       "action-unwatchedpages": "নà¦\9cরতালিà¦\95া à¦¬à¦¹à¦¿à¦°à§\8dভà§\82ত à¦ªà¦¾à¦¤à¦¾à¦\97à§\81লির à¦¤à¦¾à¦²à¦¿à¦\95া à¦¦à§\87à¦\96ার",
        "action-mergehistory": "এই পাতার ইতিহাস একত্রিত করার",
-       "action-userrights": "সà¦\95ল à¦¬à§\8dযবহারà¦\95ারà§\80র à¦\85ধিà¦\95ার à¦¸à¦®à§\8dপাদনা à¦\95রà§\81ন",
-       "action-userrights-interwiki": "অন্যান্য উইকির ব্যবহারকারীদের অধিকারসমূহ সম্পাদনা করুন",
-       "action-siteadmin": "ডাà¦\9fাবà§\87à¦\9c à¦¬à¦¨à§\8dধ à¦\85থবা à¦\96à§\81লà§\81ন",
+       "action-userrights": "সà¦\95ল à¦¬à§\8dযবহারà¦\95ারà§\80র à¦\85ধিà¦\95ার à¦¸à¦®à§\8dপাদনা à¦\95রার",
+       "action-userrights-interwiki": "অন্য উইকিতে ব্যবহারকারীদের অধিকার সম্পাদনা করার",
+       "action-siteadmin": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দà§\8dধ à¦\95রার à¦\85থবা à¦\96à§\8bলার",
        "action-sendemail": "ই-মেইল পাঠাও",
        "action-editmyoptions": "নিজের পছন্দসমূহ সম্পাদনা করার",
        "action-editmywatchlist": "আপনার নজরতালিকা পরিবর্তন করুন",
        "action-editcontentmodel": "পাতার কন্টেন্ট মডেল সম্পাদনা করুন",
        "action-managechangetags": "ট্যাগ তৈরি ও সক্রিয়/নিষ্ক্রিয়",
        "action-applychangetags": "আপনার পরিবর্তনগুলোর সাথে ট্যাগ সংযোজন করুন",
-       "action-changetags": "নিরà§\8dদিষà§\8dà¦\9f à¦¸à¦\82সà§\8dà¦\95রণ à¦\8fবà¦\82 à¦¦à§\80রà§\8dà¦\98 à¦¸à¦®à§\8dপাদনাà¦\97à§\81লà§\8bতà§\87 à¦\9fà§\8dযাà¦\97 à¦¸à¦\82যà§\8bà¦\9cন à¦\93 à¦\85পসারণ à¦\95রà§\81ন",
+       "action-changetags": "নিরà§\8dদিষà§\8dà¦\9f à¦¸à¦\82সà§\8dà¦\95রণ à¦\8fবà¦\82 à¦²à¦\97 à¦­à§\81à¦\95à§\8dতিà¦\97à§\81লিতà§\87 à¦¯à¦¥à§\87à¦\9aà§\8dà¦\9bভাবà§\87 à¦\9fà§\8dযাà¦\97 à¦¸à¦\82যà§\8bà¦\9cন à¦\93 à¦\85পসারণ à¦\95রা",
        "action-deletechangetags": "ডাটাবেজ থেকে ট্যাগ অপসরণ করার",
        "action-purge": "এই পাতা হালনাগাদ করার",
        "nchanges": "$1টি {{PLURAL:$1|পরিবর্তন}}",
        "enhancedrc-since-last-visit": "{{PLURAL:$1|সর্বশেষ প্রদর্শনের পর}} $1টি",
        "enhancedrc-history": "ইতিহাস",
        "recentchanges": "সাম্প্রতিক পরিবর্তন",
-       "recentchanges-legend": "সামà§\8dপà§\8dরতিà¦\95 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনà§\87র à¦ªà¦\9bনà§\8dদসমà§\82হ",
+       "recentchanges-legend": "সামà§\8dপà§\8dরতিà¦\95 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনà§\87র à¦ªà¦\9bনà§\8dদà¦\97à§\81লি",
        "recentchanges-summary": "এই পাতায় উইকিটির সবচেয়ে সাম্প্রতিক পরিবর্তনগুলি অনুসরণ করুন।",
        "recentchanges-noresult": "নির্ধারিত সময়ের মধ্যে কোনো পরিবর্তন পাওয়া যায়নি।",
        "recentchanges-feed-description": "এই ফিডে উইকিটির সবচেয়ে সাম্প্রতিক পরিবর্তনগুলি অনুসরণ করুন।",
        "recentchanges-submit": "দেখাও",
        "rcfilters-activefilters": "সক্রিয় ফিল্টার",
        "rcfilters-restore-default-filters": "পূর্বনির্ধারিত ছাঁকনি পুনরুদ্ধার করুন",
-       "rcfilters-clear-all-filters": "সমসà§\8dত à¦«à¦¿à¦²à§\8dà¦\9fার à¦\85পসারণ",
+       "rcfilters-clear-all-filters": "সব à¦\9bাà¦\81à¦\95নি à¦ªà¦°à¦¿à¦·à§\8dà¦\95ার à¦\95রà§\81ন",
        "rcfilters-search-placeholder": "সাম্প্রতিক পরিবর্তনসমূহ ছাঁকুন (ব্রাউজ বা টাইপ করা শুরু করুন)",
-       "rcfilters-invalid-filter": "à¦\85à¦\95ারà§\8dযà¦\95র à¦«à¦¿à¦²à§\8dà¦\9fার",
+       "rcfilters-invalid-filter": "à¦\85à¦\95ারà§\8dযà¦\95র à¦\9bাà¦\81à¦\95নি",
        "rcfilters-empty-filter": "কোনো সক্রিয় ফিল্টার নেই। সমস্ত অবদান দেখানো হয়েছে।",
        "rcfilters-filterlist-title": "ছাঁকনি",
        "rcfilters-filterlist-whatsthis": "এটি কী?",
        "rcfilters-filterlist-feedbacklink": "নতুন (বিটা) ছাঁকনির উপর মতামত প্রদান করুন",
-       "rcfilters-highlightbutton-title": "ফলাফল আলোকপাত করুন",
+       "rcfilters-highlightbutton-title": "ফলাফল আলোকপাত করুন",
        "rcfilters-highlightmenu-title": "একটি রং নির্বাচন করুন",
-       "rcfilters-highlightmenu-help": "এই বৈশিষ্ট্য আলোকপাত করতে একটি রঙ নির্বাচন করুন",
-       "rcfilters-filterlist-noresults": "কোনও ফিল্টার পাওয়া যায়নি",
-       "rcfilters-noresults-conflict": "কোনও ফলাফল পাওয়া যায়নি, কারণ অনুসন্ধানের মাপকাঠিগুলির মধ্যে সংঘর্ষ আছে।",
+       "rcfilters-highlightmenu-help": "এই বৈশিষ্ট্যটিতে আলোকপাত করতে একটি রঙ নির্বাচন করুন",
+       "rcfilters-filterlist-noresults": "কোনও ছাঁকনি পাওয়া যায়নি",
+       "rcfilters-noresults-conflict": "কোনও ফলাফল পাওয়া যায়নি কারণ অনুসন্ধানের মাপকাঠিগুলির মধ্যে সংঘর্ষ আছে",
+       "rcfilters-state-message-subset": "এই ছাঁকনিটির কোন প্রভাব নেই কারণ এর ফলাফলগুলি নিম্নোক্ত বৃহত্তর পরিধির {{PLURAL:$2|ছাঁকনিটির|ছাঁকনিগুলির}} মধ্যে অন্তর্ভুক্ত আছে (আলোকপাত করে এটিকে আলাদা করে দেখার চেষ্টা করুন): $1",
+       "rcfilters-state-message-fullcoverage": "কোন দলের সমস্ত ছাঁকনি নির্বাচন করা এবং কোন ছাঁকনিই নির্বাচন না করা একই কথা, তাই এই ছাঁকনিটির কোন প্রভাব নেই। এই দলে অন্তর্ভুক্ত ছাঁকনিগুলি হল: $1",
        "rcfilters-filtergroup-registration": "ব্যবহারকারী নিবন্ধন",
        "rcfilters-filter-registered-label": "নিবন্ধিত",
        "rcfilters-filter-registered-description": "প্রবেশকৃত সম্পাদকবৃন্দ।",
        "rcfilters-filter-unregistered-label": "অনিবন্ধিত",
-       "rcfilters-filter-unregistered-description": "সম্পাদক যারা প্রবেশ করেন নি।",
-       "rcfilters-filtergroup-authorship": "কৃতি সম্পাদনা",
+       "rcfilters-filter-unregistered-description": "যেসব সম্পাদক অ্যাকাউন্টে প্রবেশ করেননি।",
+       "rcfilters-filter-unregistered-conflicts-user-experience-level": "এই ছাঁকনিটির সাথে নিম্নোক্ত ব্যবহারকারী অভিজ্ঞতা {{PLURAL:$2|ছাঁকনিটির|ছাঁকনিগুলির}} সংঘর্ষ আছে; যা কেবলমাত্র নিবন্ধিত ব্যবহারকারীদের খুঁজে বের করে: $1",
+       "rcfilters-filtergroup-authorship": "কার দ্বারা সম্পাদিত",
        "rcfilters-filter-editsbyself-label": "আপনার নিজস্ব সম্পাদনা",
-       "rcfilters-filter-editsbyself-description": "à¦\86পনার à¦¦à§\8dবারা à¦¸à¦®à§\8dপাদনা।",
-       "rcfilters-filter-editsbyother-label": "à¦\85নà§\8dযদà§\87র à¦¦à§\8dবারা à¦¸à¦®à§\8dপাদনা",
-       "rcfilters-filter-editsbyother-description": "à¦\85নà§\8dয à¦¬à§\8dযবহারà¦\95ারà§\80দà§\87র à¦¦à§\8dবারা à¦\95রা à¦¸à¦®à§\8dপাদনা (à¦\86পনার à¦¨à¦¾)।",
+       "rcfilters-filter-editsbyself-description": "à¦\86পনার à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি।",
+       "rcfilters-filter-editsbyother-label": "à¦\85নà§\8dযদà§\87র à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি",
+       "rcfilters-filter-editsbyother-description": "à¦\85নà§\8dয à¦¬à§\8dযবহারà¦\95ারà§\80দà§\87র à¦\95রা à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি (à¦\86পনার à¦\95রা à¦¨à¦¯à¦¼)।",
        "rcfilters-filtergroup-userExpLevel": "অভিজ্ঞতার স্তর (শুধু মাত্র নিবন্ধিত ব্যবহারকারীর জন্য)",
+       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "অভিজ্ঞতা ছাঁকনিগুলি কেবলমাত্র নিবন্ধিত ব্যবহারকারীদের খুঁজে বের করে, তাই এই ছাঁকনিটি \"অনিবন্ধিত\" ছাঁকনিটির সাথে সংঘর্ষে আছে।",
+       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "\"অনিবন্ধিত\" ছাঁকনিটি এক বা তার অধিক অভিজ্ঞতা ছাঁকনির সাথে সংঘর্ষে আছে, যে ছাঁকনিগুলি কেবলমাত্র নিবন্ধিত ব্যবহারকারীদের খুঁজে বের করে। সংঘর্ষরত ছাঁকনিগুলিকে উপরের \"সক্রিয় ছাঁকনিসমূহ\" এলাকাতে চিহ্নিত করা হয়েছে।",
        "rcfilters-filter-user-experience-level-newcomer-label": "নতুন আগত",
-       "rcfilters-filter-user-experience-level-newcomer-description": "১০টি সম্পাদনার কম ও ৪ দিনের কার্যকলাপ।",
+       "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": "৩০ à¦¦à¦¿à¦¨à§\87র à¦¬à§\87শà§\80 à¦\95ারà§\8dযà¦\95লাপ à¦\93 à§«à§¦à§¦à¦\9fি à¦¸à¦®à§\8dপাদনা।",
+       "rcfilters-filter-user-experience-level-experienced-description": "৩০ à¦¦à¦¿à¦¨à§\87র à¦¬à§\87শি à¦¸à¦\95à§\8dরিয় à¦\86à¦\9bà§\87ন à¦\93 à§«à§¦à§¦à¦\9fির à¦¬à§\87শি à¦¸à¦®à§\8dপাদনা à¦\95রà§\87à¦\9bà§\87ন।",
        "rcfilters-filtergroup-automated": "স্বয়ংক্রিয় অবদান",
        "rcfilters-filter-bots-label": "বট",
        "rcfilters-filter-bots-description": "স্বয়ংক্রিয় সরঞ্জাম দিয়ে করা সম্পাদনা।",
        "rcfilters-filter-humans-label": "মানুষ (বট নয়)",
-       "rcfilters-filter-humans-description": "মানব à¦¸à¦®à§\8dপাদà¦\95 à¦¦à§\8dবারা করা সম্পাদনা।",
+       "rcfilters-filter-humans-description": "মানà§\81ষà§\87র করা সম্পাদনা।",
        "rcfilters-filtergroup-reviewstatus": "পর্যালোচনার অবস্থা",
        "rcfilters-filter-patrolled-label": "পরীক্ষিত",
        "rcfilters-filter-patrolled-description": "সম্পাদনা পরীক্ষিত হিসেবে চিহ্নিত করা হয়েছে।",
        "rcfilters-filter-unpatrolled-description": "সম্পাদনা পরীক্ষিত হিসেবে চিহ্নিত করা হয় নি।",
        "rcfilters-filtergroup-significance": "তাৎপর্য",
        "rcfilters-filter-minor-label": "অনুল্লেখ্য সম্পাদনা",
-       "rcfilters-filter-minor-description": "অপ্রাপ্তবয়স্ক হিসেবে চিহ্নিত লেখককে সম্পাদনা করে।",
-       "rcfilters-filter-major-label": "অ-অনুল্লেখ্য সম্পাদনা",
+       "rcfilters-filter-minor-description": "যেসব সম্পাদনাকে লেখক অনুল্লেখ্য হিসেবে চিহ্নিত করেছেন।",
+       "rcfilters-filter-major-label": "অনুল্লেখ্য নয়, এমন সম্পাদনা",
+       "rcfilters-filter-major-description": "যেসব সম্পাদনাকে অনুল্লেখ্য হিসেবে চিহ্নিত করা হয়নি।",
        "rcfilters-filtergroup-changetype": "পরিবর্তনের ধরন",
        "rcfilters-filter-pageedits-label": "পাতার সম্পাদনা",
        "rcfilters-filter-pageedits-description": "উইকি বিষয়বস্তু, আলোচনা, বিষয়শ্রেণীর বিবরণ.... ইত্যাদিতে সম্পাদনা",
-       "rcfilters-filter-newpages-label": "পাতার সৃষ্টিকরণ",
+       "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": "এই \"পরিবর্তনের ধরন\"-সংক্রান্ত ছাঁকনিটির সাথে \"অনুল্লেখ্য সম্পাদনা\" ছাঁকনিটির সংঘর্ষ আছে। কিছু নির্দিষ্ট ধরনের সম্পাদনা \"অনুল্লেখ্য\" হিসেবে চিহ্নিত করা সম্ভব নয়।",
        "rcnotefrom": "<strong>$2</strong>টা থেকে সংঘটিত পরিবর্তনগুলি (সর্বোচ্চ <strong>$1টি</strong> দেখানো হয়েছে)।",
        "rclistfrom": "$2, $3 তারিখের পর সংঘটিত নতুন পরিবর্তনগুলো দেখাও",
        "rcshowhideminor": "অনুল্লেখ্য পরিবর্তনগুলো $1",
        "rcshowhideminor-show": "দেখাও",
-       "rcshowhideminor-hide": "à¦\86ড়াল à¦\95রো",
+       "rcshowhideminor-hide": "লà§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96ো",
        "rcshowhidebots": "বটগুলো $1",
        "rcshowhidebots-show": "দেখাও",
-       "rcshowhidebots-hide": "à¦\86ড়াল à¦\95রো",
+       "rcshowhidebots-hide": "লà§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96ো",
        "rcshowhideliu": "নিবন্ধিত ব্যবহারকারীদের $1",
        "rcshowhideliu-show": "দেখাও",
-       "rcshowhideliu-hide": "à¦\86ড়াল à¦\95রো",
+       "rcshowhideliu-hide": "লà§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96ো",
        "rcshowhideanons": "বেনামী ব্যবহারকারীদের $1",
        "rcshowhideanons-show": "দেখাও",
-       "rcshowhideanons-hide": "à¦\86ড়াল à¦\95রো",
+       "rcshowhideanons-hide": "লà§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96ো",
        "rcshowhidepatr": "পরীক্ষিত সম্পাদনা $1",
        "rcshowhidepatr-show": "দেখাও",
-       "rcshowhidepatr-hide": "à¦\86ড়াল à¦\95রো",
+       "rcshowhidepatr-hide": "লà§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96ো",
        "rcshowhidemine": "আমার সম্পাদনাগুলো $1",
        "rcshowhidemine-show": "দেখাও",
-       "rcshowhidemine-hide": "à¦\86ড়াল à¦\95রো",
+       "rcshowhidemine-hide": "লà§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96ো",
        "rcshowhidecategorization": "পাতা শ্রেণীবদ্ধকরণ $1",
        "rcshowhidecategorization-show": "দেখাও",
-       "rcshowhidecategorization-hide": "à¦\86ড়াল à¦\95রো",
+       "rcshowhidecategorization-hide": "লà§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96ো",
        "rclinks": "'''প্রদর্শনের ধরন'''<br />\n* বিগত ($2) দিনের শেষ ($1)টি পরিবর্তন দেখাও\n* $3",
        "diff": "পরিবর্তন",
        "hist": "ইতিহাস",
-       "hide": "দà§\87à¦\96িà¦\93 à¦¨à¦¾",
+       "hide": "লà§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96à§\8b",
        "show": "দেখাও",
        "minoreditletter": "অ",
        "newpageletter": "ন",
        "rc-change-size-new": "পরিবর্তনের পর $1 {{PLURAL:$1|বাইট}}",
        "newsectionsummary": "/* $1 */ নতুন অনুচ্ছেদ",
        "rc-enhanced-expand": "বিস্তারিত দেখাও",
-       "rc-enhanced-hide": "বিসà§\8dতারিত à¦²à§\81à¦\95াà¦\93",
+       "rc-enhanced-hide": "বিসà§\8dতারিত à¦²à§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96à§\8b",
        "rc-old-title": "মূলত \"$1\" হিসাবে তৈরী করা হয়েছিল",
        "recentchangeslinked": "সম্পর্কিত পরিবর্তন",
        "recentchangeslinked-feed": "সম্পর্কিত পরিবর্তন",
        "fileexists-shared-forbidden": "অংশীদারী ফাইল ভাণ্ডারে এই নামের একটি ফাইল ইতিমধ্যেই বিদ্যমান।\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-exists-duplicate": "এই ফাইলটি নিচের {{PLURAL:$1|ফাইলটির|ফাইলগুলির}} অবিকল প্রতিলিপি:",
        "file-deleted-duplicate": "এই ফাইলটির মত একটি ফাইল ([[:$1]]) পূর্বে অপসারণ করা হয়েছে।\nপুনরায় আপলোড করার পূর্বে আপনার উচিত আগের ফাইলটির অপসারণের কারণ জানা।",
+       "file-deleted-duplicate-notitle": "এই ফাইলটির মত হুবহু একটি ফাইল আগেই মুছে ফেলা হয়েছে, এবং শিরোনামটিও অবলোপন করা হয়েছে। \nএই ফাইলটিকে পুনরায় আপলোড করার আগে এমন কাউকে জিজ্ঞাসা করে নিন যিনি অবলুপ্ত ফাইল উপাত্তগুলি দেখার ক্ষমতা রাখেন বলে এই পরিস্থিতিটি পর্যালোচনা করতে পারেন।",
        "uploadwarning": "আপলোড সতর্কবাণী",
        "uploadwarning-text": "অনুগ্রহ করে নিচে ফাইলের বর্ণনা পরিবর্তন করে আবার চেষ্টা করুন।",
        "savefile": "সংরক্ষণ",
        "uploaddisabledtext": "ফাইল আপলোড নিষ্ক্রিয়।",
        "php-uploaddisabledtext": "পিএইপি -এ ফাইল আপলোড নিস্ক্রিয় রয়েছে।\nঅনুগ্রহ করে file_uploads সেটিং পরীক্ষা করুন।",
        "uploadscripted": "এই ফাইলে এমন HTML বা স্ক্রিপ্ট কোড আছে যা একটি ওয়েব ব্রাউজার ভুল বুঝতে পারে।",
+       "upload-scripted-pi-callback": "এক্সএমএল-স্টাইলশিট প্রক্রিয়াকরণ নির্দেশনাবিশিষ্ট কোন ফাইল আপলোড করা সম্ভব নয়।",
        "uploaded-script-svg": "আপলোডকৃত SVG ফাইলে স্ক্রিপ্টযোগ্য উপাদান \"$1\" পাওয়া গেছে।",
        "uploaded-hostile-svg": "আপলোড করা SVG ফাইলের শৈলী উপাদানে অনিরাপদ সিএসএস পাওয়া গেছে।",
+       "uploaded-event-handler-on-svg": "এসভিজি ফাইলের জন্য <code>$1=\"$2\"</code> ইভেন্ট-হ্যান্ডলার বৈশিষ্ট্যটি নির্ধারণ করা অনুমোদিত নয়।",
+       "uploaded-href-attribute-svg": "এসভিজি ফাইলের href বৈশিষ্ট্যগুলির জন্য কেবলমাত্র http:// বা https:// লক্ষ্যগুলি অনুমোদিত; কিন্তু <code>&lt;$1 $2=\"$3\"&gt;</code> পাওয়া গেছে।",
        "uploaded-href-unsafe-target-svg": "অনিরাপদ উপাত্তে href পাওয়া গেছে: আপলোডকৃত SVG ফাইলে URI লক্ষ্য ছিল <code>&lt;$1 $2=\"$3\"&gt;</code>।",
+       "uploaded-animate-svg": "\"animate\" ট্যাগটি পাওয়া গেছে যা আপলোডকৃত এসভিজি ফাইলের <code>&lt;$1 $2=\"$3\"&gt;</code> - এই \"from\" অ্যাট্রিবিউটটি ব্যবহার করে href পরিবর্তন করতে পারে।",
+       "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": "আপলোডকৃত SVG ফাইলে URL: <code>&lt;$1 $2=\"$3\"&gt;</code> সহ ছবি পরিশোধক পাওয়া গেছে।",
        "uploadscriptednamespace": "এই SVG ফাইলে অবৈধ নামস্থান \"<nowiki>$1</nowiki>\" রয়েছে",
        "uploadinvalidxml": "আপলোডকৃত ফাইলে XML পার্স করা যাবে না।",
        "destfilename": "লক্ষ্য ফাইলের নাম:",
        "upload-maxfilesize": "ফাইলের সর্বোচ্চ আকার: $1",
        "upload-description": "ফাইলের বর্ণনা",
-       "upload-options": "আপলোড-অপশন",
+       "upload-options": "আপলোডের পছন্দগুলি",
        "watchthisupload": "এই ফাইলটি নজরে রাখুন",
        "filewasdeleted": "এই নামের একটি ফাইল পূর্বে আপলোড করা হয়েছিল এবং তারপর মুছে ফেলা হয়েছিল। আপনি ফাইলটি আবার আপলোড করার আগে $1 পরীক্ষা করে দেখুন।",
+       "filename-thumb-name": "এটিকে একটি ক্ষুদ্র প্রাকপ্রদর্শনকারী চিত্রের (thumbnail) শিরোনাম বলে মনে হচ্ছে। দয়া করে একই উইকিতে ক্ষুদ্র প্রাকপ্রদর্শনকারী চিত্র পুনরায় আপলোড করবেন না। অন্যথায় অনুগ্রহ করে ফাইলের নামটি ঠিক করুন যাতে এটির অর্থ আরও বেশি বোধগম্য হয়, এবং যাতে এটির সাথে কোন ক্ষুদ্র প্রাকপ্রদর্শনকারী চিত্রের উপসর্গ না থাকে।",
        "filename-bad-prefix": "আপনি যে ফাইলটি আপলোড করছেন, তার নাম '''\"$1\"''' দিয়ে শুরু হয়েছে। এ ধরনের নাম সাধারণত ডিজিটাল ক্যামেরাগুলি স্বয়ংক্রিয়ভাবে দিয়ে থাকে এবং এগুলি ব্যাখ্যামূলক নয়। অনুগ্রহ করে আপনার ফাইলের জন্য আরও ব্যাখ্যামূলক একটি নাম পছন্দ করুন।",
        "upload-proto-error": "ভুল প্রোটোকল",
        "upload-proto-error-text": "দূরবর্তী আপলোডের জন্য URLগুলি <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-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-describe": "\"$1\" ফাইলের মেটাডাটা পরিবর্তন সম্ভব নয়।",
        "backend-fail-alreadyexists": "\"$1\" নামের একটি ফাইল আগে থেকেই রয়েছে।",
        "backend-fail-store": "\"$2\"-এ \"$1\" ফাইলটি সংরক্ষন করা সম্ভব নয়।",
-       "backend-fail-copy": "\"$1\" à¦«à¦¾à¦\87লà¦\9fি \"$2\"-তà§\87 à¦\85নà§\81লিপি করা সম্ভব নয়।",
+       "backend-fail-copy": "\"$1\" à¦«à¦¾à¦\87লà¦\9fি \"$2\"-à¦\8f à¦ªà§\8dরতিলিপি করা সম্ভব নয়।",
        "backend-fail-move": "\"$2\"-এ \"$1\" ফাইলটি স্থানান্তর করা সম্ভব নয়।",
        "backend-fail-opentemp": "অস্থায়ী ফাইলটি খোলা যাবে না।",
        "backend-fail-writetemp": "অস্থায়ী ফাইলটিতে লেখা যাচ্ছে না।",
        "backend-fail-usable": "\"$1\" ফাইলটিতে লেখা অথবা ফাইলটি পড়া যাচ্ছে না, কারণ সঠিক অনুমতি নেই অথবা ডিরেক্টরীটি নেই।",
        "filejournal-fail-dbconnect": "\"$1\" স্টোরেজ ব্যাকেন্ডের জার্নাল ডাটাবেজের সাথে যুক্ত হওয়া যাচ্ছে না।",
        "filejournal-fail-dbquery": "\"$1\" স্টোরেজ ব্যাকেন্ডের জার্নাল ডাটাবেজ হালনাগাদ করা যাচ্ছে না।",
-       "lockmanager-notlocked": "\"$1\" à¦\86নলà¦\95 à¦\95রা à¦¯à¦¾à¦\9aà§\8dà¦\9bà§\87 à¦¨à¦¾; à¦\8fà¦\9fি à¦²à¦\95 à¦\95রা à¦°à¦¯à¦¼à§\87à¦\9bà§\87।",
+       "lockmanager-notlocked": "\"$1\" à¦\96à§\8bলা à¦¯à¦¾à¦¯à¦¼à¦¨à¦¿; à¦\8fà¦\9fিà¦\95à§\87 à¦\85বরà§\81দà§\8dধ à¦\95রা à¦¹à¦¯à¦¼à¦¨à¦¿।",
        "lockmanager-fail-closelock": "\"$1\" ফাইলটি লক করা তাই বন্ধ করা যাচ্ছে না।",
-       "lockmanager-fail-deletelock": "\"$1\" à¦²à¦\95 à¦\95রা ফাইলটি অপসারণ সম্ভব নয়।",
+       "lockmanager-fail-deletelock": "\"$1\" à¦\85বরà§\8bধনিরà§\8dদà§\87শà¦\95 ফাইলটি অপসারণ সম্ভব নয়।",
        "lockmanager-fail-acquirelock": "\"$1\" লক করা ফাইল খুজে পাওয়া যাচ্ছে না।",
-       "lockmanager-fail-openlock": "\"$1\" à¦²à¦\95 à¦\95রা ফাইলটি খোলা সম্ভব নয়।",
+       "lockmanager-fail-openlock": "\"$1\" à¦\8fà¦\87 à¦\85বরà§\8bধনিরà§\8dদà§\87শà¦\95 ফাইলটি খোলা সম্ভব নয়।",
        "lockmanager-fail-releaselock": "\"$1\" লক করা ফাইলটি ছাড়া যাচ্ছে না।",
-       "lockmanager-fail-db-bucket": "$1 à¦\8fর à¦²à¦\95 à¦\95রা ডাটাবেজের সাথে যোগাযোগ করা যাচ্ছে না।",
+       "lockmanager-fail-db-bucket": "$1 à¦¬à¦¾à¦\95à§\87à¦\9fà¦\9fিতà§\87 à¦¯à¦¥à§\87ষà§\8dà¦\9f à¦¸à¦\82à¦\96à§\8dযà¦\95 à¦\85বরà§\8bধ ডাটাবেজের সাথে যোগাযোগ করা যাচ্ছে না।",
        "lockmanager-fail-db-release": "$1 ডাটাবেজের লক খোলা যাচ্ছে না।",
-       "lockmanager-fail-svr-acquire": "$1 সার্ভারের লক পাওয়া যাচ্ছে না।",
+       "lockmanager-fail-svr-acquire": "$1 সার্ভারে অবরোধগুলি পাওয়া যায়নি।",
        "lockmanager-fail-svr-release": "$1 ডাটাবেজের লক খোলা যাচ্ছে না।",
        "zip-file-open-error": "ফাইলটির জিপ পরীক্ষা করার সময় একটি ত্রুটি দেখা দিয়েছে।",
        "zip-wrong-format": "চিহ্নিত ফাইলটি কোনো জিপ ফাইল নয়।",
        "license": "লাইসেন্সকরণ:",
        "license-header": "লাইসেন্স প্রদান",
        "nolicense": "কিছুই নির্বাচন করা হয়নি",
-       "licenses-edit": "লাইসেন্স অপশন সম্পাদনা করুন",
+       "licenses-edit": "লাইসেন্স-সংক্রান্ত পছন্দগুলি সম্পাদনা করুন",
        "license-nopreview": "(প্রাকদর্শন লভ্য নয়)",
        "upload_source_url": " (আপনি একটি বৈধ, উন্মুক্ত URL থেকে ফাইল চয়ন করেছেন)",
        "upload_source_file": "(আপনার কম্পিউটারের একটি ফাইল)",
        "duplicatesoffile": "নিচের {{PLURAL:$1|ফাইলটি|$1 ফাইলগুলো}} এই ফাইলের প্রতিলিপি ([[Special:FileDuplicateSearch/$2|বিস্তারিত দেখুন]]):",
        "sharedupload": "এই ফাইলটি $1 থেকে নেওয়া হয়েছে এবং এবং অন্যান্য প্রকল্পেও ব্যবহৃত হতে পারে।",
        "sharedupload-desc-there": "এই ফাইলটি $1 থেকে দেখানো হচ্ছে এবং হয়তো এটি অন্যান্য প্রকল্পতেও ব্যবহৃত হয়েছে।\nঅনুগ্রহ করে বিস্তারিত জানার জন্য [$2 ফাইলটির বর্ণনা পাতা] দেখুন।",
-       "sharedupload-desc-here": "à¦\8fà¦\87 à¦«à¦¾à¦\87লà¦\9fি $1 à¦¥à§\87à¦\95à§\87 à¦\8fবà¦\82 à¦\85নà§\8dযানà§\8dয à¦ªà§\8dরà¦\95লà§\8dপà§\87 à¦¬à§\8dযবহà§\83ত à¦¹à¦¤à§\87 à¦ªà¦¾à¦°à§\87।\nà¦\8fর [$2 à¦«à¦¾à¦\87ল à¦¬à¦¿à¦¬à¦°à¦£ à¦ªà§\83ষà§\8dঠা] à¦\89পর à¦¬à¦°à§\8dণনা à¦¨à¦¿à¦®à§\8dনে দেখানো হলো।",
+       "sharedupload-desc-here": "à¦\8fà¦\87 à¦«à¦¾à¦\87লà¦\9fি $1 à¦¥à§\87à¦\95à§\87 à¦\86à¦\97ত à¦\8fবà¦\82 à¦\85নà§\8dযানà§\8dয à¦ªà§\8dরà¦\95লà§\8dপà§\87 à¦¬à§\8dযবহà§\83ত à¦¹à¦¤à§\87 à¦ªà¦¾à¦°à§\87।\nসà§\87à¦\96ানà§\87 à¦¥à¦¾à¦\95া [$2 à¦«à¦¾à¦\87লà¦\9fির à¦¬à¦¿à¦¬à¦°à¦£ à¦ªà¦¾à¦¤à¦¾à¦°] à¦¬à¦¿à¦¬à¦°à¦£ à¦¨à¦¿à¦\9aে দেখানো হলো।",
        "sharedupload-desc-edit": "এই ফাইলটি $1 থেকে এবং অন্যান্য প্রকল্পে ব্যবহৃত হতে পারে।\n[$2 ফাইলটির বর্ণনা পাতা] থেকে আপনি ফাইলটি বর্ণনা সম্পাদনা করতে পারেন।",
        "sharedupload-desc-create": "This file is from $1 and may be used by other projects.\nMaybe you want to edit the description on its [$2 file description page] there.",
        "filepage-nofile": "এই নামের কোন ফাইল নেই।",
        "shared-repo-from": "$1 থেকে",
        "shared-repo": "শেয়ার্ড রিপোজিটরী",
        "shared-repo-name-wikimediacommons": "উইকিমিডিয়া কমন্স",
+       "filepage.css": "/* এখানে সন্নিবেশিত সিএসএস ফাইলের বিবরণ পৃষ্ঠায় অন্তর্ভুক্ত হবে, এছাড়া বিদেশী ক্লায়েন্ট উইকিতেও অন্তর্ভুক্ত হবে */",
        "upload-disallowed-here": "আপনি এই ফাইলটি প্রতিস্থাপন করতে পারবেন না।",
        "filerevert": "$1 পূর্বাবস্থায় ফেরত নিন",
        "filerevert-legend": "ফাইল পূর্বাবস্থায় ফেরত নিন",
        "filerevert-submit": "ফেরত যাওয়া হোক",
        "filerevert-success": "'''[[Media:$1|$1]]''' ফাইলটি  [$3, $2-এর $4 সংস্করণে] ফেরত নেওয়া হয়েছে।",
        "filerevert-badversion": "প্রদত্ত তারিখ ও সময়ের জন্য এই ফাইলটির কোন স্থানীয় সংস্করণ নেই।",
-       "filerevert-identical": "নথিà¦\9fির à¦¬à¦¾ à¦«à¦¾à¦\87লà¦\9fির à¦¬à¦°à§\8dতমান à¦¸à¦\82সà§\8dà¦\95রণà§\87র à¦¸à¦¾à¦¥à§\87 à¦¨à¦¿à¦°à§\8dবাà¦\9aিত à¦¸à¦\82সà§\8dà¦\95রণà¦\9fির à¦\87তিমধà§\8dযà§\87à¦\87 à¦¹à§\81বহà§\81 à¦®à¦¿à¦²।",
-       "filedelete": "$1 à¦®à§\81à¦\9bà§\87 à¦«à§\87লা à¦¹à§\8bà¦\95",
-       "filedelete-legend": "ফাà¦\87ল à¦®à§\81à¦\9bà§\87 à¦«à§\87লা à¦¹à§\8bà¦\95",
+       "filerevert-identical": "ফাà¦\87লà¦\9fির à¦¬à¦°à§\8dতমান à¦¸à¦\82সà§\8dà¦\95রণà§\87র à¦¸à¦¾à¦¥à§\87 à¦¨à¦¿à¦°à§\8dবাà¦\9aিত à¦¸à¦\82সà§\8dà¦\95রণà¦\9fির à¦¹à§\81বহà§\81 à¦®à¦¿à¦² à¦°à¦¯à¦¼à§\87à¦\9bà§\87।",
+       "filedelete": "$1 à¦\85পসারণ à¦\95রà§\81ন",
+       "filedelete-legend": "ফাà¦\87ল à¦\85পসারণ à¦\95রà§\81ন",
        "filedelete-intro": "আপনি '''[[Media:$1|$1]]''' ফাইলটি এর সমস্ত ইতিহাসহ অপসারণ করছেন।",
        "filedelete-intro-old": "আপনি '''[[Media:$1|$1]]''' ফাইলটির [$4 $3, $2] সংস্করণটি মুছে ফেলছেন।",
        "filedelete-comment": "কারণ:",
        "filedelete-nofile-old": "নির্দেশিত বৈশিষ্ট্যগুলির জন্য '''$1'''-এর কোন আর্কাইভ সংস্করণ নেই।",
        "filedelete-otherreason": "অন্য/বাড়তি কারণ:",
        "filedelete-reason-otherlist": "অন্য কারণ",
-       "filedelete-reason-dropdown": "*সাধারণ à¦\85পসারণà§\87র à¦\95ারণসমà§\82হ\n** à¦\95পিরাà¦\87à¦\9f à¦²à¦\99à§\8dà¦\98ন\n** à¦«à¦¾à¦\87লà§\87র à¦\85নà§\81লিপি",
+       "filedelete-reason-dropdown": "*à¦\85পসারণà§\87র à¦¸à¦¾à¦§à¦¾à¦°à¦£ à¦\95ারণসমà§\82হ\n** à¦\95পিরাà¦\87à¦\9f à¦²à¦\99à§\8dà¦\98ন\n** à¦\85বিà¦\95ল à¦ªà§\8dরতিলিপিà¦\95à§\83ত à¦«à¦¾à¦\87ল",
        "filedelete-edit-reasonlist": "অপসারণের কারণ সম্পাদনা",
        "filedelete-maintenance": "রক্ষণাবেক্ষণের সময় ফাইল অপরাসণ এবং পুনরুদ্ধার সাময়িকভাবে নিস্ক্রিয় রয়েছে।",
        "filedelete-maintenance-title": "ফাইলটি অপসারণ করা সম্ভব নয়",
        "statistics-users": "নিবন্ধিত [[Special:ListUsers|ব্যবহারকারী]]",
        "statistics-users-active": "সক্রিয় ব্যবহারকারী",
        "statistics-users-active-desc": "ব্যবহারকারী যারা বিগত {{PLURAL:$1|দিনে|$1 দিনে}} একটি কাজ করেছেন।",
-       "pageswithprop": "পাতার à¦\89পাদান à¦¸à¦®à§\8dবলিত à¦ªà§\83ষà§\8dঠাসমূহ",
+       "pageswithprop": "পাতার à¦¬à§\88শিষà§\8dà¦\9fà§\8dয à¦¸à¦®à§\8dবলিত à¦ªà¦¾à¦¤াসমূহ",
        "pageswithprop-legend": "পাতার উপাদান সম্বলিত পৃষ্ঠাসমূহ",
        "pageswithprop-text": "একটি নির্দিষ্ট পাতার বৈশিষ্ট রয়েছে এমন পাতাসমূহের তালিকা।",
        "pageswithprop-prop": "বৈশিষ্টের নাম:",
        "uncategorizedcategories": "যেসব বিষয়শ্রেণীর শ্রেণীকরণ প্রয়োজন",
        "uncategorizedimages": "যেসব ফাইলের শ্রেণীকরণ প্রয়োজন",
        "uncategorizedtemplates": "যেসব টেমপ্লেটের বিষয়শ্রেণী নেই",
+       "uncategorized-categories-exceptionlist": "# এখানে এমন কিছু বিষয়শ্রেণীর একটি তালিকা থাকবে, যেগুলি Special:UncategorizedCategories পাতায় উল্লেখ করা উচিত নয়। প্রতি লাইনে একটি করে থাকবে, প্রতিটি লাইন \"*\" অক্ষর দিয়ে শুরু করতে হবে। যেসব লাইন অন্য কোন অক্ষর (এমনকি ফাঁকা স্থান-ও) দিয়ে শুরু হলে সেটিকে অগ্রাহ্য করা হবে। মন্তব্যের জন্য \"#\" ব্যবহার করুন।",
        "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": "আবশ্যিক টেমপ্লেটসমূহ",
        "protectedpages-indef": "শুধুমাত্র অসীম সুরক্ষা",
        "protectedpages-summary": "এই পাতাটি বর্তমানে সুরক্ষিত থাকা বিদ্যমান পাতগুলির তালিকা। সৃষ্টি করা থেকে সুরক্ষিত রয়েছে এমন পাতার তালিকার জন্য, [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]] দেখুন।",
        "protectedpages-cascade": "শুধুমাত্র প্রপাতাকার সুরক্ষা",
-       "protectedpages-noredirect": "পà§\81নরà§\8dনিরà§\8dদà§\87শনাà¦\97à§\81লà§\8b à¦²à§\81à¦\95াà¦\93",
+       "protectedpages-noredirect": "পà§\81নরà§\8dনিরà§\8dদà§\87শনাà¦\97à§\81লà§\8b à¦²à§\81à¦\95ান",
        "protectedpagesempty": "কোন পাতা বর্তমানে এই প্যারামিটারগুলিসহ সুরক্ষিত নয়।",
        "protectedpages-timestamp": "সময়বার্তা",
        "protectedpages-page": "পাতা",
        "apisandbox": "এপিআই খেলাঘর",
        "apisandbox-jsonly": "API খেলাঘর ব্যবহার করতে জাভাস্ক্রিপ্ট প্রয়োজন।",
        "apisandbox-api-disabled": "এপিআই এই সাইটে নিষ্ক্রিয় করা আছে।",
+       "apisandbox-intro": "<strong>মিডিয়াউইকি ওয়েব সেবা এপিআই</strong> নিয়ে পরীক্ষানিরীক্ষা চালাতে এই পাতাটি ব্যবহার করুন। \nএপিআই ব্যবহারের উপর বিস্তারিত জানতে [[mw:API:Main page|এপিআই নথিপত্র]] দেখুন।\nউদাহরণ: [https://www.mediawiki.org/wiki/API#A_simple_example প্রধান পাতার বিষয়বস্তু পান]। আরও উদাহরণ দেখার জন্য একটি কর্ম নির্বাচন করুন।\n\nলক্ষ করুন যে যদিও এটি একটি খেলাঘর, তা সত্ত্বেও এই পাতায় করা আপনার সম্পাদনাগুলি উইকিতে পরিবর্তন সাধন করতে পারে।",
        "apisandbox-fullscreen": "প্যানেল সম্প্রসারণ করুন",
        "apisandbox-fullscreen-tooltip": "ব্রাউজারের উইন্ডো পূরণ করতে খেলাঘরের প্যানেল প্রসারিত করুন।",
        "apisandbox-unfullscreen": "পাতা দেখাও",
        "apisandbox-alert-field": "এই ক্ষেত্রের মান বৈধ নয়।",
        "apisandbox-continue": "অব্যাহত",
        "apisandbox-continue-clear": "পরিস্কার",
+       "apisandbox-continue-help": "{{int:apisandbox-continue}} সর্বশেষ অনুরোধটি [https://www.mediawiki.org/wiki/API:Query#Continuing_queries চলমান] রাখবে; {{int:apisandbox-continue-clear}} চলমানতা-সংক্রান্ত পরামিতিগুলি খালি করবে।",
        "apisandbox-param-limit": "সর্বোচ্চ সীমা ব্যবহার করতে <kbd>max</kbd> লিখুন।",
        "apisandbox-multivalue-all-namespaces": "$1 (সব নামস্থান)",
        "apisandbox-multivalue-all-values": "$1 (সব মান)",
        "booksources": "বইয়ের উৎস",
-       "booksources-search-legend": "বà¦\87য়à§\87র à¦\89à§\8eসà§\87র à¦\9cনà§\8dয à¦\85নà§\81সনà§\8dধান à¦\95রা à¦¹à§\8bà¦\95",
+       "booksources-search-legend": "বà¦\87য়à§\87র à¦\89à§\8eসà§\87র à¦\9cনà§\8dয à¦\85নà§\81সনà§\8dধান à¦\95রà§\81ন",
        "booksources-isbn": "আইএসবিএন:",
        "booksources-search": "অনুসন্ধান",
        "booksources-text": "নতুন ও পুরাতন ব্যবহৃত বই বিক্রি করে, এমন কতগুলি সাইটের সংযোগের তালিকা নিচে দেওয়া হল, যে সাইটগুলিতে আপনার অনুসন্ধানকৃত বইগুলির উপর আরও তথ্য থাকতে পারে:",
        "magiclink-tracking-isbn": "আইএসবিএন জাদু সংযোগ ব্যবহার করা পাতা",
        "magiclink-tracking-isbn-desc": "এই পাতাটি আইএসবিএন যাদু সংযোগ ব্যবহার করে। কিভাবে মাইগ্রেট করবেন জানতে [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] দেখুন।",
        "specialloguserlabel": "সম্পাদক:",
-       "speciallogtitlelabel": "লà¦\95à§\8dষà§\8dয (শিরà§\8bনাম à¦¬à¦¾ {{ns:user}}:বà§\8dযবহারà¦\95ারà§\80র à¦\9cনà§\8dয ব্যবহারকারী নাম):",
+       "speciallogtitlelabel": "লà¦\95à§\8dষà§\8dয (বà§\8dযবহারà¦\95ারà§\80র à¦\9cনà§\8dয à¦¶à¦¿à¦°à§\8bনাম à¦¬à¦¾ {{ns:user}}:ব্যবহারকারী নাম):",
        "log": "লগগুলি",
        "logeventslist-submit": "দেখাও",
        "all-logs-page": "সব প্রকাশ্য লগ",
        "allpagesprefix": "এই উপসর্গবিশিষ্ট পাতাগুলো দেখাও:",
        "allpagesbadtitle": "প্রদত্ত পাতার শিরোনামটি অবৈধ ছিল অথবা এটিতে কোন আন্তঃভাষা বা আন্তঃউইকি উপসর্গ ছিল। এটিতে এক বা একাধিক ক্যারেক্টার থাকতে পারে যা শিরোনামে ব্যবহার করা সম্ভব নয়।",
        "allpages-bad-ns": "{{SITENAME}}-এ \"$1\" নামের কোন নামস্থান নেই।",
-       "allpages-hide-redirects": "পà§\81নরà§\8dনিরà§\8dদà§\87শনাà¦\97à§\81লà§\8b à¦²à§\81à¦\95াà¦\93",
+       "allpages-hide-redirects": "পà§\81নরà§\8dনিরà§\8dদà§\87শনাà¦\97à§\81লà§\8b à¦²à§\81à¦\95ান",
        "cachedspecial-viewing-cached-ttl": "আপনি এই পৃষ্ঠায় একটি ক্যাশে সংস্করণ দেখছেন, যা $1 দিনের পুরানো হতে পারে।",
        "cachedspecial-viewing-cached-ts": "আপনি এই পৃষ্ঠায় একটি ক্যাশে সংস্করণ দেখছেন, যা সম্পূর্ণরূপে হালনাগাদকৃত নাও হতে পারে।",
        "cachedspecial-refresh-now": "সাম্প্রতিকগুলো প্রদর্শন করো।",
        "activeusers-excludegroups": "এই দলভুক্ত ব্যবহারকারী বাদ দিন:",
        "activeusers-noresult": "কোনো ব্যবহারকারী পাওয়া যায়নি।",
        "activeusers-submit": "সক্রিয় ব্যবহারকারী প্রদর্শন করুন",
-       "listgrouprights": "দলà¦\97ত à¦¬à§\8dযবহারà¦\95ারà§\80 অধিকার",
-       "listgrouprights-summary": "à¦\8fà¦\87 à¦\89à¦\87à¦\95ির à¦¬à§\8dযবহারà¦\95ারà§\80দà§\87র à¦\8fà¦\95à¦\9fি à¦\97à§\8dরà§\81পà¦\97à§\81লà§\8bর à¦¤à¦¾à¦²à¦¿à¦\95া à¦¦à§\87à¦\96ানà§\8b à¦¹à¦\9aà§\8dà¦\9bà§\87, à¦¸à¦¾à¦¥à§\87 à¦\97à§\8dরà§\81পà§\87র à¦\95ারà§\8dযপরিধিà¦\93 à¦\89লà§\8dলà§\87à¦\96 à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87।\nনিরà§\8dদিষà§\8dà¦\9f à¦\97à§\8dরà§\81পà§\87র à¦\95ারà§\8dযপরিধি à¦¸à¦®à§\8dপরà§\8dà¦\95à§\87 à¦\9cানতà§\87 [[{{MediaWiki:Listgrouprights-helppage}}|à¦\85তিরিà¦\95à§\8dত à¦¤à¦¥à§\8dয]] à¦¦à§\87à¦\96à§\81ন।",
-       "listgrouprights-key": "লিà¦\9cà§\87নà§\8dড:\n* <span class=\"listgrouprights-granted\">à¦\85নà§\81মà§\8bদিত à¦\85ধিà¦\95ার</span>\n* <span class=\"listgrouprights-revoked\">বাধাপà§\8dরাপà§\8dত অধিকার</span>",
+       "listgrouprights": "বà§\8dযবহারà¦\95ারà§\80র à¦¦à¦²à¦\97ত অধিকার",
+       "listgrouprights-summary": "à¦\8fà¦\87 à¦\89à¦\87à¦\95িতà§\87 à¦¸à¦\82à¦\9cà§\8dà¦\9eায়িত à¦¬à§\8dযবহারà¦\95ারà§\80 à¦¦à¦²à¦\97à§\81লির à¦\8fà¦\95à¦\9fি à¦¤à¦¾à¦²à¦¿à¦\95া à¦¨à¦¿à¦\9aà§\87 à¦¦à§\87à¦\96ানà§\8b à¦¹à¦\9aà§\8dà¦\9bà§\87, à¦¸à¦¾à¦¥à§\87 à¦¦à¦²à§\87র à¦¸à¦¾à¦¥à§\87 à¦¸à¦\82শà§\8dলিষà§\8dà¦\9f à¦\85ধিà¦\95ারসমà§\82হà¦\93 à¦\89লà§\8dলà§\87à¦\96 à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87।\nনিরà§\8dদিষà§\8dà¦\9f à¦¬à§\8dযà¦\95à§\8dতির à¦\85ধিà¦\95ারà¦\97à§\81লি à¦¸à¦®à§\8dপরà§\8dà¦\95à§\87 [[{{MediaWiki:Listgrouprights-helppage}}|à¦\85তিরিà¦\95à§\8dত à¦¤à¦¥à§\8dয]] à¦¥à¦¾à¦\95তà§\87 à¦ªà¦¾à¦°à§\87।",
+       "listgrouprights-key": "বà§\8dযাà¦\96à§\8dযা:\n* <span class=\"listgrouprights-granted\">à¦\85নà§\81মà§\8bদিত à¦\85ধিà¦\95ার</span>\n* <span class=\"listgrouprights-revoked\">পà§\8dরতà§\8dযাহারà¦\95à§\83ত অধিকার</span>",
        "listgrouprights-group": "দল",
        "listgrouprights-rights": "অধিকারসমূহ",
        "listgrouprights-helppage": "Help:দলের অধিকার",
        "listgrouprights-removegroup-self-all": "নিজের অ্যাকাউন্ট থেকে সকল দল অপসারণ",
        "listgrouprights-namespaceprotection-header": "নামস্থান নিষেধাজ্ঞাসমূহ",
        "listgrouprights-namespaceprotection-namespace": "নামস্থান",
-       "listgrouprights-namespaceprotection-restrictedto": "à¦\85ধিà¦\95ার à¦¯à¦¾ à¦¬à§\8dযবহারà¦\95ারà§\80à¦\95à§\87 সম্পাদনা করার অনুমতি দেয়",
+       "listgrouprights-namespaceprotection-restrictedto": "à¦\8fà¦\87 à¦\85ধিà¦\95ারà¦\9fি à¦¬à§\8dযবহারà¦\95ারà§\80à¦\95à§\87 à¦¯à¦¾ সম্পাদনা করার অনুমতি দেয়",
        "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>{{{Foo}}}</code> এরকম করে তিনটি দ্বিতীয় বন্ধনীতে আবদ্ধ কোনওকিছু) পাতাটি <code>$wgMaxArticleSize</code>-এর চেয়ে বেশি বড় হয়ে গেছে।",
+       "expensive-parserfunction-category-desc": "পাতাটি অতিরিক্ত সংখ্যক ব্যয়বহুল পার্সার ফাংশন (<code>#ifexist</code>-এর মত) ব্যবহার করছে। [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit] দেখুন।",
        "broken-file-category-desc": "এই পাতায় একটি ভাঙ্গা ফাইলের লিঙ্ক রয়েছে (একটি ফাইল এম্বেড করার জন্য একটি লিঙ্ক যখন ফাইলটির অস্তিত্ব নেই)",
        "hidden-category-category-desc": "এই বিষয়শ্রেণীটির পাতার বিষয়বস্তুর মধ্যে <code><nowiki>__HIDDENCAT__</nowiki></code> উপস্থিত রয়েছে, যা পূর্ব-নির্ধারিতভাবে পাতার বিষয়শ্রেণীর সংযোগে দেখায় না।",
        "trackingcategories-nodesc": "কোন বর্ণনা নেই।",
        "emailsubject": "বিষয়:",
        "emailmessage": "বার্তা:",
        "emailsend": "প্রেরণ করো",
-       "emailccme": "à¦\86মার à¦¬à¦¾à¦°à§\8dতার à¦\8fà¦\95à¦\9fি à¦\85নà§\81লিপি à¦\86মাà¦\95à§\87 à¦\87-মেইল করা হোক।",
-       "emailccsubject": "আপনার বার্তার অনুলিপি $1-কে: $2",
+       "emailccme": "à¦\86মার à¦¬à¦¾à¦°à§\8dতার à¦\8fà¦\95à¦\9fি à¦ªà§\8dরতিলিপি à¦\86মাà¦\95à§\87 à¦\87মেইল করা হোক।",
+       "emailccsubject": "$1-কে আপনার বার্তার প্রতিলিপি: $2",
        "emailsent": "ই-মেইল প্রেরণ করা হয়েছে",
        "emailsenttext": "আপনার ই-মেইল বার্তা প্রেরণ করা হয়েছে।",
        "emailuserfooter": "এই ইমেইলটি {{SITENAME}} সাইটের \"{{int:emailuser}}\" সুবিধা ব্যবহার করে $1-এর পক্ষ থেকে {{GENDER:$2|$2}}-এর নিকট {{GENDER:$1|পাঠানো হয়েছে}}। যদি {{GENDER:$2|আপনি}} এই ইমেইলটির উত্তর দেন, তাহলে {{GENDER:$2|আপনার}} উত্তরের ইমেইলটি সরাসরি {{GENDER:$1|মূল প্রেরকের}} কাছে পাঠানো হবে, সেই সাথে {{GENDER:$2|আপনার}} ইমেল ঠিকানা {{GENDER:$1|তাঁর}} কাছে প্রকাশ করা হবে।",
        "wlheader-showupdated": "আপনার শেষ আগমনের পর থেকে যেসব পাতায় পরিবর্তন হয়েছে সেগুলি '''গাঢ়''' করে দেখানো হয়েছে।",
        "wlnote": "নিচে $3, $4 তারিখ থেকে বিগত {{PLURAL:$2|১ ঘন্টায়|<strong>$2</strong> ঘন্টায়}} সংঘটিত {{PLURAL:$1|শেষ ১টি পরিবর্তন|শেষ <strong>$1টি</strong> পরিবর্তন}} দেখানো হল।",
        "wlshowlast": "সর্বশেষ $1 ঘণ্টা $2 দিনে দেখাও",
-       "watchlist-hide": "à¦\86ড়াল à¦\95রà§\8b",
+       "watchlist-hide": "লà§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96া à¦¹à§\8bà¦\95",
        "watchlist-submit": "দেখাও",
        "wlshowtime": "প্রদর্শনের সময় কাল:",
        "wlshowhideminor": "অনুল্লেখ্য সম্পাদনা",
        "wlshowhidepatr": "পরীক্ষিত সম্পাদনা",
        "wlshowhidemine": "আমার সম্পাদনা",
        "wlshowhidecategorization": "পাতা শ্রেণীবদ্ধকরণ",
-       "watchlist-options": "নজর তালিকা পছন্দসমূহ",
+       "watchlist-options": "নজর তালিকার পছন্দগুলি",
        "watching": "নজর রাখা হচ্ছে...",
        "unwatching": "নজর তুলে নেওয়া হচ্ছে...",
        "watcherrortext": "\"$1\" এর নজরতালিকা পরিবর্তনের সময় একটি ত্রুটি হয়েছে।",
        "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 পূর্বনির্ধারিত নয় এমন একটি বিষয়বস্তুর রূপ \"$5\" ব্যবহার $3 পাতাটি {{GENDER:$2|তৈরি করেছেন}}",
        "logentry-contentmodel-change": "$1 $3 পাতার বিষয়বস্তুর রূপ \"$4\" থেকে \"$5\"-এ {{GENDER:$2|পরিবর্তন করেছেন}}",
        "logentry-contentmodel-change-revertlink": "প্রত্যাবর্তন",
        "logentry-contentmodel-change-revert": "প্রত্যাবর্তন",
        "protectexpiry": "মেয়াদোত্তীর্ণ হবে:",
        "protect_expiry_invalid": "মেয়াদোত্তীর্ণ সময় অবৈধ।",
        "protect_expiry_old": "মেয়াদোত্তীর্ণ সময় অতীতে অবস্থিত।",
-       "protect-unchain-permissions": "সà§\81রà¦\95à§\8dষিত à¦\95রার à¦\85নà§\8dযনà§\8dয à¦\85পশনà¦\97à§\81লà§\8b à¦\86নলà¦\95 à¦\95রুন",
+       "protect-unchain-permissions": "সà§\81রà¦\95à§\8dষার à¦\85নà§\8dযানà§\8dয à¦ªà¦\9bনà§\8dদà¦\97à§\81লি à¦¦à§\87à¦\96ার à¦\9cনà§\8dয à¦¤à¦¾à¦²à¦¾ à¦\96à§\81লুন",
        "protect-text": "'''$1''' পাতাটির জন্য সুরক্ষার স্তর আপনি এখানে দেখতে ও পরিবর্তন করতে পারেন।",
        "protect-locked-blocked": "বাধাপ্রাপ্ত অবস্থায় আপনি পাতাটির সুরক্ষা স্তর পরিবর্তন করতে পারবেন না। এখানে '''$1''' পাতাটির বর্তমান সেটিংস দেওয়া হল:",
-       "protect-locked-dblock": "ডাà¦\9fাবà§\87à¦\9c à¦¬à¦¨্ধ থাকায় সুরক্ষা স্তর পরিবর্তন করা যাবে না।\nএখানে '''$1''' পাতাটির বর্তমান সেটিংস দেওয়া হল:",
+       "protect-locked-dblock": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দ্ধ থাকায় সুরক্ষা স্তর পরিবর্তন করা যাবে না।\nএখানে '''$1''' পাতাটির বর্তমান সেটিংস দেওয়া হল:",
        "protect-locked-access": "আপনার অ্যাকাউন্ট থেকে পাতার সুরক্ষা স্তর পরিবর্তন করার অনুমতি নেই।\nএখানে '''$1''' পাতাটির বর্তমান সেটিংস দেওয়া হল:",
        "protect-cascadeon": "এই পাতাটি বর্তমানে সুরক্ষিত আছে, কারণ পাতাটি নিচের {{PLURAL:$1|পাতায়|পাতাগুলিতে}} অন্তর্ভুক্ত, {{PLURAL:$1|যাতে|যেগুলিতে}} প্রপাতাকার সুরক্ষা চালু আছে। আপনি এই পাতাটির সুরক্ষা স্তর পরিবর্তন করতে পারেন, তবে এটি প্রপাতাকার সুরক্ষাটিতে কোন পরিবর্তন সাধন করবে না।",
        "protect-default": "সমস্ত ব্যবহারকারীর জন্য",
        "pagesize": "(বাইট)",
        "restriction-edit": "সম্পাদনা",
        "restriction-move": "সরিয়ে নেওয়া",
-       "restriction-create": "সà§\83ষà§\8dà¦\9fি à¦\95রা à¦¹à§\8bà¦\95",
+       "restriction-create": "তà§\88রি à¦\95রà§\81ন",
        "restriction-upload": "আপলোড",
        "restriction-level-sysop": "সম্পূর্ণ সুরক্ষিত",
        "restriction-level-autoconfirmed": "অর্ধ-সুরক্ষিত",
        "undelete-show-file-submit": "হ্যাঁ",
        "namespace": "নামস্থান:",
        "invert": "বিপরীতক্রমে নির্বাচন",
-       "tooltip-invert": "যà§\87 à¦¸à¦\95ল à¦¨à¦¾à¦®à¦¸à§\8dথানà§\87র à¦ªà¦¾à¦¤à¦¾à¦\97à§\81লà§\8bর à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনসমà§\82হর à¦¦à§\87à¦\96তà§\87 à¦\9aাà¦\9aà§\8dà¦\9bà§\87ন à¦¨à¦¾ à¦¸à§\87à¦\97à§\81লà§\8bর à¦¨à¦¾à¦®à§\87র à¦ªà¦¾à¦¶à§\87 à¦\9fিà¦\95 à¦¦à¦¿à¦¨",
+       "tooltip-invert": "নিরà§\8dবাà¦\9aিত à¦¨à¦¾à¦®à¦¸à§\8dথানà¦\9fির (à¦\8fবà¦\82 à¦¸à¦\82শà§\8dলিষà§\8dà¦\9f à¦¨à¦¾à¦®à¦¸à§\8dথানà¦\9fি, à¦¯à¦¦à¦¿ à¦¨à¦¿à¦°à§\8dবাà¦\9aিত à¦¹à¦¯à¦¼à§\87 à¦¥à¦¾à¦\95à§\87) à¦\85নà§\8dতরà§\8dà¦\97ত à¦ªà¦¾à¦¤à¦¾à¦\97à§\81লির à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনসমà§\82হ à¦²à§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96তà§\87 à¦\9aাà¦\87লà§\87 à¦\8fà¦\87 à¦¬à¦¾à¦\95à§\8dসà§\87 à¦\9fিà¦\95 à¦¦à¦¿à¦¨à¥¤",
        "tooltip-whatlinkshere-invert": "নির্বাচিত নামস্থানের পাতা থেকে লিঙ্ক আড়াল করতে এই বাক্সে টিক দিন।",
        "namespace_association": "সংশ্লিষ্ট নামস্থান",
        "tooltip-namespace_association": "এখানে টিক দেয়ার মাধ্যমে সংশ্লিষ্ট নামস্থান এবং আলাপপাতাসমূহ অন্তর্ভুক্ত করছেন",
        "sp-contributions-username": "আইপি (IP) ঠিকানা অথবা ব্যবহারকারীর নাম:",
        "sp-contributions-toponly": "শুধুমাত্র সেই সম্পাদনাগুলি দেখাও যেগুলো সাম্প্রতিক সংস্করণের অন্তর্ভুক্ত",
        "sp-contributions-newonly": "শুধুমাত্র পাতা সৃষ্টি করা সম্পাদনাগুলি দেখাও",
-       "sp-contributions-hideminor": "à¦\85নà§\81লà§\8dলà§\87à¦\96à§\8dয à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\86ড়াল à¦\95রà§\81ন",
+       "sp-contributions-hideminor": "à¦\85নà§\81লà§\8dলà§\87à¦\96à§\8dয à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦²à§\81à¦\95িয়à§\87 à¦°à¦¾à¦\96া à¦¹à§\8bà¦\95",
        "sp-contributions-submit": "অনুসন্ধান",
        "whatlinkshere": "সংযোগকারী পাতাসমূহ",
        "whatlinkshere-title": "যে পাতাগুলি থেকে \"$1\"-এর প্রতি সংযোগ আছে",
        "whatlinkshere-hidetrans": "অন্তর্ভুক্তকরণ $1",
        "whatlinkshere-hidelinks": "সংযোগ $1",
        "whatlinkshere-hideimages": "ফাইল সংযোগ $1",
-       "whatlinkshere-filters": "à¦\9bাà¦\95নà§\80",
+       "whatlinkshere-filters": "à¦\9bাà¦\81à¦\95নি",
        "whatlinkshere-submit": "চলো",
        "autoblockid": "স্বয়ংক্রিয় বাধা #$1",
        "block": "ব্যবহারকারীকে বাধা দাও",
        "unblock": "ব্যবহারকারীর উপর থেকে বাধা অপসারণ",
        "blockip": "{{GENDER:$1|ব্যবহারকারীকে}} বাধা দাও",
-       "blockip-legend": "বà§\8dযবহারà¦\95ারà§\80à¦\95à§\87 à¦¬à¦¾à¦§à¦¾ à¦¦à§\87à¦\93য়া à¦¹à§\8bà¦\95",
+       "blockip-legend": "বà§\8dযবহারà¦\95ারà§\80à¦\95à§\87 à¦¬à¦¾à¦§à¦¾ à¦¦à¦¿à¦¨",
        "blockiptext": "কোন নির্দিষ্ট আইপি ঠিকানা বা ব্যবহারকারীর লেখার অধিকারে বাধা দিতে নিচের ফর্মটি ব্যবহার করুন।\nএটি কেবলমাত্র ধ্বংসপ্রবণতা প্রতিরোধে ও [[{{MediaWiki:Policy-url}}|নীতিমালা]] মেনে সম্পাদন করা উচিত।\nনিচে একটি নির্দিষ্ট কারণ দিন (উদাহরণস্বরূপ, যেসব পাতার ধ্বংসসাধন করা হয়েছে, সেগুলি উল্লেখ করতে পারেন)।\nআপনি একটি নির্দিষ্ট সীমার অন্তর্গত একাধিক আইপি ঠিকানাকে বাধা দিতে পারেন; এজন্য [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR] সিনট্যাক্স বা পদবিন্যাসবিধি ব্যবহার করুন; এরকম বৃহত্তম অনুমোদিত সীমা হচ্ছে IPv4-এর ক্ষেত্রে /$1 এবং IPv6-এর ক্ষেত্রে /$2।",
        "ipaddressorusername": "আইপি ঠিকানা বা ব্যবহারকারীর নাম:",
        "ipbexpiry": "যখন মেয়াদোত্তীর্ণ হবে:",
        "ipbreason": "কারণ:",
-       "ipbreason-dropdown": "*বাধা দানের সাধারণ কারণ\n** মিথ্যা তথ্য ঢোকানো\n** পাতা থেকে বিষয়বস্তু মুছে ফেলা\n** বাইরের কোন সাইটের সংযোগ স্প্যাম করা\n** পাতাগুলিতে অর্থহীন বিষয়বস্তু ঢোকানো\n** ভীতি উদ্রেককারী আচরণ/হয়রানি\n** একাধিক অ্যাকাউন্টের অপব্যবহার\n** ব্যবহারকারী নাম অ-গ্রহণযোগ্য",
+       "ipbreason-dropdown": "*বাধা দানের সাধারণ কারণগুলি\n** মিথ্যা তথ্য যোগ করা\n** পাতা থেকে বিষয়বস্তু মুছে ফেলা\n** অবাঞ্ছিত বহিঃস্থ কোন সাইটের প্রতি সংযোগ বারংবার যোগ করা\n** পাতাগুলিতে অর্থহীন বিষয়বস্তু যোগ করা\n** ভীতি উদ্রেককারী আচরণ/হয়রানি\n** একাধিক অ্যাকাউন্টের অপব্যবহার\n** ব্যবহারকারী নাম অগ্রহণযোগ্য",
        "ipb-hardblock": "এই আইপি ঠিকানা থেকে লগ-ইনকৃত ব্যবহারকারীদেরকে সম্পাদনায় বাধা দাও",
        "ipbcreateaccount": "অ্যাকাউন্ট সৃষ্টিতে বাধা দেওয়া হোক",
        "ipbemailban": "ব্যবহারকারীকে ই-মেইল পাঠাতে বাধা দেওয়া হোক",
-       "ipbenableautoblock": "এই ব্যবহারকারীর ব্যবহার করা সর্বশেষ আইপি ঠিকানা, এবং পরবর্তী যেসব আইপি ঠিকানা থেকে সম্পাদনার চেষ্টা করা হবে, সেগুলিকেও স্বয়ংক্রিয়ভাবে বাধা দেয়া হোক",
-       "ipbsubmit": "à¦\8fà¦\87 à¦¬à§\8dযবহারà¦\95ারà§\80à¦\95à§\87 à¦¬à¦¾à¦§à¦¾ à¦¦à§\87য়া à¦¹à§\8bà¦\95",
+       "ipbenableautoblock": "এই ব্যবহারকারীর ব্যবহার করা সর্বশেষ আইপি ঠিকানা, এবং পরবর্তী যেসব আইপি ঠিকানা থেকে সম্পাদনার চেষ্টা করা হবে, সেগুলিকেও স্বয়ংক্রিয়ভাবে বাধা দেয়া হোক",
+       "ipbsubmit": "à¦\8fà¦\87 à¦¬à§\8dযবহারà¦\95ারà§\80à¦\95à§\87 à¦¬à¦¾à¦§à¦¾ à¦¦à¦¿à¦¨",
        "ipbother": "অন্য সময়:",
        "ipboptions": "২ ঘণ্টা:2 hours,১ দিন:1 day,৩ দিন:3 days,১ সপ্তাহ:1 week,২ সপ্তাহ:2 weeks,১ মাস:1 month,৩ মাস:3 months,৬ মাস:6 months,১ বছর:1 year,অসীম:infinite",
        "ipbhidename": "সম্পাদনা ও তালিকা থেকে ব্যবহারকারী নাম লুকিয়ে রাখা হোক",
        "ipbwatchuser": "এই ব্যবহাকারীর পাতা এবং আলাপের পাতা নজরতালিকায় রাখো",
        "ipb-disableusertalk": "এই ব্যবহারকারীকে বাধাদানকৃত অবস্থায় নিজের আলাপ পাতায় সম্পাদনা করা থেকে বিরত রাখো",
-       "ipb-change-block": "à¦\8fà¦\87 à¦\8fà¦\95à¦\87 à¦¸à§\87à¦\9fিà¦\82সসহ à¦¬à§\8dযবহারà¦\95ারà§\80à¦\95à§\87 à¦\86বারà¦\93 à¦¬à¦¾à¦§à¦¾ à¦ªà§\8dরদান à¦\95রà§\8b",
+       "ipb-change-block": "à¦\8fà¦\95à¦\87 à¦¸à§\87à¦\9fিà¦\82সসহ à¦¬à§\8dযবহারà¦\95ারà§\80à¦\95à§\87 à¦ªà§\81নà¦\83বাধা à¦¦à¦¿à¦¨",
        "ipb-confirm": "বাধা নিশ্চিতকরণ",
        "badipaddress": "আইপি (IP) ঠিকানাটি অগ্রহনযোগ্য",
        "blockipsuccesssub": "বাধা সফল",
        "ipb-confirmhideuser": "\"hide user\" ক্ষমতার মাধ্যমে আপনি একজন ব্যবহারকারীকে বাধা দিতে যাচ্ছেন। এর মাধ্যমে এই ব্যবহারকারীর নাম সকল লিস্ট এবং লগএন্ট্রি থেকে সরিয়ে ফেলা হবে। আপনি কি নিশ্চিতভাবে এটি করতে চান?",
        "ipb-confirmaction": "আপনি যদি নিশ্চিত হন আপনি এটি সত্যিকার অর্থেই করতে চান তাহলে অনুগ্রহ করে উপরের \"{{int:ipb-confirm}}\" ঘরটি দেখুন।",
        "ipb-edit-dropdown": "বাধাদানের কারণ সম্পাদনা করুন",
-       "ipb-unblock-addr": "$1-à¦\8fর à¦\89পর à¦¥à§\87à¦\95à§\87 à¦¬à¦¾à¦§à¦¾ à¦¤à§\81লà§\87 à¦¨à§\87à¦\93য়া à¦¹à§\8bà¦\95",
+       "ipb-unblock-addr": "$1-à¦\8fর à¦¬à¦¾à¦§à¦¾ à¦¤à§\81লà§\87 à¦¨à¦¿à¦¨",
        "ipb-unblock": "ব্যবহারকারী বা আইপি ঠিকানার উপর থেকে বাধা তুলে নেওয়া হোক",
        "ipb-blocklist": "বিদ্যমান বাধাগুলি দেখুন",
        "ipb-blocklist-contribs": "{{GENDER:$1|$1}}-এর অবদানসমূহ",
        "ipb-blocklist-duration-left": "$1 বাকি",
        "unblockip": "ব্যবহারকারীর উপর থেকে বাধা তুলে নেওয়া হোক",
        "unblockiptext": "নিচের ফর্মটি ব্যবহার করে পূর্বে বাধা দেওয়া কোন আইপি ঠিকানা বা ব্যবহারকারীর সাইটে লেখার অধিকার পুনঃপ্রতিষ্ঠা করুন।",
-       "ipusubmit": "বাধা à¦¤à§\81লà§\87 à¦¨à§\87à¦\93য়া à¦¹à§\8bà¦\95",
+       "ipusubmit": "à¦\8fà¦\87 à¦¬à¦¾à¦§à¦¾ à¦¤à§\81লà§\87 à¦¨à¦¿à¦¨",
        "unblocked": "[[User:$1|$1]]-এর উপর বাধা তুলে নেওয়া হয়েছে",
        "unblocked-range": "$1 -এর থেকে বাধা সরিয়ে নেওয়া হয়েছে",
        "unblocked-id": "$1 বাধাটি তুলে নেওয়া হয়েছে",
        "blocklist": "বাধাপ্রাপ্ত ব্যবহারকারী",
        "ipblocklist": "বাধাপ্রাপ্ত ব্যবহারকারী",
        "ipblocklist-legend": "বাধা দেওয়া কোন ব্যবহারকারীকে অনুসন্ধান করুন",
-       "blocklist-userblocks": "à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¬à¦¾à¦§à¦¾ à¦²à§\81à¦\95াà¦\93",
+       "blocklist-userblocks": "à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9f à¦¬à¦¾à¦§à¦¾ à¦²à§\81à¦\95ানà§\8b à¦¹à§\8bà¦\95",
        "blocklist-tempblocks": "অস্থায়ী বাধা লুকাও",
-       "blocklist-addressblocks": "à¦\8fà¦\95à¦\95 à¦\86à¦\87পি à¦¬à¦¾à¦§à¦¾ à¦²à§\81à¦\95াà¦\93",
+       "blocklist-addressblocks": "à¦\8fà¦\95à¦\95 à¦\86à¦\87পি à¦¬à¦¾à¦§à¦¾ à¦²à§\81à¦\95ানà§\8b à¦¹à§\8bà¦\95",
        "blocklist-rangeblocks": "রেঞ্জ ব্লকসমূহ লুকান",
        "blocklist-timestamp": "সময়বার্তা",
        "blocklist-target": "লক্ষ্য",
        "ipblocklist-empty": "বাধাতালিকা খালি।",
        "ipblocklist-no-results": "অনুরুদ্ধ আইপি ঠিকানা বা ব্যবহারকারী নামটির উপর কোন বাধা নেই।",
        "blocklink": "বাধা দাও",
-       "unblocklink": "বাধা à¦¤à§\81লà§\87 à¦¨à§\87à¦\93য়া à¦¹à§\8bà¦\95",
+       "unblocklink": "বাধা à¦¤à§\81লà§\81ন",
        "change-blocklink": "বাধা পরিবর্তন করুন",
        "contribslink": "অবদান",
        "emaillink": "ই-মেইল পাঠাও",
        "cant-see-hidden-user": "আপনি যে ব্যবহারকারীকে ব্লক বা লুকিয়ে রাখতে চাচ্ছেন তাকে আগে থেকেই ব্লক বা লুকিয়ে রাখা হয়েছে। এছাড়া আপনার Hideuser অধিকার নেই, তাই আপনি ব্যবহারকারীর অবস্থা পরিবর্তন করতে পারবেন না।",
        "ipbblocked": "আপনি অন্য কোন ব্যবহারকরীকে ব্লক বা আনব্লক করতে পারবেন না, কারণ আপনি নিজেই ব্লক রয়েছেন",
        "ipbnounblockself": "আপনি নিজেকে আনব্লক করতে পারবেন না",
-       "lockdb": "ডাà¦\9fাবà§\87à¦\9c à¦¬à¦¨à§\8dধ à¦\95রà§\87 à¦¦à§\87à¦\93য়া হোক",
+       "lockdb": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দà§\8dধ à¦\95রা হোক",
        "unlockdb": "ডাটাবেজ খুলে দেওয়া হোক",
-       "lockdbtext": "ডাà¦\9fাবà§\87à¦\9c à¦¬à¦¨à§\8dধ à¦\95রà§\87 à¦¦à¦¿à¦²à§\87 à¦\95à§\8bন à¦¬à§\8dযবহারà¦\95ারà§\80 à¦ªà¦¾à¦¤à¦¾ à¦¸à¦®à§\8dপাদনা à¦\95রতà§\87, à¦¤à¦¾à¦¦à§\87র à¦ªà¦\9bনà§\8dদ à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রতà§\87, à¦¤à¦¾à¦¦à§\87র à¦¨à¦\9cরতালিà¦\95া à¦¸à¦®à§\8dপাদনা à¦\95রতà§\87, এবং ডাটাবেজে পরিবর্তন আনে এমন কোন কিছু করতে পারবেন না।\nঅনুগ্রহ করে নিশ্চিত করুন যে আপনি এটাই করতে চান, এবং আপনার রক্ষণাবেক্ষণ শেষ হবার পর ডাটাবেজ আবার খুলে দেবেন।",
+       "lockdbtext": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দà§\8dধ à¦\95রà§\87 à¦¦à¦¿à¦²à§\87 à¦\95à§\8bনà§\8b à¦¬à§\8dযবহারà¦\95ারà§\80à¦\87 à¦ªà¦¾à¦¤à¦¾ à¦¸à¦®à§\8dপাদনা à¦\95রতà§\87, à¦¤à¦¾à¦¦à§\87র à¦ªà¦\9bনà§\8dদ à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রতà§\87, à¦¤à¦¾à¦¦à§\87র à¦¨à¦\9cরতালিà¦\95া à¦¸à¦®à§\8dপাদনা à¦\95রতà§\87 এবং ডাটাবেজে পরিবর্তন আনে এমন কোন কিছু করতে পারবেন না।\nঅনুগ্রহ করে নিশ্চিত করুন যে আপনি এটাই করতে চান, এবং আপনার রক্ষণাবেক্ষণ শেষ হবার পর ডাটাবেজ আবার খুলে দেবেন।",
        "unlockdbtext": "ডাটাবেজ খুলে দিলে সব ব্যবহারকারী পাতা সম্পাদনা করতে, তাদের পছন্দ পরিবর্তন করতে, তাদের নজরতালিকা সম্পাদনা করতে, এবং ডাটাবেজে পরিবর্তন সাধন করে, এমন অন্যান্য কাজ করতে পারবেন।\nঅনুগ্রহ করে নিশ্চিত করুন যে আপনি এটাই করতে চান।",
-       "lockconfirm": "হà§\8dযাà¦\81, à¦\86মি à¦\86সলà§\87à¦\87 à¦¡à¦¾à¦\9fাবà§\87à¦\9c à¦¬à¦¨à§\8dধ à¦\95রতে চাই।",
+       "lockconfirm": "হà§\8dযাà¦\81, à¦\86মি à¦\86সলà§\87à¦\87 à¦¡à¦¾à¦\9fাবà§\87à¦\9c à¦\85বরà§\81দà§\8dধ à¦\95রà§\87 à¦¦à¦¿তে চাই।",
        "unlockconfirm": "হ্যাঁ, আমি আসলেই ডাটাবেজ খুলে দিতে চাই।",
-       "lockbtn": "ডাà¦\9fাবà§\87à¦\9c à¦¬à¦¨্ধ করা হোক",
+       "lockbtn": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দ্ধ করা হোক",
        "unlockbtn": "ডাটাবেজ খুলে দেওয়া হোক",
        "locknoconfirm": "আপনি নিশ্চিতকরণ বাক্সে টিক দেননি।",
-       "lockdbsuccesssub": "ডাà¦\9fাবà§\87à¦\9c à¦¸à¦«à¦²à¦­à¦¾à¦¬à§\87 à¦¬à¦¨্ধ করে দেওয়া হয়েছে",
+       "lockdbsuccesssub": "ডাà¦\9fাবà§\87à¦\9c à¦¸à¦«à¦²à¦­à¦¾à¦¬à§\87 à¦\85বরà§\81দ্ধ করে দেওয়া হয়েছে",
        "unlockdbsuccesssub": "ডাটাবেজ খুলে দেওয়া হয়েছে",
-       "lockdbsuccesstext": "ডাà¦\9fাবà§\87à¦\9c à¦¬à¦¨à§\8dধ à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87\n<br />আপনার রক্ষণাবেক্ষণ সম্পন্ন হবার পর [[Special:UnlockDB|ডাটাবেজ খুলে দিতে]] ভুলবেন না।",
+       "lockdbsuccesstext": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\81দà§\8dধ à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bà§\87।<br />\nআপনার রক্ষণাবেক্ষণ সম্পন্ন হবার পর [[Special:UnlockDB|ডাটাবেজ খুলে দিতে]] ভুলবেন না।",
        "unlockdbsuccesstext": "ডাটাবেজ খুলে দেওয়া হয়েছে।",
-       "lockfilenotwritable": "ডাà¦\9fাবà§\87à¦\9c à¦¬à¦¨à§\8dধ à¦\95রার à¦«à¦¾à¦\87লà¦\9fি à¦²à¦¿à¦\96নযà§\8bà¦\97à§\8dয à¦¨à¦¯à¦¼à¥¤ à¦¡à¦¾à¦\9fাবà§\87à¦\9c à¦¬à¦¨্ধ করতে বা খুলতে চাইলে ফাইলটিকে ওয়েব সার্ভার কর্তৃক লিখনযোগ্য হতে হবে।",
-       "databaselocked": "ডাà¦\9fাবà§\87সà¦\9fি à¦\87তিমধà§\8dযà§\87à¦\87 à¦¤à¦¾à¦²à¦¾à¦¬দ্ধ।",
+       "lockfilenotwritable": "ডাà¦\9fাবà§\87à¦\9c à¦\85বরà§\8bধনিরà§\8dদà§\87শà¦\95 à¦«à¦¾à¦\87লà¦\9fি à¦²à¦¿à¦\96নযà§\8bà¦\97à§\8dয à¦¨à¦¯à¦¼à¥¤ à¦¡à¦¾à¦\9fাবà§\87à¦\9c à¦\85বরà§\81দ্ধ করতে বা খুলতে চাইলে ফাইলটিকে ওয়েব সার্ভার কর্তৃক লিখনযোগ্য হতে হবে।",
+       "databaselocked": "ডাà¦\9fাবà§\87à¦\9cà¦\9fি à¦\87তিমধà§\8dযà§\87à¦\87 à¦\85বরà§\81দ্ধ।",
        "databasenotlocked": "ডাটাবেজ বন্ধ নয়।",
        "lockedbyandtime": "({{GENDER:$1|$1}} $2 এর $3 সময়ে)",
        "move-page": "$1 স্থানান্তর",
        "allmessagescurrent": "বর্তমান টেক্সট",
        "allmessagestext": "এটি মিডিয়াউইকি নামস্থানে অন্তর্ভুক্ত সিস্টেম বার্তাগুলোর একটি তালিকা।\nআপনি যদি সাধারণ মিডিয়াউইকির স্থানীয়করণে অবদান রাখতে আগ্রহী হন, অনুগ্রহ করে [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation মিডিয়াউইকি স্থানীয়করণ] এবং [https://translatewiki.net translatewiki.net] দেখুন।",
        "allmessagesnotsupportedDB": "এই পাতা ব্যবহার করা যাবে না কারণ '''$wgUseDatabaseMessages''' বন্ধ করে রাখা আছে।",
-       "allmessages-filter-legend": "à¦\9bাà¦\95নà§\80",
+       "allmessages-filter-legend": "à¦\9bাà¦\81à¦\95নি",
        "allmessages-filter": "Filter by customization state:",
        "allmessages-filter-unmodified": "অপরিবর্তিত",
        "allmessages-filter-all": "সমস্ত",
        "thumbnail_image-type": "চিত্রের ধরন সমর্থন করে না",
        "thumbnail_gd-library": "অসম্পূর্ণ জিডি লাইব্রেরী কনফিগারেশন: $1 ফাংশন নেই",
        "thumbnail_image-missing": "ফাইলটি খুজে পাওয়া যাচ্ছে না: $1",
+       "thumbnail_image-failure-limit": "সাম্প্রতিককালে এই ক্ষুদ্র প্রাকপ্রদর্শনমূলক চিত্রটিকে (thumbnail) রেন্ডার করার চেষ্টা অত্যধিকবার ($1 বা তার বেশিবার) ব্যর্থ হয়েছে। অনুগ্রহ করে কিছুক্ষণ পরে আবার চেষ্টা করুন।",
        "import": "পাতা আমদানি",
        "importinterwiki": "অন্য উইকি থেকে আমদানী",
        "import-interwiki-text": "আমদানির জন্য একটি উইকি ও পাতার শিরোনাম নির্বাচন করুন।\nসংশোধনের তারিখগুলি এবং সম্পাদকদের নামগুলি সংরক্ষণ করা হবে।\nঅন্যান্য উইকি থেকে সমস্ত আমদানি [[Special:Log/import|আমদানি লগে]] লিপিবদ্ধ আছে।",
        "import-interwiki-sourcewiki": "উত্স উইকি:",
        "import-interwiki-sourcepage": "উৎস পাতা:",
-       "import-interwiki-history": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦° à¦¸à¦®à¦¸à§\8dত à¦\87তিহাসà§\87র à¦¸à¦\82সà§\8dà¦\95রণà§\87র à¦\85নà§\81লিপি করা হোক",
-       "import-interwiki-templates": "সà¦\95ল à¦\9fà§\87মà§\8dপলà§\87à¦\9f à¦\85নà§\8dতরà§\8dভà§\81à¦\95à§\8dত",
+       "import-interwiki-history": "à¦\8fà¦\87 à¦ªà¦¾à¦¤à¦¾à¦° à¦\87তিহাসà§\87র à¦¸à¦®à¦¸à§\8dত à¦¸à¦\82সà§\8dà¦\95রণà§\87র à¦ªà§\8dরতিলিপি করা হোক",
+       "import-interwiki-templates": "সà¦\95ল à¦\9fà§\87মপà§\8dলà§\87à¦\9f à¦\85নà§\8dতরà§\8dভà§\81à¦\95à§\8dত à¦\95রà§\81ন",
        "import-interwiki-submit": "আমদানি",
        "import-mapping-default": "পূর্বনির্ধারিত অবস্থানে আমদানি করুন",
        "import-mapping-namespace": "একটি নামস্থানে আমদানি করুন:",
        "import-error-special": "\"$1\" পাতাটি আমদানি করা যায়নি কারণ এটি একটি বিশেষ নামস্থানকে নির্দেশ করে যেটি সম্পাদনার জন্য অনুমোদিত নয়।",
        "import-error-invalid": "\"$1\" পাতাটি আমদানি করা যায়নি কারণ নামটি সঠিক নয়।",
        "import-error-unserialize": "$1 পাতার $2 সংস্করণটি সিরিয়ালাইজ করা যাচ্ছে না। এই রিভিশনে $4 হিসাবে $3 কন্টেন্ট মডেলে সিরিয়ালাইজ করা আছে।",
-       "import-options-wrong": "ভুল {{PLURAL:$2|অপশন|অপশনসমূহ}}: <nowiki>$1</nowiki>",
+       "import-error-bad-location": "বিষয়বস্তু মডেল $3 ব্যবহার করে সম্পাদিত $2 নং সংশোধনটি \"$1\" পাতায় সংরক্ষণ করা যাবে না, কারণ ঐ মডেলটি ঐ পাতাতে প্রযোজ্য নয়।",
+       "import-options-wrong": "{{PLURAL:$2|পছন্দ}} নির্বাচনে ভুল: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "মূল পাতার ভুল শিরনাম দেয়া হয়েছে।",
        "import-rootpage-nosubpage": "মূল পাতার \"$1\" নামস্থানে উপপাতা তৈরী অনুমোদিত নয়।",
        "importlogpage": "আমদানি লগ",
        "tooltip-ca-protect": "এই পাতাকে সুরক্ষিত করো",
        "tooltip-ca-unprotect": "এই পাতার সুরক্ষা পরিবর্তন করো",
        "tooltip-ca-delete": "পাতাটি মুছে ফেলো",
-       "tooltip-ca-undelete": "পাতাà¦\9fি à¦®à§\81à¦\9bà§\87 à¦«à§\87লার à¦\86à¦\97à§\87 à¦¯à§\87 à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bিল, à¦¸à§\87à¦\97à§\81লি à¦\89দà§\8dধার à¦\95রা à¦¹à§\8bà¦\95।",
+       "tooltip-ca-undelete": "পাতাà¦\9fি à¦\85পসারণà§\87র à¦\86à¦\97à§\87 à¦¯à§\87 à¦¸à¦®à§\8dপাদনাà¦\97à§\81লি à¦\95রা à¦¹à¦¯à¦¼à§\87à¦\9bিল à¦¸à§\87à¦\97à§\81লি à¦\89দà§\8dধার à¦\95রা à¦¹à§\8bà¦\95",
        "tooltip-ca-move": "পাতাটি স্থানান্তর করুন",
        "tooltip-ca-watch": "এই পাতাটি আপনার নজরতালিকায় যোগ করুন",
        "tooltip-ca-unwatch": "এই পাতাটি আপনার নজরতালিকা থেকে সরিয়ে ফেলুন",
        "tooltip-search": "{{SITENAME}} অনুসন্ধান",
        "tooltip-search-go": "যদি থাকে, তবে ঠিক এই নামের পাতায় চলো",
-       "tooltip-search-fulltext": "à¦\8fà¦\87 à¦\9fà§\87à¦\95à§\8dসà¦\9fà§\87র à¦\9cনà§\8dয à¦ªà¦¾à¦¤à¦¾à¦\97à§\81লিতà§\87 à¦\85নà§\81সনà§\8dধান à¦\95রা à¦¹à§\8bà¦\95",
+       "tooltip-search-fulltext": "à¦\8fà¦\87 à¦²à§\87à¦\96ার à¦\9cনà§\8dয à¦ªà¦¾à¦¤à¦¾à¦\97à§\81লিতà§\87 à¦\85নà§\81সনà§\8dধান à¦\95রà§\81ন",
        "tooltip-p-logo": "প্রধান পাতা পরিদর্শন করুন",
        "tooltip-n-mainpage": "প্রধান পাতায় যান",
        "tooltip-n-mainpage-description": "প্রধান পাতা পরিদর্শন করুন",
        "tooltip-ca-nstab-help": "সাহায্য পাতাটি দেখুন",
        "tooltip-ca-nstab-category": "বিষয়শ্রেণী পাতাটি দেখুন",
        "tooltip-minoredit": "এটিকে অনুল্লেখ্য সম্পাদনা হিসেবে চিহ্নিত করা হোক",
-       "tooltip-save": "à¦\86পনার à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনà¦\97à§\81লি à¦¸à¦\82রà¦\95à§\8dষিত à¦¹à§\8bà¦\95",
+       "tooltip-save": "à¦\86পনার à¦ªà¦°à¦¿à¦¬à¦°à§\8dতনà¦\97à§\81লি à¦¸à¦\82রà¦\95à§\8dষিত à¦\95রà§\81ন",
        "tooltip-publish": "আপনার পরিবর্তন প্রকাশ করুন",
        "tooltip-preview": "অনুগ্রহ করে সংরক্ষণের আগে আপনার পরিবর্তনগুলি প্রাকদর্শন করুন!",
-       "tooltip-diff": "à¦\86পনি à¦\9fà§\87à¦\95à§\8dসà¦\9fà§\87 à¦\95à§\80 à¦\95à§\80 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রà§\87à¦\9bà§\87ন, à¦¤à¦¾ à¦¦à§\87à¦\96ানà§\8b à¦¹à§\8bà¦\95।",
+       "tooltip-diff": "লà§\87à¦\96ায় à¦\95à§\80 à¦\95à§\80 à¦ªà¦°à¦¿à¦¬à¦°à§\8dতন à¦\95রà§\87à¦\9bà§\87ন à¦¤à¦¾ à¦¦à§\87à¦\96à§\81ন",
        "tooltip-compareselectedversions": "এই পাতার দুইটি নির্বাচিত সংস্করণের মধ্যে তুলনা দেখুন।",
        "tooltip-watch": "এই পাতাটি আমার নজরতালিকায় যোগ করো",
        "tooltip-watchlistedit-normal-submit": "শিরোনাম অপসারণ",
        "tooltip-preferences-save": "পছন্দ সংরক্ষণ",
        "tooltip-summary": "একটি সংক্ষিপ্ত সারাংশ দিন",
        "interlanguage-link-title": "$1 - $2",
-       "common.css": "/* এখানে সিএসএস নিবেশিত করা হলে তা সব স্কিনে প্রয়োগ করা হবে */",
+       "common.css": "/* এখানে সন্নিবেশিত সিএসএস সব আবরণে প্রয়োগ করা হবে */",
+       "print.css": "/* এখানে সন্নিবেশিত সিএসএস মুদ্রণের আউটপুটকে প্রভাবিত করবে */",
+       "noscript.css": "/* এখানে সন্নিবেশিত সিএসএস জাভাস্ক্রিপ্ট নিষ্ক্রিয় করা ব্যবহারকারীদের প্রভাবিত করবে */",
+       "group-autoconfirmed.css": "/* এখানে সন্নিবেশিত সিএসএস শুধু স্বয়ংনিশ্চিতকৃত ব্যবহারকারীদের প্রভাবিত করবে */",
+       "group-user.css": "/* এখানে সন্নিবেশিত সিএসএস শুধু নিবন্ধিত ব্যবহারকারীদের প্রভাবিত করবে */",
+       "group-bot.css": "/* এখানে সন্নিবেশিত সিএসএস শুধু বটকে প্রভাবিত করবে */",
+       "group-sysop.css": "/* এখানে সন্নিবেশিত সিএসএস শুধু প্রশাসকদের প্রভাবিত করবে */",
+       "group-bureaucrat.css": "/* এখানে সন্নিবেশিত সিএসএস শুধু ব্যুরোক্র্যাটদের প্রভাবিত করবে */",
+       "common.js": "/* এখানে সন্নিবেশিত জাভাস্ক্রিপ্ট সকল ব্যবহারকারীর জন্য সকল পাতায় লোড হবে। */",
+       "group-autoconfirmed.js": "/* এখানে সন্নিবেশিত জাভাস্ক্রিপ্ট শুধু স্বয়ংনিশ্চিতকৃত ব্যবহারকারীদের জন্য লোড হবে */",
+       "group-user.js": "/* এখানে সন্নিবেশিত জাভাস্ক্রিপ্ট শুধু নিবন্ধিত ব্যবহারকারীদের জন্য লোড হবে */",
+       "group-bot.js": "/* এখানে সন্নিবেশিত জাভাস্ক্রিপ্ট শুধু বটের জন্য লোড হবে */",
+       "group-sysop.js": "/* এখানে সন্নিবেশিত জাভাস্ক্রিপ্ট শুধু প্রশাসকদের জন্য লোড হবে */",
+       "group-bureaucrat.js": "/* এখানে সন্নিবেশিত জাভাস্ক্রিপ্ট শুধু ব্যুরোক্র্যাটদের জন্য লোড হবে */",
        "anonymous": "{{SITENAME}} এর বেনামী {{PLURAL:$1|ব্যবহারকারী|ব্যবহারকারীবৃন্দ}}",
        "siteuser": "{{SITENAME}} ব্যবহারকারী $1",
        "anonuser": "{{SITENAME}} বেনামী ব্যবহারকারী $1",
        "anonusers": "{{SITENAME}} বেনামী {{PLURAL:$2|ব্যবহারকারী|ব্যবহারকারীগণ}} $1",
        "creditspage": "পাতার স্বীকৃতি",
        "nocredits": "এই পাতাটির জন্য কোন কৃতিত্ব-সম্পর্কিত তথ্য নেই।",
-       "spamprotectiontitle": "সà§\8dপà§\8dযাম à¦ªà§\8dরতিরà¦\95à§\8dষা à¦«à¦¿à¦²à§\8dà¦\9fার",
-       "spamprotectiontext": "à¦\86পনি à¦¯à§\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦¸à¦\82রà¦\95à§\8dষণ à¦\95রতà§\87 à¦\9aà§\87য়à§\87à¦\9bà§\87ন, à¦¤à¦¾ à¦¸à§\8dপà§\8dযাম à¦«à¦¿à¦²à§\8dà¦\9fার à¦¬à¦¾à¦§à¦¾ à¦¦à¦¿à¦¯à¦¼à§\87à¦\9bà§\87। à¦¸à¦®à§\8dভবত à¦\95ালà§\8b à¦¤à¦¾à¦²à¦¿à¦\95াভà§\81à¦\95à§\8dত à¦¬à¦¹à¦¿à¦\83সà§\8dথ à¦\95à§\8bন à¦¸à¦¾à¦\87à¦\9fà§\87র à¦¸à¦\82যà§\8bà¦\97à§\87র à¦\95ারণà§\87 à¦\8fমনà¦\9fা ঘটেছে।",
-       "spamprotectionmatch": "নিà¦\9aà§\87র à¦\9fà§\87à¦\95à§\8dসà¦\9fà¦\9fি à¦\86মাদà§\87র à¦¸à§\8dপà§\8dযাম à¦«à¦¿à¦²à§\8dà¦\9fারকে সক্রিয় করেছে: $1",
+       "spamprotectiontitle": "সà§\8dপà§\8dযাম à¦ªà§\8dরতিরà¦\95à§\8dষা à¦\9bাà¦\81à¦\95নি",
+       "spamprotectiontext": "à¦\86পনি à¦¯à§\87 à¦ªà¦¾à¦¤à¦¾à¦\9fি à¦¸à¦\82রà¦\95à§\8dষণ à¦\95রতà§\87 à¦\9aà§\87য়à§\87à¦\9bà§\87ন, à¦¤à¦¾ à¦¸à§\8dপà§\8dযাম à¦\9bাà¦\81à¦\95নি à¦¬à¦¾à¦§à¦¾ à¦¦à¦¿à¦¯à¦¼à§\87à¦\9bà§\87। à¦¸à¦®à§\8dভবত à¦\95ালà§\8bতালিà¦\95াভà§\81à¦\95à§\8dত à¦¬à¦¹à¦¿à¦\83সà§\8dথ à¦\95à§\8bন à¦¸à¦¾à¦\87à¦\9fà§\87র à¦¸à¦\82যà§\8bà¦\97à§\87র à¦\95ারণà§\87 à¦\8fমনà¦\9fি ঘটেছে।",
+       "spamprotectionmatch": "নিà¦\9aà§\87র à¦²à§\87à¦\96াà¦\9fি à¦\86মাদà§\87র à¦¸à§\8dপà§\8dযাম à¦\9bাà¦\81à¦\95নিকে সক্রিয় করেছে: $1",
        "spambot_username": "মিডিয়াউইকি স্প্যাম পরিস্কার",
        "spam_reverting": "$1-এর প্রতি কোন সংযোগ নেই, এমন সর্বশেষ সংস্করণে ফেরত নেওয়া হচ্ছে।",
        "spam_blanking": "$1-এর প্রতি সংযোগ অন্তর্ভুক্ত আছে এমন সমস্ত সংশোধন খালি করা হচ্ছে",
        "newimages": "নতুন ফাইলের গ্যালারি",
        "imagelisttext": "নিচে '''$1''' {{PLURAL:$1|ফাইলের|ফাইলের}} একটি তালিকা যা $2 এ সংরক্ষিত রয়েছে।",
        "newimages-summary": "এই বিশেষ পাতা সর্বশেষ আপলোডকৃত ফাইল দেখাবে।",
-       "newimages-legend": "à¦\9bাà¦\95নà§\80",
+       "newimages-legend": "à¦\9bাà¦\81à¦\95নি",
        "newimages-label": "ফাইলের নাম (অথবা এর কোন অংশ):",
+       "newimages-user": "আইপি ঠিকানা বা ব্যবহারকারী নাম",
        "newimages-showbots": "বটের আপলোড গুলো দেখাও।",
-       "newimages-hidepatrolled": "à¦\9fহলà¦\95à§\83ত à¦\86পলà§\8bড à¦\86ড়াল à¦\95রà§\8b",
+       "newimages-hidepatrolled": "à¦\9fহলà¦\95à§\83ত à¦\86পলà§\8bড à¦²à§\81à¦\95ানà§\8b à¦¹à§\8bà¦\95",
        "noimages": "দেখার মত কিছু নেই।",
        "gallery-slideshow-toggle": "থাম্বনেল ভাসান",
        "ilsubmit": "অনুসন্ধান",
        "metadata": "অধি-উপাত্ত",
        "metadata-help": "এই ফাইলে অতিরিক্ত কিছু তথ্য আছে। সম্ভবত যে ডিজিটাল ক্যামেরা বা স্ক্যানারের মাধ্যমে এটি তৈরি বা ডিজিটায়িত করা হয়েছিল, সেটি কর্তৃক তথ্যগুলি যুক্ত হয়েছে। যদি ফাইলটি তার আদি অবস্থা থেকে পরিবর্তিত হয়ে থাকে, কিছু কিছু বিবরণ পরিবর্তিত ফাইলটির জন্য প্রযোজ্য না-ও হতে পারে।",
        "metadata-expand": "সম্প্রসারিত সবিস্তারে দেখাও",
-       "metadata-collapse": "সমà§\8dপà§\8dরসারিত à¦¸à¦¬à¦¿à¦¸à§\8dতারà§\87 à¦¦à§\87à¦\96িà¦\93 à¦¨à¦¾",
-       "metadata-fields": "à¦\8fà¦\87 à¦¬à¦¾à¦°à§\8dতায় à¦¤à¦¾à¦²à¦¿à¦\95াভà§\81à¦\95à§\8dত à¦\9aিতà§\8dর à¦®à§\87à¦\9fাডাà¦\9fা à¦\95à§\8dষà§\87তà§\8dরà¦\97à§\81লি à¦\9bবির à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦ªà§\8dরদরà§\8dশন à¦\95রা à¦¹à¦¬à§\87, à¦¯à¦\96ন à¦\85ধি-à¦\89পাতà§\8dত সারণিটি সংকুচিত করা হবে। অন্য ক্ষেত্রগুলি স্বাভাবিক অবস্থায় লুকায়িত থাকবে।\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-collapse": "সমà§\8dপà§\8dরসারিত à¦¬à¦¿à¦¬à¦°à¦£ à¦¦à§\87à¦\96ান",
+       "metadata-fields": "à¦\8fà¦\87 à¦¬à¦¾à¦°à§\8dতায় à¦¤à¦¾à¦²à¦¿à¦\95াভà§\81à¦\95à§\8dত à¦\9aিতà§\8dর à¦®à§\87à¦\9fাডাà¦\9fা à¦\95à§\8dষà§\87তà§\8dরà¦\97à§\81লি à¦\9bবির à¦ªà¦¾à¦¤à¦¾à¦¯à¦¼ à¦ªà§\8dরদরà§\8dশন à¦\95রা à¦¹à¦¬à§\87, à¦¯à¦\96ন à¦®à§\87à¦\9fাডাà¦\9fা সারণিটি সংকুচিত করা হবে। অন্য ক্ষেত্রগুলি স্বাভাবিক অবস্থায় লুকায়িত থাকবে।\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "চওড়া",
        "exif-imagelength": "লম্বা",
        "exif-bitspersample": "উপাদানপ্রতি বিট",
        "exif-copyrighted-false": "কপিরাইট সংক্রান্ত তথ্য নেই",
        "exif-photometricinterpretation-0": "কালো এবং সাদা (সাদা হল 0)",
        "exif-photometricinterpretation-1": "কালো এবং সাদা (কালো হল 0)",
+       "exif-photometricinterpretation-3": "প্যালেট",
+       "exif-photometricinterpretation-4": "স্বচ্ছতা মাস্ক",
+       "exif-photometricinterpretation-5": "পৃথকীকৃত (সম্ভবত CMYK)",
        "exif-unknowndate": "অজানা তারিখ",
        "exif-orientation-1": "সাধারণ",
        "exif-orientation-2": "অনুভূমিকভাবে উল্টানো",
        "invalidateemail": "ইমেইল নিশ্চিতকরণ বাতিল করুন",
        "notificationemail_subject_changed": "{{SITENAME}}-এ নিবন্ধীকৃত ইমেল ঠিকানা পরিবর্তন করা হয়েছে",
        "notificationemail_subject_removed": "{{SITENAME}}-এ নিবন্ধীকৃত ইমেল ঠিকানা সরানো হয়েছে",
+       "notificationemail_body_changed": "কেউ, সম্ভবত আপনি-ই, $1 আইপি ঠিকানাটি থেকে {{SITENAME}}-এর \"$2\" নামক অ্যাাকাউন্টের সাথে সংশ্লিষ্ট ই-মেইল ঠিকানাটি \"$3\"-এ পরিবর্তন করেছেন।\n\nযদি এটি আপনি না করে থাকেন তাহলে, অবিলম্বে সাইট প্রশাসকের সাথে যোগাযোগ করুন।",
+       "notificationemail_body_removed": "কেউ, সম্ভবত আপনি-ই, $1 আইপি ঠিকানা থেকে  {{SITENAME}}-এর \"$2\" নামক অ্যাকাউন্টের সাথে সংশ্লিষ্ট ই-মেইল ঠিকানাটি মুছে দিয়েছেন।\n\nযদি এটি আপনি না করে থাকেন তাহলে, অবিলম্বে সাইট প্রশাসকের সাথে যোগাযোগ করুন।",
        "scarytranscludedisabled": "[আন্তঃউইকি আন্তঃভুক্তি নিষ্ক্রিয়]",
        "scarytranscludefailed": "[$1 এর জন্য টেমপ্লেট আনা অসফল হয়েছে]",
        "scarytranscludefailed-httpstatus": "[$1: HTTP $2 এর জন্য টেমপ্লেট আনা বিফল হয়েছে]",
        "watchlistedit-normal-title": "নজরতালিকা সম্পাদনা করো",
        "watchlistedit-normal-legend": "নজর তালিকা থেকে শিরোনামসমূহ মুছে ফেলো",
        "watchlistedit-normal-explain": "আপনার নজরতালিকায় রাখা পাতার শিরোনামগুলি নিচে দেখানো হয়েছে।\nকোন শিরোনাম সরিয়ে নিতে চাইলে পাশের বাক্সে টিক দিন এবং \"{{int:Watchlistedit-normal-submit}}\"-এ ক্লিক করুন।\nআপনি [[Special:EditWatchlist/raw|মূল তালিকাটিও]] সম্পাদনা করতে পারেন।",
-       "watchlistedit-normal-submit": "শিরà§\8bনামà¦\97à§\81লি à¦¸à¦°à¦¿à¦¯à¦¼à§\87 à¦«à§\87লা à¦¹à§\8bà¦\95",
+       "watchlistedit-normal-submit": "শিরà§\8bনামà¦\97à§\81লি à¦¸à¦°à¦¾à¦¨",
        "watchlistedit-normal-done": "{{PLURAL:$1|1 শিরোনাম|$1 শিরোনামসমূহ}} আপনার নজর তালিকা থেকে মুছে ফেলা হয়েছে:",
        "watchlistedit-raw-title": "অশোধিত নজর তালিকা সম্পাদনা করুন",
        "watchlistedit-raw-legend": "অশোধিত নজরতালিকা সম্পাদনা করুন",
        "watchlistedit-raw-explain": "আপনার নজরতালিকায় রাখা পাতার শিরোনামগুলি নিচে দেখানো হয়েছে, এই তালিকাতে নতুন শিরোনাম যোগ করা যাবে বা শিরোনাম সরিয়ে নেওয়া যাবে;\nপ্রতিটি লাইনে একটি করে শিরনাম দেখানো হচ্ছে।\nশেষ হলে \"{{int:Watchlistedit-raw-submit}}\"-এ ক্লিক করুন।\nআপনি [[Special:EditWatchlist|আদর্শ সম্পাদনা সরঞ্জাম]]-ও ব্যবহার করতে পারেন।",
        "watchlistedit-raw-titles": "শিরোনাম:",
-       "watchlistedit-raw-submit": "নà¦\9cরতালিà¦\95া à¦¹à¦¾à¦²à¦¨à¦¾à¦\97াদ à¦\95রা à¦¹à§\8bà¦\95",
+       "watchlistedit-raw-submit": "নà¦\9cরতালিà¦\95া à¦¹à¦¾à¦²à¦¨à¦¾à¦\97াদ à¦\95রà§\81ন",
        "watchlistedit-raw-done": "আপনার নজর তালিকা হালনাগাদ করা হয়েছে।",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 শিরোনাম|$1 শিরোনামসমূহ}} যোগ করা হয়েছে:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 শিরোনাম|$1 শিরোনামসমূহ}} মুছে ফেলা হয়েছে:",
        "timezone-utc": "ইউটিসি",
        "timezone-local": "স্থানীয়",
        "duplicate-defaultsort": "<strong>সতর্কীকরণ:</strong> পূর্বনির্ধারিত সাজানোর চাবি \"$2\" পূর্বের পূর্বনির্ধারিত সাজানোর চাবি \"$1\" কে অগ্রাহ্য করে।",
-       "duplicate-displaytitle": "<strong>সতরà§\8dà¦\95à§\80à¦\95রণ:</strong> à¦ªà§\8dরদরà§\8dশন à¦¶à¦¿à¦°à§\8bনাম \"$2\" à¦\86à¦\97à§\87র à¦ªà§\8dরদরà§\8dশন à¦¶à¦¿à¦°à§\8bনাম \"$1\" à¦\85à¦\97à§\8dরাহà§\8dয করবে।",
+       "duplicate-displaytitle": "<strong>সতরà§\8dà¦\95à§\80à¦\95রণ:</strong> à¦ªà§\8dরদরà§\8dশন à¦¶à¦¿à¦°à§\8bনাম \"$2\" à¦\86à¦\97à§\87র à¦ªà§\8dরদরà§\8dশন à¦¶à¦¿à¦°à§\8bনাম \"$1\" à¦\95à§\87 à¦ªà§\8dরতিসà§\8dথাপিত করবে।",
        "restricted-displaytitle": "<strong>সতর্কবার্তা:</strong> প্রদর্শন শিরোনাম \"$1\" উপেক্ষা করা হয়েছে যেহেতু এটি পাতার আসল শিরোনামের সাথে সমতুল্য নয়।",
        "invalid-indicator-name": "<strong>ত্রুটি:</strong> পাতার অবস্থা নির্দেশক <code>name</code> অ্যাট্রিবিউট খালি হতে পারবে না।",
        "version": "সংস্করণ",
        "version-license-not-found": "এই এক্সটেনশনের জন্য কোনো বিস্তারিত লাইসেন্স তথ্য পাওয়া যায়নি।",
        "version-credits-title": "$1-এর জন্য কৃতিত্ব",
        "version-credits-not-found": "এই এক্সটেনশনটির জন্য কোনো বিস্তারিত কৃতিত্ব তথ্য পাওয়া যায়নি।",
-       "version-poweredby-credits": "এই উইকিটি পরিচালিত হচ্ছে <strong>[https://www.mediawiki.org/ মিডিয়াউইকি]</strong> -এর মাধ্যমে, কপিরাইট © ২০০১-$1 $2।",
+       "version-poweredby-credits": "এই উইকিটি <strong>[https://www.mediawiki.org/ মিডিয়াউইকির]</strong> মাধ্যমে পরিচালিত হচ্ছে, কপিরাইট © ২০০১-$1 $2।",
        "version-poweredby-others": "অন্যান্য",
        "version-poweredby-translators": "translatewiki.net অনুবাদকগণ",
        "version-credits-summary": "[[Special:Version|মিডিয়াউইকি]] সফটওয়্যারে অবদানের জন্য আমরা এই ব্যক্তিকে স্বীকৃতি দিতে চাই।",
-       "version-license-info": "মিডিয়াà¦\89à¦\87à¦\95ি à¦\8fà¦\95à¦\9fি à¦«à§\8dরি à¦¸à¦«à¦\9fà¦\93য়à§\8dযার; à¦\86পনি à¦\8fà¦\9fি à¦¬à¦¿à¦¤à¦°à¦£ à¦\95রতà§\87 à¦ªà¦¾à¦°à¦¬à§\87ন à¦\8fবà¦\82/à¦\85থবা à¦¸à¦®à§\8dপদানা à¦\95রতà§\87 à¦ªà¦¾à¦°à¦¬à§\87ন, à¦\8fà¦\95à§\8dষà§\87তà§\8dরà§\87 à¦«à§\8dরি à¦¸à¦«à¦\9fà¦\93য়à§\8dযার à¦«à¦¾à¦\89নà§\8dডà§\87শনà§\87র à¦ªà§\8dরà¦\95াশিত à¦\97নà§\81 à¦\9cà§\87নারà§\87ল à¦ªà¦¾à¦¬à¦²à¦¿à¦\95 à¦²à¦¾à¦\87সà§\87নà§\8dসà§\87র à§¨à¦¯à¦¼ à¦\85থবা à¦¸à¦¾à¦®à§\8dপà§\8dরতিà¦\95তম à¦\95à§\8bনà§\8b à¦¸à¦\82সà§\8dà¦\95রণ à¦®à§\87নà§\87 à¦\9aলতà§\87 à¦¹à¦¬à§\87। \n\nসà¦\95লà§\87র à¦\89পà¦\95ারà§\87র à¦²à¦\95à§\8dষà§\8dযà§\87 à¦\8fà¦\9fি à¦¬à¦¿à¦¤à¦°à¦£ à¦\95রা à¦¹à¦¯à¦¼à§\87 à¦¥à¦¾à¦\95à§\87, à¦\95িনà§\8dতà§\81 à¦\8fà¦\95à§\8dষà§\87তà§\8dরà§\87 à¦\95à§\8bনà§\8b à¦\93য়ারà§\87নà§\8dà¦\9fি à¦¦à§\87য়া à¦¹à¦¯à¦¼ à¦¨à¦¾, à¦\8fমনà¦\95ি à¦¬à¦¿à¦¶à§\87ষ à¦\95à§\8bনà§\8b à¦\95ারà§\8dযà¦\95à§\8dষà§\87তà§\8dরà§\87 à¦¬à§\8dযবহারà§\87র à¦\9cনà§\8dযà¦\93 à¦¤à¦¥à¦¾à¦\95থিত à¦\93য়ারà§\87নà§\8dà¦\9fি à¦¦à§\87য়া à¦¹à¦¯à¦¼ à¦¨à¦¾à¥¤ à¦¬à¦¿à¦¸à§\8dতারিত à¦\9cানতà§\87 à¦¦à§\87à¦\96à§\81ন à¦\97নà§\81 à¦\9cà§\87নারà§\87ল à¦ªà¦¾à¦¬à¦²à¦¿à¦\95 à¦²à¦¾à¦\87সà§\87নà§\8dস। \n\nà¦\8fà¦\87 à¦¸à¦«à¦\9fà¦\93য়à§\8dযারà§\87র à¦¸à¦¾à¦¥à§\87 [{{SERVER}}{{SCRIPTPATH}}/COPYING à¦\97নà§\81 à¦\9cà§\87নারà§\87ল à¦ªà¦¾à¦¬à¦²à¦¿à¦\95 à¦²à¦¾à¦\87সà§\87নà§\8dসà§\87র à¦\8fà¦\95à¦\9fি à¦\85নà§\81লিপি] à¦¥à¦¾à¦\95ার à¦\95থা; à¦¯à¦¦à¦¿ à¦\86পনি à¦¨à¦¾ à¦ªà§\87য়à§\87 à¦¥à¦¾à¦\95à§\87ন à¦¤à¦¾à¦¹à¦²à§\87 à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦«à§\8dরি à¦¸à¦«à¦\9fà¦\93য়à§\8dযার à¦«à¦¾à¦\89নà§\8dডà§\87শনà¦\95à§\87 à¦\9cানান à¦\8fà¦\87 à¦ à¦¿à¦\95ানায়, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA à¦\85থবা [//www.gnu.org/licenses/old-licenses/gpl-2.0.html à¦\85নলাà¦\87নà§\87 à¦¦à§\87à¦\96ুন]।",
+       "version-license-info": "মিডিয়াà¦\89à¦\87à¦\95ি à¦\8fà¦\95à¦\9fি à¦\89নà§\8dমà§\81à¦\95à§\8dত à¦¸à¦«à¦\9fà¦\93য়à§\8dযার; à¦\86পনি à¦\8fà¦\9fি à¦ªà§\81নà¦\83বিতরণ à¦\95রতà§\87 à¦ªà¦¾à¦°à¦¬à§\87ন à¦\8fবà¦\82/à¦\85থবা à¦¸à¦®à§\8dপাদনা à¦\95রতà§\87 à¦ªà¦¾à¦°à¦¬à§\87ন, à¦\8fà¦\95à§\8dষà§\87তà§\8dরà§\87 à¦«à§\8dরি à¦¸à¦«à¦\9fà¦\93য়à§\8dযার à¦«à¦¾à¦\89নà§\8dডà§\87শনà§\87র à¦ªà§\8dরà¦\95াশিত à¦\97নà§\81 à¦\9cà§\87নারà§\87ল à¦ªà¦¾à¦¬à¦²à¦¿à¦\95 à¦²à¦¾à¦\87সà§\87নà§\8dসà§\87র à§¨à¦¯à¦¼ à¦\85থবা à¦¸à¦¾à¦®à§\8dপà§\8dরতিà¦\95তম à¦\95à§\8bনà§\8b à¦¸à¦\82সà§\8dà¦\95রণ à¦®à§\87নà§\87 à¦\9aলতà§\87 à¦¹à¦¬à§\87। \n\nমিডিয়াà¦\89à¦\87à¦\95ি à¦\8fà¦\87 à¦\86শায় à¦¬à¦¿à¦¤à¦°à¦£ à¦\95রা à¦¹à¦¯à¦¼à§\87 à¦¥à¦¾à¦\95à§\87 à¦¯à§\87 à¦\8fà¦\9fি à¦¸à¦\95লà§\87র à¦\89পà¦\95ারà§\87 à¦\86সবà§\87, à¦\95িনà§\8dতà§\81 à¦\8fà¦\95à§\8dষà§\87তà§\8dরà§\87 à¦\95à§\8bনà§\8b à¦²à¦¿à¦\96িত à¦\85à¦\99à§\8dà¦\97à§\80à¦\95ার à¦¦à§\87য়া à¦¹à¦¯à¦¼ à¦¨à¦¾, à¦\8fমনà¦\95ি à¦¬à§\8dযবসাযà§\8bà¦\97à§\8dযতা à¦¬à¦¾ à¦¬à¦¿à¦¶à§\87ষ à¦\95à§\8bনà§\8b à¦\95ারà§\8dযà¦\95à§\8dষà§\87তà§\8dরà§\87 à¦¬à§\8dযবহারà§\87র à¦\9cনà§\8dয à¦\8fà¦\9fি à¦\89পযà§\81à¦\95à§\8dত à¦\95ি à¦¨à¦¾, à¦\8f à¦¨à¦¿à¦¯à¦¼à§\87 à¦ªà¦°à§\8bà¦\95à§\8dষ à¦\85à¦\99à§\8dà¦\97à§\80à¦\95ারà¦\93 à¦¦à§\87য়া à¦¹à¦¯à¦¼ à¦¨à¦¾à¥¤ à¦¬à¦¿à¦¸à§\8dতারিত à¦\9cানতà§\87 à¦\97নà§\81 à¦\9cà§\87নারà§\87ল à¦ªà¦¾à¦¬à¦²à¦¿à¦\95 à¦²à¦¾à¦\87সà§\87নà§\8dস à¦¦à§\87à¦\96à§\81ন। \n\nà¦\8fà¦\87 à¦¸à¦«à¦\9fà¦\93য়à§\8dযারà§\87র à¦¸à¦¾à¦¥à§\87 [{{SERVER}}{{SCRIPTPATH}}/COPYING à¦\97নà§\81 à¦\9cà§\87নারà§\87ল à¦ªà¦¾à¦¬à¦²à¦¿à¦\95 à¦²à¦¾à¦\87সà§\87নà§\8dসà§\87র à¦\8fà¦\95à¦\9fি à¦ªà§\8dরতিলিপি] à¦¥à¦¾à¦\95ার à¦\95থা; à¦¯à¦¦à¦¿ à¦\86পনি à¦¨à¦¾ à¦ªà§\87য়à§\87 à¦¥à¦¾à¦\95à§\87ন à¦¤à¦¾à¦¹à¦²à§\87 à¦\85নà§\81à¦\97à§\8dরহ à¦\95রà§\87 à¦«à§\8dরি à¦¸à¦«à¦\9fà¦\93য়à§\8dযার à¦«à¦¾à¦\89নà§\8dডà§\87শনà¦\95à§\87 à¦\9cানান à¦\8fà¦\87 à¦ à¦¿à¦\95ানায়, Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA à¦\85থবা [//www.gnu.org/licenses/old-licenses/gpl-2.0.html à¦²à¦¾à¦\87সà§\87নà§\8dসà¦\9fি à¦\87নà§\8dà¦\9fারনà§\87à¦\9fà§\87 à¦ªà¦¡à¦¼ুন]।",
        "version-software": "ইনস্টলকৃত সফটওয়্যার",
        "version-software-product": "পণ্য",
        "version-software-version": "সংস্করণ",
        "fileduplicatesearch-submit": "অনুসন্ধান",
        "fileduplicatesearch-info": "$1 × $2 পিক্সেল<br />ফাইলের আকার: $3<br />এমআইএমই প্রকার: $4",
        "fileduplicatesearch-result-1": " \"$1\" ফাইলের কোন ডুপ্লেকেট ফাইল নাই।",
-       "fileduplicatesearch-result-n": "\"$1\" à¦\8fà¦\87 à¦«à¦¾à¦\87লà§\87র {{PLURAL:$2|1 à¦\8fà¦\95à¦\87রà¦\95ম à¦\85নà§\81লিপি|$2 à¦\8fà¦\95à¦\87রà¦\95ম à¦\85নà§\81লিপি}} রয়েছে।",
+       "fileduplicatesearch-result-n": "\"$1\" à¦«à¦¾à¦\87লà¦\9fির {{PLURAL:$2|১à¦\9fি à¦\85বিà¦\95ল à¦ªà§\8dরতিলিপি|$2à¦\9fি à¦\85বিà¦\95ল à¦ªà§\8dরতিলিপি}} রয়েছে।",
        "fileduplicatesearch-noresults": "\"$1\" নামের কোনো ফাইল খুঁজে পাওয়া যায়নি।",
        "specialpages": "বিশেষ পাতাসমূহ",
-       "specialpages-note-top": "লিà¦\9cà§\87নà§\8dড",
+       "specialpages-note-top": "বà§\8dযাà¦\96à§\8dযা",
        "specialpages-note": "* সাধারণ বিশেষ পাতাসমূহ।\n* <span class=\"mw-specialpagerestricted\">সীমাবদ্ধ বিশেষ পাতা।</span>",
        "specialpages-group-maintenance": "রক্ষণাবেক্ষণের কার্যবিবরণীসমূহ",
        "specialpages-group-other": "অন্যান্য বিশেষ পাতাসমূহ",
        "specialpages-group-pagetools": "পাতা সংক্রান্ত সরঞ্জাম",
        "specialpages-group-wiki": "উপাত্ত এবং সরঞ্জামসমূহ",
        "specialpages-group-redirects": "বিশেষ পাতাগুলি পুনর্নির্দেশ করা হচ্ছে",
-       "specialpages-group-spam": "স্প্যামরোধী হাতিয়ার",
+       "specialpages-group-spam": "স্প্যাম সরঞ্জামসমূহ",
        "specialpages-group-developer": "ডেভলপারের সরঞ্জাম",
        "blankpage": "খালি পাতা",
        "intentionallyblankpage": "এই পাতাটি ইচ্ছা করে খালি রাখা হয়েছে",
        "external_image_whitelist": "  #এই লাইন ঠিক যেমন আছে<প্রাক> তেমন রাখুন<pre>\n #রেগুলার এক্সপ্রেশনের টুকরা নীচে (শুধুমাত্র অংশ / / মধ্যে যে যায়) বসান\n#এইগুলি এক্সটার্নাল (hotlinked) ইমেজের URL-এর সাথে মেলানো হবে\n#যেগুলি মিলবে, সেগুলি চিত্র হিসাবে প্রদর্শিত হবে, অন্যথায় শুধুমাত্র ইমেজ লিঙ্ক প্রদর্শিত হবে\n#যে লাইনের প্রারম্ভে # আছে সেই লাইনগুলি মন্তব্যসমূহ হিসাবে ব্যবহার করা হয়\n#এটি কেস-অসংবেদী\n\n#এই রেখার উপরের regex টুকরা বসান. এই লাইন ঠিক যেমন আছে তেমন রাখুন</pre>",
        "tags": "বৈধ পরিবর্তন ট্যাগ",
-       "tag-filter": "[[Special:Tags|à¦\9fà§\8dযাà¦\97]] à¦\9bাà¦\95নà§\80:",
-       "tag-filter-submit": "à¦\9bাà¦\95নà§\80",
+       "tag-filter": "[[Special:Tags|à¦\9fà§\8dযাà¦\97]] à¦\9bাà¦\81à¦\95নি:",
+       "tag-filter-submit": "à¦\9bাà¦\81à¦\95নি",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|ট্যাগ}}]]: $2)",
        "tag-mw-contentmodelchange": "বিষয়বস্তুর রূপ পরিবর্তন",
        "tag-mw-contentmodelchange-description": "সম্পাদনা যা একটি পাতার [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel বিষয়বস্তুর রূপ পরিবর্তন] করে",
        "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-invalid-chars": "ট্যাগের নামে কমা (<code>,</code>) বা ফরোয়ার্ড স্ল্যাশ (<code>/</code>) থাকতে পারবে না।",
        "tags-create-invalid-title-chars": "ট্যাগের নাম এমন অক্ষর থাকতে পারবে না যা পাতার শিরোনামে ব্যবহার করা যায় না।",
        "tags-create-already-exists": "\"$1\" ট্যাগ ইতিমধ্যেই বিদ্যমান।",
+       "tags-create-warnings-above": "\"$1\" ট্যাগটি তৈরির প্রচেষ্টার সময় নিম্নোক্ত {{PLURAL:$2|সতর্ক বার্তা|সতর্ক বার্তাগুলি}} উৎপন্ন হয়েছে:",
        "tags-create-warnings-below": "আপনি কি ট্যাগটি তৈরি করা চালিয়ে যেতে চান?",
        "tags-delete-title": "ট্যাগ অপসারণ",
        "tags-delete-explanation-initial": "আপনি ডাটাবেজ থেকে \"$1\" ট্যাগটি অপসারণ করতে চলেছেন।",
+       "tags-delete-explanation-in-use": "ট্যাগটি বর্তমানে যে {{PLURAL:$2|$2 টি সংশোধন এবং/বা লগ ভুক্তিতে}} প্রয়োগ হয়েছে, সেগুলি থেকে এটিকে অপসারণ করা হবে।",
+       "tags-delete-explanation-warning": "এই কাজটি <strong>অপরিবর্তনযোগ্য</strong> এবং এটিকে ভবিষ্যতে <strong>বাতিল করা সম্ভব নয়</strong>, এমনকি ডাটাবেজ প্রশাসকরাও এটি বাতিল করতে পারবেন না। এই ট্যাগটিই মুছে ফেলতে চাচ্ছেন কি না, সে ব্যাপারে সুনিশ্চিত হোন।",
+       "tags-delete-explanation-active": "<strong>\"$1\" ট্যাগটি এখনও সক্রিয় এবং ভবিষ্যতে এটিকে প্রয়োগ করা যাবে।</strong> এই ব্যাপারটি ঘটা বন্ধ করার জন্য যেসব স্থানে ট্যাগটিকে প্রয়োগ করার জন্য নির্ধারণ করা হয়েছে, সেসব স্থানে গিয়ে সেটিকে নিষ্ক্রিয় করুন।",
        "tags-delete-reason": "কারণ:",
        "tags-delete-submit": "অপরিবর্তনীয় এই ট্যাগ অপসারন করো",
+       "tags-delete-not-allowed": "এক্সটেনশন দ্বারা সংজ্ঞায়িত ট্যাগ অপসারণ করা সম্ভব নয়, যদি না এক্সটেনশনটি বিশেষভাবে এটি করার অনুমতি দিয়ে থাকে।",
        "tags-delete-not-found": "\"$1\" ট্যাগ বিদ্যমান নয়।",
        "tags-delete-too-many-uses": "\"$1\" ট্যাগটি $2টিরও অধিক {{PLURAL:$2|সংশোধনে}} প্রয়োগ করা হয়েছে, যার অর্থ এটি অপসারণ করা যাবে না।",
+       "tags-delete-warnings-after-delete": "\"$1\" ট্যাগটি মুছে ফেলা হয়েছে, কিন্তু নিম্নোক্ত {{PLURAL:$2|সতর্ক বার্তাটি|সতর্ক বার্তাগুলি}} উৎপন্ন হয়েছে:",
        "tags-delete-no-permission": "আপনার পরিবর্তন ট্যাগ মুছে ফেলার অনুমতি নেই।",
        "tags-activate-title": "সক্রিয় ট্যাগ",
        "tags-activate-question": "আপনি ট্যাগ \"$1\" সক্রিয় করতে চলেছেন।",
        "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-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": "<em>কোনটি নয়</em>",
        "tags-edit-success": "পরিবর্তন প্রয়োগ করা হয়েছে।",
        "tags-edit-failure": "পরিবর্তন প্রয়োগ করা যায়নি: $1",
        "tags-edit-nooldid-title": "লক্ষ্য সংশোধন অবৈধ",
+       "tags-edit-nooldid-text": "আপনি হয় কোন লক্ষ্য সংশোধনটিতে এই ফাংশনটি সম্পাদন করতে হবে তা নির্দিষ্ট করে দেননি, অথবা নির্দিষ্টকৃত সংশোধনটির অস্তিত্ব নেই।",
        "tags-edit-none-selected": "যোগ করতে অথবা অপসারণ করতে অন্ততপক্ষে একটি ট্যাগ দয়া করে নির্বাচন করুন।",
        "comparepages": "পাতার তুলনা",
        "compare-page1": "পাতা ১",
        "dberr-info-hidden": "(ডেটাবেজ প্রবেশ করা সম্ভব হয়নি)",
        "dberr-usegoogle": "এই পরিস্থিতিতে আপনি গুগলের মাধ্যমে অনুসন্ধান করার চেষ্টা করতে পারেন।",
        "dberr-outofdate": "খেয়াল করুন যে, আমাদের বিষয়বস্তু সম্পর্কিত তাদের সূচি মেয়াদ উত্তীর্ণ হতে পারে।",
-       "dberr-cachederror": "à¦\8fà¦\9fি à¦\85নà§\81রà§\8bধà¦\95à§\83ত à¦ªà¦¾à¦¤à¦¾à¦° à¦\95à§\8dযাশà§\87 à¦²à¦¿à¦ªà¦¿, à¦¯à¦¾ à¦¹à¦¾à¦²à¦¨à¦¾à¦\97াতà¦\95à§\83ত à¦¨à¦¾ও হতে পারে।",
+       "dberr-cachederror": "à¦\8fà¦\9fি à¦\85নà§\81রà§\8bধà¦\95à§\83ত à¦ªà¦¾à¦¤à¦¾à¦\9fির à¦\95à§\8dযাশ à¦ªà§\8dরতিলিপি, à¦¯à¦¾ à¦¹à¦¾à¦²à¦¨à¦¾à¦\97াতà¦\95à§\83ত à¦¨à¦¾-ও হতে পারে।",
        "htmlform-invalid-input": "আপনার প্রদানকৃত ইনপুটে সমস্যা রয়েছে",
        "htmlform-select-badoption": "যে মান আপনি উল্লেখ করেছেন তা গ্রহণযোগ্য অপশন নয়।",
        "htmlform-int-invalid": "আপনার পরিবর্তীত সংখ্যাটি ইন্টিজার(পূর্ণসংখ্যা) নয়।",
        "logentry-import-interwiki": "$1 অন্য একটি উইকিতে থেকে $3 {{GENDER:$2|আমদানি করেছে}}",
        "logentry-import-interwiki-details": "$1 $5 থেকে $3 {{GENDER:$2|আমদানি করেছেন}} ($4টি {{PLURAL:$4|সংশোধন}})",
        "logentry-merge-merge": "$1 $4-এ $3 {{GENDER:$2|একত্রীকরণ করেছেন}} ($5 তারিখের সংশোধন পর্যন্ত)",
-       "logentry-move-move": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে {{GENDER:$2|স্থানান্তর}} করেছেন",
-       "logentry-move-move-noredirect": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই {{GENDER:$2|স্থানান্তর}} করেছেন",
-       "logentry-move-move_redir": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনির্নির্দেশনার মাধ্যমে {{GENDER:$2|স্থানান্তর}} করেছেন",
-       "logentry-move-move_redir-noredirect": "$1 ব্যবহারকারী $3 পাতাটিকে $4 শিরোনামে পুনর্নির্দেশনা ছাড়াই {{GENDER:$2|স্থানান্তর}} করেছেন",
+       "logentry-move-move": "$1 $3 কে $4 শিরোনামে {{GENDER:$2|স্থানান্তর}} করেছেন",
+       "logentry-move-move-noredirect": "$1 $3 পাতাটিকে $4 শিরোনামে কোনো পুনর্নির্দেশনা ছাড়াই {{GENDER:$2|স্থানান্তর}} করেছেন",
+       "logentry-move-move_redir": "$1 $3 পাতাটিকে $4 শিরোনামে পুনির্নির্দেশনার মাধ্যমে {{GENDER:$2|স্থানান্তর}} করেছেন",
+       "logentry-move-move_redir-noredirect": "$1 $3 পাতাটিকে $4 শিরোনামে পুনর্নির্দেশনা ছাড়াই {{GENDER:$2|স্থানান্তর}} করেছেন",
        "logentry-patrol-patrol": "$1 ব্যবহারকারী $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {{GENDER:$2|চিহ্নিত}} করেছেন",
        "logentry-patrol-patrol-auto": "$1 ব্যবহারকারী স্বয়ংক্রিয়ভাবে $3 পাতার $4 নম্বর সংস্করণ পরীক্ষিত বলে {{GENDER:$2|চিহ্নিত}} করেছেন",
        "logentry-newusers-newusers": "$1 ব্যবহারকারী অ্যাকাউন্টটি {{GENDER:$2|তৈরি করা}} হয়েছে",
        "logentry-protect-protect-cascade": "$1 $3 {{GENDER:$2|সুরক্ষিত করেছেন}} $4 [প্রপাতাকার]",
        "logentry-protect-modify": "$1 $3-এর জন্য সুরক্ষা স্তর {{GENDER:$2|পরিবর্তন করেছেন}} $4",
        "logentry-protect-modify-cascade": "$1 $3-এর জন্য সুরক্ষা স্তর {{GENDER:$2|পরিবর্তন করেছেন}} $4 [প্রপাতাকার]",
-       "logentry-rights-rights": "$1 ব্যবহারকারী, {{GENDER:$6|$3}}-এর দলগত সদস্যপদ $4 থেকে $5 এ {{GENDER:$2|পরিবর্তন}} করেছেন",
+       "logentry-rights-rights": "$1 {{GENDER:$6|$3}}-এর দলীয় সদস্যপদ $4 থেকে $5-এ {{GENDER:$2|পরিবর্তন}} করেছেন",
        "logentry-rights-rights-legacy": "$1 দলের সদস্যপদ পরিবর্তন করেছেন {{GENDER:$2|changed}} এর জন্য $3",
        "logentry-rights-autopromote": "$1 স্বয়ংক্রিয়ভাবে $4 থেকে $5-এ {{GENDER:$2|উন্নীত}} হয়েছেন",
        "logentry-upload-upload": "$1 $3 {{GENDER:$2|আপলোড করেছেন}}",
        "logentry-upload-overwrite": "$1 $3-এর একটি নতুন সংস্করণ {{GENDER:$2|আপলোড করেছেন}}",
        "logentry-upload-revert": "$1 $3 {{GENDER:$2|আপলোড করেছেন}}",
        "log-name-managetags": "ট্যাগ ব্যবস্থাপনা লগ",
+       "log-description-managetags": "এই পাতাতে [[Special:Tags|ট্যাগ]] ব্যবস্থাপনা কার্যাবলির একটি তালিকা আছে। এই লগে কেবলমাত্র সেইসব কর্মের তালিকা আছে, যেগুলি একজন প্রশাসক নিজ হাতে সম্পাদন করেছেন; উইকি সফটওয়্যার দিয়ে ট্যাগ সৃষ্টি বা অপসারণ করা সম্ভব, যার কোন ভুক্তি এই লগে সংরক্ষিত হবে না।",
        "logentry-managetags-create": "$1 \"$4\" ট্যাগটি {{GENDER:$2|তৈরি করেছেন}}",
        "logentry-managetags-delete": "$1 \"$4\" ট্যাগটি {{GENDER:$2|অপসারণ করেছেন}} ($5টি {{PLURAL:$5|সংস্করণ বা লগ ভুক্তি|সংস্করণ ও/বা লগ ভুক্তি}} সরানো হয়েছে)",
+       "logentry-managetags-activate": "$1 \"$4\" ট্যাগটি ব্যবহারকারী ও বট দ্বারা ব্যবহারের জন্য {{GENDER:$2|সক্রিয়}} করেছেন",
        "logentry-managetags-deactivate": "$1 \"$4\" ট্যাগটি ব্যবহারকারী ও বট দ্বারা ব্যবহারের জন্য {{GENDER:$2|নিষ্ক্রিয়}} করেছেন",
        "log-name-tag": "ট্যাগ লগ",
+       "log-description-tag": "এই পাতাতে দেখানো হয়েছে কখন কখন ব্যবহারকারীরা নির্দিষ্ট সংশোধন বা লগ ভুক্তিতে [[Special:Tags|ট্যাগ]] যোগ বা সেখান থেকে ট্যাগ অপসারণ করেছেন। যখন কোন সম্পাদনা, অপসারণ বা এই জাতীয় কর্মের অংশ হিসেবে ট্যাগ করা হয়, সেই ট্যাগগুলি এই লগে তালিকাভুক্ত করা হয় না।",
+       "logentry-tag-update-add-revision": "$1 $3 পাতার $4 নং সংস্করণে $6 {{PLURAL:$7|ট্যাগটি|ট্যাগগুলি}} {{GENDER:$2|যোগ করেছেন}}",
+       "logentry-tag-update-add-logentry": "$1 $3 পাতার $5 নং লগ ভুক্তিতে $6 {{PLURAL:$7|ট্যাগটি|ট্যাগগুলি}} {{GENDER:$2|যোগ করেছেন}}",
+       "logentry-tag-update-remove-revision": "$1 $3 পাতার $4 নং লগ সংস্করণ থেকে $8 {{PLURAL:$9|ট্যাগটি|ট্যাগগুলি}} {{GENDER:$2|সরিয়েছেন}}",
+       "logentry-tag-update-remove-logentry": "$1 $3 পাতার $5 নং লগ ভুক্তি থেকে $8 {{PLURAL:$9|ট্যাগটি|ট্যাগগুলি}} {{GENDER:$2|সরিয়েছেন}}",
+       "logentry-tag-update-revision": "$1 $3 পাতার $4 নং সংস্করণের ট্যাগগুলি {{GENDER:$2|হালনাগাদ করেছেন}} ($6 {{PLURAL:$7|যোগ করা হয়েছে}}; $8 {{PLURAL:$9|সরানো হয়েছে}})",
+       "logentry-tag-update-logentry": "$1 $3 পাতার $5 নং লগ ভুক্তির ট্যাগগুলি {{GENDER:$2|হালনাগাদ করেছেন}} ($6 {{PLURAL:$7|যোগ করা হয়েছে}}; $8{{PLURAL:$9|সরানো হয়েছে}})",
        "rightsnone": "(কিছু নাই)",
        "rightslogentry-temporary-group": "$1 (সাময়িক, $2 পর্যন্ত)",
        "feedback-adding": "পাতায় প্রতিক্রিয়া যোগ হচ্ছে...",
        "pagelang-nonexistent-page": "$1 শিরোনামে কোন পাতা নেই।",
        "pagelang-unchanged-language": "$1 পাতাটি ইতিমধ্যে $2 ভাষায় নির্ধারণ করা আছে।",
        "pagelang-unchanged-language-default": "$1 পাতাটি ইতিমধ্যেই উইকির পূর্বনির্ধারিত বিষয়বস্তুর ভাষায় নির্ধারণ করা আছে।",
-       "pagelang-db-failed": "ডাà¦\9fাবà§\87স à¦ªà§\83ষà§\8dঠার ভাষা পরিবর্তন করতে ব্যর্থ হয়েছে।",
+       "pagelang-db-failed": "ডাà¦\9fাবà§\87স à¦ªà¦¾à¦¤ার ভাষা পরিবর্তন করতে ব্যর্থ হয়েছে।",
        "right-pagelang": "পাতার ভাষা পরিবর্তন করুন",
        "action-pagelang": "পাতার ভাষা পরিবর্তন করুন",
        "log-name-pagelang": "ভাষা পরিবর্তন লগ",
        "log-description-pagelang": "এটি পাতার ভাষা পরিবর্তনের লগ।",
        "logentry-pagelang-pagelang": "$1 $3-এর ভাষা $4 থেকে $5-এ {{GENDER:$2|পরিবর্তন}} করেছেন",
+       "default-skin-not-found": "ওহো! আপনার উইকির পূর্বনির্ধারিত আবরণ, যেটি <code dir=\"ltr\">$wgDefaultSkin</code>-এ <code>$1</code> হিসেবে সংজ্ঞায়িত, সেটি পাওয়া যাচ্ছে না।\n\nআপনার ইনস্টলেশনে মনে হচ্ছে নিম্নোক্ত {{PLURAL:$4|আবরণ|আবরণগুলি}} অন্তর্ভুক্ত আছে। কী করে {{PLURAL:$4।|এটি|এগুলি}} সক্রিয় করতে হবে এবং পূর্বনির্ধারিতটি নির্বাচন করতে হবে, তার জন্য [https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration] দেখুন। \n\n$2\n\n; যদি আপনি খুব সম্প্রতি মিডিয়াউইকি ইন্সটল করে থাকেন:\n: আপনি সম্ভবত গিট থেকে অথবা সরাসরি উৎস কোড থেকে অন্য কোন পদ্ধতি অনুসরণ করে ইন্সটল করেছেন। এমনটাই প্রত্যাশিত।  [https://www.mediawiki.org/wiki/Category:All_skins mediawiki.org-এর বহিরাবরণ নির্দেশিকা] থেকে নিচের পদ্ধতিগুলির সাহায্যে কিছু আবরণ ইন্সটল করার চেষ্টা করুন:\n:* [https://www.mediawiki.org/wiki/Download টারবল ইন্সটলারটি] ডাউনলোড করে; এটিতে অনেকগুলি আবরণ ও এক্সটেনশন রয়েছে। আপনি <code>skins/</code> সরাসরি প্রতিলিপি করে সাঁটতে পারেন।\n:* নির্দিষ্ট আবরণ টারবলগুলি [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] থেকে ডাউনলোড করতে পারেন।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins গিট ব্যবহার করে বহিরাবরণ ডাউনলোড করতে পারেন]\n: আপনি যদি মিডিয়াউইকি ডেভেলপার হয়ে থাকেন, তাহলে এ কাজটি করলে আপনার গিট সংগ্রহশালার সাথে এটির সংঘাত হবে না।\n; আপনি যদি খুব সম্প্রতি মিডিয়াউইকির সর্বশেষ সংস্করণে হালনাগাদ করে থাকেন:\n: মিডিয়াউইকির ১.২৪ এবং নতুনতর সংস্করণগুলি ইন্সটলকৃত আবরণগুলি আর স্বয়ংক্রিয়ভাবে সক্রিয় করে না। ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery Manual: Skin autodiscovery] দেখুন)। আপনি <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-এর আবরণ নির্দেশিকা] থেকে নিচের পদ্ধতিগুলির সাহায্যে কিছু আবরণ ইন্সটল করার চেষ্টা করুন:\n:* [https://www.mediawiki.org/wiki/Download টারবল ইন্সটলারটি] ডাউনলোড করে; এটিতে অনেকগুলি আবরণ ও এক্সটেনশন রয়েছে। আপনি <code>skins/</code> সরাসরি প্রতিলিপি করে সাঁটতে পারেন।\n:* নির্দিষ্ট আবরণ টারবলগুলি [https://www.mediawiki.org/wiki/Special:SkinDistributor mediawiki.org] থেকে ডাউনলোড করতে পারেন।\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins গিট ব্যবহার করে বহিরাবরণ ডাউনলোড করতে পারেন]\n: আপনি যদি মিডিয়াউইকি ডেভেলপার হয়ে থাকেন, তাহলে এ কাজটি করলে আপনার গিট সংগ্রহশালার সাথে এটির সংঘাত হবে না।([https://www.mediawiki.org/wiki/Manual:Skin_configuration Manual: Skin configuration]-এ দেখুন) কীভাবে বহিরাবরণগুলি সক্রিয় করতে হয় এবং কোন আবরণটি পুনর্নির্ধারিত হবে, তা কীভাবে নির্বাচন করতে হয়।",
        "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (সক্রিয় করা)",
        "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>নিষ্ক্রিয় করা</strong>)",
        "mediastatistics": "মিডিয়া পরিসংখ্যান",
        "json-error-ctrl-char": "অক্ষর নিয়ন্ত্রণ ত্রুটি, সম্ভবত ভুল এনকোডকৃত",
        "json-error-syntax": "সিনট্যাক্স ত্রুটি",
        "json-error-utf8": "ত্রুটিপূর্ণ ইউটিএফ-৮ অক্ষর, সম্ভবত ভুল এনকোডকৃত",
+       "json-error-recursion": "যে মানটি এনকোড করা হবে সেটিতে এক বা তার অধিক রিকার্সিভ সূত্র আছে",
+       "json-error-inf-or-nan": "এনকোড করার জন্য মানে এক বা একাধিক NAN অথবা INF মান বিদ্যমান",
        "json-error-unsupported-type": "এনকোড করা যাবে না এমন একটি মানের ধরন দেয়া হয়েছে",
        "headline-anchor-title": "এই অনুচ্ছেদে সংযোগ",
        "special-characters-group-latin": "লাতিন",
        "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-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-rights-rights": "ম্যানুয়াল পরিবর্তন",
        "log-action-filter-rights-autopromote": "স্বয়ংক্রিয় পরিবর্তন",
        "log-action-filter-suppress-event": "লগ বিলোপন",
-       "log-action-filter-suppress-delete": "পৃষ্ঠা বিলোপন",
+       "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": "পুনঃআপলোড",
+       "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-provider-password": "পাসওয়ার্ড-ভিত্তিক প্রমাণীকরণ।",
        "authmanager-provider-password-domain": "পাসওয়ার্ড ও ডোমেইন-ভিত্তিক প্রমাণীকরণ।",
        "authmanager-provider-temporarypassword": "অস্থায়ী পাসওয়ার্ড",
-       "authprovider-confirmlink-message": "à¦\86পনার à¦¸à¦¾à¦®à§\8dপà§\8dরতিà¦\95 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শà§\87র à¦¬à¦¾ à¦²à¦\97-à¦\87নà§\87র à¦ªà§\8dরà¦\9aà§\87ষà§\8dà¦\9fাà¦\97à§\81লির à¦\89পর à¦­à¦¿à¦¤à§\8dতি à¦\95রà§\87 à¦\9cানা à¦\97à§\87à¦\9bà§\87 à¦¯à§\87 à¦¨à¦¿à¦\9aà§\87র à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\97à§\81লির à¦¸à¦¾à¦¥à§\87 à¦\86পনার à¦\89à¦\87à¦\95ি à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\9fি à¦¸à¦\82যà§\81à¦\95à§\8dত à¦\95রà§\87 à¦¦à§\87à¦\93য়া à¦¸à¦®à§\8dভব। à¦\90 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\97à§\81লির à¦¸à¦¾à¦¥à§\87 à¦¸à¦\82যà§\81à¦\95à§\8dত à¦¹à¦²à§\87 à¦\86পনি à¦\90à¦\97à§\81লি à¦¥à§\87à¦\95à§\87 à¦²à¦\97-à¦\87ন করতে পারবেন। অনুগ্রহ যে অ্যাকাউন্টগুলির সাথে সংযুক্ত হতে চান, সেগুলি নির্বাচন করুন।",
+       "authprovider-confirmlink-message": "à¦\86পনার à¦¸à¦¾à¦®à§\8dপà§\8dরতিà¦\95 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà§\87 à¦ªà§\8dরবà§\87শà§\87র à¦ªà§\8dরà¦\9aà§\87ষà§\8dà¦\9fাà¦\97à§\81লির à¦\89পর à¦­à¦¿à¦¤à§\8dতি à¦\95রà§\87 à¦\9cানা à¦\97à§\87à¦\9bà§\87 à¦¯à§\87 à¦¨à¦¿à¦\9aà§\87র à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\97à§\81লির à¦¸à¦¾à¦¥à§\87 à¦\86পনার à¦\89à¦\87à¦\95ি à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\9fি à¦¸à¦\82যà§\81à¦\95à§\8dত à¦\95রà§\87 à¦¦à§\87à¦\93য়া à¦¸à¦®à§\8dভব। à¦\90 à¦\85à§\8dযাà¦\95াà¦\89নà§\8dà¦\9fà¦\97à§\81লির à¦¸à¦¾à¦¥à§\87 à¦¸à¦\82যà§\81à¦\95à§\8dত à¦¹à¦²à§\87 à¦\86পনি à¦\90à¦\97à§\81লি à¦¥à§\87à¦\95à§\87 à¦ªà§\8dরবà§\87শ করতে পারবেন। অনুগ্রহ যে অ্যাকাউন্টগুলির সাথে সংযুক্ত হতে চান, সেগুলি নির্বাচন করুন।",
        "authprovider-confirmlink-request-label": "অ্যাকাউন্ট যা সংযুক্ত হওয়া উচিত",
        "authprovider-confirmlink-success-line": "$1: সংযোগ করা সফল হয়েছে।",
        "authprovider-confirmlink-failed": "অ্যাকাউন্ট সংযোগ করা সম্পূর্ণরূপে সফল হয়নি: $1",
        "restrictionsfield-label": "অনুমোদিত আইপি পরিসীমা:",
        "restrictionsfield-help": "লাইন প্রতি একটি আইপি ঠিকানা বা CIDR পরিসীমা। সবকিছু সক্রিয় করতে ব্যবহার করুন: :<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "সংশোধন $1",
-       "pageid": "পাতার আইডি $1"
+       "pageid": "পাতার আইডি $1",
+       "rawhtml-notallowed": "&lt;html&gt; ট্যাগ স্বাভাবিক পৃষ্ঠাগুলির বাহিরে ব্যবহার করা যাবে না।"
 }
index d2dc9e7..e0ab301 100644 (file)
        "post-expand-template-argument-warning": "Diwallit : war ar bajenn-mañ ez eus eus da nebeutañ un arventenn eus ur patrom zo re vras.\nA-gostez eo bet lezet an arventenn-se.",
        "post-expand-template-argument-category": "Pajennoù enno arventennoù patrom bet lezet a-gostez",
        "parser-template-loop-warning": "Patrom e kelc'h detektet : [[$1]]",
+       "template-loop-category": "Pajennoù enno lagadennoù patrom",
+       "template-loop-category-desc": "Ul lagadenn batrom zo er bajenn, d.l.e. ur patrom en em c'halv e-unan en ur mod rekursivel.",
        "parser-template-recursion-depth-warning": "Tizhet bevenn donder galvoù rekursivek ar patromoù ($1)",
        "language-converter-depth-warning": "Aet eur en tu all d'ar vevenn amdreiñ yezhoù ($1)",
        "node-count-exceeded-category": "Pajennoù m'eur aet en tu all d'an niver a skoulmoù",
        "rcfilters-filter-logactions-description": "Obererezhioù melestradurel, krouiñ kontoù, diverkañ pajennoù, enporzhiañ...",
        "rcfilters-hideminor-conflicts-typeofchange-global": "Tabut zo etre ar sil \"Kemmoù dister\" hag unan pe meur a sil a Seurt kemmoù peogwir n'haller merkañ kemmoù zo evel \"dister\". Kavet e vo ar siloù o tabutal e takad ar siloù gweredekaet, a-us.",
        "rcfilters-hideminor-conflicts-typeofchange": "Seurtoù kemmoù zo n'hallont ket bezañ merket evel \"dister,\", rak se ez eus tabut etre ar sil-mañ ha siloù ar Seurtoù kemmoù da heul : $1",
+       "rcfilters-typeofchange-conflicts-hideminor": "Tabut zo etre ar sil-mañ Seurt kemmoù gant sil ar \"c'hemmoù dister\". Kemmoù zo n'hallont ket bezañ merket evel \"dister\".",
        "rcnotefrom": "Setu aze {{PLURAL:$5|ar c'hemm|ar c'hemmoù}} c'hoarvezet abaoe an <strong>$3, $4</strong> (<strong>$1</strong> d'ar muiañ).",
        "rclistfrom": "Diskouez ar c'hemmoù diwezhañ abaoe an/ar $3 $2",
        "rcshowhideminor": "$1 ar c'hemmoù dister",
        "newimages-summary": "Diskouez a ra ar bajenn dibar-mañ roll ar restroù diwezhañ bet enporzhiet.",
        "newimages-legend": "Sil",
        "newimages-label": "Anv ar restr (pe darn anezhi) :",
+       "newimages-user": "Chomlec'h IP pe anv implijer",
        "newimages-showbots": "Diskouez an ezporzhiadennoù graet gant robotoù",
        "newimages-hidepatrolled": "Kuzhat ar enporzhiadennoù gwiriet",
        "noimages": "Netra da welet.",
        "restrictionsfield-label": "Lijorennoù IP aotreet :",
        "restrictionsfield-help": "Ur chomlec'h IP pe un esaouenn CIDR dre linenn. Evit gweredekaat pep tra, ober gant <pre>0.0.0.0/0\n::/0</pre>",
        "revid": "Adweladenn $1",
-       "pageid": "ID ar bajenn $1"
+       "pageid": "ID ar bajenn $1",
+       "rawhtml-notallowed": "N'hall an tikedennoù &lt;html&gt; bezañ implijet nemet er pajennoù normal."
 }
index 968d024..cc9a2c1 100644 (file)
@@ -24,7 +24,8 @@
                        "Srdjan m",
                        "Semso98",
                        "Matma Rex",
-                       "Сербијана"
+                       "Сербијана",
+                       "Asmen"
                ]
        },
        "tog-underline": "Podvuci veze:",
        "hebrew-calendar-m6": "Adar",
        "hebrew-calendar-m6a": "Adar I",
        "hebrew-calendar-m6b": "Adar II",
-       "hebrew-calendar-m7": "Nisan",
+       "hebrew-calendar-m7": "Nisane",
        "hebrew-calendar-m8": "Iyar",
        "hebrew-calendar-m9": "Sivan",
        "hebrew-calendar-m10": "Tamuz",
index fb4b3c3..0ccc4ed 100644 (file)
        "changepassword-success": "S'ha canviat la vostra contrasenya!",
        "changepassword-throttled": "Heu realitzat massa intents d'inici de sessió.\nEspereu $1 abans de tornar-ho a provar.",
        "botpasswords": "Contrasenyes de bot",
+       "botpasswords-summary": "Les <em>contrasenyes de bot</em> permeten accedir a un compte d'usuari a través de l'API sense utilitzar les credencials de sessió principals del compte. Els permisos d'usuari disponibles quan s'ha iniciat una sessió amb una contrasenya de bot poden estar restringits.\n\nSi no sabeu perquè ho hauríeu de menester, segurament no us cal. Ningú mai no us hauria de demanar que genereu una contrasenya o l'hi doneu.",
        "botpasswords-disabled": "S'han inhabilitat les contrasenyes dels bots",
        "botpasswords-no-central-id": "Per a utilitzar contrasenyes de bots heu d'haver iniciat una sessió en un compte centralitzat.",
        "botpasswords-existing": "Contrasenyes de bot existents",
        "post-expand-template-argument-warning": "Avís: Aquesta pàgina conté com a mínim un argument de plantilla que té una mida d'expansió massa gran.\nSe n'han omès els arguments.",
        "post-expand-template-argument-category": "Pàgines que contenen arguments de plantilla que s'han omès",
        "parser-template-loop-warning": "S'ha detectat un bucle de plantilla: [[$1]]",
+       "template-loop-category": "Pàgines amb bucles de plantilla",
        "parser-template-recursion-depth-warning": "S'ha excedit el límit de recursivitat de plantilles ($1)",
        "language-converter-depth-warning": "S'ha excedit el límit de profunditat del convertidor d'idiomes ($1)",
        "node-count-exceeded-category": "Pàgines on s'ha excedit el recompte de nodes",
        "newimages-summary": "Aquesta pàgina especial mostra els darrers fitxers carregats.",
        "newimages-legend": "Nom del fitxer",
        "newimages-label": "Nom de fitxer (o part d'ell):",
+       "newimages-user": "Adreça IP o nom d'usuari",
        "newimages-showbots": "Mostra les càrregues dels bots",
        "newimages-hidepatrolled": "Amaga les càrregues patrullades",
        "noimages": "Res per veure.",
        "mediastatistics": "Estadístiques dels multimèdia",
        "mediastatistics-summary": "Les estadístiques sobre els tipus de fitxers pujats. Això només inclou la versió més recent d'un fitxer. S'exclouen les versions antigues o eliminades dels fitxers.",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+       "mediastatistics-allbytes": "Mida de fitxer total de tots els fitxers {{PLURAL:$1|$1 byte|$1 bytes}} ($2).",
        "mediastatistics-table-mimetype": "Tipus MIME",
        "mediastatistics-table-extensions": "Extensions possibles",
        "mediastatistics-table-count": "Nombre de fitxers",
        "log-action-filter-block-reblock": "Bloca la modificació",
        "log-action-filter-block-unblock": "Desbloca",
        "log-action-filter-contentmodel-change": "Canvi del model de contingut",
+       "log-action-filter-contentmodel-new": "Creació de pàgina amb un model de contingut no per defecte",
        "log-action-filter-delete-delete": "Supressió de pàgines",
        "log-action-filter-delete-delete_redir": "Sobreescriptura de la redirecció",
        "log-action-filter-delete-restore": "Restauració de pàgines",
        "log-action-filter-delete-event": "Registre de supressió",
        "log-action-filter-delete-revision": "Supressió de revisions",
+       "log-action-filter-import-interwiki": "Importació de Transwiki",
        "log-action-filter-import-upload": "Importació mitjançant càrrega d'XML",
        "log-action-filter-managetags-create": "Creació de l'etiqueta",
        "log-action-filter-managetags-delete": "Supressió de l'etiqueta",
        "log-action-filter-managetags-activate": "Activació de l'etiqueta",
        "log-action-filter-managetags-deactivate": "Desactivació d'etiquetes",
+       "log-action-filter-move-move": "Reanomena sense sobreescriure les redireccions",
+       "log-action-filter-move-move_redir": "Reanomena sobreescrivint les redireccions",
        "log-action-filter-newusers-create": "Creació per usuari anònim",
        "log-action-filter-newusers-create2": "Creació per usuari registrat",
        "log-action-filter-newusers-autocreate": "Creació automàtica",
+       "log-action-filter-newusers-byemail": "Creació amb una contrasenya enviada per correu electrònic",
        "log-action-filter-patrol-patrol": "Patrullatge manual",
        "log-action-filter-patrol-autopatrol": "Patrullatge automàtic",
        "log-action-filter-protect-protect": "Protecció",
        "authmanager-create-from-login": "Per crear un compte, ompliu els camps.",
        "authmanager-authplugin-setpass-failed-title": "El canvi de contrasenya ha fallat",
        "authmanager-authplugin-setpass-bad-domain": "Domini invàlid.",
+       "authmanager-autocreate-noperm": "No es permet la creació automàtica de comptes.",
        "authmanager-userdoesnotexist": "El compte d'usuari «$1» no està registrat.",
        "authmanager-username-help": "Nom d'usuari per a l'autenticació.",
        "authmanager-password-help": "Contrasenya per a l'autenticació.",
        "authmanager-provider-temporarypassword": "Contrasenya temporal",
        "authprovider-confirmlink-request-label": "Comptes que caldrien enllaçar-se",
        "authprovider-confirmlink-success-line": "$1: s'ha enllaçat satisfactòriament.",
+       "authprovider-confirmlink-failed": "L'enllaçament de comptes no ha funcionat satisfactòriament: $1",
        "authprovider-resetpass-skip-label": "Omet",
        "authprovider-resetpass-skip-help": "Omet el restabliment de contrasenya.",
        "specialpage-securitylevel-not-allowed-title": "No permès",
index bc2b03a..a5f7bc0 100644 (file)
        "recentchanges-noresult": "Билгал йинчу хенахь цхьа хийцамаш бина бац.",
        "recentchanges-feed-description": "Тергам бе тӀаьххьара вики хийцаман хӀокху ларца.",
        "recentchanges-label-newpage": "Оцу нисдарца кхоьллина керла агӀо.",
-       "recentchanges-label-minor": "Ð¥Ó\80аÑ\80а Ð¿Ð°Ð¹Ð´Ð° боцу хийцам бу",
+       "recentchanges-label-minor": "Ð¥Ó\80аÑ\80а Ð»Ð°Ð´Ð°Ð¼ боцу хийцам бу",
        "recentchanges-label-bot": "ХӀара нисдар бото дина",
        "recentchanges-label-unpatrolled": "ХӀара нисдар хӀинца цхьано патрулировать дина дац",
        "recentchanges-label-plusminus": "байташкахь барам хийцар",
index 3e1aa18..176b2b7 100644 (file)
        "externaldberror": "Сайткъа киргенде бир хата олды. Бу тыш эсабынъызны денъиштирмек акъкъынъыз олмагъанындан себеп мейдангъа келип ола.",
        "login": "Кириш",
        "nav-login-createaccount": "Кириш / Къайд олув",
-       "userlogin": "Кириш / Къайд олув",
-       "userloginnocreate": "Кириш",
        "logout": "Чыкъыш",
        "userlogout": "Чыкъыш",
        "notloggedin": "Системагъа кирмединъиз.",
        "userlogin-noaccount": "Аккаунтынъыз ёкъмы?",
        "userlogin-joinproject": "{{SITENAME}} лейхасына къошулынъыз",
-       "nologin": "Даа эсап ачмадынъызмы? '''$1'''.",
-       "nologinlink": "Къайд ол",
        "createaccount": "Къайд олув",
-       "gotaccount": "Даа эвель сайтта къайд олгъан эдинъизми? '''$1'''.",
-       "gotaccountlink": "Системагъа киринъиз",
-       "userlogin-resetlink": "Кириш малюматыны унуттынъызмы?",
        "createacct-emailrequired": "E-mail adresi",
        "createacct-emailoptional": "E-mail адреси (меджбурий дегиль)",
        "createacct-email-ph": "E-mail адресинъизни язынъыз",
        "createacct-another-email-ph": "E-mail адресинъизни язынъыз",
        "createaccountmail": "Автоматик оларакъ мейдангъа кетирильген мувакъкъат бир пароль къуллана билир ве бу парольни бильдирильген e-mail адресине ёллай билирсинъиз",
        "createacct-realname": "Акъикъий адынъыз (меджбурий дегиль)",
-       "createaccountreason": "Себеп:",
        "createacct-reason": "Себеп",
        "createacct-reason-ph": "Башкъа бир эсап язысы неден себеп яратасынъыз",
        "createacct-submit": "Эсап язынъызны яратынъыз",
        "watchthis": "Саифени козет",
        "savearticle": "Саифени сакъла",
        "savechanges": "Денъиштирмелерни сакъла",
+       "publishpage": "Саифени ярат",
+       "publishchanges": "Денъиштиргенлеримни сакъла",
        "preview": "Бакъып чыкъув",
        "showpreview": "Бакъып чыкъ",
        "showdiff": "Денъиштирмелерни косьтер",
index 3054c1b..0f463ba 100644 (file)
        "externaldberror": "Saytqa kirgende bir hata oldı. Bu tış esabıñıznı deñiştirmek aqqıñız olmağanından sebep meydanğa kelip ola.",
        "login": "Kiriş",
        "nav-login-createaccount": "Kiriş / Qayd oluv",
-       "userlogin": "Kiriş / Qayd oluv",
-       "userloginnocreate": "Kiriş",
        "logout": "Çıqış",
        "userlogout": "Çıqış",
        "notloggedin": "Sistemağa kirmediñiz.",
        "userlogin-noaccount": "Akkauntıñız yoqmı?",
        "userlogin-joinproject": "{{SITENAME}} leyhasına qoşulıñız",
-       "nologin": "Daa esap açmadıñızmı? '''$1'''.",
-       "nologinlink": "Qayd ol",
        "createaccount": "Qayd oluv",
-       "gotaccount": "Daa evel saytta qayd olğan ediñizmi? '''$1'''.",
-       "gotaccountlink": "Sistemağa kiriñiz",
-       "userlogin-resetlink": "Kiriş malümatını unuttıñızmı?",
        "createacct-emailrequired": "E-mail adresi",
        "createacct-emailoptional": "E-mail adresi (mecburiy degil)",
        "createacct-email-ph": "E-mail adresiñizni yazıñız",
        "createacct-another-email-ph": "E-mail adresiñizni yazıñız",
        "createaccountmail": "Avtomatik olaraq meydanğa ketirilgen muvaqqat bir parol qullana bilir ve bu parolni bildirilgen e-mail adresine yollay bilirsiñiz",
        "createacct-realname": "Aqiqiy adıñız (mecburiy degil)",
-       "createaccountreason": "Sebep:",
        "createacct-reason": "Sebep",
        "createacct-reason-ph": "Başqa bir esap yazısı neden sebep yaratasıñız",
        "createacct-submit": "Esap yazıñıznı yaratıñız",
        "watchthis": "Saifeni közet",
        "savearticle": "Saifeni saqla",
        "savechanges": "Deñiştirmelerni saqla",
+       "publishpage": "Saifeni yarat",
+       "publishchanges": "Deñiştirgenlerimni saqla",
        "preview": "Baqıp çıquv",
        "showpreview": "Baqıp çıq",
        "showdiff": "Deñiştirmelerni köster",
index f14b874..dec6dea 100644 (file)
@@ -34,7 +34,8 @@
                        "Dvorapa",
                        "Walter Klosse",
                        "Martin Urbanec",
-                       "Marek Pavlica"
+                       "Marek Pavlica",
+                       "Asmen"
                ]
        },
        "tog-underline": "Podtrhávat odkazy:",
        "post-expand-template-argument-warning": "Varování: Tato stránka obsahuje alespoň jeden argument šablony, který je po rozbalení příliš velký.\nTyto argumenty byly vynechány.",
        "post-expand-template-argument-category": "Stránky obsahující vynechané argumenty šablon",
        "parser-template-loop-warning": "Nalezena smyčka šablon: [[$1]]",
+       "template-loop-category": "Stránky se smyčkami šablon",
+       "template-loop-category-desc": "Stránka obsahuje smyčku šablon, tj. šablonu, která je vložená sama do sebe.",
        "parser-template-recursion-depth-warning": "Překročen limit hloubky rekurzivního vkládání šablon ($1)",
        "language-converter-depth-warning": "Překročen limit vnoření u jazykové konverze ($1)",
        "node-count-exceeded-category": "Stránky překračující počet uzlů",
        "newimages-summary": "Na této speciální stránce se zobrazují poslední načtené soubory.",
        "newimages-legend": "Filtr",
        "newimages-label": "Název souboru (nebo jeho část):",
+       "newimages-user": "IP adresa nebo uživatelské jméno",
        "newimages-showbots": "Zobrazit soubory načtené roboty",
        "newimages-hidepatrolled": "Skrýt prověřená načtení souborů",
        "noimages": "Není co zobrazit.",
        "hebrew-calendar-m6": "adar",
        "hebrew-calendar-m6a": "adar I",
        "hebrew-calendar-m6b": "adar II",
-       "hebrew-calendar-m7": "nisan",
+       "hebrew-calendar-m7": "Nisan",
        "hebrew-calendar-m8": "ijar",
        "hebrew-calendar-m9": "sivan",
        "hebrew-calendar-m10": "tamuz",
        "restrictionsfield-label": "Povolené rozsahy IP adres:",
        "restrictionsfield-help": "Jedna IP adresa nebo CIDR rozsah na řádek. Všechno povolíte pomocí:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "revize $1",
-       "pageid": "Stránka s ID $1"
+       "pageid": "Stránka s ID $1",
+       "rawhtml-notallowed": "Značky &lt;html&gt; nelze používat mimo běžné stránky."
 }
index 2cb90bb..d74b569 100644 (file)
        "post-expand-template-argument-warning": "'''Warnung:''' Diese Seite enthält mindestens einen Parameter in einer Vorlage, der expandiert zu groß ist. Diese Parameter werden ignoriert.",
        "post-expand-template-argument-category": "Seiten mit ignorierten Vorlagenparametern",
        "parser-template-loop-warning": "Vorlagenschleife entdeckt: [[$1]]",
+       "template-loop-category": "Seiten mit Vorlagenschleifen",
+       "template-loop-category-desc": "Die Seite enthält eine Vorlagenschleife, z.&nbsp;B. eine Vorlage, die sich selbst rekursiv aufruft.",
        "parser-template-recursion-depth-warning": "Vorlagenrekursionstiefengrenze überschritten ($1)",
        "language-converter-depth-warning": "Sprachkonvertertiefenlimit überschritten ($1)",
        "node-count-exceeded-category": "Seiten, die die Knotenanzahl überschritten haben",
        "newimages-summary": "Diese Spezialseite zeigt die zuletzt hochgeladenen Dateien an.",
        "newimages-legend": "Filter",
        "newimages-label": "Dateiname (oder ein Teil davon):",
+       "newimages-user": "IP-Adresse oder Benutzername",
        "newimages-showbots": "Von Bots hochgeladene Dateien anzeigen",
        "newimages-hidepatrolled": "Kontrollierte Dateien ausblenden",
        "noimages": "Keine Dateien gefunden.",
        "restrictionsfield-label": "Erlaubte IP-Adressbereiche:",
        "restrictionsfield-help": "Eine IP-Adresse oder ein CIDR-Bereich pro Zeile. Um alles zu aktivieren, verwende:\n<pre>\n0.0.0.0/0\n::/0\n</pre>",
        "revid": "Version $1",
-       "pageid": "Seitenkennung $1"
+       "pageid": "Seitenkennung $1",
+       "rawhtml-notallowed": "&lt;html&gt;-Tags können nicht außerhalb von normalen Seiten verwendet werden."
 }
index fa5b0c1..9d77f90 100644 (file)
        "january": "Çele",
        "february": "Sıbat",
        "march": "Adar",
-       "april": "Lisan",
+       "april": "Nisane",
        "may_long": "Gulan",
        "june": "Heziran",
        "july": "Temuz",
        "january-gen": "Çele",
        "february-gen": "Sıbat",
        "march-gen": "Adar",
-       "april-gen": "Lisan",
+       "april-gen": "Nisane",
        "may-gen": "Gulan",
        "june-gen": "Heziran",
        "july-gen": "Temuz",
        "january-date": "$1 Çele",
        "february-date": "$1 Sıbat",
        "march-date": "$1 Adar",
-       "april-date": "$1 Lisan",
+       "april-date": "$1 Nisane",
        "may-date": "$1 Gulan",
        "june-date": "$1 Heziran",
        "july-date": "$1 Temuze",
        "and": "&#32;u",
        "qbfind": "Bıvin",
        "qbbrowse": "Çım ra viyarne",
-       "qbedit": "Bıvurne",
+       "qbedit": "Bıvırne",
        "qbpageoptions": "Na perrer",
        "qbmyoptions": "Perrê mı",
        "faq": "PVP",
        "undelete_short": "{{PLURAL:$1|Yew vırnayışi|$1 Vırnayışan}} mestere",
        "viewdeleted_short": "{{PLURAL:$1|Jew vurnayış esternayi|$1 Vurnayışanê esternayan}} bımotne",
        "protect": "Bıstarnê",
-       "protect_change": "bıvurne",
+       "protect_change": "bıvırne",
        "protectthispage": "Ena perre şeveknê",
        "unprotect": "Starnayışi bıvurne",
        "unprotectthispage": "Şeveknayışê ena perre bıvırne",
        "newmessageslinkplural": "{{PLURAL:$1|yew mesaco newe|999=mesacê newey}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|vurnayışo peyên|999=vurnayışê peyêni}}",
        "youhavenewmessagesmulti": "$1 mesaco newe esto",
-       "editsection": "bıvurne",
+       "editsection": "bıvırne",
        "editold": "bıvurne",
        "viewsourceold": "çımey cı bıvinê",
-       "editlink": "bıvurne",
+       "editlink": "bıvırne",
        "viewsourcelink": "çımey bıvêne",
        "editsectionhint": "Leteyo ke bıvuriyo: $1",
        "toc": "Zerreki",
        "watchthis": "Şıma bewnê ena perre",
        "savearticle": "Perre qeyd ke",
        "savechanges": "Vırnayışan qeyd kerê",
-       "publishpage": "Perer bıhesırne",
-       "publishchanges": "Vurnayışa vıla ke",
+       "publishpage": "Riperri bare ke",
+       "publishchanges": "Vırnayışan qeyd ke",
        "preview": "Verqayt",
        "showpreview": "Verasayışi bımocne",
        "showdiff": "Vurnayışan bımotne",
        "double-redirect-fixer": "Fixerî redirek bike",
        "brokenredirects": "Serşıkıtışê xırabeyi",
        "brokenredirectstext": "Redireksiyonê ey ki pelanê hama çiniyeno ra link dano:",
-       "brokenredirects-edit": "bıvurne",
+       "brokenredirects-edit": "bıvırne",
        "brokenredirects-delete": "bestere",
        "withoutinterwiki": "Perrê ke zıwananê binan rê gıreyê cı çıni yo",
        "withoutinterwiki-summary": "Enê pelî ke versiyonê ziwanî binî ra link nidano.",
        "changecontentmodel-title-label": "Sernameyê pele",
        "changecontentmodel-model-label": "Modelê zerrekiyo newe",
        "changecontentmodel-reason-label": "Sebeb:",
-       "changecontentmodel-submit": "Bıvurne",
+       "changecontentmodel-submit": "Bıvırne",
        "log-name-contentmodel": "Qeydê vurnayışanê modelê zerreki",
        "logentry-contentmodel-change-revertlink": "peyser biya",
        "logentry-contentmodel-change-revert": "peyser biya",
        "tooltip-ca-nstab-category": "Pela kategoriye bıvêne",
        "tooltip-minoredit": "Ney vırnayışo werdi nışan bıkerê",
        "tooltip-save": "Vurnayışanê xo qeyd ke",
-       "tooltip-publish": "Vurnayışê xo vıla kı",
+       "tooltip-publish": "Vırnayışê xo aşkera ke",
        "tooltip-preview": "Vurnayışanê xo çım ra bıviyarnê. Qeydkerdış ra ver bıgurê cı!",
        "tooltip-diff": "Kamci vırnayışê ke şıma nuştey sero kerdê, inan bıvênê.",
        "tooltip-compareselectedversions": "Ena per de ferqê rewziyonan de dı weçinaya bıvinê",
        "hebrew-calendar-m6": "Adar",
        "hebrew-calendar-m6a": "Adar I",
        "hebrew-calendar-m6b": "Adar II",
-       "hebrew-calendar-m7": "Nisan",
+       "hebrew-calendar-m7": "Nisane",
        "hebrew-calendar-m8": "Iyar",
        "hebrew-calendar-m9": "Sivan",
        "hebrew-calendar-m10": "Tamuz",
        "hebrew-calendar-m6-gen": "Adar",
        "hebrew-calendar-m6a-gen": "Adar I",
        "hebrew-calendar-m6b-gen": "Adar II",
-       "hebrew-calendar-m7-gen": "Nisan",
+       "hebrew-calendar-m7-gen": "Nisane",
        "hebrew-calendar-m8-gen": "Iyar",
        "hebrew-calendar-m9-gen": "Sivan",
        "hebrew-calendar-m10-gen": "Tamuz",
index cb1e286..b4faa3a 100644 (file)
        "login": "प्रवेश (लगईन)",
        "login-security": "तमरो पहिचान जाचँ गर",
        "nav-login-createaccount": "प्रवेश गर्ने/नयाँ खाता बनाउन्या",
-       "userlogin": "प्रवेश गर्ने / नयाँ खाता बनाउन्या",
-       "userloginnocreate": "प्रवेश",
        "logout": "बाहिर निस्कन्या",
        "userlogout": "बाहिर निस्कन्या",
        "notloggedin": "प्रवेश (लग ईन) नगरिएको",
        "userlogin-noaccount": "के खाता छैन ?",
        "userlogin-joinproject": "{{SITENAME}} मी खाता खोल ।",
-       "nologin": "तमरो खाता छैन? $1।",
-       "nologinlink": "नयाँ खाता खोल",
        "createaccount": "खाता खोल",
-       "gotaccount": "तमरो खाता छनोई छ? $1।",
-       "gotaccountlink": "प्रवेश",
-       "userlogin-resetlink": "प्रवेश सम्बन्धी विवरणहरू बिसरया भयो?",
        "userlogin-resetpassword-link": "पासवर्ड भुलिगया?",
        "userlogin-helplink2": "प्रवेश गद्दलाई सहयोग",
        "userlogin-loggedin": "तमी {{GENDER:$1|$1}}को रूपमी प्रवेश (लग इन) भइ सक्यौ ।\nअर्को प्रयोगकर्ताको रूपमी प्रवेश (लग इन) गर्न तलको फारम प्रयोग गर ।",
        "createacct-email-ph": "तमरो इमेल ठेगाना भरऽ",
        "createacct-another-email-ph": "इमेल ठेगाना भर",
        "createacct-realname": "वास्तविक नाम (ऐच्छिक)",
-       "createaccountreason": "कारण:",
        "createacct-reason": "कारण",
        "createacct-reason-ph": "क्याई तम नयाँ खाता खोल्ला छौ?",
        "createacct-submit": "तमरो खाता बनाऽ",
        "newimages": "नौला फाइलहरूको ग्यालरी",
        "imagelisttext": " '''$1''' {{PLURAL:$1|फाइल|फाइलहरू}} को निम्न सुची ,क्रमवद्ध $2.",
        "newimages-summary": "यै खास पानाले अन्तिम अपलोड गर्याका फाइलहरू धेकाउँन्छ ।",
+       "newimages-user": "आइपी(IP) ठेगाना या प्रयोगकर्ता नाउँ",
        "days": "{{PLURAL:$1|$1 दिन|$1 दिनहरू}}",
        "metadata": "मेटाडेटा",
        "metadata-help": "यै फाइलमि अतिरिक्त जानकारीहरू छन्, यैलाई बणुउन सम्भवतः डिजिटल क्यामरा और स्क्यानर प्रयोग गरियाको हुनसकन्छ । यदि यै फाइललाई खास अवस्थाबठे फेरबदल गरियाको हो भण्या यै फाइलले  सब्बै विवरण प्रतिबिम्बित गद्द सक्यानाइथी ।",
index 219c204..ff0286c 100644 (file)
@@ -49,7 +49,8 @@
                        "Nemo bis",
                        "Αντιγόνη",
                        "Matma Rex",
-                       "Ανώνυμος Βικιπαιδιστής"
+                       "Ανώνυμος Βικιπαιδιστής",
+                       "GR"
                ]
        },
        "tog-underline": "Υπογράμμιση συνδέσμων:",
        "rcfilters-invalid-filter": "Μη έγκυρο φίλτρο",
        "rcfilters-empty-filter": "Χωρίς ενεργά φίλτρα. Εμφανίζονται όλες οι συνεισφορές.",
        "rcfilters-filterlist-title": "Φίλτρα",
+       "rcfilters-filterlist-whatsthis": "Τι είναι αυτό;",
        "rcfilters-filterlist-noresults": "Δεν βρέθηκαν φίλτρα",
+       "rcfilters-noresults-conflict": "Δε βρέθηκαν αποτελέσματα γιατί τα κριτήρια αναζήτησης είναι σε διένεξη.",
        "rcfilters-filtergroup-registration": "Επωνυμία χρηστών",
        "rcfilters-filter-registered-label": "Εγγεγραμμένοι",
        "rcfilters-filter-registered-description": "Συνδεδεμένοι συντάκτες.",
        "rcfilters-filter-editsbyother-label": "Επεξεργασίες από άλλους",
        "rcfilters-filter-editsbyother-description": "Επεξεργασίες που δημιουργήθηκαν από άλλους χρήστες (όχι εσάς).",
        "rcfilters-filtergroup-userExpLevel": "Επίπεδο εμπειρίας (για εγγεγραμμένους χρήστες μόνο)",
-       "rcfilters-filter-userExpLevel-newcomer-label": "Νεοφερμένοι",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Λιγότερες από 10 επεξεργασίες και 4 ημέρες δραστηριότητας.",
-       "rcfilters-filter-userExpLevel-learner-label": "Μαθητευόμενοι",
-       "rcfilters-filter-userExpLevel-learner-description": "Περισσότερες ημέρες δραστηριότητας και επεξεργασίες από τους «νεοφερμένους» αλλά λιγότερες από τους «έμπειρους χρήστες».",
-       "rcfilters-filter-userExpLevel-experienced-label": "Έμπειροι χρήστες",
-       "rcfilters-filter-userExpLevel-experienced-description": "Περισσότερες από 30 ημέρες δραστηριότητας και 500 αλλαγές.",
+       "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": "Περισσότερες από 30 ημέρες δραστηριότητας και 500 αλλαγές.",
        "rcfilters-filtergroup-automated": "Αυτοματοποιημένες συνεισφορές",
        "rcfilters-filter-bots-label": "Ρομπότ",
        "rcfilters-filter-bots-description": "Επεξεργασίες που έγιναν από αυτοματοποιημένα εργαλεία.",
        "newimages-summary": "Αυτή η ειδική σελίδα δείχνει τα πιο πρόσφατα ανεβασμένα αρχεία.",
        "newimages-legend": "Φίλτρο",
        "newimages-label": "Όνομα αρχείου (ή μέρος αυτού):",
+       "newimages-user": "Διεύθυνση IP ή όνομα χρήστη",
        "newimages-showbots": "Εμφάνιση αρχείων ανεβασμένων από ρομπότ",
        "newimages-hidepatrolled": "Απόκρυψη ελεγμένων αρχείων.",
        "noimages": "Δεν υπάρχουν εικόνες.",
index 6b1c73d..e87b6fb 100644 (file)
        "post-expand-template-argument-warning": "<strong>Warning:</strong> This page contains at least one template argument that has a too large expansion size.\nThese arguments have been omitted.",
        "post-expand-template-argument-category": "Pages containing omitted template arguments",
        "parser-template-loop-warning": "Template loop detected: [[$1]]",
+       "template-loop-category": "Pages with template loops",
+       "template-loop-category-desc": "The page contains a template loop, ie. a template which calls itself recursively.",
        "parser-template-recursion-depth-warning": "Template recursion depth limit exceeded ($1)",
        "language-converter-depth-warning": "Language converter depth limit exceeded ($1)",
        "node-count-exceeded-category": "Pages where node count is exceeded",
        "newimages-summary": "This special page shows the last uploaded files.",
        "newimages-legend": "Filter",
        "newimages-label": "Filename (or a part of it):",
+       "newimages-user": "IP address or username",
        "newimages-showbots": "Show uploads by bots",
        "newimages-hidepatrolled": "Hide patrolled uploads",
        "noimages": "Nothing to see.",
        "restrictionsfield-label": "Allowed IP ranges:",
        "restrictionsfield-help": "One IP address or CIDR range per line. To enable everything, use:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "revision $1",
-       "pageid": "page ID $1"
+       "pageid": "page ID $1",
+       "rawhtml-notallowed": "&lt;html&gt; tags cannot be used outside of normal pages."
 }
index 6b8fe3c..3db6915 100644 (file)
        "post-expand-template-argument-warning": "Aviso: Esta página contiene al menos un parámetro de plantilla con un tamaño de expansión demasiado grande.\nSe han descartado esos parámetros.",
        "post-expand-template-argument-category": "Páginas que contienen plantillas con parámetros descartados",
        "parser-template-loop-warning": "Se ha detectado un bucle de plantilla: [[$1]]",
+       "template-loop-category": "Páginas con bucles de plantillas",
+       "template-loop-category-desc": "Esta página contiene un bucle de plantillas, es decir, una plantilla que se llama a sí misma recursivamente.",
        "parser-template-recursion-depth-warning": "Se ha superado el límite de profundidad de la recursividad de plantillas ($1)",
        "language-converter-depth-warning": "Se ha superado el límite de profundidad del convertidor de idioma ($1)",
        "node-count-exceeded-category": "Páginas que sobrepasan la cantidad de nodos",
        "newimages-summary": "Esta página especial muestra una galería de los últimos archivos subidos.",
        "newimages-legend": "Filtro",
        "newimages-label": "Nombre del archivo (o una parte):",
+       "newimages-user": "Dirección IP o nombre de usuario",
        "newimages-showbots": "Mostrar cargas de bots",
        "newimages-hidepatrolled": "Ocultar las subidas verificadas",
        "noimages": "No hay nada que ver.",
        "logentry-newusers-autocreate": "Se ha {{GENDER:$2|creado}} automáticamente la cuenta de {{GENDER:$4|usuario|usuaria}} $1",
        "logentry-protect-move_prot": "$1 {{GENDER:$2|trasladó}} las preferencias de protección de $4 a $3",
        "logentry-protect-unprotect": "$1 {{GENDER:$2|eliminó}} la protección de $3",
-       "logentry-protect-protect": "$1 {{GENDER:$2|protegió}} $3 $4",
-       "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protegió}} a $3 $4 [en cascada]",
+       "logentry-protect-protect": "$1 {{GENDER:$2|protegió}} la página $3 $4",
+       "logentry-protect-protect-cascade": "$1 {{GENDER:$2|protegió}} la página $3 $4 [en cascada]",
        "logentry-protect-modify": "$1 {{GENDER:$2|cambió}} el nivel de protección de $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|cambió}} el nivel de protección de $3 $4 [en cascada]",
        "logentry-rights-rights": "$1 {{GENDER:$2|modificó}} los grupos a los que pertenece {{GENDER:$6|$3}}: de $4 a $5",
index 2970dd8..9daa40e 100644 (file)
        "right-createpage": "Luua lehekülgi (mis pole aruteluleheküljed)",
        "right-createtalk": "Luua arutelulehekülgi",
        "right-createaccount": "Luua uusi kasutajakontosid",
+       "right-autocreateaccount": "Automaatselt välise kasutajakontoga sisse logida",
        "right-minoredit": "Märkida muudatusi pisimuudatusteks",
        "right-move": "Teisaldada lehekülgi",
        "right-move-subpages": "Teisaldada lehekülgi koos nende alamlehtedega",
        "action-createpage": "seda lehekülge luua",
        "action-createtalk": "seda arutelulehekülge luua",
        "action-createaccount": "seda kasutajakontot luua",
+       "action-autocreateaccount": "välise kasutajakontoga automaatselt sisse logida",
        "action-history": "vaadata selle lehekülje ajalugu",
        "action-minoredit": "seda muudatust pisimuudatuseks märkida",
        "action-move": "seda lehekülge teisaldada",
        "action-move-rootuserpages": "teisaldada kasutajalehekülgi",
        "action-move-categorypages": "teisaldada kategoorialehekülgi",
        "action-movefile": "seda faili teisaldada",
-       "action-upload": "seda faili üles laadida",
+       "action-upload": "faile üles laadida",
        "action-reupload": "seda olemasolevat faili üle kirjutada",
        "action-reupload-shared": "seda jagatud varamus asuvat faili üle kirjutada",
        "action-upload_by_url": "seda faili internetiaadressilt üles laadida",
        "newimages-summary": "Sellel erilehel on viimati üles laaditud failid.",
        "newimages-legend": "Filter",
        "newimages-label": "Failinimi (või selle osa):",
+       "newimages-user": "IP-aadress või kasutajanimi",
        "newimages-showbots": "Näita robotite üles laaditud faile",
        "newimages-hidepatrolled": "Peida kontrollitud failid",
        "noimages": "Uusi pilte ei ole.",
        "authform-wrongtoken": "Vale luba",
        "specialpage-securitylevel-not-allowed-title": "Pole lubatud",
        "specialpage-securitylevel-not-allowed": "Kahjuks ei lubata sul seda lehekülge kasutada, kuna sinu identiteeti ei õnnestunud tõestada.",
+       "authpage-cannot-login": "Sisselogimisega ei õnnestu alustada.",
+       "authpage-cannot-login-continue": "Sisselogimisega ei õnnestu jätkata. Suure tõenäosusega on sinu seansi ajalõpp möödunud.",
+       "authpage-cannot-create": "Konto loomisega ei õnnestu alustada.",
+       "authpage-cannot-create-continue": "Konto loomisega ei õnnestu jätkata. Suure tõenäosusega on sinu seansi ajalõpp möödunud.",
+       "authpage-cannot-link": "Konto linkimisega ei õnnestu alustada.",
+       "authpage-cannot-link-continue": "Konto linkimisega ei õnnestu jätkata. Suure tõenäosusega on sinu seansi ajalõpp möödunud.",
        "changecredentials": "Autentimisandmete muutmine",
        "changecredentials-submit": "Muuda autentimisandmed",
        "changecredentials-success": "Sinu autentimisandmed on muudetud.",
        "removecredentials-success": "Sinu autentimisandmed on eemaldatud.",
        "credentialsform-provider": "Andmete tüüp:",
        "credentialsform-account": "Konto nimi:",
+       "authenticationdatachange-ignored": "Autentimisandmete muutmine jäi rahuldamata. Võimalik, et ühtegi pakkujat polnud häälestatud.",
        "userjsispublic": "Pea silmas, et JavaScripti alamleheküljed ei tohiks sisaldada konfidentsiaalseid andmeid, kuna neid näevad teised kasutajad.",
        "usercssispublic": "Palun pane tähele: CSS-alamleheküljel ei peaks olema konfidentsiaalseid andmeid, kuna teised kasutajad näevad seda.",
        "restrictionsfield-badip": "Vigane IP-aadress või -aadressivahemik: $1",
index 24508d3..63508b4 100644 (file)
        "no-null-revision": "Ezin izan da \"$1\" orrialdearen berrikuspen huts bat sortu",
        "badtitle": "Izenburu ezegokia",
        "badtitletext": "Eskatutako orri izenburua ez da baliozkoa, hutsik dago, edo gaizki lotutako hizkuntzen arteko lotura da. Baliteke izenburuetan erabili ezin den karaktereren bat edukitzea.",
+       "title-invalid-talk-namespace": "Eskatutako orriaren izenburuak agian existitzen ez den eztabaida-orri bati egiten dio erreferentzia.",
+       "title-invalid-characters": "Eskatutako orriaren izenburuak baliagarri ez diren karaktereak ditu: \"$1\".",
        "perfcached": "Hurrengo datuak katxean gordeta daude eta litekeena da guztiz eguneratuta ez egotea. Gehienez {{PLURAL:$1|emaitza 1 dago|$1 emaitza daude}} eskuragarri katxean.",
        "perfcachedts": "Hurrengo datuak katxean daude, $1 eguneratu zen azkenekoz. {{PLURAL:$4|emaitza 1 dago|$4 emaitza daude}} eskuragarri katxean.",
        "querypage-no-updates": "Orrialde honen berritzeak ez dira baimentzen. Hemen dagoen data ez da zuzenean berrituko.",
        "botpasswords-label-cancel": "Utzi",
        "botpasswords-label-delete": "Ezabatu",
        "botpasswords-label-resetpassword": "Pasahitza berrezarri",
+       "botpasswords-label-grants-column": "Baimenduta",
+       "botpasswords-bad-appid": "Bot horren \"$1\" izen hori ez da baliagarria.",
+       "botpasswords-insert-failed": "Ezin izan da bot \"$1\" izen hori gehitu. Dagoeneko gehituta zegoen?",
        "resetpass_forbidden": "Ezin dira pasahitzak aldatu",
        "resetpass-no-info": "Orrialde honetara zuzenean sartzeko izena eman behar duzu.",
        "resetpass-submit-loggedin": "Pasahitza aldatu",
index 4bcece9..6f50a37 100644 (file)
        "post-expand-template-argument-warning": "'''هشدار:''' این صفحه شامل دست کم یک پارامتر الگو است که بیش از اندازه بزرگ است.\nاین پارامترها نادیده گرفته شدند.",
        "post-expand-template-argument-category": "صفحه‌های حاوی الگوهایی با پارامترهای نادیده‌گرفته‌شده",
        "parser-template-loop-warning": "حلقه در الگو پیدا شد: [[$1]]",
+       "template-loop-category": "صفحه‌های دارای حلقه در الگو",
+       "template-loop-category-desc": "صفحه دارای حلقه در الگو، مثلا الگویی که از خودش درون خودش استفاده‌کرده‌است.",
        "parser-template-recursion-depth-warning": "محدودیت عمق بازگشت الگو رد شد ($1)",
        "language-converter-depth-warning": "محدودیت عمق مبدل زبانی رد شد ($1)",
        "node-count-exceeded-category": "صفحه‌هایی که از حداکثر تعداد گره تجاوز کرده‌اند",
        "page_first": "نخست",
        "page_last": "واپسین",
        "histlegend": "انتخاب تفاوت: دکمه‌های گرد کنار ویرایش‌هایی که می‌خواهید با هم مقایسه کنید را علامت بزنید و دکمهٔ Enter را بزنید یا دکمهٔ پایین را فشار دهید.<br />\nاختصارات: '''({{int:cur}})''' = تفاوت با نسخهٔ فعلی، '''({{int:last}})''' = تفاوت با نسخهٔ قبلی، '''({{int:minoreditletter}})''' = ویرایش جزئی.",
-       "history-fieldset-title": "مرور تاریخچه",
-       "history-show-deleted": "فقط حذف‌شده",
+       "history-fieldset-title": "جستجو برای نسخه‌ها",
+       "history-show-deleted": "فقط حذف‌شدهفقط نسخه‌های حذف شده",
        "histfirst": "قدیمی‌ترین",
        "histlast": "جدیدترین",
        "historysize": "({{PLURAL:$1|۱ بایت|$1 بایت}})",
        "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-filtergroup-registration": "ثبت‌نام کاربر",
        "rcfilters-filter-registered-label": "ثبت شده",
        "rcfilters-filter-registered-description": "ورود ویرایشگران.",
index b97f4d0..5d3ca4f 100644 (file)
        "userrights-expiry-current": "Vanhentuu $1",
        "userrights-expiry-none": "Ei vanhene",
        "userrights-expiry": "Vanhentuu:",
-       "userrights-expiry-existing": "Nykyinen vanhentumisaika: $3, $2",
+       "userrights-expiry-existing": "Nykyinen vanhentumisaika: $2 kello $3",
        "userrights-expiry-othertime": "Muu aika:",
        "userrights-expiry-options": "1 päivä:1 day,1 viikko:1 week,1 kuukausi:1 month,3 kuukautta:3 months,6 kuukautta:6 months,1 vuosi:1 year",
        "userrights-conflict": "Päällekkäinen käyttöoikeuksien muutos! Tarkista tekemäsi muutokset ja vahvista ne.",
        "rcfilters-filter-editsbyself-description": "Muokkauksesi",
        "rcfilters-filter-editsbyother-label": "Muiden muokkaukset",
        "rcfilters-filter-editsbyother-description": "Muutokset jotka tehneet muut käyttäjät (et sinä).",
+       "rcfilters-filtergroup-userExpLevel": "Kokemustaso (vain rekisteröityneet käyttäjät)",
        "rcfilters-filter-user-experience-level-newcomer-label": "Tulokkaat",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Vähemmän kuin 10 muokkausta ja 4 päivää aktiivisuutta.",
        "rcfilters-filter-user-experience-level-learner-label": "Oppijat",
        "rcfilters-filter-user-experience-level-experienced-label": "Kokeneet käyttäjät",
        "rcfilters-filter-user-experience-level-experienced-description": "Enemmän kuin 30 päivää aktiivisena ja 500 muokkausta.",
        "rcfilters-filtergroup-changetype": "Muutoksen tyyppi",
        "rcfilters-filter-pageedits-label": "Sivun muokkaukset",
        "rcfilters-filter-pageedits-description": "Muokkaukset wikin sisältöön, keskusteluihin, luokkakuvauksiin....",
+       "rcfilters-filter-newpages-label": "Sivujen luonnit",
        "rcfilters-filter-newpages-description": "Muokkaukset jotka luovat uusia sivuja.",
        "rcfilters-filter-categorization-label": "Luokkamuutokset",
        "rcfilters-filter-logactions-label": "Kirjatut toimet",
        "mediastatistics-table-count": "Tiedostojen lukumäärä",
        "mediastatistics-table-totalbytes": "Yhteenlaskettu koko",
        "mediastatistics-header-unknown": "Tuntematon",
-       "mediastatistics-header-bitmap": "Bitmap-kuvat",
+       "mediastatistics-header-bitmap": "Bittikarttakuvat",
        "mediastatistics-header-drawing": "Piirrokset (vektorikuvat)",
        "mediastatistics-header-audio": "Audio",
        "mediastatistics-header-video": "Videot",
index 7342f35..1f2a034 100644 (file)
        "post-expand-template-argument-warning": "<strong>Attention :</strong> cette page contient au moins un paramètre de modèle dont la taille après expansion est trop importante. \nCes arguments n’ont donc pas été inclus.",
        "post-expand-template-argument-category": "Pages contenant des paramètres de modèle non évalués",
        "parser-template-loop-warning": "Modèle en boucle détecté : [[$1]]",
+       "template-loop-category": "Pages avec des boucles de modèle",
+       "template-loop-category-desc": "La page contient une boucle dans le modèle, c.à.d. un modèle qui s’appelle lui-même récursivement.",
        "parser-template-recursion-depth-warning": "Limite de profondeur des appels récursifs de modèles dépassée ($1)",
        "language-converter-depth-warning": "Limite de profondeur du convertisseur de langue dépassée ($1)",
        "node-count-exceeded-category": "Pages dépassant le nombre de nœuds maximal",
        "userrights-expiry-options": "1 jour:1 day,1 semaine:1 week,1 mois:1 month,3 mois:3 montghs,6 mois:6 month,1 an:1 year",
        "userrights-invalid-expiry": "La date d'expiration pour le groupe « $1 » n'est pas valide.",
        "userrights-expiry-in-past": "La date d'expiration pour le groupe « $1 » est dépassée.",
-       "userrights-cannot-shorten-expiry": "Vous ne pouvez pas rallonger la durée d'expiration du groupe « $1 ». Seuls les utilisateurs disposant de l'autorisation d'ajouter et de supprimer ce groupe peuvent rallonger les durées d'expiration.",
+       "userrights-cannot-shorten-expiry": "Vous ne pouvez pas raccourcir la durée d'expiration du groupe « $1 ». Seuls les utilisateurs disposant de l'autorisation d'ajouter et de supprimer ce groupe peuvent raccourcir les durées d'expiration.",
        "userrights-conflict": "Conflit de modification des droits utilisateur ! Veuillez relire et confirmer vos modifications.",
        "group": "Groupe :",
        "group-user": "Utilisateurs",
        "newimages-summary": "Cette page spéciale affiche les derniers fichiers importés.",
        "newimages-legend": "Filtre",
        "newimages-label": "Nom du fichier (ou une partie de celui-ci) :",
+       "newimages-user": "Adresse IP ou nom d'utilisateur",
        "newimages-showbots": "Afficher les imports faits par des robots",
        "newimages-hidepatrolled": "Masquer les téléchargements patrouillés",
        "noimages": "Aucune image à afficher.",
        "confirmemail_sendfailed": "{{SITENAME}} n’a pas pu vous envoyer le courriel de confirmation.\nVeuillez vérifiez que votre adresse de courriel ne comprend aucun caractère incorrect.\n\nLe programme d’envoi de courriel a retourné l’indication suivante : $1",
        "confirmemail_invalid": "Code de confirmation incorrect.\nCelui-ci a peut-être expiré.",
        "confirmemail_needlogin": "Vous devez vous $1 pour confirmer votre adresse de courriel.",
-       "confirmemail_success": "Votre adresse de courriel a été confirmée.\nVous pouvez maintenant vous [[Special:UserLogin|{{MediaWiki:Loginreqlink}}]] et profiter du wiki.",
+       "confirmemail_success": "Votre adresse de courriel a été confirmée.\nVous pouvez maintenant vous [[Special:UserLogin|{{MediaWiki:Loginreqlink/fr}}]] et profiter du wiki.",
        "confirmemail_loggedin": "Votre adresse de courriel est maintenant confirmée.",
        "confirmemail_subject": "Confirmation d’adresse de courriel pour {{SITENAME}}",
        "confirmemail_body": "Quelqu’un, probablement vous, à partir de l’adresse IP $1,\na créé un compte « $2 » avec cette adresse de courriel sur le site {{SITENAME}}.\n\nPour confirmer que ce compte vous appartient vraiment et afin\nd’activer les fonctions de messagerie sur {{SITENAME}},\nveuillez suivre ce lien dans votre navigateur :\n\n$3\n\nSi vous n’avez *pas* créé ce compte, suivez le lien ci-dessous \npour annuler la confirmation de votre adresse courriel :\n\n$5\n\nCe code de confirmation expirera le $4.",
        "restrictionsfield-label": "Plages IP autorisées :",
        "restrictionsfield-help": "Une adresse IP ou une plage CIDR par ligne. Pour tout activer, utiliser <pre>0.0.0.0/0\n::/0</pre>",
        "revid": "version $1",
-       "pageid": "ID de page $1"
+       "pageid": "ID de page $1",
+       "rawhtml-notallowed": "Les balises &lt;html&gt; ne peuvent pas être utilisées en dehors des pages normales."
 }
index 3ae9648..c809c76 100644 (file)
        "externaldberror": "Soit y avait une erreur avec la base d'information de certification extérieur, soit vous avez pas la permission de renouveler votre compte extérieur.",
        "login": "Connecter",
        "nav-login-createaccount": "Connecter / créer un compte",
-       "userlogin": "Connecter / créer un compte",
        "logout": "Déconnecter",
        "userlogout": "Déconnecter",
        "notloggedin": "Pas connecté",
-       "nologin": "Vous avez pas de compte? '''$1'''.",
-       "nologinlink": "Créez un compte",
        "createaccount": "Créer un compte",
-       "gotaccount": "Vous avez un compte déjà? '''$1'''.",
-       "gotaccountlink": "Connectez",
-       "userlogin-resetlink": "Oublié vôtre détailes de log in?",
        "createacct-emailrequired": "Adresse d'email",
        "createacct-emailoptional": "Adresse d'email (optional)",
        "createacct-email-ph": "Entres t'adresse d'email",
        "createacct-another-email-ph": "Entres adresse d'email",
        "createaccountmail": "par e-mail",
-       "createaccountreason": "Raison:",
        "createacct-reason": "Raison",
        "createacct-reason-ph": "Pourquoi crées-tu un autre compte",
        "badretype": "Les mots de passe que vous avez mis sont pas pareils.",
        "resetpass-temp-password": "Mot de passe temporaire:",
        "passwordreset-username": "Nom d'useur:",
        "passwordreset-domain": "Domaine:",
-       "passwordreset-capture": "Regarder l'email résultant?",
        "passwordreset-email": "Adresse d'email:",
        "changeemail-none": "(aucun)",
        "changeemail-password": "Ton mot de passe sur {{SITENAME}}:",
index 280b124..db9be6f 100644 (file)
        "userjsyoucanpreview": "'''Tip:''' Brük di „{{int:showpreview}}“-knoop, am din nei JavaScript föör det seekrin tu testin.",
        "usercsspreview": "'''Seenk diaram, dat det bluas en föörskau faan din CSS as.'''\n'''Det as noch ei seekert wurden!'''",
        "userjspreview": "'''Seenk diaram, dat det bluas en föörskau faan din JavaScript as.'''\n'''Det as noch ei seekert wurden!'''",
-       "sitecsspreview": "'''Påås aw dåt dü jüdeer CSS bloot forbekiikest.'''\n'''Dåt as nuch ai spiikerd!'''",
-       "sitejspreview": "'''Påås aw dåt dü jüdeer JavaScript code bloot forbekiikest.'''\n'''Dåt as nuch ai spiikerd!'''",
+       "sitecsspreview": "<strong>Paase üüb! Det as bluas en föörskau faan't CSS. Det as noch ei seekert wurden!</strong>",
+       "sitejspreview": "<strong>Paase üüb! Det as bluas en föörskau faan di JavaScript code. Det as noch ei seekert wurden!</strong>",
        "userinvalidcssjstitle": "''Paase üüb:''' Skak \"$1\" jaft at ei.\nSeenk diaram, dat faan en brüker iinracht .css- an .js-sidjen mä en letjen buksteew began skel. Bispal:\n''{{ns:user}}:Münsterkjarl/vector.css'' uunsteed faan ''{{ns:user}}:Münsterkjarl/Vector.css''.",
        "updated": "(Feranert)",
        "note": "'''Paase üüb:'''",
index 2382292..8856b37 100644 (file)
        "post-expand-template-argument-warning": "'''Aviso:''' Esta páxina contén, polo menos, un argumento de modelo que ten un tamaño e expansión moi grande.\nEstes argumentos foron omitidos.",
        "post-expand-template-argument-category": "Páxinas que conteñen argumentos de modelo omitidos",
        "parser-template-loop-warning": "Detectouse un modelo en bucle: [[$1]]",
+       "template-loop-category": "Páxinas con bucles de modelo",
+       "template-loop-category-desc": "A páxina contén un bucle de modelo, por exemplo, un modelo que se chama a si mesmo recursivamente.",
        "parser-template-recursion-depth-warning": "Excedeuse o límite de profundidade de recursión do modelo ($1)",
        "language-converter-depth-warning": "Excedeuse o límite de profundidade do convertedor de lingua ($1)",
        "node-count-exceeded-category": "Páxinas nas que se supera o número de nodos",
        "newimages-summary": "Esta páxina especial mostra os últimos ficheiros cargados.",
        "newimages-legend": "Filtro",
        "newimages-label": "Nome do ficheiro (ou parte del):",
+       "newimages-user": "Enderezo IP ou nome de usuario",
        "newimages-showbots": "Mostrar as cargas feitas por bots",
        "newimages-hidepatrolled": "Agochar as subidas patrulladas",
        "noimages": "Non hai imaxes que mostrar.",
index 8f7dd00..1168639 100644 (file)
        "post-expand-template-argument-warning": "'''אזהרה:''' דף זה כולל לפחות תבנית אחת שבה פרמטרים גדולים מדי.\nפרמטרים אלה הושמטו.",
        "post-expand-template-argument-category": "דפים שבהם הושמטו פרמטרים של תבניות",
        "parser-template-loop-warning": "נמצאה תבנית הקוראת לעצמה: [[$1]]",
+       "template-loop-category": "דפים עם לולאות בתבנית",
+       "template-loop-category-desc": "הדף הזה מכיל לולאה בתבנית, כלומר תבנית שקוראת לעצמה באופן רקורסיבי.",
        "parser-template-recursion-depth-warning": "עומק התבניות המוכללות זו בזו עבר את המגבלה ($1)",
        "language-converter-depth-warning": "עומק ממיר השפה עבר את המגבלה ($1)",
        "node-count-exceeded-category": "דפים שבהם מספר הצמתים גדול מדי",
        "newimages-summary": "דף מיוחד זה מציג את הקבצים האחרונים שהועלו.",
        "newimages-legend": "מסנן",
        "newimages-label": "שם הקובץ (או חלק ממנו):",
+       "newimages-user": "כתובת IP או שם משתמש",
        "newimages-showbots": "הצגת העלאות שבוצעו על־ידי בוטים",
        "newimages-hidepatrolled": "הסתרת העלאות בדוקות",
        "noimages": "אין קבצים.",
        "restrictionsfield-label": "טווחי כתובות IP מותרים:",
        "restrictionsfield-help": "כתובת IP אחת או טווח CIDR אחד בשורה. כדי לאפשר את הכול, ניתן להשתמש ב:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "גרסה $1",
-       "pageid": "מזהה דף $1"
+       "pageid": "מזהה דף $1",
+       "rawhtml-notallowed": "לא ניתן להשתמש בתגיות &lt;html&gt; מחוץ לדפים רגילים."
 }
index a560d24..6079b67 100644 (file)
@@ -79,7 +79,8 @@
                        "Susant purohit",
                        "Jayprakash12345",
                        "Dr. Shikha Jaggi",
-                       "Shyamal"
+                       "Shyamal",
+                       "SatyamMishra"
                ]
        },
        "tog-underline": "कड़ियाँ अधोरेखन:",
        "post-expand-template-argument-warning": "'''चेतावनी:''' इस पृष्ठ पर किसी साँचे में कम-से-कम एक ऐसा प्राचल है जो बढ़ाने पर बहुत बड़ा हो जायेगा।\nऐसे प्राचलों को छोड़ दिया गया है।",
        "post-expand-template-argument-category": "ऐसे पृष्ठ जिनमें प्राचल छोड़े गये हैं",
        "parser-template-loop-warning": "साँचा चक्र मिला: [[$1]]",
+       "template-loop-category": "टेम्पलेट लूप वाले पेज",
+       "template-loop-category-desc": "पृष्ठ में एक टेम्पलेट लूप है, अर्थात। एक टेम्पलेट जो स्वयं को पुनरावर्ती रूप से कॉल करता है",
        "parser-template-recursion-depth-warning": "साँचा पुनरावर्ती गहराई सीमा पार ($1)",
        "language-converter-depth-warning": "भाषा कन्वर्टर गहराई सीमा से बाहर गया ( $1 )",
        "node-count-exceeded-category": "पृष्ठ जिनमें नोड-संख्या सीमा पार की गई है",
        "prefs-help-recentchangescount": "इसमें हाल के बदलाव, पृष्ठ इतिहास व लॉग शामिल हैं।",
        "prefs-help-watchlist-token2": "यह आपकी ध्यानसूची की वेब फ़ीड की गोपनीय चाबी है।\nयह जिसके भी पास होगी वह आपकी ध्यानसूची पढ़ सकेगा, इसिलए इसे किसी के साथ बांटियेगा नहीं।\n[[Special:ResetTokens|इसे रीसेट करने के लिए यहाँ क्लिक करें]]।",
        "savedprefs": "आपकी वरीयताएँ संजोई गई हैं।",
-       "savedrights": "पà¥\8dरयà¥\8bà¤\95à¥\8dता {{GENDER:$1|$1}} का सदस्य अधिकार सहेजा गया।",
+       "savedrights": "सदसà¥\8dय {{GENDER:$1|$1}} का सदस्य अधिकार सहेजा गया।",
        "timezonelegend": "समयमंडल:",
        "localtime": "स्थानीय समय:",
        "timezoneuseserverdefault": "विकि मूल का उपयोग करें ($1)",
        "userrights-user-editname": "सदस्यनाम दें:",
        "editusergroup": "सदस्य समूह दिखायें",
        "editinguser": "सदस्य '''[[User:$1|$1]]''' $2 के अधिकार बदलें\n{{GENDER:$1|सदस्य}} के सदस्य अधिकार बदले जा रहे हैं <strong>[[User:$1|$1]]</strong> $2",
+       "viewinguserrights": "{{GENDER:$1|user}} के उपयोगकर्ता अधिकारों को देखना <strong>[[User:$1|$1]]</strong> $2",
        "userrights-editusergroup": "सदस्य समूहों का संपादन करें",
-       "userrights-viewusergroup": "सदस्य समूह देखें",
+       "userrights-viewusergroup": "{{GENDER:$1|सदस्य}} समूह देखें",
        "saveusergroups": "{{GENDER:$1|सदस्य}} समूह सहेजें",
        "userrights-groupsmember": "निम्न {{PLURAL:$1|समूह|समूहों}} का सदस्य:",
        "userrights-groupsmember-auto": "निम्न {{PLURAL:$1|समूह|समूहों}} का अंतर्निहित सदस्य:",
-       "userrights-groups-help": "आप इस सदस्य की समूह-सदस्यता बदल सकते हैं:\n* बक्से पर सही का निशान लगे होने का अर्थ है कि सदस्य उस समूह में है।\n* बक्से पर सही का निशान न लगे होने का अर्थ है कि सदस्य उस समूह में नहीं है।\n* एक * का अर्थ है कि एक बार जोड़ने के बाद वह समूह हटा नहीं सकते हैं, और हटाने के बाद जोड़ नहीं सकते हैं।",
+       "userrights-groups-help": "आप इस सदस्य की समूह-सदस्यता बदल सकते हैं:\n* बक्से पर सही का निशान लगे होने का अर्थ है कि सदस्य उस समूह में है।\n* बक्से पर सही का निशान न लगे होने का अर्थ है कि सदस्य उस समूह में नहीं है।\n* एक * का अर्थ है कि एक बार जोड़ने के बाद वह समूह हटा नहीं सकते हैं, और हटाने के बाद जोड़ नहीं सकते हैं।\n* एक # सूचित करता है कि आप केवल इस समूह के समाप्ति समय को वापस रख सकते हैं; आप इसे आगे नहीं बढ़ा सकते हैं",
        "userrights-reason": "कारण:",
        "userrights-no-interwiki": "आपको अन्य विकियों पर सदस्य अधिकार बदलने की अनुमति नहीं हैं।",
        "userrights-nodatabase": "डाटाबेस $1 या तो मौजूद नहीं है या फिर स्थानीय नहीं है।",
        "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": "सदस्य",
        "action-delete": "इस पृष्ठ को हटाने",
        "action-deleterevision": "अवतरण हटायें",
        "action-deletelogentry": "लॉग प्रविष्टियाँ को हटाए",
-       "action-deletedhistory": "à¤\87स à¤ªà¥\83षà¥\8dठ à¤\95à¥\87 à¤®à¤¿à¤\9fà¥\87 à¤\87तिहास à¤\95à¥\8b à¤¦à¥\87à¤\96नà¥\87",
+       "action-deletedhistory": "पà¥\83षà¥\8dठ à¤\95à¥\87 à¤®à¤¿à¤\9fà¥\87 à¤\87तिहास à¤\95à¥\8b à¤¦à¥\87à¤\96ना",
        "action-deletedtext": "हटाये गए अवतरण का पाठ देखें",
        "action-browsearchive": "हटाएँ गए पृष्ठों में खोजने",
-       "action-undelete": "à¤\87स à¤ªà¥\83षà¥\8dठ à¤\95à¥\8b à¤ªà¥\81नरà¥\8dसà¥\8dथापित à¤\95रनà¥\87",
-       "action-suppressrevision": "à¤\87स à¤\9bिपà¥\87 à¤\85वतरण को देखने और पुनर्स्थापित करने",
+       "action-undelete": "पृष्ठ को पुनर्स्थापित करने",
+       "action-suppressrevision": "à¤\9bिपà¥\87 à¤\85वतरणà¥\8bà¤\82 को देखने और पुनर्स्थापित करने",
        "action-suppressionlog": "इस निजी लॉग को देखने",
        "action-block": "इस सदस्य को संपादन करने से ब्लॉक करने",
        "action-protect": "इस पृष्ठ के सुरक्षा स्तर बदलने",
        "rcfilters-empty-filter": "कोई सक्रिय फिल्टर नहीं। सभी योगदान दिखाए गए है।",
        "rcfilters-filterlist-title": "फिल्टर",
        "rcfilters-filterlist-whatsthis": "यह क्या है?",
+       "rcfilters-filterlist-feedbacklink": "नए (बीटा) फिल्टर पर प्रतिक्रिया दें",
        "rcfilters-highlightbutton-title": "Highlight results",
        "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-registration": "उपयोगकर्ता पंजीकरण",
        "rcfilters-filter-registered-label": "पंजीकृत:",
        "rcfilters-filter-registered-description": "लॉग-इन संपादक।",
        "rcfilters-filter-unregistered-label": "अपंजीकृत",
        "rcfilters-filter-unregistered-description": "संपादक जो लॉग इन नहीं हैं।",
+       "rcfilters-filtergroup-authorship": "लेखकों को संपादित करें",
        "rcfilters-filter-editsbyself-label": "आपके अपने संपादन",
        "rcfilters-filter-editsbyself-description": "आपके द्वारा संपादित",
        "rcfilters-filter-editsbyother-label": "दूसरों के द्वारा संपादित",
+       "rcfilters-filter-editsbyother-description": "अन्य उपयोगकर्ताओं द्वारा बनाई गए संपादन (आपके द्वारा नहीं)",
+       "rcfilters-filtergroup-userExpLevel": "अनुभव स्तर (केवल पंजीकृत सदस्यों के लिए)",
+       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "अनुभव फ़िल्टर केवल पंजीकृत उपयोगकर्ता पाते हैं इसलिए यह फ़िल्टर \"अपंजीकृत\" फ़िल्टर के साथ संघर्ष करता है।",
        "rcfilters-filter-user-experience-level-newcomer-label": "अपरिचित",
        "rcfilters-filter-user-experience-level-newcomer-description": "4 दिनों की गतिविधि और 10 सम्पादन से कम।",
        "rcfilters-filter-user-experience-level-learner-label": "शिक्षार्थियों",
        "rcfilters-filter-unpatrolled-description": "परीक्षित चिन्हित न किए सम्पादन।",
        "rcfilters-filtergroup-significance": "महत्व",
        "rcfilters-filter-minor-label": "छोटा संपादन",
+       "rcfilters-filter-minor-description": "लेखक का संपादन छोटा संपादन के रूप में लेबल किया गया है।",
        "rcfilters-filter-major-label": "गैर-मामूली संपादन",
        "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": "प्रशासनिक कार्रवाई, खाता निर्माण, पृष्ठ विलोपन, अपलोड ....",
        "rcnotefrom": "नीचे <strong>$2</strong> के बाद से (<strong>$1</strong> तक) {{PLURAL:$5|हुआ बदलाव दर्शाया गया है|हुए बदलाव दर्शाए गये हैं}}।",
        "rclistfrom": "$3 $2 से नये बदलाव दिखाएँ",
        "rcshowhideminor": "छोटे बदलाव $1",
        "sp-contributions-newbies": "सिर्फ़ नये सदस्यों के योगदान दर्शायें",
        "sp-contributions-newbies-sub": "नये सदस्योंके लिये",
        "sp-contributions-newbies-title": "नए सदस्यों द्वारा योगदान",
-       "sp-contributions-blocklog": "बà¥\8dलà¥\89à¤\95 सूची",
+       "sp-contributions-blocklog": "à¤\85वरà¥\8bध सूची",
        "sp-contributions-suppresslog": "छुपाए गए उपयोगकर्ता के योगदान",
        "sp-contributions-deleted": "हटाए गए सदस्य योगदान",
        "sp-contributions-uploads": "अपलोड",
        "createaccountblock": "खाते निर्माण को रोक दिया हैं",
        "emailblock": "ईमेल अवरोधित",
        "blocklist-nousertalk": "अपना वार्ता पृष्ठ भी संपादित नहीं कर सकेंगे",
-       "ipblocklist-empty": "बà¥\8dलà¥\89à¤\95 सूची खाली हैं।",
+       "ipblocklist-empty": "à¤\85वरà¥\8bध सूची खाली हैं।",
        "ipblocklist-no-results": "पूछे गये आईपी एड्रेस / सदस्यनाम पर ब्लॉक नहीं हैं।",
        "blocklink": "अवरोधित करें",
        "unblocklink": "अवरोध हटाएँ",
        "contribslink": "योगदान",
        "emaillink": "ई-मेल भेजें",
        "autoblocker": "आपका आइ॰पी पता स्वतः अवरुद्ध है, चूँकि इसे हाल ही में \"[[User:$1|$1]]\" द्वारा प्रयोग किया गया है।\n$1 को अवरोधित करने का कारण है: \"$2\"",
-       "blocklogpage": "बà¥\8dलà¥\89à¤\95 सूची",
+       "blocklogpage": "à¤\85वरà¥\8bध सूची",
        "blocklog-showlog": "इस प्रयोक्ता को पहले भी अवरोधित किया जा चुका है। \nसन्दर्भ के लिए अवरोधन अभिलेख नीचे दिया गया है:",
        "blocklog-showsuppresslog": "यह प्रयोक्ता पहले भी अवरोधित किया जा चुका है।\nयह दबाया गया लॉग सन्दर्भ के लिए उपलब्ध कया गया है:",
        "blocklogentry": "\"[[$1]]\" को $2 $3 तक बदलाव करने से रोक दिया गया है।",
        "tooltip-t-recentchangeslinked": "यहाँ जुड़े हुए सभी पन्नों में हुए हाल के बदलाव",
        "tooltip-feed-rss": "इस पृष्ठ की आरएसएस फ़ीड",
        "tooltip-feed-atom": "इस पृष्ठ की अणु फ़ीड",
-       "tooltip-t-contributions": "{{GENDER:$1|à¤\87स à¤¸à¤¦à¤¸à¥\8dय}} à¤\95à¥\87 à¤¯à¥\8bà¤\97दाà¤\93ं की सूची",
+       "tooltip-t-contributions": "{{GENDER:$1|à¤\87स à¤¸à¤¦à¤¸à¥\8dय}} à¤\95à¥\87 à¤¯à¥\8bà¤\97दानà¥\8bं की सूची",
        "tooltip-t-emailuser": "{{GENDER:$1|इस सदस्य}} को इमेल भेजें",
        "tooltip-t-info": "इस पृष्ठ के बारे में अधिक जानकारी",
        "tooltip-t-upload": "फ़ाइल अपलोड करें",
        "revdelete-uname-unhid": "सदस्यनाम फिर सार्वजनिक किया गया",
        "revdelete-restricted": "प्रबंधकोंको प्रतिबंधित किया",
        "revdelete-unrestricted": "प्रबंधकोंके प्रबंधन हटायें",
-       "logentry-block-block": "$1 {{GENDER:$2|प्रतिबंधित}}{{GENDER:$4|$3}} जिसमें समय समाप्ति की अवधि है $5 $6",
+       "logentry-block-block": "$1 ने {{GENDER:$4|$3}} को $5 के लिए {{GENDER:$2|अवरोधित}} कर दिया। $6",
        "logentry-block-unblock": "$1 {{GENDER:$2|प्रतिबंधित}} {{GENDER:$4|$3}}",
-       "logentry-block-reblock": "$1 {{GENDER:$2|changed}} प्रतिबंध सेटिंग {{GENDER:$4|$3}} के लिए जिसमें  समय समाप्ति की अवधि है $5 $6",
-       "logentry-suppress-block": "$1 {{GENDER:$2|प्रतिबंधित}} {{GENDER:$4|$3}} जिसमें समय समाप्ति की अवधि है $5 $6",
-       "logentry-suppress-reblock": "$1 {{GENDER:$2|बदल दिया गया}} प्रतिबंध सेटिंग {{GENDER:$4|$3}} के लिए जिसमें समय समाप्ति की अवधि है $5 $6",
+       "logentry-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 को {{GENDER:$2|आयात}} किया ($4 {{PLURAL:$4|अवतरण|अवतरण}})",
        "logentry-import-interwiki": "$1 {{GENDER:$2|आयात किया गया}} $3 किसी और विकि से",
        "feedback-thanks": "धन्यवाद! आपकी प्रतिक्रिया पृष्ठ में नियुक्त किया गया है \"[ $2  $1 ]\"।",
        "feedback-thanks-title": "धन्यवाद!",
        "feedback-useragent": "सदस्य कर्ता:",
-       "searchsuggest-search": "खोजें {{SITENAME}}",
+       "searchsuggest-search": "{{SITENAME}} में खोजें",
        "searchsuggest-containing": "...से युक्त",
        "api-error-badtoken": "आंतरिक त्रुटि: बुरी टोकन।",
        "api-error-emptypage": "नए खाली पृष्ठ बनाने की अनुमति नहीं है।",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "कुकी-आधारित सत्र",
        "sessionprovider-nocookies": "हो सकता है कि कुकी निष्क्रिय है। कृपया देखें कि और सक्रिय करें।",
        "randomrootpage": "अविशिष्ट मूल पृष्ठ",
-       "log-action-filter-block": "पà¥\8dरतिबà¤\82ध के प्रकार:",
+       "log-action-filter-block": "à¤\85वरà¥\8bध के प्रकार:",
        "log-action-filter-delete": "हटाने के प्रकार:",
        "log-action-filter-import": "आयात के प्रकार:",
        "log-action-filter-move": "स्थानांतरण के प्रकार:",
        "log-action-filter-all": "सभी",
        "log-action-filter-block-block": "अवरोध",
        "log-action-filter-block-reblock": "अवरोध परिवर्तन",
-       "log-action-filter-block-unblock": "अवरोधरहित",
+       "log-action-filter-block-unblock": "अवरोध हटाना",
        "log-action-filter-delete-delete": "पृष्ठ हटाना",
        "log-action-filter-delete-restore": "पृष्ठ न हटाना",
        "log-action-filter-delete-event": "पृष्ठ हटाने का लॉग",
index e179442..c90633e 100644 (file)
        "savearticle": "Sačuvaj stranicu",
        "savechanges": "Sačuvaj stranicu",
        "publishpage": "Objavi stranicu",
-       "publishchanges": "Objavi izmjene",
+       "publishchanges": "Objavi unos",
        "preview": "Pregled kako će stranica izgledati",
        "showpreview": "Prikaži kako će izgledati",
        "showdiff": "Prikaži promjene",
        "htmlform-time-invalid": "Unesena vrijednost nije prepoznati format vremena. Pokušajte koristiti format HH:MM:SS.",
        "htmlform-datetime-toohigh": "Uneseni datum i vrijeme su veći od $1",
        "logentry-delete-delete": "$1 je {{GENDER:$2|obrisao|obrisala}} stranicu $3",
-       "logentry-delete-delete_redir": "$1 je premještanjem {{GENDER:$2|pobrisao|pobrisala}} preusmjeravanje $3",
+       "logentry-delete-delete_redir": "$1 premještanjem je {{GENDER:$2|pobrisao|pobrisala}} preusmjeravanje $3",
        "logentry-delete-restore": "$1 je {{GENDER:$2|vratio|vratila}} stranicu $3",
        "logentry-delete-event": "$1 je {{GENDER:$2|promijenio|promijenila}} vidljivost {{PLURAL:$5|zapisa u evidenciji|$5 zapisa u evidenciji}} na $3: $4",
        "logentry-delete-revision": "$1 je {{GENDER:$2|promijenio|promijenila}} vidljivost {{PLURAL:$5|uređivanja|$5 uređivanja}} na stranici $3: $4",
index f8dfc24..db6aa34 100644 (file)
        "login": "Aperir session",
        "login-security": "Verifica tu identitate",
        "nav-login-createaccount": "Aperir session / crear conto",
-       "userlogin": "Aperir session / crear conto",
-       "userloginnocreate": "Aperir session",
        "logout": "Clauder session",
        "userlogout": "Clauder session",
        "notloggedin": "Tu non ha aperite un session",
        "userlogin-noaccount": "Non ha un conto?",
        "userlogin-joinproject": "Crear un conto in {{SITENAME}}",
-       "nologin": "Tu non ha un conto? $1.",
-       "nologinlink": "Crear un conto",
        "createaccount": "Crear conto",
-       "gotaccount": "Tu jam ha un conto? '''$1'''.",
-       "gotaccountlink": "Aperir session",
-       "userlogin-resetlink": "Datos de authentication oblidate?",
        "userlogin-resetpassword-link": "Contrasigno oblidate?",
        "userlogin-helplink2": "Adjuta al accesso",
        "userlogin-loggedin": "Tu ha jam aperite session como {{GENDER:$1|$1}}.\nUsa le formulario sequente pro aperir session como altere usator.",
        "createaccountmail": "Usar un contrasigno aleatori temporari e inviar lo al adresse de e-mail specificate",
        "createaccountmail-help": "Pro crear un conto pro un altere persona sin cognoscer le contrasigno.",
        "createacct-realname": "Nomine real (optional)",
-       "createaccountreason": "Motivo:",
        "createacct-reason": "Motivo",
        "createacct-reason-ph": "Proque crea tu un altere conto?",
        "createacct-reason-help": "Message pro le registro de creation de contos",
        "post-expand-template-argument-warning": "'''Attention:''' Iste pagina contine al minus un parametro de patrono que ha un grandor de expansion excessive.\nIste parametros ha essite omittite.",
        "post-expand-template-argument-category": "Paginas que omitte alcun parametros de patrono",
        "parser-template-loop-warning": "Recursion infinite detegite in patrono: [[$1]]",
+       "template-loop-category": "Paginas con buclas de patrono",
+       "template-loop-category-desc": "Le pagina contine un bucla in un patrono, i.e. un patrono que se appella recursivemente.",
        "parser-template-recursion-depth-warning": "Limite de recursion del patrono excedite ($1)",
        "language-converter-depth-warning": "Limite de profunditate del conversor de lingua excedite ($1)",
        "node-count-exceeded-category": "Paginas in que le numero de nodos excede le limite",
        "page_first": "prime",
        "page_last": "ultime",
        "histlegend": "Pro comparar duo versiones: marca lor circulos correspondente, e preme <code>Enter</code> o clicca le button in basso.<br />\nLegenda: '''({{int:cur}})''' = comparar con le version actual,\n'''({{int:last}})''' = comparar con le version precedente, '''{{int:minoreditletter}}''' = modification minor.",
-       "history-fieldset-title": "Examinar historia",
-       "history-show-deleted": "Delite solmente",
+       "history-fieldset-title": "Cercar versiones",
+       "history-show-deleted": "Solmente versiones delite",
        "histfirst": "le plus ancian",
        "histlast": "le plus nove",
        "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
        "prefs-help-prefershttps": "Iste preferentia habera effecto a partir de tu proxime session.",
        "prefswarning-warning": "To ha facite modificationes in tu preferentias que non ha ancora essite confirmate. Si tu quita iste pagina sin cliccar sur \"$1\", tu preferentias non essera cambiate.",
        "prefs-tabs-navigation-hint": "Consilio: Tu pote usar le claves de sagitta sinistre e dextre pro navigar inter le schedas in le lista.",
-       "userrights": "Gestion de derectos de usator",
+       "userrights": "Derectos de usator",
        "userrights-lookup-user": "Selige un usator",
        "userrights-user-editname": "Entra un nomine de usator:",
        "editusergroup": "Cargar gruppos de usator",
        "userrights-expiry-options": "1 die:1 day,1 septimana:1 week,1 mense:1 month,3 menses:3 months,6 menses:6 months,1 anno:1 year",
        "userrights-invalid-expiry": "Le hora de expiration pro le gruppo \"$1\" es invalide.",
        "userrights-expiry-in-past": "Le hora de expiration pro le gruppo \"$1\" es in le passato.",
+       "userrights-cannot-shorten-expiry": "Tu non pote accurtar le tempore de expiration del gruppo \"$1\". Solmente usatores con le permission de adder e remover iste gruppo pote accurtar tempores de expiration.",
        "userrights-conflict": "Conflicto inter cambiamentos de derectos de usator! Per favor revide e confirma tu cambiamentos.",
        "group": "Gruppo:",
        "group-user": "Usatores",
        "rcfilters-invalid-filter": "Filtro non valide",
        "rcfilters-empty-filter": "Nulle filtro active. Tote le contributiones es monstrate.",
        "rcfilters-filterlist-title": "Filtros",
+       "rcfilters-filterlist-whatsthis": "Que es isto?",
+       "rcfilters-filterlist-feedbacklink": "Da nos tu opinion sur le nove filtros (in beta)",
+       "rcfilters-highlightbutton-title": "Accentuar resultatos",
+       "rcfilters-highlightmenu-title": "Selige un color",
+       "rcfilters-highlightmenu-help": "Selige un color pro accentuar iste proprietate",
        "rcfilters-filterlist-noresults": "Nulle filtro trovate",
+       "rcfilters-noresults-conflict": "Nulle resultato trovate perque le criterios de recerca es in conflicto",
+       "rcfilters-state-message-subset": "Iste filtro non ha effecto perque su resultatos es includite in illos del sequente {{PLURAL:$2|filtro|filtros}} plus comprehensive (essaya accentuar pro poter distinguer lo): $1",
+       "rcfilters-state-message-fullcoverage": "Seliger tote le filtros in un gruppo equivale seliger nulle, dunque iste filtro non ha effecto. Le gruppo include: $1",
        "rcfilters-filtergroup-registration": "Registration del usator",
        "rcfilters-filter-registered-label": "Registrate",
        "rcfilters-filter-registered-description": "Redactores que ha aperite session.",
        "rcfilters-filter-unregistered-label": "Non registrate",
        "rcfilters-filter-unregistered-description": "Redactores que non ha aperite session.",
+       "rcfilters-filter-unregistered-conflicts-user-experience-level": "Iste filtro es in conflicto con le sequente {{PLURAL:$2|filtro|filtros}} de Experientia, le {{PLURAL:$2|qual|quales}} trova solmente usatores registrate: $1",
        "rcfilters-filtergroup-authorship": "Autor del modificationes",
        "rcfilters-filter-editsbyself-label": "Tu proprie modificationes",
        "rcfilters-filter-editsbyself-description": "Modificationes per te.",
        "rcfilters-filter-editsbyother-label": "Modificationes per alteres",
        "rcfilters-filter-editsbyother-description": "Modificationes create per altere usatores (non te).",
        "rcfilters-filtergroup-userExpLevel": "Nivello de experientia (solmente pro usatores registrate)",
-       "rcfilters-filter-userExpLevel-newcomer-label": "Novicios",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Minus de 10 modificationes e 4 dies de activitate.",
-       "rcfilters-filter-userExpLevel-learner-label": "Apprentisses",
-       "rcfilters-filter-userExpLevel-learner-description": "Plus dies de activitate e modificationes que \"Novicios\" ma minus que \"Usatores con experientia\".",
-       "rcfilters-filter-userExpLevel-experienced-label": "Usatores con experientia",
-       "rcfilters-filter-userExpLevel-experienced-description": "Plus de 30 dies de activitate e 500 modificationes.",
+       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "Filtros de Experientia trova solmente usatores registrate. Iste filtro es dunque in conflicto con le filtro \"Non registrate\".",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Novicios",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Minus de 10 modificationes e 4 dies de activitate.",
+       "rcfilters-filter-user-experience-level-learner-label": "Apprentisses",
+       "rcfilters-filter-user-experience-level-learner-description": "Plus dies de activitate e modificationes que \"Novicios\" ma minus que \"Usatores con experientia\".",
+       "rcfilters-filter-user-experience-level-experienced-label": "Usatores con experientia",
+       "rcfilters-filter-user-experience-level-experienced-description": "Plus de 30 dies de activitate e 500 modificationes.",
        "rcfilters-filtergroup-automated": "Contributiones automatisate",
        "rcfilters-filter-bots-label": "Robot",
        "rcfilters-filter-bots-description": "Modificationes facite per instrumentos automatisate.",
        "logentry-tag-update-revision": "$1 {{GENDER:$2|actualisava}} etiquettas sur le version $4 del pagina $3 ({{PLURAL:$7|addeva}} $6; {{PLURAL:$9|removeva}} $8)",
        "logentry-tag-update-logentry": "$1 {{GENDER:$2|actualisava}} etiquettas sur le entrata de registro $5 del pagina $3 ({{PLURAL:$7|addeva}} $6; {{PLURAL:$9|removeva}} $8)",
        "rightsnone": "(nulle)",
-       "revdelete-summary": "summario del modification",
        "rightslogentry-temporary-group": "$1 (temporari, usque a $2)",
        "feedback-adding": "Le responsa es addite al pagina...",
        "feedback-back": "Retornar",
index fcec7be..d2487dd 100644 (file)
@@ -24,7 +24,8 @@
                        "Matma Rex",
                        "Xð",
                        "Sveinki",
-                       "Nemo bis"
+                       "Nemo bis",
+                       "Asmen"
                ]
        },
        "tog-underline": "Undirstrika tengla:",
        "externaldberror": "Uppfærsla mistókst. Annaðhvort varð villa í gagnasafninu eða að þér sé óheimilt að uppfæra aðra aðganga.",
        "login": "Innskrá",
        "nav-login-createaccount": "Innskrá / Búa til aðgang",
-       "userlogin": "Innskrá / Búa til aðgang",
-       "userloginnocreate": "Innskrá",
        "logout": "Útskráning",
        "userlogout": "Útskrá",
        "notloggedin": "Ekki innskráð(ur)",
        "userlogin-noaccount": "Áttu ekki aðgang?",
        "userlogin-joinproject": "Sameina {{SITENAME}}",
-       "nologin": "Ekki með aðgang? $1.",
-       "nologinlink": "Stofnaðu aðgang",
        "createaccount": "Nýskrá",
-       "gotaccount": "Nú þegar með notandanafn? '''$1'''.",
-       "gotaccountlink": "Skráðu þig inn",
-       "userlogin-resetlink": "Gleymdir þú notendaupplýsingunum þínum?",
        "userlogin-resetpassword-link": "Gleymdiru lykilorðinu þínu?",
        "userlogin-helplink2": "Hjálp við innskráningu",
        "userlogin-loggedin": "Þú ert búin(n) að skrá þig inn sem {{GENDER:$1|$1}}.\nNotaðu eyðablaðið fyrir neðan til að skrá þig inn sem annar notandi.",
        "createacct-another-email-ph": "Skrifaðu netfang",
        "createaccountmail": "Nota handahófsvalið bráðabirgðalykilorð og senda það á netfangið sem er tilgreint hér fyrir neðan",
        "createacct-realname": "Raunverulegt nafn (valfrjálst)",
-       "createaccountreason": "Ástæða:",
        "createacct-reason": "Ástæða",
        "createacct-reason-ph": "Afhverju ertu að búa til annan aðgang",
        "createacct-submit": "Búa til aðganginn",
        "hebrew-calendar-m6": "Adar",
        "hebrew-calendar-m6a": "Adar I",
        "hebrew-calendar-m6b": "Adar II",
-       "hebrew-calendar-m7": "Nisan",
+       "hebrew-calendar-m7": "Nisane",
        "hebrew-calendar-m8": "Iyar",
        "hebrew-calendar-m9": "Sivan",
        "hebrew-calendar-m10": "Tamuz",
        "hebrew-calendar-m6-gen": "Adar",
        "hebrew-calendar-m6a-gen": "Adar I",
        "hebrew-calendar-m6b-gen": "Adar II",
-       "hebrew-calendar-m7-gen": "Nisan",
+       "hebrew-calendar-m7-gen": "Nisane",
        "hebrew-calendar-m8-gen": "Iyar",
        "hebrew-calendar-m9-gen": "Sivan",
        "hebrew-calendar-m10-gen": "Tamuz",
        "log-name-managetags": "Breytingaskrá yfir sýsl með merki",
        "logentry-managetags-create": "$1 {{GENDER:$2|bjó til}} merkið \"$4\"",
        "rightsnone": "(engum)",
-       "revdelete-summary": "breytingarágrip",
        "feedback-adding": "Bæti umsögn á síðuna...",
        "feedback-back": "Til baka",
        "feedback-bugcheck": "Frábært! Athugaðu hvort þessi villa hafi verið [$1 tilkynnt áður].",
index 1fcdedb..5600743 100644 (file)
        "post-expand-template-argument-warning": "'''Attenzione:''' questa pagina contiene uno o più argomenti di template troppo grandi per essere espansi. Tali argomenti verranno omessi.",
        "post-expand-template-argument-category": "Pagine contenenti template con parametri omessi",
        "parser-template-loop-warning": "Rilevato loop del template: [[$1]]",
+       "template-loop-category": "Pagine con template che richiamano sé stessi",
+       "template-loop-category-desc": "La pagina contiene un template che richiama sé stesso, cioè un template in cui è incluso lo stesso template.",
        "parser-template-recursion-depth-warning": "È stato raggiunto il limite di ricorsione nel template ($1)",
        "language-converter-depth-warning": "Limite di profondità del convertitore di lingua superato ($1)",
        "node-count-exceeded-category": "Pagine dove viene superato il numero di nodi",
        "userrights-expiry-existing": "Scadenza attuale: $2, $3",
        "userrights-expiry-othertime": "Altra durata:",
        "userrights-expiry-options": "1 giorno:1 day,1 settimana:1 week,1 mese:1 month,3 mesi:3 months,6 mesi:6 months,1 anno:1 year",
+       "userrights-invalid-expiry": "La scadenza per il gruppo \"$1\" non è valida",
+       "userrights-expiry-in-past": "La scadenza per il gruppo \"$1\" è già passata.",
+       "userrights-cannot-shorten-expiry": "Non puoi anticipare la scadenza del gruppo \"$1\". Soltanto gli utenti con il permesso di aggiungere e rimuovere questo gruppo possono anticiparne la scadenza.",
        "userrights-conflict": "Conflitto di modifica dei diritti utente! Controlla e conferma le tue modifiche.",
        "group": "Gruppo:",
        "group-user": "Utenti",
        "newimages-summary": "Questa pagina speciale mostra i file caricati più di recente.",
        "newimages-legend": "Filtra",
        "newimages-label": "Nome file (o una parte di esso):",
+       "newimages-user": "Indirizzo IP o nome utente",
        "newimages-showbots": "Mostra caricamenti di bot",
        "newimages-hidepatrolled": "Nascondi caricamenti verificati",
        "noimages": "Non c'è nulla da vedere.",
        "logentry-tag-update-revision": "$1 {{GENDER:$2|ha aggiornato}} le etichette della versione $4 della pagina $3 ({{PLURAL:$7|aggiunta|aggiunte}} $6; {{PLURAL:$9|rimossa|rimosse}} $8)",
        "logentry-tag-update-logentry": "$1 {{GENDER:$2|ha aggiornato}} le etichette della voce di registro $5 di pagina $3 ({{PLURAL:$7|aggiunta|aggiunte}} $6; {{PLURAL:$9|rimossa|rimosse}} $8)",
        "rightsnone": "(nessuno)",
+       "rightslogentry-temporary-group": "$1 (temporaneo, fino a $2)",
        "feedback-adding": "Inserimento del feedback nella pagina...",
        "feedback-back": "Indietro",
        "feedback-bugcheck": "Ottimo! Verifica che non sia già fra i [$1 bug conosciuti].",
        "restrictionsfield-label": "Intervalli IP consentiti:",
        "restrictionsfield-help": "Un indirizzo IP o intervallo CIDR per linea. Per consentire tutto, utilizza:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "versione $1",
-       "pageid": "ID della pagina $1"
+       "pageid": "ID della pagina $1",
+       "rawhtml-notallowed": "I tag &lt;html&gt; non possono essere utilizzati al di fuori delle normali pagine."
 }
index 153a890..43f1213 100644 (file)
        "content-not-allowed-here": "ページ [[$2]] では、「$1」コンテンツは許可されていません",
        "editwarning-warning": "このページを離れると、あなたが行なった変更がすべて失われてしまうかもしれません。\nログインしている場合、個人設定の「{{int:prefs-editing}}」タブでこの警告を表示しないようにすることができます。",
        "editpage-invalidcontentmodel-title": "対応していないコンテンツ形式",
+       "editpage-invalidcontentmodel-text": "コンテンツ・モデル「$1」は対応していません。",
        "editpage-notsupportedcontentformat-title": "対応していないコンテンツ形式",
        "editpage-notsupportedcontentformat-text": "コンテンツ モデル $2 は、コンテンツ形式 $1 に対応していません。",
        "content-model-wikitext": "ウィキテキスト",
        "content-model-css": "CSS",
        "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> 等の無効な自己終了HTMLタグを含むページ。これらのタグはまもなく HTML5 の仕様に準拠する動作へと変更されるため、ウィキテキスト内での使用は非推奨となりました。",
        "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>",
        "post-expand-template-argument-warning": "<strong>警告:</strong> このページは、展開後のサイズが大きすぎるテンプレート引数を少なくとも 1 つ含んでいます。\nこれらの引数を省略しました。",
        "post-expand-template-argument-category": "省略されたテンプレート引数を含むページ",
        "parser-template-loop-warning": "テンプレートのループを検出しました: [[$1]]",
+       "template-loop-category": "テンプレートがループしているページ",
+       "template-loop-category-desc": "テンプレート自身が再帰的自己参照を行うなど、ループするテンプレートが含まれているページ。",
        "parser-template-recursion-depth-warning": "テンプレートの再帰の深さ ($1) が上限を超えました",
        "language-converter-depth-warning": "言語変換機能の深さ ($1) が制限を超えました",
        "node-count-exceeded-category": "ノード数が制限を超えたページ",
        "page_first": "先頭",
        "page_last": "末尾",
        "histlegend": "差分の選択: 比較したい版のラジオボタンを選択し、Enterキーを押すか、下部のボタンを押します。<br />\n凡例: <strong>({{int:cur}})</strong>=最新版との比較、<strong>({{int:last}})</strong>=直前の版との比較、<strong>{{int:minoreditletter}}</strong>=細部の編集",
-       "history-fieldset-title": "履歴の閲覧",
-       "history-show-deleted": "削除済みのみ",
+       "history-fieldset-title": "版の検索",
+       "history-show-deleted": "削除のみ",
        "histfirst": "最古",
        "histlast": "最新",
        "historysize": "({{PLURAL:$1|$1バイト}})",
        "username": "{{GENDER:$1|利用者名}}:",
        "prefs-memberingroups": "{{GENDER:$2|所属}}{{PLURAL:$1|グループ}}:",
        "prefs-memberingroups-type": "$1",
+       "group-membership-link-with-expiry": "$1 ($2 まで)",
        "prefs-registration": "登録日時:",
        "prefs-registration-date-time": "$1",
        "yourrealname": "本名:",
        "userrights-groupsmember": "所属グループ:",
        "userrights-groupsmember-auto": "自動的に付与される権限:",
        "userrights-groupsmember-type": "$1",
-       "userrights-groups-help": "この利用者が属するグループを変更できます。\n* チェックが入っているボックスは、この利用者がそのグループに属していることを意味します。\n* チェックが入っていないボックスは、この利用者がそのグループに属していないことを意味します。\n* 「*」はグループに一旦追加した場合に除去 (あるいはその逆) ができないことを示しています。",
+       "userrights-groups-help": "この利用者が属するグループを変更できます。\n* チェックが入っているボックスは、この利用者がそのグループに属していることを意味します。\n* チェックが入っていないボックスは、この利用者がそのグループに属していないことを意味します。\n*「*」はグループに一旦追加した場合に除去 (あるいはその逆) ができないことを示しています。\n*「#」は有効期限の延長のみを行うことができますが、現在の期限よりも短縮することはできません。",
        "userrights-reason": "理由:",
        "userrights-no-interwiki": "他ウィキ上における利用者権限の編集権限は、ありません。",
        "userrights-nodatabase": "データベース$1は存在しないか、ローカル上にありません。",
        "userrights-unchangeable-col": "変更できないグループ",
        "userrights-irreversible-marker": "$1*",
        "userrights-expiry-current": "期限 $1",
-       "userrights-expiry-none": "有効期限切れではありません",
+       "userrights-expiry-none": "無期限",
        "userrights-expiry": "有効期限:",
+       "userrights-expiry-existing": "現在の有効期限: $2 $3",
        "userrights-expiry-othertime": "その他の期間:",
+       "userrights-expiry-options": "1日:1 day,1週間:1 week,1か月:1 month,3か月:3 months,6か月:6 months,1 年:1 year",
+       "userrights-invalid-expiry": "「$1」グループに指定された有効期限は無効です。",
+       "userrights-expiry-in-past": "「$1」グループに指定された有効期限は過去の時刻です。",
+       "userrights-cannot-shorten-expiry": "「$1」グループの有効期限を短縮できません。このグループを与奪できる権限を持つ利用者だけが有効期限を短縮できます。",
        "userrights-conflict": "利用者権限の変更が競合しています! 変更内容を確認してください。",
        "group": "グループ:",
        "group-user": "登録利用者",
        "rcfilters-clear-all-filters": "すべてのフィルターをクリア",
        "rcfilters-invalid-filter": "無効なフィルター",
        "rcfilters-filterlist-title": "フィルター",
+       "rcfilters-highlightmenu-title": "色を選ぶ",
        "rcfilters-filterlist-noresults": "フィルターが見つかりませんでした",
        "rcfilters-filtergroup-registration": "利用者登録",
        "rcfilters-filter-registered-label": "登録済み",
        "rcfilters-filter-unregistered-label": "未登録",
        "rcfilters-filter-bots-label": "ボット",
        "rcfilters-filter-humans-label": "人間(ボットではない)",
+       "rcfilters-filter-patrolled-label": "巡回済み",
+       "rcfilters-filter-patrolled-description": "巡回済みとマークされた編集。",
+       "rcfilters-filter-unpatrolled-label": "未巡回",
+       "rcfilters-filter-unpatrolled-description": "まだ巡回済みとマークされていない編集。",
+       "rcfilters-filtergroup-significance": "重要度",
+       "rcfilters-filter-minor-label": "細部の編集",
+       "rcfilters-filter-minor-description": "編集者が細部の編集とマークしたもの。",
+       "rcfilters-filter-major-label": "細部でない編集",
+       "rcfilters-filter-major-description": "細部とマークされていない編集。",
+       "rcfilters-filtergroup-changetype": "変更の種類",
+       "rcfilters-filter-pageedits-label": "ページの編集",
+       "rcfilters-filter-newpages-label": "ページの作成",
+       "rcfilters-filter-newpages-description": "ページを新規作成する編集。",
+       "rcfilters-filter-categorization-label": "カテゴリ変更",
        "rcnotefrom": "以下は<strong>$3 $4</strong>以降の{{PLURAL:$5|更新です}} (最大 <strong>$1</strong> 件)。",
        "rclistfrom": "$3の$2以降の更新を表示する",
        "rcshowhideminor": "細部の編集を$1",
        "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}}による直前の版へ変更されました。",
        "rollback-success-notify": "$1による編集を差し戻しました。\n$2による直前の版へ変更されました。[$3 変更を表示]",
        "sessionfailure-title": "セッションの失敗",
        "sessionfailure": "ログインのセッションに問題が発生しました。\nセッション乗っ取りを防ぐため、操作を取り消しました。\n前のページへ戻って再度読み込んだ後に、もう一度試してください。",
        "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": "ページのコンテンツ・モデルに関連する出来事",
        "protect-cantedit": "このページの編集権限がないため、保護レベルを変更できません。",
        "protect-othertime": "その他の期間:",
        "protect-othertime-op": "その他の期間",
-       "protect-existing-expiry": "現在の保護期限: $2 $3",
-       "protect-existing-expiry-infinity": "既存の有効期限: 無期限",
+       "protect-existing-expiry": "現在の有効期限: $2 $3",
+       "protect-existing-expiry-infinity": "現在の有効期限: 無期限",
        "protect-otherreason": "他の、または追加の理由:",
        "protect-otherreason-op": "その他の理由",
        "protect-dropdown": "*よくある保護理由\n** 度重なる荒らし\n** 度重なるスパム投稿\n** 非生産的な編集合戦\n** 高負荷ページ",
        "sorbs": "DNSBL",
        "sorbsreason": "ご使用中のIPアドレスが、{{SITENAME}}の使用しているDNSBLに公開プロキシとして記載されています。",
        "sorbs_create_account_reason": "ご使用中のIPアドレスが、{{SITENAME}}の使用しているDNSBLに公開プロキシとして記載されています。\nアカウント作成はできません",
+       "softblockrangesreason": "現在の IP アドレス ($1) からの匿名投稿は許可されていません。ログインしてください。",
        "xffblockreason": "X-Forwarded-For ヘッダーに含まれている IP アドレスがブロックされています。これはあなたのものか、あなたが利用しているプロキシサーバーのものです。元のブロックの理由は: $1",
        "cant-see-hidden-user": "ブロックしようとしている利用者は、既にブロックされ隠されています。\nあなたには hideuser 権限がないため、この利用者のブロックの閲覧/編集はできません。",
        "ipbblocked": "あなた自身がブロックされているため、他の利用者のブロックやブロック解除はできません。",
        "cant-move-to-user-page": "利用者下位ページ以外の利用者ページに、ページを移動させる権限がありません。",
        "cant-move-category-page": "カテゴリのページを移動させる権限がありません。",
        "cant-move-to-category-page": "ページをカテゴリのページに移動させる権限がありません。",
+       "cant-move-subpages": "下位のページを移動する権限がありません。",
+       "namespace-nosubpages": "名前空間「$1」はサブページが許可されていません。",
        "newtitle": "新しいページ名:",
        "move-watch": "移動元と移動先ページをウォッチ",
        "movepagebtn": "ページを移動",
        "newimages-showbots": "ボットによるアップロードを表示",
        "newimages-hidepatrolled": "巡回済みのアップロードを隠す",
        "noimages": "表示できるものがありません。",
+       "gallery-slideshow-toggle": "トグルサムネイル",
        "ilsubmit": "検索",
        "bydate": "日付順",
        "sp-newimages-showfrom": "$1の$2以降の新しいファイルを表示",
        "tag-filter": "[[Special:Tags|タグ]]絞り込み:",
        "tag-filter-submit": "絞り込み",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|タグ}}]]: $2)",
+       "tag-mw-contentmodelchange": "コンテンツ・モデルの変更",
        "tags-title": "タグ",
        "tags-intro": "このページは、ソフトウェアが編集に対して付けるタグとその意味の一覧です。",
        "tags-tag": "タグ名",
        "logentry-tag-update-revision": "$1 がページ「$3」の版 $4 のタグを{{GENDER:$2|更新しました}} ($6 を{{PLURAL:$7|追加}}、$8 を{{PLURAL:$9|削除}})",
        "logentry-tag-update-logentry": "$1 がページ「$3」の記録項目 $5 のタグを{{GENDER:$2|更新しました}} ($6 を{{PLURAL:$7|追加}}、$8 を{{PLURAL:$9|削除}})",
        "rightsnone": "(なし)",
+       "rightslogentry-temporary-group": "$1 ($2までの臨時)",
        "feedback-adding": "ページへのフィードバックの追加...",
        "feedback-back": "戻る",
        "feedback-bugcheck": "Great! [$1 既出のバグ]に既に含まれていないかご確認ください。",
        "pagelang-select-lang": "言語を選択",
        "pagelang-reason": "理由",
        "pagelang-submit": "変更",
+       "pagelang-nonexistent-page": "ページ $1 は存在しません。",
        "right-pagelang": "ページの言語を変更",
        "action-pagelang": "ページの言語の変更",
        "log-name-pagelang": "言語変更の記録",
        "usercssispublic": "注意: CSS のサブページは第三者が閲覧可能なため、機微な情報を含めないでください。",
        "restrictionsfield-badip": "無効な IP アドレス、またはその範囲: $1",
        "restrictionsfield-label": "許可する IP の範囲:",
-       "restrictionsfield-help": "一行につき、単一の IP アドレス、もしくは CIDR による範囲。全帯域からの接続を許可する場合は<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "一行につき、単一の IP アドレス、もしくは CIDR による範囲。全帯域からの接続を許可する場合: <pre>0.0.0.0/0\n::/0</pre>"
 }
index 44f0535..e1472af 100644 (file)
        "createaccount": "Gawé akun",
        "userlogin-resetpassword-link": "Lali tembung wadining sampéyan?",
        "userlogin-helplink2": "Tulungi mlebu",
-       "userlogin-loggedin": "Sampeyan sampun mlebet log dadi {{GENDER:$1|$1}}.\nGunakna formulir ing ngisor iki kanggo mlebet log dadi panganggo liyane.",
+       "userlogin-loggedin": "Panjenengan wis mlebu log minangka {{GENDER:$1|$1}}.\nAnggonen formulir ngisor iki saperlu mlebu log minangka panganggo liya.",
        "userlogin-createanother": "Gawé akun liya",
        "createacct-emailrequired": "Alamat layang èlèktronik",
        "createacct-emailoptional": "Alamat layang èlèktronik (manasuka)",
        "createaccountmail": "Nganggoa sandi sauntara sembarang lan kirimna liwat layang e-mail ing ngisor iki",
        "createacct-realname": "Jeneng asli (manasuka)",
        "createacct-reason": "Alesan",
-       "createacct-reason-ph": "Kenapa sampeyan nggawe akun liyane",
+       "createacct-reason-ph": "Alesané panjenengan nggawé akun liya",
        "createacct-submit": "Gawé akun sampéyan",
        "createacct-another-submit": "Gawé akun",
        "createacct-continue-submit": "Banjuraké gawé akun",
        "noemailcreate": "Panjenengan kudu maringi alamat e-mail sing absah",
        "passwordsent": "Tembung sandi anyar wis dikirim menyang alamat layang èlèktronik tumrap \"$1\". \nMangga mlebu log manèh sawisé panjenengan nampa iku.",
        "blocked-mailpassword": "Alamat IP panjenengan diblokir saka panyuntingan, mulané panjenengan ora olèh nganggo fungsi pèngetan tembung sandhi kanggo ''mencegah penyalahgunaan''.",
-       "eauthentsent": "Sawijining layang élèktronik (e-mail) kanggo ndhedhes (konfirmasi) wis dikirim menyang alamat layang élèktronik sampeyan. \n\nSadhurunge layang élèktronik liyane dikirim menyang akun kuwi, sampeyan kudu melu parentah ing layang kuwi, kanggo mastikne yen alamat layang kuwi bener-bener dhuweke sampeyan.",
+       "eauthentsent": "Layang-èl konfirmasi wis dikirim nyang alamat layang-èl sing diisèkaké. Sadurungé ana layang-èl liyané sing dikirim nyang akun iku, panjenengan kudu nuruti arahan ana ing layang-èl iku saperlu ngonfirmasi yèn akun iku pancèn duwèké panjenengan.",
        "throttled-mailpassword": "Layang kanggo mbalèkaké tembung sandhi wis dikirim sasuwené ing {{PLURAL:$1|jam|$1 jam}}.\nKanggo nyegah ananing tumindhak culika, namung sak layang kanggo mbalèkaké tembung sandhi sing bakal dikirim sasuwéné ing {{PLURAL:$1|jam|$1 jam}}.",
        "mailerror": "Cacad nalika ngirim layang: $1",
        "acct_creation_throttle_hit": "Tamu ing wiki iki kanthi alamat IP sing padha karo panjenengan wis gawé {{PLURAL:$1|1 akun|$1 akun}} ing sadina pungkasan, nganti cacah maksimum sing diidinaké.\nAmarga saka kuwi., tamu kanthi alamat IP iki ora bisa gawé akun manèh kanggo sauntara iki.",
        "login-abort-generic": "Sampéyan ora bisa mlebu - Kawurungan",
        "loginlanguagelabel": "Basa: $1",
        "suspicious-userlogout": "Panjaluk panjenengan supaya metu ditolak amarga katoné panjlajah internt utawa proksi panyinggah.",
-       "createacct-another-realname-tip": "Jeneng asli ora kudu dilebokake.\n\nYen sampeyan milih nglebokake jeneng asli, jeneng kuwi bakal dinggo ngwenehi atribusi kanggo karya-karyane.",
+       "createacct-another-realname-tip": "Jeneng asli ora kudu diisi.\nYèn diisi, jeneng asliné panjenengan bakal kanggo atribusi awit karyané panjenengan.",
        "pt-login": "Mlebu log",
        "pt-login-button": "Mlebu",
        "pt-login-continue-button": "Banjuraké mlebu",
        "edit-conflict": "Cengkah besutan",
        "edit-no-change": "Suntingan panjenengan dilirwakaké amerga panjenengan ora nglakoni pangowahan apa-apa ing tèks.",
        "postedit-confirmation-created": "Kaca wis kagawé.",
-       "postedit-confirmation-saved": "Besutan sampeyan wis kasimpen.",
+       "postedit-confirmation-saved": "Besutané panjenengan wis kasimpen.",
        "edit-already-exists": "Ora bisa nggawé kaca anyar.\nAmerga wis ana.",
        "defaultmessagetext": "Tèks layang gawan",
        "content-failed-to-parse": "Gagal menjabarkan konten $2 untuk model $1: $3",
        "gender-female": "Dhèwèké mbesut kaca wiki",
        "prefs-help-gender": "Opsional: Dipigunakaké kanggo panyebutan jinis kelamin sing bener déning piranti alus.\nInformasi iki bakal kabuka kanggo publik.",
        "email": "Layangtronik",
-       "prefs-help-realname": "Jeneng asli manasuka.\nMenawa diisi, iku bakal kanggo ngatribusi sampéyan awit karyaning sampéyan.",
+       "prefs-help-realname": "Jeneng asli ora kudu diisi.\nYèn diisi, jeneng asliné panjenengan bakal kanggo atribusi awit karyané panjenengan.",
        "prefs-help-email": "Alamat layang èlèktronik sipaté mung pilihan, nanging dibutuhaké kanggo nyetèl ulang tembung sandhi yèn Sampéyan lali.",
        "prefs-help-email-others": "Sampéyan uga bisa milih kanggo ngidinaké wong liya ngubungi Sampéyan liwat layang èlèktronik sing ana ing kaca panganggo utawa kaca guneman.\nAlamat layang èlèktronik Sampéyan ora dituduhaké nalika wong liya ngubungi Sampéyan.",
        "prefs-help-email-required": "Alamat layang-e dibutuhaké.",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (uga deleng [[Special:NewPages|pratélaning kaca-kaca anyar]])",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Tuduhaké",
+       "rcfilters-activefilters": "Saringan murub",
+       "rcfilters-restore-default-filters": "Pulihaké saringan gawan",
+       "rcfilters-search-placeholder": "Saring owah-owahan anyar (lurua utawa wiwita ngetik)",
+       "rcfilters-invalid-filter": "Saringan ora sah",
+       "rcfilters-filterlist-title": "Saringan",
+       "rcfilters-filterlist-feedbacklink": "Wènèhi saran ngenani saringan (béta) singa anyar",
+       "rcfilters-filterlist-noresults": "Saringan ora katemu",
        "rcnotefrom": "Ing ngisor iki owah-owahan wiwit <strong>$2</strong> (kapacak nganti <strong>$1</strong> owah-owahan).",
        "rclistfrom": "Tuduhaké owah-owahan anyar kawit $2, $3",
        "rcshowhideminor": "$1 besutan cilik",
        "actioncomplete": "Kasil diayahi",
        "actionfailed": "Tindakan gagal",
        "deletedtext": "\"$1\" wis dibusak. \nDelenga $2 minangka cathetan ngenani sing pungkasan kabusak.",
-       "dellogpage": "Log busak",
+       "dellogpage": "log busak",
        "dellogpagetext": "Ing ngisor iki kapacak log pambusakan kaca sing anyar dhéwé.",
        "deletionlog": "log busak",
        "reverted": "Dibalèkaké ing revisi sadurungé",
        "movepage-page-moved": "Kaca $1 wis dipindhah menyang $2.",
        "movepage-page-unmoved": "Kaca $1 ora bisa dialihaké menyang $2.",
        "movepage-max-pages": "Paling akèh $1 {{PLURAL:$1|kaca|kaca}} wis dialihaké lan ora ana manèh sing bakal dialihaké sacara otomatis.",
-       "movelogpage": "Log alih",
+       "movelogpage": "log alih",
        "movelogpagetext": "Ing ngisor iki kapacak log pangalihan kaca.",
        "movesubpage": "{{PLURAL:$1|Anak-kaca|Anak-kaca}}",
        "movesubpagetext": "Kaca iki nduwèni $1 {{PLURAL:$1|anak-kaca|anak-kaca}} kaya kapacak ing ngisor.",
index 1b03b32..b05a9b6 100644 (file)
@@ -26,7 +26,7 @@
        "tog-watchdefault": "Pel u dosyê ke mı vurnê lista mına şêrkerdişi ke",
        "tog-watchmoves": "Pel u dosyê ke mı kırısnê lista mına şêrkerdişi ke",
        "tog-watchdeletion": "Pel u dosyê ke mı esterıtê, lista mına şêrkerdişi ke",
-       "tog-minordefault": "Vurnayisunê ho pêrune ‘vurnayiso qızkek’ nisan bıde",
+       "tog-minordefault": "Vırnayışanê xo pêrıne ‘vırnayışo qıckek’ nışan bıde",
        "tog-previewontop": "Verqayti pela nustene ser de bıasne",
        "tog-previewonfirst": "Vurnayiso verên de verqayti tım bıasne",
        "tog-enotifwatchlistpages": "Zû pele ya ki dosyawa ke lista mına şêrkerdişi de vurnê mı rê e-poste bırusne",
        "editsection": "bıvurne",
        "editold": "bıvurne",
        "viewsourceold": "çımey bıvêne",
-       "editlink": "bıvurne",
+       "editlink": "bıvırne",
        "viewsourcelink": "çıme bıvêne",
        "editsectionhint": "Qısımi bıvurne: $1",
        "toc": "Tedeestey",
        "externaldberror": "Cıfeteliyaisê naskerdene de ya xeta esta ya ki tebera vırastena hesabê sıma rê destur çino.",
        "login": "Cı kuye",
        "nav-login-createaccount": "Cı kuye / hesab vıraze",
-       "userlogin": "Cı kuye / hesab vıraze",
-       "userloginnocreate": "Cı kuye",
        "logout": "Veciye",
        "userlogout": "Veciye",
        "notloggedin": "Cı nêkota",
-       "nologin": "Hesabê sıma çino? '''$1'''.",
-       "nologinlink": "Jü hesab rake",
        "createaccount": "Hesab vıraze",
-       "gotaccount": "Hesabê sıma ke esto? '''$1'''.",
-       "gotaccountlink": "Cı kuye",
-       "userlogin-resetlink": "Melumatê cıkewtışi xo vira kerdê?",
        "createaccountmail": "e-poste sera",
-       "createaccountreason": "Sebeb:",
        "badretype": "Parola sıma nêvêrena.",
        "userexists": "No namê karberi guretiyo.\nKerem ke, namêna weçine.",
        "loginerror": "Xeta cıkotene",
        "compare-page1": "Pele 1",
        "compare-page2": "Pele 2",
        "rightsnone": "(qet jü)",
-       "revdelete-summary": "xulasa vurnaene",
        "feedback-cancel": "Bıtexelne"
 }
index 01f4ca5..7cfa046 100644 (file)
        "watchthis": "តាមដាន​ទំព័រនេះ",
        "savearticle": "រក្សាទំព័រទុក",
        "savechanges": "រក្សាទុកបន្លាស់ប្ដូរ",
+       "publishpage": "ផ្សព្វផ្សាយទំព័រ",
+       "publishchanges": "ផ្សព្វផ្សាយការផ្លាស់ប្តូរ",
        "preview": "មើលជាមុន",
        "showpreview": "បង្ហាញ​ការមើលជាមុន",
        "showdiff": "បង្ហាញ​បន្លាស់ប្ដូរ",
index 2442f52..b62a93d 100644 (file)
@@ -65,7 +65,8 @@
                        "Matma Rex",
                        "Tursetic",
                        "Jerrykim306",
-                       "Sukjong0406"
+                       "Sukjong0406",
+                       "Garam"
                ]
        },
        "tog-underline": "링크에 밑줄:",
        "yourrealname": "실명:",
        "yourlanguage": "언어:",
        "yourvariant": "언어 변종:",
-       "prefs-help-variant": "이 위키 내용을 볼 때 사용할 언어 변종이나 철자 체계를 선택하세요.",
+       "prefs-help-variant": "이 위키 내용을 표시하기 위해 사용할 언어 변종이나 철자 체계를 선택하세요.",
        "yournick": "새 서명:",
        "prefs-help-signature": "토론 문서에 글을 쓴 후에는 마지막에 서명을 해야 합니다.  “<nowiki>~~~~</nowiki>” 기호를 추가하면 서명과 글 작성 시각이 자동으로 입력됩니다.",
        "badsig": "서명이 잘못되었습니다.\nHTML 태그를 확인하세요.",
        "upload_directory_read_only": "파일 저장 디렉터리($1)에 쓰기 권한이 없습니다.",
        "uploaderror": "올리기 오류",
        "upload-recreate-warning": "<strong>경고: 해당 이름으로 된 파일이 삭제되었거나 이동되었습니다.</strong>\n\n편의를 위해 이 문서에 대한 삭제와 이동 기록을 다음과 같이 제공합니다:",
-       "uploadtext": "파일을 올리기 위해서는 아래의 양식을 채워주세요.\n[[Special:FileList|파일 목록]]에서 이전에 올라온 파일을 검색할 수 있습니다. [[Special:Log/upload|올리기 기록]]에는 파일이 올라온 기록이 남습니다. 삭제 기록은 [[Special:Log/delete|삭제 기록]]에서 볼 수 있습니다.\n\n문서에 파일을 넣으려면 아래 방법 중 하나를 사용하세요.\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' 파일의 온전한 모양을 사용하고자 할 때\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200픽셀|섬네일|왼쪽|설명]]</nowiki></code>''' 파일의 너비를 200픽셀로 하고 왼쪽 정렬하며 '설명' 이라는 주석을 파일 밑에 달 때\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' 파일을 직접 보여주지 않고 파일로 바로 링크할 때",
+       "uploadtext": "파일을 올리기 위해서는 아래의 양식을 채워주세요.\n[[Special:FileList|파일 목록]]에서 이전에 올라온 파일을 검색할 수 있습니다. [[Special:Log/upload|올리기 기록]]에는 파일이 올라온 기록이 남습니다. 삭제 기록은 [[Special:Log/delete|삭제 기록]]에서 볼 수 있습니다.\n\n문서에 파일을 넣으려면 아래 방법 중 하나를 사용하세요.\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> 파일의 온전한 모양을 사용하고자 할 때\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200픽셀|섬네일|왼쪽|설명]]</nowiki></code></strong> 파일의 너비를 200픽셀로 하고 왼쪽 정렬하며 '설명' 이라는 주석을 파일 밑에 달 때\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> 파일을 직접 표시하지 않고 파일로 바로 링크할 때",
        "upload-permitted": "허용된 파일 {{PLURAL:$2|형식}}: $1",
        "upload-preferred": "권장 파일 {{PLURAL:$2|형식}}: $1",
        "upload-prohibited": "금지된 파일 {{PLURAL:$2|형식}}: $1",
        "log": "기록 목록",
        "logeventslist-submit": "보기",
        "all-logs-page": "모든 공개 기록",
-       "alllogstext": "{{SITENAME}}ì\97\90ì\84\9cì\9d\98 ê¸°ë¡\9dì\9d´ ëª¨ë\91\90 ë\82\98ì\99\80 ì\9e\88ì\8aµë\8b\88ë\8b¤.\n기ë¡\9d ì¢\85ë¥\98, ì\82¬ì\9a©ì\9e\90 ì\9d´ë¦\84, ë¬¸ì\84\9c ì\9d´ë¦\84ì\9d\84 ì\84 í\83\9dí\95´서 볼 수 있습니다. (대소문자를 구별합니다.)",
+       "alllogstext": "{{SITENAME}}ì\9d\98 ì\82¬ì\9a©í\95  ì\88\98 ì\9e\88ë\8a\94 ê¸°ë¡\9dì\9d´ ëª¨ë\91\90 í\91\9cì\8b\9cë\90\98ì\96´ ì\9e\88ì\8aµë\8b\88ë\8b¤.\n기ë¡\9d ì¢\85ë¥\98, ì\82¬ì\9a©ì\9e\90 ì\9d´ë¦\84, ì\98\81í\96¥ì\9d\84 ë°\9bë\8a\94 ë¬¸ì\84\9cì\9d\84 ì\84 í\83\9dí\95´ì\84\9c ë²\94ì\9c\84를 ì¢\81í\98\80서 볼 수 있습니다. (대소문자를 구별합니다.)",
        "logempty": "일치하는 항목이 없습니다.",
        "log-title-wildcard": "다음 글로 시작하는 제목 검색",
        "showhideselectedlogentries": "선택한 기록 항목 보이기/숨기기",
        "newimages-summary": "이 특수 문서는 최근에 올라온 파일을 나열하고 있습니다.",
        "newimages-legend": "필터",
        "newimages-label": "파일 이름 (또는 그 일부분):",
+       "newimages-user": "IP 주소 또는 사용자 이름",
        "newimages-showbots": "봇이 올린 것 보기",
        "newimages-hidepatrolled": "점검한 업로드 숨기기",
        "noimages": "그림이 없습니다.",
        "metadata-help": "이 파일은 카메라나 스캐너가 파일을 만들거나 디지털화하는 데 사용하기위해 기록한 부가 정보를 포함하고 있습니다.\n프로그램에서 파일을 편집한 경우, 새로 저장한 파일에 일부 부가 정보가 빠질 수 있습니다.",
        "metadata-expand": "자세한 정보 보이기",
        "metadata-collapse": "자세한 정보 숨기기",
-       "metadata-fields": "파일 메타데이터 표가 접혀 있을 때, 이 메시지에 올라와 있는 다음 속성값만이 기본적으로 보이게 됩니다.\n나머지 값은 자동적으로 숨겨집니다.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "metadata-fields": "그림 메타데이터 표가 접혀 있을 때, 이 메시지에 나열되어 있는 다음 메타데이터 필드가 그림 문서 표시에 포함됩니다.\n나머지는 기본적으로 숨겨집니다.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-imagewidth": "너비",
        "exif-imagelength": "높이",
        "exif-bitspersample": "픽셀당 비트 수",
        "authprovider-confirmlink-request-label": "연결할 계정",
        "authprovider-confirmlink-success-line": "$1: 연결을 성공했습니다.",
        "authprovider-confirmlink-failed": "계정 연결을 완전히 성공하지 못했습니다: $1",
-       "authprovider-confirmlink-ok-help": "연결 실패 메시지를 보여준 뒤에도 계속합니다.",
+       "authprovider-confirmlink-ok-help": "연결 실패 메시지를 표시한 뒤에도 계속합니다.",
        "authprovider-resetpass-skip-label": "건너뛰기",
        "authprovider-resetpass-skip-help": "비밀번호 재설정을 건너뜁니다.",
        "authform-nosession-login": "인증은 성공했으나 사용자의 브라우저가 로그인 상태를 저장하지 못했습니다.\n\n$1",
index 6afca3d..6ea2658 100644 (file)
        "userlogin-remembermypassword": "Pijä miut kirjuttautunuona",
        "login": "Kirjauvu šiämeh",
        "nav-login-createaccount": "Kirjauvu šiämeh / rekisteriyvy",
-       "userlogin": "Kirjauvu šiämeh / rekisteriyvy",
-       "userloginnocreate": "Kirjauvu šiämeh",
        "logout": "Kirjauvu pois",
        "userlogout": "Kirjauvu pois",
        "userlogin-noaccount": "Eikö šiula vielä ole käyttäjätunnušta?",
        "userlogin-joinproject": "Liity {{SITENAME}}",
        "createaccount": "Luaji käyttäjätili",
-       "gotaccountlink": "Kirjauvu šiämeh",
        "userlogin-resetpassword-link": "Unohitko šalašanan?",
        "userlogin-helplink2": "Apu kirjuttautumiseh",
        "createacct-emailoptional": "Šähköpoštiošoiteh (ei tarviče välttämättä kirjuttua)",
        "createacct-email-ph": "Kirjuta oma šähköpoštiošoiteh",
-       "createaccountreason": "Šyy:",
        "createacct-reason": "Šyy",
        "createacct-submit": "Luaji oma käyttäjätunnuš",
        "createacct-benefit-heading": "{{SITENAME}} on šiun kaltasien ihmisien luatima.",
        "searchprofile-everything-tooltip": "Eči kaikilta šivuloilta (niise pakinoista)",
        "searchprofile-advanced-tooltip": "Eči miärätyistä nimitiloista",
        "search-result-size": "$1 ({{PLURAL:$2|1 šana|$2 šanua}})",
-       "search-redirect": "(šiirretty $1)",
+       "search-redirect": "(šiirretty šivulta $1)",
        "search-section": "(alaluku $1)",
        "search-suggest": "Tarkotitko: $1",
        "searchall": "kaikki",
        "logentry-move-move": "$1 {{GENDER:$2|šiirretty}} šivu $3 kohtah $4",
        "logentry-newusers-create": "Käyttäjätunnuš $1 {{GENDER:$2|oli luotu}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|päivitetty}} $3",
-       "searchsuggest-search": "Eči"
+       "searchsuggest-search": "Eči {{SITENAME}}"
 }
index ae8a516..9706c1a 100644 (file)
        "newimages-summary": "Dës Spezialsäit weist eng Lëscht mat de Fichieren déi als lescht eropgeluede goufen.",
        "newimages-legend": "Filter",
        "newimages-label": "Numm vum Fichier (oder en Deel dovun):",
+       "newimages-user": "IP-Adress oder Benotzernumm",
        "newimages-showbots": "Vu Botten eropgeluede Fichiere weisen",
        "newimages-hidepatrolled": "Nogekuckt Fichiere verstoppen",
        "noimages": "Keng Biller fonnt.",
index 5ca5204..d8b344d 100644 (file)
        "watchthis": "Stebėti šį puslapį",
        "savearticle": "Išsaugoti puslapį",
        "savechanges": "Išsaugoti pakeitimus",
-       "publishpage": "Skelbti puslapį",
-       "publishchanges": "Skelbti pakeitimus",
+       "publishpage": "Išsaugoti puslapį",
+       "publishchanges": "Išsaugoti pakeitimus",
        "preview": "Peržiūra",
        "showpreview": "Rodyti peržiūrą",
        "showdiff": "Rodyti skirtumus",
        "contentmodelediterror": "Jūs negalite redaguoti šios versijos, nes jos turinio modelis yra <code>$1</code>, kuris skiriasi nuo dabartinio puslapio turinio modelio, kuris yra <code>$2</code>.",
        "recreate-moveddeleted-warn": "'''Dėmesio: Jūs atkuriate puslapį, kuris anksčiau buvo ištrintas.'''\n\nTurėtumėte nuspręsti, ar reikėtų toliau redaguoti šį puslapį.\nJūsų patogumui čia pateikiamas šio puslapio šalinimų ir perkėlimų sąrašas:",
        "moveddeleted-notice": "Šis puslapis buvo ištrintas.\nŽemiau pateikiamas puslapio šalinimų ir pervadinimų sąrašas.",
-       "moveddeleted-notice-recent": "Atsiprašome, šis puslapis nesenai buvo ištrintas (per pastarąsias 24 valandas). Puslapio ištrynimo ir perkėlimo istorija yra pateikiama žemiau kaip nuoroda.",
+       "moveddeleted-notice-recent": "Atsiprašome, šis puslapis neseniai buvo ištrintas (per pastarąsias 24 valandas). Žemiau pateikiama detali puslapio ištrynimo ir perkėlimo istorija.",
        "log-fulllog": "Rodyti visą istoriją",
        "edit-hook-aborted": "Keitimas nutrauktas užlūžimo.\nTam nėra paaiškinimo.",
        "edit-gone-missing": "Negalima atnaujinti puslapio.\nGreičiausiai jis yra ištrintas.",
index f933f87..35762e5 100644 (file)
        "duration-centuries": "taonjato $1{{PLURAL:$1|}}",
        "limitreport-walltime": "Tena fotoam-pampiasana",
        "limitreport-walltime-value": "$1 segondra{{PLURAL:$1|}}",
+       "expandtemplates": "Hanitatra ny endrika",
+       "expand_templates_input": "Wikisoratra loharano:",
        "expand_templates_output": "Valiny",
        "expand_templates_xml_output": "Famoahana XML",
        "expand_templates_html_output": "Famoahana HTML",
        "expand_templates_ok": "OK",
        "expand_templates_remove_comments": "Hanala resaka",
+       "expand_templates_generate_rawhtml": "Haneho HTML maina",
        "expand_templates_preview": "Topi-maso",
        "pagelang-name": "Pejy",
        "pagelang-language": "Fiteny",
        "mediastatistics-header-text": "Soratra",
        "mediastatistics-header-executable": "Azo alefa",
        "mediastatistics-header-total": "Rakitra rehetra",
+       "json-error-syntax": "Hadisoan-drariteny",
        "special-characters-group-latin": "latina",
        "special-characters-group-latinextended": "latina nitarina",
        "special-characters-group-ipa": "AAI",
        "special-characters-title-endash": "tsipika anglisy",
        "special-characters-title-emdash": "tsipika em",
        "special-characters-title-minus": "marika mainosy",
+       "mw-widgets-mediasearch-noresults": "Tsy nahitana valiny",
+       "mw-widgets-titleinput-description-new-page": "Tsy mbola misy ilay pejy",
+       "mw-widgets-usersmultiselect-placeholder": "Hanampy be kokoa",
        "sessionmanager-tie": "Tsy afaka mampikambana karazan-kataka fampamantarana maromaro: $1.",
+       "log-action-filter-all": "Manontolo",
+       "log-action-filter-block-block": "Bolongana",
+       "log-action-filter-protect-protect": "Fiarovana",
+       "log-action-filter-protect-unprotect": "Fanalana fiarovana",
        "authmanager-authn-not-in-progress": "Tsy andalam-panaovana ny fampamantarana, na very ny angon'ny sesiôna. Avereno hatramin'ny voalohany azafady.",
        "authmanager-authplugin-setpass-failed-title": "Tsy nahomby ny fanovana tenimiafina",
        "authmanager-authplugin-setpass-failed-message": "Nandà ny fanovana tenimiafina ny plugin fampamantarana.",
        "authmanager-username-help": "Anaram-pikambana ho an'ny fampamantarana.S",
        "authmanager-password-help": "Tenimiafina ho an'ny fampamantarana.",
        "authmanager-retype-help": "tenimiafina indray hanamarinana.",
+       "authmanager-email-label": "Mailaka",
+       "authmanager-email-help": "Adiresy mailaka:",
+       "authmanager-realname-label": "Tena anarana:",
        "authmanager-provider-password": "Fampamamtarana mifototra amin'ny tenimiafina",
        "authmanager-provider-password-domain": "Fampamantarana mifototra amin'ny tenimiafina ary vala",
        "authmanager-provider-temporarypassword": "Tenimiafina vonjimaika",
+       "authprovider-resetpass-skip-label": "Dinganina",
        "authprovider-resetpass-skip-help": "Handingana ny famerenam-tenimiafina.",
-       "authform-nosession-login": "nahomby ny fidirana, fa tsy mahatadidy anao tafiditra ny mpitety tranonkalanao."
+       "authform-nosession-login": "nahomby ny fidirana, fa tsy mahatadidy anao tafiditra ny mpitety tranonkalanao.",
+       "specialpage-securitylevel-not-allowed-title": "Voarara",
+       "changecredentials": "Hanova torohay fampahafantarana",
+       "changecredentials-submit": "Ovaina ny torohay fampahafantarana",
+       "changecredentials-invalidsubpage": "Tsy karazan-torohay fampahafantarana azo ekena $1",
+       "changecredentials-success": "Niova ny torohay fampahafantarana anao.",
+       "removecredentials": "Hanala torohay fampahafantarana",
+       "removecredentials-submit": "Esorina ny torohay fampahafantarana",
+       "credentialsform-provider": "Karazan-torohay fampahafantarana:",
+       "credentialsform-account": "Anaran-kaonty:",
+       "restrictionsfield-badip": "Adiresy na valan'IP tsy azo raisina: $1",
+       "restrictionsfield-label": "Valan' IP ekena:",
+       "revid": "versiona $1",
+       "pageid": "ID pejy $1"
 }
index 9371f3f..854d077 100644 (file)
        "post-expand-template-argument-warning": "'''Предупредување:''' Оваа страница содржи најмалку еден шаблонски аргумент кој е со преголема должина.\nТаквите аргументи ќе бидат изземени при расчленувањето.",
        "post-expand-template-argument-category": "Страници кои содржат изземени аргументи на шаблони",
        "parser-template-loop-warning": "Пронајдена е јамка во шаблонот: [[$1]]",
+       "template-loop-category": "Страници со шаблонски јамки",
+       "template-loop-category-desc": "Страницава содржи шаблонска јамка, т.е. шаблон кој повторливо се самоповикува",
        "parser-template-recursion-depth-warning": "Пречекорена е границата на длабочината на рекурзијата во шаблонот ($1)",
        "language-converter-depth-warning": "Пречекорена е границата на длабочината на јазичниот претворач ($1)",
        "node-count-exceeded-category": "Страници каде е надминат бројот на јазли",
        "newimages-summary": "Оваа службена страница ги покажува скоро подигнатите податотеки.",
        "newimages-legend": "Филтрирај",
        "newimages-label": "Име на податотека (или дел од името):",
+       "newimages-user": "IP-адреса или корисничко име",
        "newimages-showbots": "Прикажувај подигања од ботови",
        "newimages-hidepatrolled": "Сокриј испатролриани подигања",
        "noimages": "Нема ништо.",
        "restrictionsfield-label": "Допуштени IP-опсези:",
        "restrictionsfield-help": "Една IP-адреса или CIDR-опсег по ред. За да овозможите сè, користете<br /><code>0.0.0.0/0</code><br /><code>::/0</code>",
        "revid": "преработка $1",
-       "pageid": "назнака на страницата $1"
+       "pageid": "назнака на страницата $1",
+       "rawhtml-notallowed": "&lt;html&gt;-ознаките не може да се користат вон нормалните страници."
 }
index 9d296f0..2ba8bb1 100644 (file)
        "page_first": "eerste",
        "page_last": "laatste",
        "histlegend": "Selectie voor verschillen: selecteer de te vergelijken versies en toets ENTER of de knop onderaan.<br />\nVerklaring afkortingen: '''({{int:cur}})''' = verschil met huidige versie, '''({{int:last}})''' = verschil met voorgaande versie, '''{{int:minoreditletter}}''' = kleine wijziging",
-       "history-fieldset-title": "Door geschiedenis bladeren",
+       "history-fieldset-title": "Naar versies zoeken",
        "history-show-deleted": "Alleen verwijderde versies",
        "histfirst": "oudste",
        "histlast": "nieuwste",
        "rcfilters-highlightmenu-title": "Kies een kleur",
        "rcfilters-highlightmenu-help": "Selecteer een kleur om deze eigenschap uit te lichten",
        "rcfilters-filterlist-noresults": "Geen filters gevonden",
+       "rcfilters-noresults-conflict": "Geen resultaten gevonden omdat de zoekcriteria met elkaar conflicteren",
        "rcfilters-filtergroup-registration": "Gebruikers-registratie",
        "rcfilters-filter-registered-label": "Geregistreerd",
        "rcfilters-filter-registered-description": "Ingelogde gebruikers.",
        "newimages-summary": "Op deze speciale pagina worden de meest recent toegevoegde bestanden weergegeven.",
        "newimages-legend": "Bestandsnaam",
        "newimages-label": "Bestandsnaam (of deel daarvan):",
+       "newimages-user": "IP-adres of gebruikersnaam",
        "newimages-showbots": "Uploads door bots weergeven",
        "newimages-hidepatrolled": "Gecontroleerde uploads verbergen",
        "noimages": "Er is niets te zien.",
        "restrictionsfield-label": "Toegestane IP-ranges:",
        "restrictionsfield-help": "Een IP-adres of CIDR bereik per lijn. Om alles toe te staan, gebruik:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "versie $1",
-       "pageid": "Pagina-ID $1"
+       "pageid": "Pagina-ID $1",
+       "rawhtml-notallowed": "&lt;html&gt; tags kunnen alleen op normale pagina's geplaatst worden."
 }
index 4ffdd93..5c04f76 100644 (file)
        "missingsummary": "'''Atencion :''' avètz pas modificat lo resumit de vòstra modificacion. Se clicatz tornarmai sul boton « Salvar », lo salvament serà fait sens avertiment mai.",
        "missingcommenttext": "Mercé de metre un comentari çaijós.",
        "missingcommentheader": "<strong>Rapèl :</strong> Avètz pas provesit cap de subjècte per aqueste comentari.\nSe clicatz tornamai sus « {{int:Savearticle}} », vòstra modificacion serà enregistrada sens subjècte.",
-       "summary-preview": "Previsualizacion del resumit :",
-       "subject-preview": "Previsualizacion del subjècte",
+       "summary-preview": "Apercebut del resumit de modificacion :",
+       "subject-preview": "Apercebut del subjècte :",
        "blockedtitle": "L'utilizaire es blocat",
        "blockedtext": "'''Vòstre compte d'utilizaire o vòstra adreça IP es estat blocat'''\n\nLo blocatge es estat efectuat per $1.\nLa rason invocada es la seguenta : ''$2''.\n\n* Començament del blocatge : $8\n* Expiracion del blocatge : $6\n* Compte blocat : $7.\n\nPodètz contactar $1 o un autre [[{{MediaWiki:Grouppage-sysop}}|administrator]] per ne discutir.\nPodètz pas utilizar la foncion « Mandar un corrièr electronic a aqueste utilizaire » que se una adreça de corrièr valida es especificada dins vòstras [[Special:Preferences|preferéncias]].\nVòstra adreça IP actuala es $3 e vòstre identificant de blocatge es #$5.\nIncluissètz aquesta adreça dins tota requèsta.",
        "autoblockedtext": "Vòstra adreça IP es estada blocada automaticament perque es estada utilizada per un autre utilizaire, ele-meteis blocat per $1.\nLa rason invocadaa es :\n\n:''$2''\n\n* Començament del blocatge : $8\n* Expiracion del blocatge : $6\n* Compte blocat : $7\n\nPodètz contactar $1 o un dels autres [[{{MediaWiki:Grouppage-sysop}}|administrators]] per discutir d'aqueste blocatge.\n\nNotatz que podètz pas utilizar la foncionalitat \"Mandar un messatge a aqueste utilizaire\" tant qu'auretz pas  una adreça e-mail enregistrada dins vòstras [[Special:Preferences|preferéncias]] e tant que seretz pas blocat per son utilizacion.\n\nVòstra adreça IP actuala es $3, e lo numèro de blocatge es $5.\nPrecisatz aquestas indicacions dins totas las requèstas que faretz.",
        "page_first": "primièra",
        "page_last": "darrièra",
        "histlegend": "Legenda : ({{MediaWiki:Cur}}) = diferéncia amb la version actuala ,\n({{MediaWiki:Last}}) = diferéncia amb la version precedenta, <b>m</b> = cambiament menor",
-       "history-fieldset-title": "Percórrer l'istoric",
-       "history-show-deleted": "Suprimits solament",
+       "history-fieldset-title": "Recercar de revisions",
+       "history-show-deleted": "Revision suprimida unicament",
        "histfirst": "Las mai ancianas",
        "histlast": "Las mai recentas",
        "historysize": "({{PLURAL:$1|1 octet|$1 octets}})",
        "prefs-diffs": "Diferéncias",
        "prefs-help-prefershttps": "Aquesta preferéncia serà efectiva al moment de vòstra connexion que ven.",
        "prefs-tabs-navigation-hint": "Astúcia : Podètz utilizar las sagetas d'esquèrra e de dreita per navigar entre los onglets.",
-       "userrights": "Gestion dels dreits d'utilizaire",
+       "userrights": "Dreits dels utilizaires",
        "userrights-lookup-user": "Seleccionar un utilizaire",
        "userrights-user-editname": "Entrar un nom d’utilizaire :",
        "editusergroup": "Cargar de gropes d’utilizaires",
        "rcfilters-filter-editsbyself-label": "Vòstras pròprias modificacions",
        "rcfilters-filter-editsbyself-description": "Vòstras modificacions.",
        "rcfilters-filter-editsbyother-label": "Modificacions per d’autres.",
-       "rcfilters-filter-userExpLevel-newcomer-label": "Novèls arribants",
-       "rcfilters-filter-userExpLevel-learner-label": "Aprenents",
-       "rcfilters-filter-userExpLevel-experienced-label": "Utilizaires experimentats",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Novèls arribants",
+       "rcfilters-filter-user-experience-level-learner-label": "Aprenents",
+       "rcfilters-filter-user-experience-level-experienced-label": "Utilizaires experimentats",
        "rcfilters-filtergroup-automated": "Contribucions automatizadas",
        "rcfilters-filter-bots-label": "Robòt",
        "rcfilters-filter-humans-label": "Èsser uman (pas robòt)",
        "protect-expiry-options": "1 ora:1 hour,1 jorn:1 day,1 setmana:1 week,2 setmanas:2 weeks,1 mes:1 month,3 meses:3 months,6 meses:6 months,1 an:1 year,indefinidament:infinite",
        "restriction-type": "Permission :",
        "restriction-level": "Nivèl de restriccion :",
-       "minimum-size": "Talha minimoma",
+       "minimum-size": "Talha minimala",
        "maximum-size": "Talha maximala :",
        "pagesize": "(octets)",
        "restriction-edit": "Modificacion",
index b77db9d..e195566 100644 (file)
        "editlink": "kohendele",
        "viewsourcelink": "Kačo algukoodu",
        "editsectionhint": "Kohendele tädä kohtua: $1",
-       "toc": "Sizäldö",
+       "toc": "Syväindö",
        "showtoc": "ozuttua",
-       "hidetoc": "peittiä",
+       "hidetoc": "peitä",
        "collapsible-collapse": "Peitä",
        "collapsible-expand": "Levitä",
        "confirmable-confirm": "{{GENDER:$1|Oletgo}} varmu?",
        "password-change-forbidden": "Et voi vaihtua peittosanoi täs wikis.",
        "login": "Kirjuttai",
        "nav-login-createaccount": "Kirjuttai libo registriiruiččei",
-       "userlogin": "Kirjuttai libo registriiruiččei",
-       "userloginnocreate": "Kirjuttai",
        "logout": "Kirjuttai ullos",
        "userlogout": "Kirjuttai ullos",
        "notloggedin": "Ei kirjutannuhes",
        "userlogin-noaccount": "Ei ole tilii?",
        "userlogin-joinproject": "Yhty {{SITENAME}}",
-       "nologin": "Ei ole tilii? $1",
-       "nologinlink": "Luaji tili",
        "createaccount": "Registriiruiččei",
-       "gotaccount": "Ollou sinul jo tunnus? $1",
-       "gotaccountlink": "Kirjuttai",
-       "userlogin-resetlink": "Unohtitgo sinun käyttäinimen/peittosanan?",
        "userlogin-resetpassword-link": "Unohtitgo sinun peittosanan?",
        "userlogin-helplink2": "Abuu kirjuttamizeh",
        "userlogin-loggedin": "Olet jo kirjutannuhes nimel {{GENDER:$1|$1}}.\nKäytä al olijua ankiettua ku kirjuttuakseh eri käyttäjänny.",
        "createacct-email-ph": "Kirjuta sinun sähköpoštuadressu",
        "createacct-another-email-ph": "Kirjuta sinun sähköpoštuadressu",
        "createacct-realname": "Tovelline nimi (omatahtoine tiedo)",
-       "createaccountreason": "Syy:",
        "createacct-reason": "Syy",
        "createacct-reason-ph": "Mindäh olet luadimas tostu käyttäitilii",
        "createacct-submit": "Luaji tili",
        "prefs-changeemail": "Vaihta libo ota iäre sähköpoštuadressu",
        "prefs-setemail": "Kirjuta sähköpoštuadressu",
        "saveprefs": "Tallenda",
-       "rows": "Riädyy:",
        "searchresultshead": "Eččie",
        "timezoneregion-africa": "Afriekku",
        "timezoneregion-america": "Ameriekku",
        "rcshowhideanons-show": "Ozuta",
        "rcshowhideanons-hide": "Peitä",
        "rcshowhidepatr-show": "Ozuttua",
-       "rcshowhidepatr-hide": "Peittiä",
+       "rcshowhidepatr-hide": "Peitä",
        "rcshowhidemine": "$1 minun kohendukset",
        "rcshowhidemine-show": "Ozuta",
        "rcshowhidemine-hide": "Peitä",
index 19e7e17..4e9ef18 100644 (file)
        "login": "ଲଗ-ଇନ (Log in)",
        "login-security": "ଆପଣଙ୍କ ପରିଚୟ ଯାଞ୍ଚ କରନ୍ତୁ",
        "nav-login-createaccount": "ଲଗ ଇନ /ନୂଆ ଖାତା ଖୋଲନ୍ତୁ",
-       "userlogin": "ଲଗ ଇନ /ନୂଆ ଖାତା ଖୋଲନ୍ତୁ",
-       "userloginnocreate": "ଲଗ-ଇନ (Log in)",
        "logout": "ଲଗଆଉଟ",
        "userlogout": "ଲଗ ଆଉଟ",
        "notloggedin": "ଲଗ‌‌ ଇନ କରିନାହାନ୍ତି",
        "userlogin-noaccount": "ଖାତାଟିଏ ନାହିଁ?",
        "userlogin-joinproject": "{{SITENAME}}ରେ ଯୋଗଦିଅନ୍ତୁ",
-       "nologin": "ଖାତାଟିଏ ନାହିଁ? $1।",
-       "nologinlink": "ନୂଆ ଖାତାଟିଏ ଖୋଲନ୍ତୁ",
        "createaccount": "ନୂଆ ଖାତାଟିଏ ଖୋଲନ୍ତୁ",
-       "gotaccount": "ଆଗରୁ ଖାତାଟିଏ ଅଛି କି? $1.",
-       "gotaccountlink": "ଲଗ ଇନ (Log in)",
-       "userlogin-resetlink": "ଲଗଇନ ତଥ୍ୟ ସବୁ ଭୁଲିଗେଲେକି?",
        "userlogin-resetpassword-link": "ପାସୱାର୍ଡ଼ ମନେପଡୁନାହିଁ?",
        "userlogin-helplink2": "ଲଗ ଇନ ପାଇଁ ସହଯୋଗ କରନ୍ତୁ",
        "userlogin-loggedin": "ଆପଣ {{GENDER:$1|$1}} ନାମରେ ଲଗ ଇନ କରିଛନ୍ତି । ତଳ ଫର୍ମଟି ବ୍ୟବହାର କରି ଆଉ ଜଣେ ସଭ୍ୟ ଭାବେ ଲଗ ଇନ କରନ୍ତୁ ।",
        "createaccountmail": "ଏକ ଅସ୍ଥାୟୀ ପାସୱାର୍ଡ଼ ବ୍ୟବହାର କରନ୍ତୁ ଏବଂ ଏହାକୁ ତଳେ ଦିଆଯାଇଥିବା ଇ-ମେଲ ଠିକଣାକୁ ପଠାଇଦିଅନ୍ତୁ",
        "createaccountmail-help": "ପାସୱାର୍ଡ ନ ଜାଣି ମଧ୍ୟ ଆଉ ଜଣେ ବ୍ୟକ୍ତି ଙ୍କ ପାଇଁ ଖାତା ଖୋଲିବାକୁ ବ୍ୟବହାର କରାଯାଇପାରିବ।",
        "createacct-realname": "ପ୍ରକୃତ ନାମ (ଇଚ୍ଛାଧୀନ)",
-       "createaccountreason": "କାରଣ:",
        "createacct-reason": "କାରଣ",
        "createacct-reason-ph": "ଆପଣ ଅନ୍ୟଏକ ଖାତା କାହିଁକି ତିଆରି କରୁଛନ୍ତି",
        "createacct-reason-help": "ଖାତା ଖୋଲିବା ଲଗ ରେ ବାର୍ତା ଦେଖାଯାଇଛି",
        "nimagelinks": "$1 ଟି {{PLURAL:$1|ପୃଷ୍ଠା|ପୃଷ୍ଠା}}ରେ ବ୍ୟବହାର କରାଯାଇଅଛି",
        "ntransclusions": "$1ଟି {{PLURAL:$1|ପୃଷ୍ଠା|ପୃଷ୍ଠା}}ରେ ବ୍ୟବହାର କରାଯାଇଅଛି",
        "specialpage-empty": "ଏହି ଅନୁରୋଧ ପାଇଁ କିଛି ଫଳାଫଳ ମିଳିଲା ନାହିଁ ।",
-       "lonelypages": "à¬\85ନାଥ ପୃଷ୍ଠା ସବୁ",
+       "lonelypages": "à¬\8fà¬\95ାà¬\95à­\80 ପୃଷ୍ଠା ସବୁ",
        "lonelypagestext": "ତଲାଲିଖିତ ପୃଷ୍ଠାମାନ {{SITENAME}}ରେ ଥିବା ବାକି ପୃଷ୍ଠାମାନଙ୍କ ସହ ଯୋଡ଼ାଯାଇନାହିଁ ବା କେବଳ ସେଥିରେ ବ୍ୟବହାର କରାଯାଇନାହିଁ ।",
        "uncategorizedpages": "ଶ୍ରେଣୀହୀନ ପୃଷ୍ଠାସମୂହ",
        "uncategorizedcategories": "ଶ୍ରେଣୀହୀନ ଶ୍ରେଣୀସମୂହ",
        "prefixindex-strip": "ତାଲିକାରୁ ନାମ ଆଗରୁ ଲାଗୁଥିବା ଶବ୍ଦ ହଟାନ୍ତୁ",
        "shortpages": "ଛୋଟ ପୃଷ୍ଠାସମୂହ",
        "longpages": "ଲମ୍ବା ପୃଷ୍ଠା",
-       "deadendpages": "à¬\86à¬\97à¬\95à­\81 à¬¯à¬¾à¬\87ପାରà­\81ନଥିବା ପୃଷ୍ଠା",
+       "deadendpages": "à¬\85ନà­\8dà­\9f à¬ªà­\83ଷà­\8dଠା à¬¸à¬\99à­\8dà¬\97à­\87 à¬¯à­\8bଡ଼ା à¬¹à­\87à¬\87ନଥିବା ପୃଷ୍ଠା",
        "deadendpagestext": "ଏହି ପୃଷ୍ଠାସବୁ {{SITENAME}}ର ବାକି ପୃଷ୍ଠାମାନଙ୍କ ସଙ୍ଗେ ଯୋଡ଼ା ହୋଇ ନାହାନ୍ତି ।",
        "protectedpages": "କିଳାଯାଇଥିବା ପୃଷ୍ଠାମାନ",
        "protectedpages-indef": "କେବଳ ଆସିମୀତ କାଳ ପାଇଁ କିଳିବା",
        "logentry-upload-revert": "$1, $3 {{GENDER:$2|ଅପଲୋଡ଼ କଲେ}}",
        "log-name-tag": "ଟାଗ ଲଗ",
        "rightsnone": "(କିଛି ନାହିଁ)",
-       "revdelete-summary": "ସାରକଥା ସମ୍ପାଦନା",
        "feedback-adding": "ପୃଷ୍ଠାରେ ମତାମତ ଦେଉଛି...",
        "feedback-back": "ପଛକୁ ଯିବେ",
        "feedback-bugcheck": "ବହୁତ ଭଲ ! ଖାଲି ଦେଖିଦିଅନ୍ତୁ ଯେ ଏହା ଆଗରୁ ଥିବା [$1 known bugs] ମଧ୍ୟରୁ ନୁହେଁ ତ ।",
index 6bfb3c1..6733566 100644 (file)
        "post-expand-template-argument-warning": "Uwaga – strona zawiera co najmniej jeden argument szablonu, który po rozwinięciu jest zbyt duży.\nArgument ten będzie pominięty.",
        "post-expand-template-argument-category": "Strony, w których użyto szablon z pominięciem argumentów",
        "parser-template-loop-warning": "Wykryto pętlę w szablonie [[$1]]",
+       "template-loop-category": "Strony z pętlami szablonów",
+       "template-loop-category-desc": "Strona zawiera pętlę szablonów, czyli szablon, który wywołuje sam siebie rekursywnie.",
        "parser-template-recursion-depth-warning": "Przekroczno limit głębokości rekurencji szablonu ($1)",
        "language-converter-depth-warning": "Przekroczono ograniczenie ($1) głębokości zagnieżdżenia konwersji językowej",
        "node-count-exceeded-category": "Strony, gdzie przekroczono liczbę węzłów",
        "recentchanges-legend-plusminus": "(''±123'')",
        "recentchanges-submit": "Pokaż",
        "rcfilters-activefilters": "Aktywne filtry",
-       "rcfilters-restore-default-filters": "Przywrócić domyślne filtry",
+       "rcfilters-restore-default-filters": "Przywróć domyślne filtry",
        "rcfilters-clear-all-filters": "Wyczyść filtry",
        "rcfilters-search-placeholder": "Filtruj ostatnie zmiany (przeglądaj lub zacznij wpisywać)",
        "rcfilters-invalid-filter": "Nieprawidłowy filtr",
        "rcfilters-highlightmenu-help": "Wybierz kolor, aby podświetlić tę właściwość",
        "rcfilters-filterlist-noresults": "Nie znaleziono filtrów",
        "rcfilters-noresults-conflict": "Nie znaleziono wyników z powodu konfliktu kryteriów wyszukiwania",
+       "rcfilters-state-message-subset": "Ten filtr nie wywoła efektu, ponieważ pasujące do niego wyniki są zawarte w bardziej {{PLURAL:$2|szczegółowym filtrze|szczegółowych filtrach}} (spróbuj podświetlić, aby je rozróżnić): $1",
+       "rcfilters-state-message-fullcoverage": "Wybranie wszystkich filtrów w grupie działa tak samo jak niewybranie żadnego, więc ten filtr nie będzie miał efektu. W grupie zawarto też: $1",
        "rcfilters-filtergroup-registration": "Rejestracja użytkownika",
        "rcfilters-filter-registered-label": "Zarejestrowani",
        "rcfilters-filter-registered-description": "Zalogowani edytorzy.",
        "rcfilters-filter-unregistered-label": "Niezarejestrowani",
        "rcfilters-filter-unregistered-description": "Niezalogowani",
+       "rcfilters-filter-unregistered-conflicts-user-experience-level": "Ten filtr koliduje z {{PLURAL:$2|poniższym filtrem|poniższymi filtrami}} doświadczenia, {{PLURAL:$2|który wyszukuje|które wyszukują}} tylko zarejestrowanych użytkowników: $1",
        "rcfilters-filtergroup-authorship": "Autorstwo edycji",
        "rcfilters-filter-editsbyself-label": "Moje edycje",
        "rcfilters-filter-editsbyself-description": "Edycje dokonane przez Ciebie.",
        "rcfilters-filter-editsbyother-label": "Edycje inne niż Twoje",
        "rcfilters-filter-editsbyother-description": "Edycje wykonane przez innych (nie Twoje).",
        "rcfilters-filtergroup-userExpLevel": "Poziom doświadczenia (tylko o zarejestrowanych użytkownikach)",
+       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "Filtry doświadczenia wyszukują tylko edycje zarejestrowanych użytkowników, więc ten filtr koliduje z filtrem “Niezarejestrowani”.",
        "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "Filtr \"Niezarejestrowani\" koliduje z jednym lub więcej filtrów z filtrów poziomu doświadczenia, które służą do wyszukiwania wkładu tylko zarejestrowanych użytkowników. Kolidujące filtry zostały odpowiednio oznaczone na pasku Aktywnych filtrów.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Początkujący",
        "rcfilters-filter-user-experience-level-newcomer-description": "Mniej niż 10 edycji i 4 dni aktywności.",
        "rcfilters-filter-categorization-description": "Dodanie lub usunięcie strony z kategorii",
        "rcfilters-filter-logactions-label": "Działania rejestrowane",
        "rcfilters-filter-logactions-description": "Działania administracyjne, tworzenie kont, usuwanie stron, przesyłanie plików...",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "Filtr \"Drobne zmiany\" koliduje z jednym lub wieloma filtrami Rodzaju zmian, ponieważ niektóre rodzaje zmian nie mogą być uznawane za \"drobne\". Kolidujące filtry zostały odpowiednio zaznaczone na pasku aktywnych filtrów powyżej.",
+       "rcfilters-hideminor-conflicts-typeofchange": "Niektóre rodzaje zmian nie mogą być uznawane za \"drobne\", więc ten filtr koliduje z następującymi filtrami rodzaju zmian: $1",
+       "rcfilters-typeofchange-conflicts-hideminor": "Ten filtr Rodzaju zmian koliduje z filtrem \"Drobne zmiany\". Nie wszystkie zmiany mogą być uznawane za \"drobne\".",
        "rcnotefrom": "Poniżej {{PLURAL:$5|pokazano zmianę|pokazano zmiany}} {{PLURAL:$5|wykonaną|wykonane}} po <strong>$3, $4</strong> (nie więcej niż '''$1''' pozycji).",
        "rclistfrom": "Pokaż nowe zmiany od $3 $2",
        "rcshowhideminor": "$1 drobne edycje",
        "newimages-summary": "Na tej stronie specjalnej prezentowane są ostatnio przesłane pliki.",
        "newimages-legend": "Filtruj",
        "newimages-label": "Nazwa pliku (lub jej fragment):",
+       "newimages-user": "Adres IP lub nazwa użytkownika",
        "newimages-showbots": "Pokaż pliki przesłane przez boty",
        "newimages-hidepatrolled": "Ukryj sprawdzone pliki",
        "noimages": "Brak plików do pokazania.",
        "authmanager-autocreate-noperm": "Automatyczne tworzenie konta jest niedozwolone.",
        "authmanager-autocreate-exception": "Automatyczne tworzenie konta tymczasowo wyłączone z powodu wcześniejszych błędów.",
        "authmanager-userdoesnotexist": "Konto użytkownika „$1” nie jest zarejestrowane.",
+       "authmanager-userlogin-remembermypassword-help": "Czy hasło powinno być zapamiętane dłużej niż długość sesji.",
        "authmanager-username-help": "Nazwa użytkownika dla uwierzytelniania.",
        "authmanager-password-help": "Hasło do uwierzytelniania.",
        "authmanager-domain-help": "Domena uwierzytelniania zewnętrznego.",
        "restrictionsfield-label": "Dozwolone zakresy adresów IP:",
        "restrictionsfield-help": "Jeden adres IP lub zakres CIDR w wierszu. Aby zaznaczyć wszystkie, użyj:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "wersja $1",
-       "pageid": "ID strony: $1"
+       "pageid": "ID strony: $1",
+       "rawhtml-notallowed": "Znaczniki &lt;html&gt; nie mogą być stosowane poza zwykłymi stronami."
 }
index 2250b88..1d0e54a 100644 (file)
                        "!Silent",
                        "Joao Xavier",
                        "Nahime2015",
-                       "Alex Great"
+                       "Alex Great",
+                       "EVinente"
                ]
        },
        "tog-underline": "Sublinhar links:",
        "login": "Autenticar-se",
        "login-security": "Verificar sua identidade",
        "nav-login-createaccount": "Entrar / criar conta",
-       "userlogin": "Entrar / criar conta",
-       "userloginnocreate": "Entrar",
        "logout": "Sair",
        "userlogout": "Sair",
        "notloggedin": "Não autenticado(a)",
        "userlogin-noaccount": "Não possui uma conta?",
        "userlogin-joinproject": "Junte-se ao projeto {{SITENAME}}",
-       "nologin": "Não possui uma conta? $1.",
-       "nologinlink": "Criar uma conta",
        "createaccount": "Criar conta",
-       "gotaccount": "Já possui uma conta? '''$1'''.",
-       "gotaccountlink": "Autenticar-se",
-       "userlogin-resetlink": "Esqueceu-se do seu nome de usuário ou da senha?",
        "userlogin-resetpassword-link": "Esqueceu sua senha?",
        "userlogin-helplink2": "Ajuda com o login",
        "userlogin-loggedin": "Você já está conectado como {{GENDER:$1|$1}}.\nUse o formulário abaixo para iniciar sessão como outro usuário.",
        "createaccountmail": "Usar uma senha aleatória e temporária que será enviada ao endereço de e-mail especificado a seguir",
        "createaccountmail-help": "Pode ser utilizado para criar uma conta para outra pessoa sem saber a senha.",
        "createacct-realname": "Nome real (opcional)",
-       "createaccountreason": "Motivo:",
        "createacct-reason": "Motivo",
        "createacct-reason-ph": "Por que você está criando outra conta",
        "createacct-reason-help": "Mensagem mostrada no registro de criação de conta",
        "rcfilters-activefilters": "Filtros ativos",
        "rcfilters-restore-default-filters": "Restaurar filtros padrão",
        "rcfilters-clear-all-filters": "Limpar todos os filtros",
-       "rcfilters-search-placeholder": "Filtrar alterações recentes (procurar ou começar a digitar)",
+       "rcfilters-search-placeholder": "Filtrar mudanças recentes (procurar ou começar a digitar)",
        "rcfilters-invalid-filter": "Filtro inválido",
        "rcfilters-empty-filter": "Nenhum filtro ativo. Todas as contribuições são mostradas.",
        "rcfilters-filterlist-title": "Filtros",
        "rcfilters-filter-editsbyother-label": "Edições de outros",
        "rcfilters-filter-editsbyother-description": "Edições criadas por outros usuários (não você.)",
        "rcfilters-filtergroup-userExpLevel": "Nível de experiência (apenas para usuário registados)",
-       "rcfilters-filter-userExpLevel-newcomer-label": "Recém-chegados",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Menos de 10 edições e 4 dias de atividade.",
-       "rcfilters-filter-userExpLevel-learner-label": "Aprendizes",
-       "rcfilters-filter-userExpLevel-learner-description": "Mais dias de atividade e edições do que \"Novatos\", mas menos do que \"Usuários experientes\".",
-       "rcfilters-filter-userExpLevel-experienced-label": "Usuários experientes",
-       "rcfilters-filter-userExpLevel-experienced-description": "Mais de 30 dias de atividade e 500 edições.",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Recém-chegados",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Menos de 10 edições e 4 dias de atividade.",
+       "rcfilters-filter-user-experience-level-learner-label": "Aprendizes",
+       "rcfilters-filter-user-experience-level-learner-description": "Mais dias de atividade e edições do que \"Novatos\", mas menos do que \"Usuários experientes\".",
+       "rcfilters-filter-user-experience-level-experienced-label": "Usuários experientes",
+       "rcfilters-filter-user-experience-level-experienced-description": "Mais de 30 dias de atividade e 500 edições.",
        "rcfilters-filtergroup-automated": "Contribuições automatizadas",
        "rcfilters-filter-bots-label": "Robô",
        "rcfilters-filter-bots-description": "Edições feitas por ferramentas automatizadas.",
        "rcshowhidecategorization": "$1 categorização de páginas",
        "rcshowhidecategorization-show": "Exibir",
        "rcshowhidecategorization-hide": "Esconder",
-       "rclinks": "Exibir as $1 alterações recentes feitas nos últimos $2 dias<br />$3",
+       "rclinks": "Exibir as $1 mudanças recentes feitas nos últimos $2 dias<br />$3",
        "diff": "dif",
        "hist": "his",
        "hide": "Ocultar",
        "newimages-summary": "Esta página especial mostra os arquivos mais recentemente enviados",
        "newimages-legend": "Filtrar",
        "newimages-label": "Nome de arquivo (ou parte dele):",
+       "newimages-user": "Endereço IP ou nome do usuário:",
        "newimages-showbots": "Mostrar uploads realizados por robôs",
        "newimages-hidepatrolled": "Ocultar os carregamentos patrulhados.",
        "noimages": "Nada para ver.",
        "autosumm-newblank": "Criar página em branco",
        "size-kilobytes": "$1 kB",
        "bitrate-kilobits": "$1&nbsp;kb/s",
-       "lag-warn-normal": "É possível que as alterações que sejam mais recentes do que $1 {{PLURAL:$1|segundo|segundos}} não sejam exibidas nesta lista.",
-       "lag-warn-high": "Devido a sérios problemas de latência no servidor do banco de dados, as alterações mais recentes que $1 {{PLURAL:$1|segundo|segundos}} poderão não ser exibidas nesta lista.",
+       "lag-warn-normal": "É possível que as mudanças que sejam mais recentes do que $1 {{PLURAL:$1|segundo|segundos}} não sejam exibidas nesta lista.",
+       "lag-warn-high": "Devido a sérios problemas de latência no servidor do banco de dados, as mudanças mais recentes que $1 {{PLURAL:$1|segundo|segundos}} poderão não ser exibidas nesta lista.",
        "watchlistedit-normal-title": "Editar lista de páginas vigiadas",
        "watchlistedit-normal-legend": "Remover títulos da lista de páginas vigiadas",
        "watchlistedit-normal-explain": "Os títulos das páginas de sua lista de vigiadas são exibidos abaixo.\nPara remover um título, marque a caixa ao lado do mesmo e clique \"{{int:Watchlistedit-normal-submit}}\".\nVocê pode também [[Special:EditWatchlist/raw|editar a lista de páginas vigiadas em forma de texto]].",
        "logentry-tag-update-revision": "$1 {{GENDER:$2|atualizou}} etiquetas em revisão $4 da página $3 ({{PLURAL:$7|adicionou}} $6; {{PLURAL:$9|removeu}} $8)",
        "logentry-tag-update-logentry": "$1 {{GENDER:$2|atualizou}} etiquetas na entrada de registro $5 da página $3 ({{PLURAL:$7|adicionou}} $6; {{PLURAL:$9|removeu}} $8)",
        "rightsnone": "(nenhum)",
-       "revdelete-summary": "resumo da edição",
        "rightslogentry-temporary-group": "$1 (temporário, até $2)",
        "feedback-adding": "Adicionando os comentários na página...",
        "feedback-back": "Voltar",
index 2793992..8905262 100644 (file)
        "page_first": "primeira",
        "page_last": "última",
        "histlegend": "Seleção de diferenças: use os botões de opção para marcar as versões que deseja comparar.\nPressione 'Enter' ou clique o botão \"{{int:compareselectedversions}}\".<br />\nLegenda: '''({{int:cur}})''' = diferenças para a versão atual,\n'''({{int:last}})''' = diferenças para a versão anterior,\n'''{{int:minoreditletter}}''' = edição menor",
-       "history-fieldset-title": "Navegar pelo histórico",
-       "history-show-deleted": "Somente eliminadas",
+       "history-fieldset-title": "Pesquisar revisões",
+       "history-show-deleted": "Somente revisões eliminadas",
        "histfirst": "Mais antigas",
        "histlast": "Mais novas",
        "historysize": "({{PLURAL:$1|1 byte|$1 bytes}})",
        "prefs-help-prefershttps": "Esta preferência terá efeito no seu próximo início de sessão.",
        "prefswarning-warning": "Fez alterações às suas preferências que não foram gravadas ainda.\nSe abandonar esta página sem clicar em \"$1\", as suas preferências não serão atualizadas.",
        "prefs-tabs-navigation-hint": "Dica: Pode usar as setas direita e esquerda do teclado para navegar entre os separadores.",
-       "userrights": "Gestão de privilégios {{GENDER:{{BASEPAGENAME}}|do utilizador|da utilizadora|de utilizador(a)}}",
+       "userrights": "Privilégios de utilizador",
        "userrights-lookup-user": "Selecionar um utilizador",
        "userrights-user-editname": "Introduza um nome de utilizador(a):",
        "editusergroup": "Carregar grupos do utilizador",
        "rcfilters-invalid-filter": "Filtro inválido",
        "rcfilters-empty-filter": "Não há filtros ativos. São mostradas todas as contribuições.",
        "rcfilters-filterlist-title": "Filtros",
+       "rcfilters-filterlist-whatsthis": "O que é isto?",
        "rcfilters-filterlist-feedbacklink": "Dê-nos a sua opinião sobre os novos filtros (beta)",
        "rcfilters-highlightbutton-title": "Realçar resultados",
        "rcfilters-highlightmenu-title": "Selecionar uma cor",
+       "rcfilters-highlightmenu-help": "Selecione uma cor para realçar esta propriedade",
        "rcfilters-filterlist-noresults": "Não foram encontrados filtros",
+       "rcfilters-noresults-conflict": "Não foram encontrados resultados porque os critérios de pesquisa estão em conflito",
        "rcfilters-filtergroup-registration": "Registo de utilizador",
        "rcfilters-filter-registered-label": "Registado",
        "rcfilters-filter-registered-description": "Editores autenticados.",
        "rcfilters-filter-bots-description": "Edições efectuadas por ferramentas automatizadas.",
        "rcfilters-filter-humans-label": "Ser humano (não robô)",
        "rcfilters-filter-humans-description": "Edições efectuadas por editores humanos.",
+       "rcfilters-filtergroup-reviewstatus": "Estado da revisão",
+       "rcfilters-filter-patrolled-label": "Patrulhadas",
+       "rcfilters-filter-patrolled-description": "Edições marcadas como patrulhadas.",
+       "rcfilters-filter-unpatrolled-label": "Não patrulhadas",
+       "rcfilters-filter-unpatrolled-description": "Edições não marcadas como patrulhadas.",
        "rcfilters-filtergroup-significance": "Significado",
        "rcfilters-filter-minor-label": "Edições menores",
        "rcfilters-filter-minor-description": "Edições marcadas pelo autor como menores.",
        "newimages-summary": "Esta página especial mostra os ficheiros mais recentemente enviados.",
        "newimages-legend": "Filtrar",
        "newimages-label": "Nome de ficheiro (ou parte dele):",
+       "newimages-user": "Endereço IP ou nome do utilizador",
        "newimages-showbots": "Mostrar carregamentos feitos por robôs",
        "newimages-hidepatrolled": "Ocultar carregamentos patrulhados",
        "noimages": "Nada para ver.",
index 1e05084..f244431 100644 (file)
        "post-expand-template-argument-warning": "Used as warning in parser limitation.\n\nSee also:\n* {{msg-mw|Post-expand-template-argument-category}}",
        "post-expand-template-argument-category": "This message is used as a category name for a [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages are placed automatically if they contain omitted template arguments.\n\nSee also:\n* {{msg-mw|Post-expand-template-argument-category-desc}}\n* {{msg-mw|Post-expand-template-argument-warning}}",
        "parser-template-loop-warning": "Parameters:\n* $1 - page title",
+       "template-loop-category": "This message is used as a category name for a [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages with template loops will be listed.",
+       "template-loop-category-desc": "Pages with template loops category description. Shown on [[Special:TrackingCategories]].\n\nSee also:\n* {{msg-mw|Template-loop-category}}",
        "parser-template-recursion-depth-warning": "Parameters:\n* $1 - limit value of recursion depth",
        "language-converter-depth-warning": "Error message shown when a page uses too deeply nested language conversion syntax. Parameters:\n* $1 - the value of the depth limit",
        "node-count-exceeded-category": "This message is used as a category name for a [[mw:Help:Tracking categories|tracking category]] where pages are placed automatically if the node-count of the preprocessor exceeds the limit.\n\nSee also:\n* {{msg-mw|Node-count-exceeded-warning}}",
        "newimages-summary": "This message is displayed at the top of [[Special:NewImages]] to explain what is shown on that special page.",
        "newimages-legend": "Caption of the fieldset for the filter on [[Special:NewImages]]\n\n{{Identical|Filter}}",
        "newimages-label": "Caption of the filter editbox on [[Special:NewImages]]",
+       "newimages-user": "Caption of the username/IP address editbox on [[Special:NewImages]]",
        "newimages-showbots": "Used as label for a checkbox. When checked, [[Special:NewImages]] will also display uploads by users in the bots group.",
        "newimages-hidepatrolled": "Used as label for a checkbox. When checked, [[Special:NewImages]] will not display patrolled uploads.\n\nCf. {{msg-mw|tog-hidepatrolled}} and {{msg-mw|apihelp-feedrecentchanges-param-hidepatrolled}}.",
        "noimages": "This is shown on the special page [[Special:NewImages]], when there aren't any recently uploaded files.",
        "restrictionsfield-label": "Field label shown for restriction fields (e.g. on Special:BotPassword).",
        "restrictionsfield-help": "Placeholder text displayed in restriction fields (e.g. on Special:BotPassword).",
        "revid": "Used to format a revision ID number in text. Parameters:\n* $1 - Revision ID number.\n{{Identical|Revision}}",
-       "pageid": "Used to format a page ID number in text. Parameters:\n* $1 - Page ID number."
+       "pageid": "Used to format a page ID number in text. Parameters:\n* $1 - Page ID number.",
+       "rawhtml-notallowed": "Error message given when $wgRawHtml = true; is set and a user uses an &lt;html&gt; tag in a system message or somewhere other than a normal page."
 }
index a58a9db..e4bf952 100644 (file)
        "searcharticle": "Véje",
        "history": "Storie d'a pàgene",
        "history_short": "Cunde",
+       "history_small": "cunde",
        "updatedmarker": "aggiornate da l'urtema visita meje",
        "printableversion": "Versione ca se stambe",
        "permalink": "Collegamende ca remane pe sembre",
        "externaldberror": "Vide bbuene, o stè 'n'errore de autendicazione a 'u database oppure tu non ge puè aggiorna 'u cunde tue esterne.",
        "login": "Tràse",
        "nav-login-createaccount": "Tràse / Reggistrete",
-       "userlogin": "Tràse / Reggistrete",
-       "userloginnocreate": "Tràse",
        "logout": "Isse",
        "userlogout": "Isse",
        "notloggedin": "Non ge sì colleghete",
        "userlogin-noaccount": "Non ge tìne 'nu cunde?",
        "userlogin-joinproject": "Tràse jndr'à {{SITENAME}}",
-       "nologin": "Non ge tine n'utenze? '''$1'''.",
-       "nologinlink": "Ccreje 'nu cunde utende",
        "createaccount": "Ccreje 'nu cunde",
-       "gotaccount": "Tine già 'nu cunde? '''$1'''.",
-       "gotaccountlink": "Tràse",
-       "userlogin-resetlink": "T'è scurdate le dettaglie pe trasè?",
        "userlogin-resetpassword-link": "T'è scurdate 'a passuord toje?",
        "userlogin-helplink2": "Aijute cu 'a trasute",
        "userlogin-loggedin": "Tu ste jndre ggià cumme a {{GENDER:$1|$1}}.\nAuse 'u module aqquà sotte pe trasè cumme a 'n'otre utende.",
        "createacct-another-email-ph": "Mitte l'indirizze email",
        "createaccountmail": "Ause 'na passuord temboranèe a uecchije e mannale a l'indirizze email specificate",
        "createacct-realname": "Nome vere (opzionale)",
-       "createaccountreason": "Mutive:",
        "createacct-reason": "Mutive",
        "createacct-reason-ph": "Purcé tu ste ccreje 'n'otre cunde utende?",
        "createacct-submit": "Ccreje 'u cunde utende tune",
        "selfredirect": "<strong>Attenziò:</strong> Tu ste redirezione sta pàgene da sule.\nTu puè avè specificate 'a destinazione sbagliate pe stu redirezionamende, o tu ste cange 'a pàgena sbagliate.\nCe tu cazze \"{{int:savearticle}}\" arrete, 'u redirezionamende avène ccrejate 'u stesse.",
        "missingcommenttext": "Pe piacere mitte 'nu commende aqquà sotte.",
        "missingcommentheader": "<strong>Arrecuèrdete:</strong> Tu non g'è provvedute a 'nu soggette pe stu commende.\nCe tu cazze \"{{int:savearticle}}\" 'n'otra vote, 'u cangiamende tune avène memorizzate senze jidde.",
-       "summary-preview": "Andeprime d'u riepileghe:",
-       "subject-preview": "Andeprime de l'Oggette:",
+       "summary-preview": "Andeprime d'u riepileghe d'u cangiamende:",
+       "subject-preview": "Andeprime de l'oggette:",
        "previewerrortext": "'N'errore ha assute quanne ste facive l'andeprime de le cangiaminde.",
        "blockedtitle": "L'utende è blocchete",
        "blockedtext": "''''U nome de l'utende o l'indirizze IP ha state bloccate.'''\n\n'U blocche ha state fatte da $1.\n'U mutive date jè ''$2''.\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 'manne 'na mail a stu utende' senza ca mitte n'indirizze e-mail valide jndr'à le\n[[Special:Preferences|preferenze tue]] e ce è state blocchete 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.",
        "logentry-tag-update-revision": "$1 {{GENDER:$2|aggiornate}} le tag sus 'a revisione $4 d'a pàgene $3 ({{PLURAL:$7|aggiunde}} $6; {{PLURAL:$9|luate}} $8)",
        "logentry-tag-update-logentry": "$1 {{GENDER:$2|aggiornate}} le tag sus 'a vôsce de l'archivije $5 d'a pàgene $3 ({{PLURAL:$7|aggiunde}} $6; {{PLURAL:$9|luate}} $8)",
        "rightsnone": "(ninde)",
-       "revdelete-summary": "cange 'u riepileghe",
        "feedback-adding": "Aggiunge feedback a 'a pàgene...",
        "feedback-back": "Rrete",
        "feedback-bugcheck": "Granne! Appene verificate ca non g'è une de le [$1 bug canusciute].",
index da61759..3e799da 100644 (file)
        "shared-repo-from": "из $1",
        "shared-repo": "общего хранилища",
        "shared-repo-name-wikimediacommons": "Викисклада",
-       "filepage.css": "/* CSS и помещены сюда входит на странице описания файла, также на зарубежного заказчика Вики */",
+       "filepage.css": "/* Размещённые здесь CSS будут применены на странице описания файла и на сторонних клиентских вики */",
        "upload-disallowed-here": "Вы не можете перезаписать этот файл.",
        "filerevert": "Возврат к старой версии $1",
        "filerevert-legend": "Возвратить версию файла",
        "movedarticleprotection": "перенёс настройки защиты с «[[$2]]» на «[[$1]]»",
        "protectedarticle-comment": "Защитил{{GENDER:$2||а}} «[[$1]]»",
        "modifiedarticleprotection-comment": "Изменил{{GENDER:$2||а}} уровень защиты «[[$1]]»",
-       "unprotectedarticle-comment": "Убрал {{GENDER:$2||а}} защиту с «[[$1]]»",
+       "unprotectedarticle-comment": "Cнял{{GENDER:$2||а}} защиту с «[[$1]]»",
        "protect-title": "Установка уровня защиты для «$1»",
        "protect-title-notallowed": "Просмотр уровня защиты «$1»",
        "prot_1movedto2": "[[$1]] переименована в [[$2]]",
        "newimages-summary": "На этой служебной странице показаны недавно загруженные файлы.",
        "newimages-legend": "Фильтр",
        "newimages-label": "Имя файла (или его часть):",
+       "newimages-user": "IP-адрес или имя участника",
        "newimages-showbots": "Показать загрузки ботов",
        "newimages-hidepatrolled": "Скрыть отпатрулированные загрузки",
        "noimages": "Изображения отсутствуют.",
        "sunday-at": "в воскресенье в $1",
        "yesterday-at": "Вчера в $1",
        "bad_image_list": "Формат должен быть следующим:\n\nБудут учитываться только элементы списка (строки, начинающиеся на символ *).\nПервая ссылка строки должна быть ссылкой на запрещённое для вставки изображение.\nПоследующие ссылки в той же строке будут рассматриваться как исключения, то есть статьи, куда изображение может быть включено.",
-       "variantname-zh-hans": "его",
+       "variantname-zh-hans": "hans",
        "metadata": "Метаданные",
        "metadata-help": "Файл содержит дополнительные данные, обычно добавляемые цифровыми камерами или сканерами. Если файл после создания редактировался, то некоторые параметры могут не соответствовать текущему изображению.",
        "metadata-expand": "Показать дополнительные данные",
        "exif-copyrighted-false": "Авторско-правовой статус не задан",
        "exif-photometricinterpretation-1": "Чёрный и белый (чёрный — 0)",
        "exif-photometricinterpretation-4": "Маска прозрачности",
-       "exif-photometricinterpretation-5": "РазделенÑ\8b (видимо Ð² CMYK)",
+       "exif-photometricinterpretation-5": "РазделенÑ\8b (веÑ\80оÑ\8fÑ\82но CMYK)",
        "exif-unknowndate": "Неизвестная дата",
        "exif-orientation-1": "Нормальная",
        "exif-orientation-2": "Отражено по горизонтали",
        "confirmemail_body_set": "Кто-то (возможно вы) с IP-адресом $1\nуказал данный адрес электронной почты для учётной записи «$2» в проекте «{{SITENAME}}».\n\nЧтобы подтвердить, что эта учётная запись действительно принадлежит вам,\nи включить возможность отправки писем с сайта «{{SITENAME}}», откройте в браузере приведённую ниже ссылку:\n\n$3\n\nЕсли данная учётная запись *не* относится к вам, то перейдите по следующей ссылке,\nчтобы отменить подтверждение адреса электронной почты:\n\n$5\n\nКод подтверждения действителен до $4.",
        "confirmemail_invalidated": "Подтверждение адреса электронной почты отменено.",
        "invalidateemail": "Отмена подтверждения адреса электронной почты",
-       "notificationemail_subject_changed": "{{SITENAME}} зарегистрированный адрес электронной почты был изменен",
+       "notificationemail_subject_changed": "Адрес электронной почты для {{SITENAME}} был изменён",
        "notificationemail_subject_removed": "{{SITENAME}} зарегистрированный адрес электронной почты был удален",
        "notificationemail_body_changed": "Кто-то, вероятно, вы, с IP-адреса $1,\nизменил адрес электронной почты учетной записи \"$2\" на \"$3\" на {{SITENAME}}.\n\nЕсли это были не вы, обратитесь к администратору сайта немедленно.",
        "notificationemail_body_removed": "Кто-то, вероятно вы, с IP-адреса $1,\nудалил адрес электронной почты учетной записи \"$2\" на {{SITENAME}}.\n\nЕсли это были не вы, обратитесь к администратору сайта немедленно.",
        "log-action-filter-contentmodel": "Тип изменения модели содержимого:",
        "log-action-filter-delete": "Тип удаления:",
        "log-action-filter-import": "Тип импорта:",
-       "log-action-filter-managetags": "Тип Ñ\82ега Ñ\83пÑ\80авленÑ\87еÑ\81киÑ\85 Ð´ÐµÐ¹Ñ\81Ñ\82вий:",
+       "log-action-filter-managetags": "Ð\94ейÑ\81Ñ\82вие Ð¿Ð¾ Ñ\83пÑ\80авлениÑ\8e Ñ\82егами:",
        "log-action-filter-move": "Тип переименования:",
        "log-action-filter-newusers": "Тип создания учётной записи:",
        "log-action-filter-patrol": "Тип патрулирования:",
        "log-action-filter-managetags-delete": "Удаление тегов",
        "log-action-filter-managetags-activate": "Активация тегов",
        "log-action-filter-managetags-deactivate": "Отключение тега",
-       "log-action-filter-move-move": "Ð\94вигаÑ\82Ñ\8cÑ\81Ñ\8f Ð±ÐµÐ· Ð¿ÐµÑ\80езапиÑ\81и Ð¿ÐµÑ\80еадÑ\80еÑ\81аÑ\86ий",
-       "log-action-filter-move-move_redir": "Ð\9fеÑ\80емеÑ\81Ñ\82иÑ\82Ñ\8c Ñ\81 Ð·Ð°Ð¼ÐµÐ½Ð¾Ð¹ Ð¿ÐµÑ\80еадÑ\80еÑ\81аÑ\86ий",
+       "log-action-filter-move-move": "Ð\9fеÑ\80еименованиÑ\8f Ð½Ðµ Ð² Ñ\81Ñ\83Ñ\89еÑ\81Ñ\82вÑ\83Ñ\8eÑ\89ее Ð¿ÐµÑ\80енапÑ\80авление",
+       "log-action-filter-move-move_redir": "Ð\9fеÑ\80еименованиÑ\8f Ð¿Ð¾Ð²ÐµÑ\80Ñ\85 Ð¿ÐµÑ\80енапÑ\80авлениÑ\8f",
        "log-action-filter-newusers-create": "Создание анонимным участником",
        "log-action-filter-newusers-create2": "Создание зарегистрированным участником",
        "log-action-filter-newusers-autocreate": "Автоматическое создание",
index 2bdc449..a441aa4 100644 (file)
        "nstab-template": "Modellu",
        "nstab-help": "Agiudu",
        "nstab-category": "Categoria",
+       "mainpage-nstab": "Pàgina printzipale",
        "nosuchaction": "No esistit custa atzione",
        "nosuchactiontext": "S'atzione ispetzificada in sa URL no est vàlida.\nEst possìbile chi sa URL siat istada carcada male, o si siat sighidu unu ligòngiu non vàlidu.\nCustu diat pòdere èssere unu \"bug\" de {{SITENAME}}.",
        "nosuchspecialpage": "Custa pàgina ispetziale no esistit",
        "password-change-forbidden": "Non podes cambiare sa password in custa wiki.",
        "login": "Intra",
        "nav-login-createaccount": "Intra / crea contu",
-       "userlogin": "Intra / crea contu",
-       "userloginnocreate": "Intra",
        "logout": "Serra sessione",
        "userlogout": "Essida",
        "notloggedin": "Non ses intradu",
        "userlogin-noaccount": "Non tenes unu contu?",
        "userlogin-joinproject": "Registra⋅ti a {{SITENAME}}",
-       "nologin": "Non tenes unu contu? '''$1'''.",
-       "nologinlink": "Crea unu contu",
        "createaccount": "Crea contu",
-       "gotaccount": "Tenes giai unu contu? $1.",
-       "gotaccountlink": "Identìfica·ti",
-       "userlogin-resetlink": "As ismentigadu is datos pro s'atzessu?",
        "userlogin-resetpassword-link": "As ismentigadu sa password?",
        "userlogin-helplink2": "Agiudu pro s'atzessu",
        "userlogin-createanother": "Crea un àteru contu",
        "createacct-another-email-ph": "Inserta s'indiritzu post.el",
        "createaccountmail": "Imprea una password a sorte e ispedidda a su indiritzu post.el ispetzificadu",
        "createacct-realname": "Nùmene beru (optzionale)",
-       "createaccountreason": "Motivu:",
        "createacct-reason": "Motivu",
        "createacct-reason-ph": "Pro ite ses creende un àteru contu",
        "createacct-submit": "Crea su contu tuo",
        "passwordreset-emaildisabled": "Is funtzionalidades de email sunt istadas disabilitadas in custa wiki.",
        "passwordreset-username": "Nùmene impitadore:",
        "passwordreset-domain": "Domìniu:",
-       "passwordreset-capture": "Ammustrare su cuntenutu de sa email?",
        "passwordreset-email": "Indiritzu email:",
        "passwordreset-emailtitle": "Particulares de s'impitadore in {{SITENAME}}",
        "passwordreset-emailelement": "Nùmene utente: \n$1\n\nPassword temporànea: \n$2",
        "saveprefs": "Sarba",
        "restoreprefs": "Restàura totus is sèberos predefinidos (in totus is setziones)",
        "prefs-editing": "Casella de modìfica",
-       "rows": "Lìnias:",
-       "columns": "Colunnas:",
        "searchresultshead": "Chirca",
        "stub-threshold": "Valore mìnimu pro is <a href=\"#\" class=\"stub\">ligòngios a is abotzos</a>, in bytes:",
        "stub-threshold-disabled": "Disativadu",
        "boteditletter": "b",
        "rc_categories_any": "Calesisiat",
        "rc-change-size": "$1",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} a pustis de sa modìfica",
        "newsectionsummary": "/* $1 */ setzione noa",
        "rc-enhanced-expand": "Ammustra particulares",
        "rc-enhanced-hide": "Cua particulares",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|carrigadu}} una versione noa de $3",
        "logentry-upload-revert": "$1 {{GENDER:$2|carrigadu}} $3",
        "rightsnone": "(nisciunu)",
-       "revdelete-summary": "ogetu de sa modìfica",
        "feedback-cancel": "Annudda",
        "feedback-close": "Fatu",
        "feedback-message": "Messàgiu:",
index 7da531a..36d0d24 100644 (file)
        "post-expand-template-argument-warning": "'''Opozorilo:'''' Ta stran vsebuje vsaj en argument predloge, ki ima preveliko razširitev.\nNaslednji argumenti so bili izpuščeni.",
        "post-expand-template-argument-category": "Strani z izpuščenimi argumenti predloge",
        "parser-template-loop-warning": "V predlogi je bila odkrita zanka: [[$1]]",
+       "template-loop-category": "Strani z zankami predlog",
+       "template-loop-category-desc": "Stran vsebuje zanko predloge, tj. predlogo, ki rekurzivno kliče sama sebe.",
        "parser-template-recursion-depth-warning": "Prekoračena globina rekurzije predlog ($1)",
        "language-converter-depth-warning": "Prekoračena globina pretvorbe jezikov ($1)",
        "node-count-exceeded-category": "Strani s prekoračenim številom vozlišč",
        "newimages-summary": "Ta posebna stran prikazuje najnovejše naložene datoteke.",
        "newimages-legend": "Filter",
        "newimages-label": "Ime datoteke (ali njen del):",
+       "newimages-user": "IP-naslov ali uporabniško ime",
        "newimages-showbots": "Prikaži nalaganja botov",
        "newimages-hidepatrolled": "Skrij nadzorovana nalaganja",
        "noimages": "Nič ni videti.",
        "restrictionsfield-label": "Dovoljeni IP-obsegi:",
        "restrictionsfield-help": "En IP-naslov ali CIDR-območje na vrstico. Da omogočite vse, uporabite:\n<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "redakcija $1",
-       "pageid": "ID strani $1"
+       "pageid": "ID strani $1",
+       "rawhtml-notallowed": "Oznak &lt;html&gt; ni možno uporabljati izven normalnih strani."
 }
index 9268049..be9d072 100644 (file)
@@ -31,7 +31,8 @@
                        "Liridon",
                        "Ammartivari",
                        "Kosovastar",
-                       "Matma Rex"
+                       "Matma Rex",
+                       "Arianit"
                ]
        },
        "tog-underline": "Nënvizimi i lidhjes:",
@@ -75,7 +76,7 @@
        "tog-diffonly": "Mos trego përmbajtjen e faqes nën diff-e",
        "tog-showhiddencats": "Trego kategoritë e fshehura",
        "tog-norollbackdiff": "Mos trego ndrysh pas kryerjes së një rikthkimi",
-       "tog-useeditwarning": "Më paralajmëro kur unë lë një redaktim faqeje me ndryshime të paruajtura",
+       "tog-useeditwarning": "Më paralajmëro kur lë një redaktim faqeje me ndryshime të paruajtura",
        "tog-prefershttps": "Gjithmonë përdorni një lidhje të sigurt kur të kyçur",
        "underline-always": "Gjithmonë",
        "underline-never": "Asnjëherë",
        "mypreferencesprotected": "Ti nuk ke leje për të ndryshuar preferencat e tua.",
        "ns-specialprotected": "Faqet speciale nuk mund të redaktohen.",
        "titleprotected": "Ky titull është mbrojtur nga [[User:$1|$1]] dhe nuk mund të krijohet.\nArsyeja e dhënë është <em>$2</em>.",
-       "filereadonlyerror": "Nuk është në gjendje që të ndryshojë skedarin \"$1\" sepse depoja e skedarit \"$2\" është në formën vetëm-lexim.\n\nAdministratori i cili e mbylli atë e dha këtë shpjegim: \"$3\".",
+       "filereadonlyerror": "Nuk është në gjendje që të ndryshojë skedarin \"$1\" sepse depoja e skedarit \"$2\" është në formën vetëm-lexim.\n\nAdministratori sistemit i cili e mbylli atë e dha këtë shpjegim: \"$3\".",
        "invalidtitle-knownnamespace": "Titull jo i vlefshëm me hapësirën \"$2\" dhe teksti \"$3\"",
        "invalidtitle-unknownnamespace": "Titull jo i vlefshëm me numrin e panjohur të hapësirës së emrit $1 dhe tekstit \"$2\"",
        "exception-nologin": "I paqasur",
        "login": "Hyni",
        "login-security": "Verifiko identitetin tuaj",
        "nav-login-createaccount": "Hyni ose hapni një llogari",
-       "userlogin": "Hyni / hapni llogari",
-       "userloginnocreate": "Hyni",
        "logout": "Dalje",
        "userlogout": "Dalje",
        "notloggedin": "Nuk keni hyrë brenda",
        "userlogin-noaccount": "Nuk keni një llogari?",
        "userlogin-joinproject": "Bashkohu me ne në {{SITENAME}}",
-       "nologin": "Nuk keni një llogari? '''$1'''.",
-       "nologinlink": "Hapeni",
        "createaccount": "Hap një llogari",
-       "gotaccount": "Keni një llogari? '''$1'''.",
-       "gotaccountlink": "Identifikohuni",
-       "userlogin-resetlink": "Ke harruar të dhënat e tua të identifikimit?",
        "userlogin-resetpassword-link": "Keni harruar fjalëkalimin?",
        "userlogin-helplink2": "Ndihmë rreth identifikimit",
        "userlogin-loggedin": "Ju tashmë jeni i regjistruar si {{GENDER:$1|$1}}.\nPërdore formularin më poshtë për të hyrë si një përdorues tjetër.",
        "createacct-another-email-ph": "Vendos adresën e postës elektronike",
        "createaccountmail": "Përdorni një fjalëkalim të përkohshëm të rastit dhe  dërgojeni atë në adresën e specifikuar te email",
        "createacct-realname": "Emri i vërtetë (me dëshirë)",
-       "createaccountreason": "Arsyeja:",
        "createacct-reason": "Arsyeja",
        "createacct-reason-ph": "Pse ju jeni duke krijuar një llogari tjetër",
        "createacct-submit": "Krijoni llogarinë tuaj",
        "noemail": "Regjistri nuk ka adresë për përdoruesin \"$1\".",
        "noemailcreate": "Ju duhet të sigurojë një adresë e e-mailit të saktë.",
        "passwordsent": "Një fjalëkalim i ri është dërguar tek adresa e regjistruar për \"$1\". Provojeni përsëri hyrjen mbasi ta keni marrë fjalëkalimin.",
-       "blocked-mailpassword": "IP adresa juaj është bllokuar , si e tillë nuk lejohet të përdor funksionin pë rikthim të fjalkalimit , në mënyrë që të parandalohet abuzimi.",
+       "blocked-mailpassword": "Adresa IP e juaj është bllokuar për redaktim. Për të parandaluar abuzimin, nuk lejohet të përdoret funksioni pë rikthim të fjalëkalimit nga kjo adresë IP.",
        "eauthentsent": "Një email konfirmimi është dërguar në adresën e caktuar  të e-mailit.\nParase te dergohen emaile të tjerë  në llogarinë tuaj, duhet të ndiqni udhëzimet në email, për të konfirmuar se llogaria është  vërtetë e juaja.",
        "throttled-mailpassword": "Një kujtesë e fjalëkalimit është dërguar gjatë {{PLURAL:$1|orës|$1 orëve}} të kaluara. Për t'u mbrojtur nga abuzime vetëm një kujtesë dërgohet çdo {{PLURAL:$1|orë|$1 orë}}.",
        "mailerror": "Gabim duke dërguar postën: $1",
-       "acct_creation_throttle_hit": "Nuk lejoheni të krijoni më llogari pasi keni krijuar {{PLURAL:$1|1|$1}}.",
+       "acct_creation_throttle_hit": "Vizitorët në këtë wiki duke përdorur adresën tuaj IP kanë krijuar {{PLURAL:$1|1 llogari|$1 llogari}} në $2 e fundit, që është maksimumi i lejuar në këtë periudhë kohore.\nSi rezultat, vizitorët duke përdorur këtë adresë IP nuk mund të krijojnë llogari tjetër në këtë moment.",
        "emailauthenticated": "Adresa juaj është vërtetuar më $2 $3.",
        "emailnotauthenticated": "Adresa juaj email nuk është  konfirmuar ende.\nAsnjë email nuk do të dërgohet për ndonjë nga karakteristikat e mëposhtme.",
        "noemailprefs": "Detyrohet një adresë email-i për të përdorur këtë mjet.",
        "createaccount-title": "Hapja e llogarive për {{SITENAME}}",
        "createaccount-text": "Dikush ka përdorur adresën tuaj për të hapur një llogari tek {{SITENAME}} ($4) të quajtur \"$2\" me fjalëkalimin \"$3\".\nDuhet të hyni brenda dhe të ndërroni fjalëkalimin tani nëse ky person jeni ju. Përndryshe shpërfilleni këtë mesazh.",
        "login-throttled": "Keni bërë shumë tentime të njëpasnjëshme në fjalëkalimin e kësaj llogarie. Ju lutemi prisni para se te tentoni përsëri.",
-       "login-abort-generic": "login juaj ishte i pasuksesshëm - Ndërpre",
+       "login-abort-generic": "Regjistrimi juaj ishte i pasuksesshëm - U ndërpre",
        "login-migrated-generic": "Llogaria juaj ka emigruar, dhe emri juaj nuk ekzistojnë më në këtë wiki.",
        "loginlanguagelabel": "Gjuha: $1",
        "suspicious-userlogout": "Kërkesa juaj për të shkëputet u mohua sepse duket sikur është dërguar nga një shfletues të thyer ose caching proxy.",
        "resetpass-no-info": "Duhet të jeni i kyçur që të keni qasje direkte në këtë faqe.",
        "resetpass-submit-loggedin": "Ndrysho fjalëkalimin",
        "resetpass-submit-cancel": "Anulo",
-       "resetpass-wrong-oldpass": "Fjalëkalimi momental ose i përkohshëm nuk është i vlefshëm. Ndoshta tanimë me sukses keni ndërruar fjalëkalimin, ose keni kërkuar fjalëkalim të përkohshëm.",
+       "resetpass-wrong-oldpass": "Fjalëkalimi momental ose i përkohshëm nuk është i vlefshëm. \nNdoshta tanimë me sukses keni ndërruar fjalëkalimin, ose keni kërkuar fjalëkalim të përkohshëm.",
        "resetpass-recycled": "Ju lutemi rivendosni fjalëkalimin tuaj për diçka tjetër përveç fjalëkalimin tuaj të tanishme.",
        "resetpass-temp-emailed": "Ju keni hyrë në me një koditë përkohshme të dërguar me email .\nPër të përfundojë logging in, ju duhet të vendosni një fjalëkalim të ri këtu:",
        "resetpass-temp-password": "Fjalëkalimi i përkohshëm:",
        "resetpass-abort-generic": "Ndryshimi i fjalëkalimi  dështoi nga një zgjerim.",
        "resetpass-expired": "Fjalëkalimin tuaj ka skaduar. Ju lutem vendosni një fjalëkalim të ri për të hyr.",
        "resetpass-expired-soft": "Fjalëkalimi juaj ka skaduar dhe duhet të rivendoset. Ju lutem zgjidhni një fjalëkalim të ri tani, ose klikoni \"{{int:authprovider-resetpass-skip-label}}\" për ta rivendosur më vonë.",
-       "resetpass-validity-soft": "Fjalëkalimi juaj ka skaduar dhe duhet të rivendoset. Ju lutem zgjidhni një fjalëkalim të ri tani, ose klikoni \"{{int:authprovider-resetpass-skip-label}}\" për ta rivendosur më vonë.",
+       "resetpass-validity-soft": "Fjalëkalimi juaj ka skaduar:$1\n\nJu lutem zgjidhni një fjalëkalim të ri tani, ose klikoni \"{{int:authprovider-resetpass-skip-label}}\" për ta rivendosur më vonë.",
        "passwordreset": "Ndrysho fjalkalimin",
        "passwordreset-text-one": "Plotësoni këtë formular për të marrë një fjalëkalim të përkohshëm nëpërmjet postës elektronike.",
        "passwordreset-text-many": "{{PLURAL:$1|Mbush një nga fushat për të marrë një fjalëkalim të përkohshëm nëpërmjet postës elektronike.}}",
        "passwordreset-emailelement": "Emri i përdoruesit: \n$1\n\nFjalëkalimi i përkohshëm: \n$2",
        "passwordreset-emailsentemail": "Nëse kjo është një adresë emaili e regjistruar për llogarinë tuaj, atëherë një email për rivendosjen e fjalëkalimit do të dërgohet.",
        "changeemail": "Ndrysho ose hiq postën elektronike",
-       "changeemail-header": "Ndrysho llogarinë e adresës së postës elektronike",
+       "changeemail-header": "Plotësoni këtë formular për të ndryshuar adresën tuaj të postës elektronike. Nëse do të donit për të hequr ndërlidhjen e ndonjë adrese email nga llogaria juaj, lëreni bosh adresën e re të email-it kur të dorëzoni formularin.",
        "changeemail-no-info": "Ju duhet të identifikoheni në mënyrë që të keni të drejtë hyrjeje në këtë faqe.",
        "changeemail-oldemail": "Adresa aktuale e emailit:",
        "changeemail-newemail": "Adresa e re e emailit:",
        "sig_tip": "Firma juaj me gjithë kohë",
        "hr_tip": "vijë horizontale (përdoreni rallë)",
        "summary": "Përmbledhje:",
-       "subject": "Subjekt/titull:",
+       "subject": "Subjekt:",
        "minoredit": "Ky është një redaktim i vogël",
        "watchthis": "Vëzhgoje këtë faqe",
        "savearticle": "Kryej ndryshimet",
        "anonpreviewwarning": "\"Ju nuk jeni identifikuar. Ruajtja e ndryshimeve do të bëjë që adresa juaj IP të regjistrohet në historikun e redaktimeve të kësaj faqeje.\"",
        "missingsummary": "'''Vërejtje:''' Ju nuk keni lënë shënim për redaktimet e kryera.\nNëse klikoni \"{{int:savearticle}}\" përsëri, redaktimet tuaja do të ruhen pa shënim.",
        "missingcommenttext": "Ju lutemi bëni një koment më poshtë.",
-       "missingcommentheader": "'''Kujdes:''' Ju nuk keni dhënë një titull për këtë koment.\nNëse kryeni ndryshimet redaktimi juaj do të ruhet pa titull.",
-       "summary-preview": "Shqyrto përmbledhjen:",
-       "subject-preview": "Shqyrto titullin/subjektin:",
+       "missingcommentheader": "<strong>Kujdes:</strong>'''Nuk keni dhënë një titull për këtë koment.\nNëse klikoni \"{{int:savearticle}}\" prapë, redaktimi juaj do të ruhet pa titull.",
+       "summary-preview": "Parapamje e përmbledhjes së redaktimit:",
+       "subject-preview": "Parapamje e subjektit:",
        "blockedtitle": "Përdoruesi është bllokuar",
        "blockedtext": "'''Llogaria juaj ose adresa e IP është bllokuar'''\n\nBllokimi u bë nga $1 dhe arsyeja e dhënë ishte '''$2'''.\n\n*Fillimi i bllokimit: $8\n*Skadimi i bllokimit: $6\n*I bllokuari i shënjestruar: $7\n\nMund të kontaktoni $1 ose një nga [[{{MediaWiki:Grouppage-sysop}}|administruesit]] e tjerë për të diskutuar bllokimin.\n\nVini re se nuk mund t'i dërgoni email përdoruesit nëse nuk keni një adresë të saktë të dhënë tek [[Special:Preferences|parapëlqimet e përdoruesit]] ose nëse kjo është një nga mundësitë që ju është bllokuar.\n\nAdresa e IP-së që keni është $3 dhe numri i identifikimit të bllokimit është #$5. Përfshini këto dy të dhëna në çdo ankesë.",
        "autoblockedtext": "IP adresa juaj është bllokuar automatikisht sepse ishte përdorur nga një përdorues tjetër i cili ishte bllokuar nga $1.\nArsyeja e dhënë për këtë është:\n\n:''$2''\n\n* Fillimi i bllokimit: $8\n* Kalimi i kohës së bllokimit: $6\n* Zgjatja e bllokimit: $7\n\nJu mund të kontaktoni $1 ose një tjetër [[{{MediaWiki:Grouppage-sysop}}|administrues]] për ta diskutuar bllokimin.\n\nVini re : që nuk mund ta përdorni mundësinë \"dërgo porosi elektronike\" përveç nëse keni një postë elektronike të vlefshme të regjistruar në [[Special:Preferences|preferencat tuaja]] dhe nuk jeni bllokuar nga përdorimi i saj.\n\nIP adresa juaj e tanishme është $3 dhe ID e bllokimit është #$5.\nJu lutemi përfshini këto detaje në të gjitha kërkesat që i bëni.",
        "page_first": "I parë",
        "page_last": "Së fundmi",
        "histlegend": "Legjenda: <strong>({{int:cur}})</strong> = ndryshimet me versionin e tanishëm, <strong>({{int:last}})</strong> = ndryshimet me versionin e parardhshëm, <strong>{{int:minoreditletter}}</strong> = redaktim i vogël.",
-       "history-fieldset-title": "Shfleto historikun",
-       "history-show-deleted": "Vetëm versionet të grisur",
+       "history-fieldset-title": "Kërko versionin",
+       "history-show-deleted": "Vetëm versionet e grisura",
        "histfirst": "më të vjetër",
        "histlast": "më të rinj",
        "historysize": "({{PLURAL:$1|1 B|$1 B}})",
        "revdelete-confirm": "Ju lutem konfirmoni që keni ndër mënd ta bëni këtë, që i kuptoni pasojat, dhe që ju po veproni në përputhje me [[{{MediaWiki:Policy-url}}|politiken]].",
        "revdelete-suppress-text": "Shuarje duhet'''vetëm'''të përdoret për rastet e mëposhtme: \n * Potencialisht e informacionit shpifës \n * Informacion i pa kriter personal \n *: Adresat në shtëpi''dhe numrat e telefonit, numrat e sigurimeve shoqërore, etj''",
        "revdelete-legend": "Vendosni kufizimet për versionin:",
-       "revdelete-hide-text": "Fshihe tekstin e versionit",
+       "revdelete-hide-text": "Teksti i versionit",
        "revdelete-hide-image": "Fshih përmbajtjen skedës",
-       "revdelete-hide-name": "Fshihe veprimin dhe shënjestrën",
-       "revdelete-hide-comment": "fshih komentin e redaktimit",
+       "revdelete-hide-name": "Fshihe cakun dhe parametrat",
+       "revdelete-hide-comment": "Përmbledhje e redaktimit",
        "revdelete-hide-user": "Nofta e redaktuesit/Adresa IP",
        "revdelete-hide-restricted": "Ndalo të dhëna nga administrues si dhe të tjerë",
        "revdelete-radio-same": "(Mos ndryshoni)",
        "revdelete-unsuppress": "Hiq kufizimet nga versionet e restauruara",
        "revdelete-log": "Arsyeja:",
        "revdelete-submit": "Aplikoni tek {{PLURAL:$1|revision|versionet}} e zgjedhura",
-       "revdelete-success": "'''Dukshmëria e versioneve u vendos me sukses.'''",
+       "revdelete-success": "'''Dukshmëria e versioneve u freskua.'''",
        "revdelete-failure": "' ' 'Dukshmëria e rivizionit nuk mund të përditëohet\"\n$1",
-       "logdelete-success": "'''Dukshmëria e regjistrave u vendos me sukses.'''",
+       "logdelete-success": "U vendos dukshmëria e regjistrave.",
        "logdelete-failure": "'''Dukshmëria nuk u vendos:'''\n$1",
        "revdel-restore": "Ndrysho dukshmërinë",
        "pagehist": "Historiku i faqes",
        "logentry-rights-autopromote": "$1 është {{GENDER:$2|promovuar}} automatikisht nga $4 në $5",
        "logentry-upload-upload": "$1 {{GENDER:$2|ngarkoi}} $3",
        "rightsnone": "(asgjë)",
-       "revdelete-summary": "përmbledhja redaktimit",
        "feedback-adding": "Duke shtuar përshtypjen te faqja...",
        "feedback-bugcheck": "Shumë mirë! Thjesht kontrolloni që nuk është një nga [$1 problemet e njohura].",
        "feedback-bugnew": "E kontrollova. Raporto një problem të ri",
index 7799835..1f7ae83 100644 (file)
        "recentchanges-summary": "Пратите скорашње измене на овој страници.",
        "recentchanges-noresult": "Нема промена у задатом времену за задате критеријуме.",
        "recentchanges-feed-description": "Пратите скорашње измене уз помоћ овог довода.",
-       "recentchanges-label-newpage": "Ð\9dова страница",
-       "recentchanges-label-minor": "Ð\9cања измена",
+       "recentchanges-label-newpage": "Ð\9eвом Ð¸Ð·Ð¼ÐµÐ½Ð¾Ð¼ Ð½Ð°Ð¿Ñ\80авÑ\99ена Ñ\98е Ð½ова страница",
+       "recentchanges-label-minor": "Ð\9eво Ñ\98е Ð¼ања измена",
        "recentchanges-label-bot": "Ову измену је направио бот",
        "recentchanges-label-unpatrolled": "Ова измена још није патролирана",
        "recentchanges-label-plusminus": "Промена величине странице у бајтовима",
index b47fde5..07d10c1 100644 (file)
@@ -23,7 +23,8 @@
                        "Сербијана",
                        "Xð",
                        "Matma Rex",
-                       "Mega Aleksandar"
+                       "Mega Aleksandar",
+                       "Asmen"
                ]
        },
        "tog-underline": "Podvlačenje veza:",
        "recentchanges-summary": "Pratite skorašnje izmene na ovoj stranici.",
        "recentchanges-noresult": "Nema promena u zadatom vremenu za zadate kriterijume.",
        "recentchanges-feed-description": "Pratite skorašnje izmene uz pomoć ovog dovoda.",
-       "recentchanges-label-newpage": "Nova stranica",
-       "recentchanges-label-minor": "Manja izmena",
+       "recentchanges-label-newpage": "Ovom izmenom napravljena je nova izmena",
+       "recentchanges-label-minor": "Ovo je manja izmena",
        "recentchanges-label-bot": "Ovu izmenu je napravio bot",
        "recentchanges-label-unpatrolled": "Ova izmena još nije patrolirana",
        "recentchanges-label-plusminus": "Promena veličine stranice u bajtovima",
        "hebrew-calendar-m6": "Adar",
        "hebrew-calendar-m6a": "Adar I",
        "hebrew-calendar-m6b": "Adar II",
-       "hebrew-calendar-m7": "Nisan",
+       "hebrew-calendar-m7": "Nisane",
        "hebrew-calendar-m8": "Ijar",
        "hebrew-calendar-m9": "Sivan",
        "hebrew-calendar-m10": "Tamuz",
        "hebrew-calendar-m6-gen": "Adar",
        "hebrew-calendar-m6a-gen": "Adar I",
        "hebrew-calendar-m6b-gen": "Adar II",
-       "hebrew-calendar-m7-gen": "Nisan",
+       "hebrew-calendar-m7-gen": "Nisane",
        "hebrew-calendar-m8-gen": "Ijar",
        "hebrew-calendar-m9-gen": "Sivan",
        "hebrew-calendar-m10-gen": "Tamuz",
index 73d9aae..29de95c 100644 (file)
        "post-expand-template-argument-warning": "Varning: Sidan innehåller en eller flera mallparametrar som blir för långa när de expanderas.\nDessa parametrar har uteslutits.",
        "post-expand-template-argument-category": "Sidor med uteslutna mallparametrar",
        "parser-template-loop-warning": "Mall-loop upptäckt: [[$1]]",
+       "template-loop-category": "Sidor med loopade mallar",
+       "template-loop-category-desc": "Sidan innehåller en loopad mall, d.v.s. en mall som anropar sig själv rekursivt.",
        "parser-template-recursion-depth-warning": "Gräns för mallrekursionsdjup överskriden ($1)",
        "language-converter-depth-warning": "Gräns för språkkonverteringsdjup överskriden ($1)",
        "node-count-exceeded-category": "Sidor där antalet noder har överskridits",
        "page_first": "första",
        "page_last": "sista",
        "histlegend": "Val av diff: markera i klickrutorna för att jämföra versioner och tryck enter eller knappen längst ner.<br />\nFörklaring: '''({{int:cur}})''' = skillnad mot senaste version; '''({{int:last}})''' = skillnad mot föregående version; '''{{int:minoreditletter}}''' = mindre ändring.",
-       "history-fieldset-title": "Bläddra i historiken",
+       "history-fieldset-title": "Sök efter sidversioner",
        "history-show-deleted": "Endast raderade sidversioner",
        "histfirst": "äldsta",
        "histlast": "nyaste",
        "rcfilters-invalid-filter": "Ogiltigt filter",
        "rcfilters-empty-filter": "Inga aktiva filter. Alla bidrag visas.",
        "rcfilters-filterlist-title": "Filter",
+       "rcfilters-filterlist-whatsthis": "Vad är detta?",
        "rcfilters-filterlist-feedbacklink": "Ge återkoppling på nya (beta)filter",
        "rcfilters-highlightbutton-title": "Markera resultat",
        "rcfilters-highlightmenu-title": "Välj en färg",
        "rcfilters-highlightmenu-help": "Välj en färg att markera denna egenskap",
        "rcfilters-filterlist-noresults": "Inga filter hittades",
+       "rcfilters-noresults-conflict": "Inga resultat hittades eftersom sökkriterierna är i konflikt",
+       "rcfilters-state-message-subset": "Detta filter har ingen effekt, eftersom resultaten inkluderar följande, bredare {{PLURAL:$2|filter}} (försök att markera för att särskilja det): $1",
+       "rcfilters-state-message-fullcoverage": "Att markera alla filter i en grupp är detsamma som att markera inget alls, så detta filter har igen effekt. Grupper som inkluderas: $1",
        "rcfilters-filtergroup-registration": "Användarregistrering",
        "rcfilters-filter-registered-label": "Registrerade",
        "rcfilters-filter-registered-description": "Inloggade redigerare.",
        "rcfilters-filter-unregistered-label": "Oregistrerade",
        "rcfilters-filter-unregistered-description": "Redigerare som inte är inloggade.",
-       "rcfilters-filter-unregistered-conflicts-user-experience-level": "Filtret \"Oregistrerade\" är inaktivt eftersom dess effekt slås ut av följande {{PLURAL:$2|upplevelsefilter}}, som endast {{PLURAL:$2|hittade}} registrerade användare: $1",
+       "rcfilters-filter-unregistered-conflicts-user-experience-level": "Detta filter är i konflikt med följande {{PLURAL:$2|upplevelsefilter}}, som endast {{PLURAL:$2|hittar}} registrerade användare: $1",
        "rcfilters-filtergroup-authorship": "Redigera författarskap",
        "rcfilters-filter-editsbyself-label": "Dina egna redigeringar",
        "rcfilters-filter-editsbyself-description": "Redigeringar av dig.",
        "rcfilters-filter-editsbyother-label": "Redigeringar av andra",
        "rcfilters-filter-editsbyother-description": "Redigeringar som har skapats av andra användare (inte dig).",
        "rcfilters-filtergroup-userExpLevel": "Erfarenhetsnivå (endast för registrerade användare)",
-       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "Detta filter är inaktivt eftersom den endast hittar registrerade användare, så filtret \"Oregistrerade\" slår ut dess effekt.",
-       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "Filtret \"Oregistrerade\" är i konflikt med en eller flera upplevelsefilter. Upplevelsefilter hittar endast registrerade användare. Filtren som är i konflikt är markerade som inaktiv ovan.",
+       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "Upplevelsefilter hittar endast registrerade användare, så detta filter är i konflikt med filtret \"Oregistrerade\".",
+       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "Filtret \"Oregistrerade\" är i konflikt med en eller flera upplevelsefilter, som endast hittar registrerade användare. Filtren som är i konflikt är markerade i området med aktiva filter ovan.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Nykomlingar",
        "rcfilters-filter-user-experience-level-newcomer-description": "Färre än 10 redigeringar och 4 dagars aktivitet.",
        "rcfilters-filter-user-experience-level-learner-label": "Nybörjare",
        "rcfilters-filter-categorization-description": "Poster av sidor som läggs till eller tas bort från kategorier.",
        "rcfilters-filter-logactions-label": "Loggade åtgärder",
        "rcfilters-filter-logactions-description": "Administrativa åtgärder, kontoskapande, sidraderingar, uppladdningar....",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "Filtret \"Mindre redigering\" är i konflikt med en eller flera ändringstypfilter, eftersom vissa ändringstyper inte kan betecknas som \"mindre\". Filtren som är i konflikt är markerade i området med aktiva filter ovan.",
+       "rcfilters-hideminor-conflicts-typeofchange": "Vissa ändringstyper kan inte betecknas som \"mindre\", så detta filter är i konflikt med följande ändringstypfilter: $1",
+       "rcfilters-typeofchange-conflicts-hideminor": "Detta ändringstypfilter är i konflikt med filtret \"Mindre ändringar\". Vissa ändringstyper kan inte betecknas som \"mindre\".",
        "rcnotefrom": "Nedan visas {{PLURAL:$5|ändringen|ändringar}} sedan <strong>$3, $4</strong> (upp till <strong>$1</strong> ändringar visas).",
        "rclistfrom": "Visa nya ändringar från och med $2 $3",
        "rcshowhideminor": "$1 mindre ändringar",
        "whatlinkshere-hideimages": "$1 fillänkar",
        "whatlinkshere-filters": "Filter",
        "whatlinkshere-submit": "Gå",
-       "autoblockid": "Autoblockera #$1",
+       "autoblockid": "Autoblockering #$1",
        "block": "Blockera användare",
        "unblock": "Upphäv blockering av användare",
        "blockip": "Blockera {{GENDER:$1|användare}}",
        "newimages-summary": "Den här specialsidan visar de senast uppladdade filerna.",
        "newimages-legend": "Filter",
        "newimages-label": "Filnamn (eller en del av det):",
+       "newimages-user": "IP-adress eller användarnamn",
        "newimages-showbots": "Visa uppladdningar av botar",
        "newimages-hidepatrolled": "Dölj patrullerade uppladdningar",
        "noimages": "Ingenting att se.",
        "restrictionsfield-label": "Tillåtna IP-intervall:",
        "restrictionsfield-help": "En IP-adress eller CIDR-intervall per rad. För att aktivera allting, använd<br /><code>0.0.0.0/0</code><br /><code>::/0</code>",
        "revid": "sidversion $1",
-       "pageid": "sid-ID $1"
+       "pageid": "sid-ID $1",
+       "rawhtml-notallowed": "&lt;html&gt;-taggar kan inte användas utanför normala sidor."
 }
index 30fe744..8c16c16 100644 (file)
@@ -18,7 +18,8 @@
                        "Macofe",
                        "Matma Rex",
                        "Stranger195",
-                       "Emem.calist"
+                       "Emem.calist",
+                       "Asmen"
                ]
        },
        "tog-underline": "Pagsasalungguhit ng link:",
        "externaldberror": "Maaaring may kamalian sa pagpapatotoo ng database o kaya hindi ka pinahintulutang isapanahon ng iyong panlabas na account.",
        "login": "Lumagda",
        "nav-login-createaccount": "Lumagda / lumikha ng account",
-       "userlogin": "Lumagda / lumikha ng account",
-       "userloginnocreate": "Lumagda",
        "logout": "Umalis sa pagkaka-login",
        "userlogout": "Umalis sa pagkaka-login",
        "notloggedin": "Hindi naka-login",
        "userlogin-noaccount": "Wala ka pa bang account?",
        "userlogin-joinproject": "Sumali sa {{SITENAME}}",
-       "nologin": "Wala ka pang account? $1.",
-       "nologinlink": "Lumikha ng account",
        "createaccount": "Lumikha ng account",
-       "gotaccount": "May account ka na ba? $1.",
-       "gotaccountlink": "Lumagda",
-       "userlogin-resetlink": "Nakalimutan mo ang iyong mga detalyeng pang-login?",
        "userlogin-resetpassword-link": "Nakalimutan ba ang iyong password?",
        "userlogin-helplink2": "Tulong sa pag-login",
        "userlogin-loggedin": "Naka-login ka na bilang {{GENDER:$1|$1}}. Gamitin ang form sa ibaba upang maka-login bilang ibang tagagamit o user.",
        "createacct-another-email-ph": "Ipasok ang email address",
        "createaccountmail": "Gumamit ng pansamantalang random na password at ipadala ito sa email na nakasaad sa ibaba",
        "createacct-realname": "Tunay na pangalan (maaaring wala)",
-       "createaccountreason": "Dahilan:",
        "createacct-reason": "Dahilan",
        "createacct-reason-ph": "Bakit ka gagawa ng isa pang account?",
        "createacct-submit": "Likhain ang iyong account",
        "post-expand-template-argument-warning": "Babala: Naglalamang ang pahinang ito ng kahit isang pagaalitan ng padron na napakalaki ng sukat ng paglawak.  Tinanggal ang mga alitang ito.",
        "post-expand-template-argument-category": "Mga pahinang naglalaman ng mga tinanggal na mga alitan ng padron",
        "parser-template-loop-warning": "Nadiskubreng silo ng suleras: [[$1]]",
+       "template-loop-category-desc": "Ang pahina ay naglalaman ng kodigong-makapanguulit, halimbawa. Isang kodigo na magpapahiwatig sa sarili ng paguulit.",
        "parser-template-recursion-depth-warning": "Lumabis na sa nakatakdang lalim ng rekursyon (pormula) ng suleras ($1)",
        "language-converter-depth-warning": "Lumampas sa ($1) ang hangganan ng lalim ng pampalit ng wika",
        "node-count-exceeded-category": "Mga pahina kung saan nalampasan ang bilang ng buko",
        "hebrew-calendar-m6": "Adar",
        "hebrew-calendar-m6a": "Adar I",
        "hebrew-calendar-m6b": "Adar II",
-       "hebrew-calendar-m7": "Nisan",
+       "hebrew-calendar-m7": "Nisane",
        "hebrew-calendar-m8": "Iyar",
        "hebrew-calendar-m9": "Sivan",
        "hebrew-calendar-m10": "Tamuz",
        "hebrew-calendar-m6-gen": "Adar",
        "hebrew-calendar-m6a-gen": "Adar I",
        "hebrew-calendar-m6b-gen": "Adar II",
-       "hebrew-calendar-m7-gen": "Nisan",
+       "hebrew-calendar-m7-gen": "Nisane",
        "hebrew-calendar-m8-gen": "Iyar",
        "hebrew-calendar-m9-gen": "Sivan",
        "hebrew-calendar-m10-gen": "Tamuz",
        "logentry-newusers-autocreate": "Automatikong {{GENDER:$2|inilikha}} ang account ng tagagamit na $1",
        "logentry-upload-upload": "{{GENDER:$2|Ikinarga}} ni $1 ang $3",
        "rightsnone": "(wala)",
-       "revdelete-summary": "buod ng pagbabago",
        "feedback-adding": "Idinaragdag ang pakaing-tugon sa pahina...",
        "feedback-back": "Magbalik",
        "feedback-bugcheck": "Mahusay! Suriin lang na hindi pa ito isa sa [$1 nalalamang mga depekto].",
index 1a8e881..df2eb94 100644 (file)
                        "Superyetkin",
                        "Alikaan",
                        "By erdo can",
-                       "1917 Ekim Devrimi"
+                       "1917 Ekim Devrimi",
+                       "Asmen"
                ]
        },
        "tog-underline": "Bağlantıların altını çizme:",
        "tog-hideminor": "Son değişiklikler sayfasında küçük düzenlemeleri gizle",
-       "tog-hidepatrolled": "Son değişikliklerdeki devriyenin gördüğü düzenlemeleri gizle",
+       "tog-hidepatrolled": "Son değişiklikler sayfasında devriyenin gördüğü düzenlemeleri gizle",
        "tog-newpageshidepatrolled": "Yeni sayfalar listesinde devriyenin gördüğü sayfaları gizle",
        "tog-hidecategorization": "Sayfa kategorilendirmesini gizle",
        "tog-extendwatchlist": "İzleme listesini sadece en son değil, tüm değişiklikleri gösterecek şekilde genişlet",
        "tog-watchdeletion": "Sildiğim sayfaları ve dosyaları izleme listeme ekle",
        "tog-watchuploads": "Yüklediğim yeni dosyaları izleme listeme ekle",
        "tog-watchrollback": "Eski hâline getirdiğim sayfaları izleme listeme ekle",
-       "tog-minordefault": "Varsayılan olarak, bütün düzenlemeleri küçük düzenleme olarak işaretle",
-       "tog-previewontop": "Ön izlemeyi, düzenleme kutusunun öncesinde göster",
-       "tog-previewonfirst": "İlk düzenlemede ön izlemeyi göster",
+       "tog-minordefault": "Tüm düzenlemeleri varsayılan olarak küçük düzenleme olarak işaretle",
+       "tog-previewontop": "Düzenleme kutusu öncesinde önizleme göster",
+       "tog-previewonfirst": "İlk düzenlemede önizleme göster",
        "tog-enotifwatchlistpages": "İzleme listemdeki bir sayfa veya dosya değiştirilirse bana e-posta gönder",
        "tog-enotifusertalkpages": "Kullanıcı mesaj sayfamda değişiklik olduğunda bana e-posta gönder",
-       "tog-enotifminoredits": "Sayfalardaki ve dosyalardaki küçük değişikliklerde de bana e-posta gönder",
-       "tog-enotifrevealaddr": "Bildirim postalarında benim eposta adresimi açıkça göster",
+       "tog-enotifminoredits": "Sayfalardaki ve dosyalardaki küçük düzenlemelerde de bana e-posta gönder",
+       "tog-enotifrevealaddr": "Bildirim e-postalarında e-posta adresimi açıkça göster",
        "tog-shownumberswatching": "İzleyen kullanıcı sayısını göster",
        "tog-oldsig": "Mevcut imzanız:",
-       "tog-fancysig": "İmzaya vikimetin muamelesi yap (otomatik bir bağlantı olmadan)",
-       "tog-uselivepreview": "Canlı ön izlemeyi kullan",
-       "tog-forceeditsummary": "Özeti boş bıraktığımda beni uyar",
-       "tog-watchlisthideown": "İzleme listemde benim değişkliklerimi gizle",
-       "tog-watchlisthidebots": "İzleme listemde bot değişikliklerini gizle",
-       "tog-watchlisthideminor": "İzleme listemde küçük değişiklikleri gizle",
-       "tog-watchlisthideliu": "İzleme listemde, kayıtlı kullanıcılar tarafından yapılan değişiklikleri gizle",
-       "tog-watchlistreloadautomatically": "Filtre değiştiğinde izleme listesini otomatik yenile (JavaScript gerekir)",
-       "tog-watchlisthideanons": "İzleme listemde, anonim kullanıcılar tarafından yapılan değişiklikleri gizle",
-       "tog-watchlisthidepatrolled": "İzleme listesinde, devriye görmüş değişiklikleri gizle",
+       "tog-fancysig": "İmzayı viki metni olarak (otomatik bağlantı olmadan) işle",
+       "tog-uselivepreview": "Canlı önizleme kullan",
+       "tog-forceeditsummary": "Boş bir düzenleme özeti girdiğimde bana sor",
+       "tog-watchlisthideown": "Düzenlemelerimi izleme listesinde gizle",
+       "tog-watchlisthidebots": "Bot düzenlemelerini izleme listesinde gizle",
+       "tog-watchlisthideminor": "Küçük düzenlemeleri izleme listesinde gizle",
+       "tog-watchlisthideliu": "Oturum açmış kullanıcıların düzenlemelerini izleme listesinde gizle",
+       "tog-watchlistreloadautomatically": "Her süzgeç değişikliği olduğunda izleme listesini otomatik olarak yeniden yükle (JavaScript gerekir)",
+       "tog-watchlisthideanons": "Anonim kullanıcıların düzenlemelerini izleme listesinde gizle",
+       "tog-watchlisthidepatrolled": "Devriyenin gördüğü düzenlemeleri izleme listesinde gizle",
        "tog-watchlisthidecategorization": "Sayfa kategorilendirmesini gizle",
-       "tog-ccmeonemails": "Diğer kullanıcılara gönderdiğim e-postaların bir kopyasını bana da gönder",
-       "tog-diffonly": "Sayfa içeriğini, sürüm farklarının altında gösterme",
+       "tog-ccmeonemails": "Diğer kullanıcılara gönderdiğim e-postaların kopyalarını bana gönder",
+       "tog-diffonly": "Farkların altında sayfa içeriğini gösterme",
        "tog-showhiddencats": "Gizli kategorileri göster",
-       "tog-norollbackdiff": "Geri döndürme uygulandıktan sonra farkları gösterme",
-       "tog-useeditwarning": "Yaptığım değişiklikleri kaydetmeden sayfayı kapatırken beni uyar",
-       "tog-prefershttps": "Oturum açarken her zaman güvenli bağlantı kullanın",
-       "underline-always": "Daima",
-       "underline-never": "Asla",
-       "underline-default": "Tema ya da tarayıcı varsayılanı",
-       "editfont-style": "Düzenleme alanının yazı tipi:",
+       "tog-norollbackdiff": "Eski hâline getirdikten sonra farkı gösterme",
+       "tog-useeditwarning": "Bir düzenleme sayfasından değişiklikleri kaydetmeden ayrılırken beni uyar",
+       "tog-prefershttps": "Oturum açıkken her zaman güvenli bir bağlantı kullan",
+       "underline-always": "Her zaman",
+       "underline-never": "Hiçbir zaman",
+       "underline-default": "Görünüm ya da tarayıcı varsayılanı",
+       "editfont-style": "Düzenleme alanının yazı tipi biçemi:",
        "editfont-default": "Tarayıcı varsayılanı",
-       "editfont-monospace": "Sabit aralıklı yazı tipi",
-       "editfont-sansserif": "Çıkıntısız (Sans-serif) yazı tipi",
-       "editfont-serif": "Çıkıntılı (serif) yazı tipi",
+       "editfont-monospace": "Tek aralıklı yazı tipi",
+       "editfont-sansserif": "Sans-serif yazı tipi",
+       "editfont-serif": "Serif yazı tipi",
        "sunday": "Pazar",
        "monday": "Pazartesi",
        "tuesday": "Salı",
        "january": "Ocak",
        "february": "Şubat",
        "march": "Mart",
-       "april": "Nisan",
+       "april": "Nisane",
        "may_long": "Mayıs",
        "june": "Haziran",
        "july": "Temmuz",
        "january-gen": "Ocak",
        "february-gen": "Şubat",
        "march-gen": "Mart",
-       "april-gen": "Nisan",
+       "april-gen": "Nisane",
        "may-gen": "Mayıs",
        "june-gen": "Haziran",
        "july-gen": "Temmuz",
        "january-date": "$1 Ocak",
        "february-date": "$1 Şubat",
        "march-date": "$1 Mart",
-       "april-date": "$1 Nisan",
+       "april-date": "$1 Nisane",
        "may-date": "$1 Mayıs",
        "june-date": "$1 Haziran",
        "july-date": "$1 Temmuz",
        "december-date": "$1 Aralık",
        "period-am": "ÖÖ",
        "period-pm": "ÖS",
-       "pagecategories": "{{PLURAL:$1|Kategori|Kategoriler}}",
+       "pagecategories": "$1 kategori",
        "category_header": "\"$1\" kategorisindeki sayfalar",
        "subcategories": "Alt kategoriler",
-       "category-media-header": "\"$1\" kategorisindeki dosyalar",
-       "category-empty": "<em>Bu kategoride henüz herhangi bir sayfa ya da dosya bulunmamaktadır.</em>",
-       "hidden-categories": "{{PLURAL:$1|Gizli kategori|Gizli kategoriler}}",
+       "category-media-header": "\"$1\" kategorisindeki ortamlar",
+       "category-empty": "<em>Şu anda bu kategoride herhangi bir sayfa ya da Ortam bulunmuyor.</em>",
+       "hidden-categories": "$1 gizli kategori",
        "hidden-category-category": "Gizli kategoriler",
-       "category-subcat-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategoride aşağıdaki {{PLURAL:$1|alt kategori|$1 alt kategori}} dahil $2 alt kategori vardır.}}",
-       "category-subcat-count-limited": "Bu kategori aşağıdaki {{PLURAL:$1|alt kategoriye|$1 alt kategoriye}} sahiptir.",
+       "category-subcat-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki alt kategoriyi içermektedir.|Bu kategoride aşağıdaki $1 alt kategori dâhil toplam $2 alt kategori vardır.}}",
+       "category-subcat-count-limited": "Bu kategori aşağıdaki $1 alt kategoriye sahiptir.",
        "category-article-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki sayfayı içermektedir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|sayfa|$1 sayfa}} bu kategoridedir.}}",
        "category-article-count-limited": "Bu kategoride {{PLURAL:$1|sayfa|$1 sayfa}} bulunmaktadır.",
        "category-file-count": "{{PLURAL:$2|Bu kategori sadece aşağıdaki dosyayı içerir.|Toplam $2 taneden, aşağıdaki {{PLURAL:$1|dosya|$1 dosya}} bu kategoridedir.}}",
        "category-file-count-limited": "Aşağıdaki {{PLURAL:$1|dosya|$1 dosya}} bu kategoridedir.",
-       "listingcontinuesabbrev": "(devam)",
+       "listingcontinuesabbrev": "devam",
        "index-category": "Dizinlenmiş sayfalar",
        "noindex-category": "Dizinlenmemiş sayfalar",
        "broken-file-category": "Bozuk dosya bağlantıları içeren sayfalar",
        "categoryviewer-pagedlinks": "($1) ($2)",
        "about": "Hakkında",
        "article": "İçerik sayfası",
-       "newwindow": "(yeni bir pencerede açılır)",
+       "newwindow": "(yeni pencerede açılır)",
        "cancel": "İptal",
        "moredotdotdot": "Dahası...",
        "morenotlisted": "Bu liste eksik olabilir.",
        "navigation": "Gezinti",
        "and": "&#32;ve",
        "qbfind": "Bul",
-       "qbbrowse": "Tara",
-       "qbedit": "Değiştir",
+       "qbbrowse": "Gözat",
+       "qbedit": "Düzenle",
        "qbpageoptions": "Bu sayfa",
        "qbmyoptions": "Sayfalarım",
        "faq": "SSS",
        "templatepage": "Şablon sayfasını görüntüle",
        "viewhelppage": "Yardım sayfasına görüntüle",
        "categorypage": "Kategori sayfasını görüntüle",
-       "viewtalkpage": "Tartışma sayfasını görüntüle",
+       "viewtalkpage": "Tartışmayı gör",
        "otherlanguages": "Diğer dillerde",
        "redirectedfrom": "($1 sayfasından yönlendirildi)",
        "redirectpagesub": "Yönlendirme sayfası",
        "currentevents-url": "Project:Güncel olaylar",
        "disclaimers": "Sorumluluk reddi",
        "disclaimerpage": "Project:Genel sorumluluk reddi",
-       "edithelp": "Nasıl değiştirilir?",
+       "edithelp": "Düzenleme yardımı",
        "helppage-top-gethelp": "Yardım",
        "mainpage": "Ana Sayfa",
        "mainpage-description": "Ana sayfa",
        "wrongpassword": "Parolayı yanlış girdiniz. Lütfen tekrar deneyiniz.",
        "wrongpasswordempty": "Boş parola girdiniz. Lütfen tekrar deneyiniz.",
        "passwordtooshort": "Parolalar en az {{PLURAL:$1|1 karakter|$1 karakter}} uzunluğunda olmalı.",
-       "passwordtoolong": "Parolalar en az {{PLURAL:$1|1 karakter|$1 karakter}} uzunluğunda olmalı.",
+       "passwordtoolong": "Parolalar $1 karakterden uzun olamaz.",
        "passwordtoopopular": "Sıklıkla seçilen parolalar kullanılamaz. Lütfen daha özgün bir parola belirleyin.",
-       "password-name-match": "Şifreniz kullanıcı adınızdan farklı olmalıdır.",
-       "password-login-forbidden": "Bu kullanıcı adı ve şifre kullanımı yasaklanmıştır",
+       "password-name-match": "Parolanız kullanıcı adınızdan farklı olmalıdır.",
+       "password-login-forbidden": "Bu kullanıcı adı ve parolanın kullanımı yasaklanmıştır.",
        "mailmypassword": "Parolayı sıfırla",
        "passwordremindertitle": "{{SITENAME}} için yeni geçici şifre",
        "passwordremindertext": "Birisi (muhtemelen siz, $1 IP adresinden) {{SITENAME}} ($4) için yeni bir parola gönderilmesi istedi. \"$2\" kullanıcısına geçici olarak \"$3\" parolası oluşturuldu. Eğer bu sizin isteğiniz ise, oturum açıp yeni bir parola oluşturmanız gerekmektedir. Geçici parolanızın süresi {{PLURAL:$5|1 gün|$5 gün}} içinde dolacaktır.\n\nParola değişimini siz istemediyseniz veya parolanızı hatırladıysanız ve artık parolanızı değiştirmek istemiyorsanız; bu mesajı önemsemeyerek eski parolanızı kullanmaya devam edebilirsiniz.",
        "noemail": "\"$1\" adlı kullanıcıya kayıtlı bir e-posta adresi yok.",
        "noemailcreate": "Geçerli bir e-posta adresi sağlamalısınız",
        "passwordsent": "\"$1\" adına kayıtlı e-posta adresine yeni bir parola gönderildi. Oturumu, lütfen, iletiyi aldıktan sonra açın.",
-       "blocked-mailpassword": "IP adresiniz düzenleme yapmaya engellenmiştir. Kötüye kullanımın önüne geçmek için söz konusu IP adresinden şifre kurtarmaya izin verilmemektedir.",
+       "blocked-mailpassword": "IP adresinizin düzenleme yapması engellenmiştir. Kötüye kullanımı önlemek için, bu IP adresinin parola kurtarmadan yararlanmasına izin verilmemektedir.",
        "eauthentsent": "Belirtilen e-posta adresine onay kodu içeren bir e-posta gönderildi.\nHesaba başka bir e-posta gönderilmeden önce, e-postadaki yönergeleri uygulayıp, hesabın gerçekten size ait olduğunu onaylamanız gerekir.",
        "throttled-mailpassword": "Bir parola sıfırlama e-postası son {{PLURAL:$1|bir saat|$1 saat}} içinde zaten gönderildi. Hizmeti kötüye kullanmayı önlemek için, her {{PLURAL:$1|bir saatte|$1 saatte}} sadece bir parola sıfırlama e-postası gönderilecektir.",
        "mailerror": "E-posta gönderim hatası: $1",
        "emaildisabled": "Bu siteden e-posta gönderemezsiniz.",
        "accountcreated": "Hesap açıldı",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]]([[{{ns:User talk}}:$1|msj]])   için kullanıcı hesabı oluşturuldu.",
-       "createaccount-title": "{{SITENAME}} için yeni kullanıcı hesabı oluşturulması",
+       "createaccount-title": "{{SITENAME}} için hesap oluşturma",
        "createaccount-text": "Birisi {{SITENAME}} sitesinde ($4) sizin e-posta adresinizi kullarak, şifresi \"$3\" olan, \"$2\" isimli bir hesap oluşturdu.\n\nSiteye giriş yapmalı ve parolanızı değiştirmelisiniz.\n\nEğer kullanıcı hesabını yanlışlıkla oluşturmuş iseniz, bu mesajı yoksayabilirsiniz.",
-       "login-throttled": "Çok fazla yeni oturum açma girişiminde bulundunuz.\nDevam etmeden önce $1 bekleyin.",
+       "login-throttled": "Yakın zamanda çok fazla oturum açma girişiminde bulundunuz.\nLütfen yeniden denemeden önce $1 süreyle bekleyin.",
        "login-abort-generic": "Giriş başarısız - Durduruldu",
        "login-migrated-generic": "Hesabınız aktarılmış ve kullanıcı adınız artık bu vikide yok.",
        "loginlanguagelabel": "Dil: $1",
        "createacct-another-realname-tip": "Gerçek adınız isteğe bağlıdır.\nEğer gerçek adınızı belirtirseniz, çalışmalarınıza atıfta bulunulması için de kullanılacaktır.",
        "pt-login": "Giriş yap",
        "pt-login-button": "Oturum aç",
-       "pt-login-continue-button": "Oturum açmaya devam edin",
+       "pt-login-continue-button": "Oturum açmaya devam et",
        "pt-createaccount": "Hesap oluştur",
        "pt-userlogout": "Oturumu kapat",
-       "php-mail-error-unknown": "PHP's mail() fonksiyonunda bilinmeyen hata",
+       "php-mail-error-unknown": "PHP'nin mail() işlevinde bilinmeyen hata.",
        "user-mail-no-addy": "Bir e-posta adresi olmadan e-posta göndermeye çalıştı.",
        "user-mail-no-body": "Boş veya geçerli olmayan bir şekilde e-posta gönderilmeye çalışıldı.",
        "changepassword": "Parolayı değiştir",
        "previousrevision": "← Önceki hâli",
        "nextrevision": "Sonraki hâli →",
        "currentrevisionlink": "En güncel hâli",
-       "cur": "fark",
+       "cur": "gün",
        "next": "sonraki",
        "last": "son",
        "page_first": "ilk",
        "prefs-help-prefershttps": "Bu tercih bir sonraki girişinizde etkili olacaktır.",
        "prefswarning-warning": "Henüz kaydedilmemiş değişiklikler yaptınız. \"$\"'e basmadığınız takdirde tercihleriniz güncellenmeyecektir.",
        "prefs-tabs-navigation-hint": "İpucu: Sekmeler listesindeki sekmeler arasında gezinmek için sağ ve sol ok tuşlarını kullanabilirsiniz.",
-       "userrights": "Kullanıcı hakları yönetimi",
+       "userrights": "Kullanıcı hakları",
        "userrights-lookup-user": "Bir kullanıcı seç",
        "userrights-user-editname": "Kullanıcı adı giriniz:",
        "editusergroup": "Kullanıcı gruplarını gör",
        "grant-viewmywatchlist": "İzleme listeni gör",
        "newuserlogpage": "Yeni kullanıcı kayıtları",
        "newuserlogpagetext": "En son kaydolan kullanıcı kayıtları.",
-       "rightslog": "Kullanıcı hakları kayıtları",
-       "rightslogtext": "Kullanıcı hakları değişiklikleri kayıtları.",
+       "rightslog": "Kullanıcı hakları günlüğü",
+       "rightslogtext": "Bu, kullanıcı hakları değişiklikleri için bir günlüktür.",
        "action-read": "bu sayfayı okumaya",
        "action-edit": "bu sayfayı değiştirmeye",
        "action-createpage": "sayfa oluşturmaya",
        "magiclink-tracking-isbn": "ISBN sihirli bağlantısını kullanan sayfalar",
        "specialloguserlabel": "Kullanıcı:",
        "speciallogtitlelabel": "Hedef (başlık ya da kullanıcı):",
-       "log": "Kayıtlar",
+       "log": "Günlükler",
        "logeventslist-submit": "Göster",
        "all-logs-page": "Tüm ortak günlükler",
        "alllogstext": "{{SITENAME}} için mevcut tüm günlüklerin birleşik gösterimi.\nGünlük tipini, kullanıcı adını (büyük-küçük harf duyarlı), ya da etkilenen sayfayı (yine büyük-küçük harf duyarlı) seçerek görünümü daraltabilirsiniz.",
        "undeletedfiles": "{{PLURAL:$1|1 dosya|$1 dosya}} geri getirildi.",
        "cannotundelete": "Silme başarısız oldu:\n$1",
        "undeletedpage": "'''$1 sayfası geri getirildi'''\n\nÖnceki silme ve geri getirme işlemleri için [[Special:Log/delete|silme kayıtları]]na bakınız.",
-       "undelete-header": "Daha önce silinmiş sayfaları görmek için bakınız: [[Special:Log/delete|silme kayıtları]].",
+       "undelete-header": "Yakın zamanda silinen sayfaları görmek için [[Special:Log/delete|silme günlüğü]]ne bakın.",
        "undelete-search-title": "Silinen sayfaları ara",
        "undelete-search-box": "Silinmiş sayfaları ara",
        "undelete-search-prefix": "Şununla başlayan sayfaları göster:",
        "sp-contributions-suppresslog": "kullanıcının silinen katkıları",
        "sp-contributions-deleted": "kullanıcının silinen katkıları",
        "sp-contributions-uploads": "yüklenenler",
-       "sp-contributions-logs": "kayıtlar",
+       "sp-contributions-logs": "günlükler",
        "sp-contributions-talk": "mesaj",
        "sp-contributions-userrights": "kullanıcı hakları yönetimi",
        "sp-contributions-blocked-notice": "Bu kullanıcı engellenmiştir. Referans için en son engellenme kaydı aşağıda belirtilmiştir:",
        "specialpages-group-maintenance": "Bakım raporları",
        "specialpages-group-other": "Diğer özel sayfalar",
        "specialpages-group-login": "Oturum aç / hesap edin",
-       "specialpages-group-changes": "Son değişiklikler ve kayıtlar",
+       "specialpages-group-changes": "Son değişiklikler ve günlükler",
        "specialpages-group-media": "Dosya raporları ve yüklemeler",
        "specialpages-group-users": "Kullanıcılar ve hakları",
        "specialpages-group-highuse": "Çok kullanılan sayfalar",
index f907c59..c16cf51 100644 (file)
        "login": "Керү",
        "login-security": "Шәхесегезне раслагыз",
        "nav-login-createaccount": "Керү / теркәлү",
-       "userlogin": "Керү / теркәлү",
-       "userloginnocreate": "Керү",
        "logout": "Чыгу",
        "userlogout": "Чыгу",
        "notloggedin": "Сез хисап язмагызга кермәгәнсез",
        "userlogin-noaccount": "Хисап язмагыз юкмы?",
        "userlogin-joinproject": "{{SITENAME}} проектына керү",
-       "nologin": "Кулланучы исемең юкмы? '''$1'''",
-       "nologinlink": "Хисап язмасы төзү",
        "createaccount": "Яңа кулланучыны теркәү",
-       "gotaccount": "Сез инде теркәлдегезме? '''$1'''.",
-       "gotaccountlink": "Керү",
-       "userlogin-resetlink": "Серсүзегезне оныттыгызмы?",
        "userlogin-resetpassword-link": "Серсүзне алыштырыргамы?",
        "userlogin-helplink2": "Керү буенча ярдәм",
        "userlogin-createanother": "Башка хисап язмасы төзү",
        "createacct-another-email-ph": "Электрон почта юлламагызны кертегез",
        "createaccountmail": "Очраклы рәвештә ясалган ваҡытлыча серсузне файдаланырга һәм аны минем электрон почтама җибәрергә",
        "createacct-realname": "Чын исем (мәҗбүри түгел)",
-       "createaccountreason": "Сәбәп:",
        "createacct-reason": "Сәбәп",
        "createacct-reason-ph": "Нигә сез яңа зисап язмасы төзисез",
        "createacct-submit": "Хисап язмасы төзү",
        "logentry-newusers-autocreate": "{{GENDER:$2|кулланучының}} автоматик рәвештә $1 хисап язмасы төзелде",
        "logentry-upload-upload": "$1 {{GENDER:$2|йөкләде}} $3",
        "rightsnone": "(юк)",
-       "revdelete-summary": "үзгәртүләр тасвирламасы",
        "feedback-adding": "Фикерне сәхифәгә өстәү ...",
        "feedback-back": "Артка",
        "feedback-bugnew": "Мин тикшердем. Яңа хата турында хәбәр итү",
index 9df7278..9566f63 100644 (file)
        "post-expand-template-argument-warning": "'''Увага:''' Ця сторінка містить принаймні один аргумент шаблону, який має надто великий розмір для розгортання.\nЦі аргументи були проігноровані.",
        "post-expand-template-argument-category": "Сторінки, які містять пропущені аргументи шаблонів",
        "parser-template-loop-warning": "Виявлена петля у шаблонах: [[$1]]",
+       "template-loop-category": "Сторінки з петлями шаблонів",
+       "template-loop-category-desc": "Ця сторінка містить петлю шаблонів, тобто шаблон, який рекурсивно викликає сам себе.",
        "parser-template-recursion-depth-warning": "Перевищене обмеження глибини рекурсії шаблону ($1)",
        "language-converter-depth-warning": "Перевищене обмеження глибини мовного конвертора ($1)",
        "node-count-exceeded-category": "Сторінки, на яких перевищено лічильник вузлів",
        "page_first": "перша",
        "page_last": "остання",
        "histlegend": "Вибір версії: Позначте у круглих віконцях версії для порівняння і натисніть «Enter» або кнопку внизу.\n\nПояснення: (поточн.) = відмінності від поточної версії,\n(ост.) = відмінності від попередньої версії, '''м''' = незначне редагування",
-       "history-fieldset-title": "Ð\9fеÑ\80еглÑ\8fнÑ\83Ñ\82и Ñ\96Ñ\81Ñ\82оÑ\80Ñ\96Ñ\8e",
-       "history-show-deleted": "ТÑ\96лÑ\8cки Ð²Ð¸Ð»Ñ\83Ñ\87енÑ\96",
+       "history-fieldset-title": "Ð\9fоÑ\88Ñ\83к Ð²ÐµÑ\80Ñ\81Ñ\96й",
+       "history-show-deleted": "Ð\9bиÑ\88е Ð²Ð¸Ð»Ñ\83Ñ\87енÑ\96 Ð²ÐµÑ\80Ñ\81Ñ\96Ñ\97",
        "histfirst": "найдавніші",
        "histlast": "найновіші",
        "historysize": "($1 {{PLURAL:$1|байт|байти|байтів}})",
        "prefs-help-prefershttps": "Цей параметр набуде чинності при вашому наступному вході у систему.",
        "prefswarning-warning": "Ви внесли в свої налаштування зміни, які ще не були збережені.\nЯкщо ви залишите цю сторінку, не натиснувши \"$1\", налаштування не будуть оновлені.",
        "prefs-tabs-navigation-hint": "Порада: Ви можете використовувати клавіші стрілок вліво і вправо для переходу між вкладками в списку вкладок.",
-       "userrights": "Ð\9aеÑ\80Ñ\83ваннÑ\8f Ð¿Ñ\80авами користувачів",
+       "userrights": "Ð\9fÑ\80ава користувачів",
        "userrights-lookup-user": "Виберіть користувача",
        "userrights-user-editname": "Введіть ім'я користувача:",
        "editusergroup": "Завантажити групи користувачів",
        "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-registration": "Реєстрація користувача",
        "rcfilters-filter-registered-label": "Зареєстровані",
        "rcfilters-filter-registered-description": "Користувачі, що увійшли в систему.",
        "rcfilters-filter-unregistered-label": "Незареєстровані",
        "rcfilters-filter-unregistered-description": "Користувачі, які не ввійшли в систему.",
-       "rcfilters-filter-unregistered-conflicts-user-experience-level": "ФÑ\96лÑ\8cÑ\82Ñ\80 Â«Ð\9dезаÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованÑ\96» Ð½ÐµÐ°ÐºÑ\82ивний, Ð¾Ñ\81кÑ\96лÑ\8cки Ð¹Ð¾Ð³Ð¾ Ð²Ð¿Ð»Ð¸Ð² Ð½Ñ\96велÑ\8eÑ\94Ñ\82Ñ\8cÑ\81Ñ\8f {{PLURAL:$2|таким фільтром|такими фільтрами}} досвіду, {{PLURAL:$2|який знаходить|які знаходять}} лише зареєстрованих користувачів: $1",
+       "rcfilters-filter-unregistered-conflicts-user-experience-level": "Цей Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80 ÐºÐ¾Ð½Ñ\84лÑ\96кÑ\82Ñ\83Ñ\94 Ð· {{PLURAL:$2|таким фільтром|такими фільтрами}} досвіду, {{PLURAL:$2|який знаходить|які знаходять}} лише зареєстрованих користувачів: $1",
        "rcfilters-filtergroup-authorship": "Авторство редагувань",
        "rcfilters-filter-editsbyself-label": "Ваші власні редагування",
        "rcfilters-filter-editsbyself-description": "Редагування, зроблені Вами.",
        "rcfilters-filter-editsbyother-label": "Редагування, зроблені іншими",
        "rcfilters-filter-editsbyother-description": "Редагування, виконані іншими користувачами (не Вами).",
        "rcfilters-filtergroup-userExpLevel": "Рівень досвіду (тільки для зареєстрованих користувачів)",
-       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "Цей Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80 Ð½ÐµÐ°ÐºÑ\82ивний, Ð¾Ñ\81кÑ\96лÑ\8cки Ð²Ñ\96н Ð·Ð½Ð°Ñ\85одиÑ\82Ñ\8c Ð»Ð¸Ñ\88е Ð·Ð°Ñ\80еÑ\94Ñ\81Ñ\82Ñ\80ованиÑ\85 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в, Ñ\82ож Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80 Â«Ð\9dезаÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованÑ\96» Ð½Ñ\96велÑ\8eÑ\94 Ð¹Ð¾Ð³Ð¾ Ð²Ð¿Ð»Ð¸Ð².",
-       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "ФÑ\96лÑ\8cÑ\82Ñ\80 Â«Ð\9dезаÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованÑ\96» Ð¿ÐµÑ\80ебÑ\83ваÑ\94 Ð² ÐºÐ¾Ð½Ñ\84лÑ\96кÑ\82Ñ\96 Ð· Ð¾Ð´Ð½Ð¸Ð¼ Ð°Ð±Ð¾ Ð±Ñ\96лÑ\8cÑ\88е Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80Ñ\96в Ð´Ð¾Ñ\81вÑ\96дÑ\83. Ð¤Ñ\96лÑ\8cÑ\82Ñ\80и Ð´Ð¾Ñ\81вÑ\96дÑ\83 Ð·Ð½Ð°Ñ\85одÑ\8fÑ\82Ñ\8c Ð»Ð¸Ñ\88е Ð·Ð°Ñ\80еÑ\94Ñ\81Ñ\82Ñ\80ованиÑ\85 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в. Ð\9aонÑ\84лÑ\96кÑ\82нÑ\96 Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80и Ð¿Ð¾Ð·Ð½Ð°Ñ\87енÑ\96 Ð²Ð¸Ñ\89е Ñ\8fк Ð½ÐµÐ°ÐºÑ\82ивнÑ\96.",
+       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "ФÑ\96лÑ\8cÑ\82Ñ\80и Ð´Ð¾Ñ\81вÑ\96дÑ\83 Ð·Ð½Ð°Ñ\85одÑ\8fÑ\82Ñ\8c Ð»Ð¸Ñ\88е Ð·Ð°Ñ\80еÑ\94Ñ\81Ñ\82Ñ\80ованиÑ\85 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в, Ñ\82ож Ñ\86ей Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80 ÐºÐ¾Ð½Ñ\84лÑ\96кÑ\82Ñ\83Ñ\94 Ð· Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80ом Â«Ð\9dезаÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованÑ\96».",
+       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "ФÑ\96лÑ\8cÑ\82Ñ\80 Â«Ð\9dезаÑ\80еÑ\94Ñ\81Ñ\82Ñ\80ованÑ\96» ÐºÐ¾Ð½Ñ\84лÑ\96кÑ\82Ñ\83Ñ\94 Ð· Ð¾Ð´Ð½Ð¸Ð¼ Ð°Ð±Ð¾ Ð±Ñ\96лÑ\8cÑ\88е Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80ами Ð´Ð¾Ñ\81вÑ\96дÑ\83, Ñ\8fкÑ\96 Ð·Ð½Ð°Ñ\85одÑ\8fÑ\82Ñ\8c Ð»Ð¸Ñ\88е Ð·Ð°Ñ\80еÑ\94Ñ\81Ñ\82Ñ\80ованиÑ\85 ÐºÐ¾Ñ\80иÑ\81Ñ\82Ñ\83ваÑ\87Ñ\96в. Ð\9aонÑ\84лÑ\96кÑ\82нÑ\96 Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80и Ð¿Ð¾Ð·Ð½Ð°Ñ\87енÑ\96 Ð²Ð¸Ñ\89е Ð² Ð´Ñ\96лÑ\8fнÑ\86Ñ\96 Ð°ÐºÑ\82ивниÑ\85 Ñ\84Ñ\96лÑ\8cÑ\82Ñ\80Ñ\96в.",
        "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-categorization-description": "Записи про додавання або вилучення сторінок з категорій.",
        "rcfilters-filter-logactions-label": "Журнальні дії",
        "rcfilters-filter-logactions-description": "Адміністративні дії, створення облікових записів, видалення сторінок, завантаження файлів тощо.",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "Фільтр «Незначні редагування» конфліктує з одним або більше фільтрів за типом змін, оскільки певні типи змін не можна позначити як «незначні». Конфліктні фільтри позначені в ділянці активних фільтрів угорі.",
+       "rcfilters-hideminor-conflicts-typeofchange": "Певні типи змін не можна позначити як «незначні», тож цей фільтр конфліктує з такими фільтрами за типом змін: $1",
+       "rcfilters-typeofchange-conflicts-hideminor": "Цей фільтр за типом змін конфліктує з фільтром «Незначні редагування». Певні типи змін не можна позначати як «незначні».",
        "rcnotefrom": "Нижче знаходяться {{PLURAL:$5|редагування}} з <strong>$3, $4</strong> (відображено до <strong>$1</strong>).",
        "rclistfrom": "Показати редагування починаючи з $3 $2.",
        "rcshowhideminor": "$1 незначні редагування",
        "newimages-summary": "Ця спеціальна сторінка показує останні завантажені файли.",
        "newimages-legend": "Фільтр",
        "newimages-label": "Назва файлу (або її частина):",
+       "newimages-user": "IP-адреса або ім'я користувача.",
        "newimages-showbots": "Показати завантаження ботами",
        "newimages-hidepatrolled": "Приховати відпатрульовані завантаження",
        "noimages": "Файли відсутні.",
        "restrictionsfield-label": "Дозволені діапазони IP-адрес:",
        "restrictionsfield-help": "Одна IP-адреса або CIDR-діапазон на рядок. Щоб увімкнути все, використайте:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "версія $1",
-       "pageid": "ID сторінки $1"
+       "pageid": "ID сторінки $1",
+       "rawhtml-notallowed": "Теги &lt;html&gt; не можна використовувати за межами звичайних сторінок."
 }
index ca65ea9..fbb751c 100644 (file)
@@ -34,7 +34,8 @@
                        "Quenhitran",
                        "Matma Rex",
                        "Xð",
-                       "Nguyên Lê"
+                       "Nguyên Lê",
+                       "Asmen"
                ]
        },
        "tog-underline": "Gạch chân liên kết:",
        "login": "Đăng nhập",
        "login-security": "Xác minh danh tính của bạn",
        "nav-login-createaccount": "Đăng nhập / Mở tài khoản",
-       "userlogin": "Đăng nhập / Mở tài khoản",
-       "userloginnocreate": "Đăng nhập",
        "logout": "Đăng xuất",
        "userlogout": "Đăng xuất",
        "notloggedin": "Chưa đăng nhập",
        "userlogin-noaccount": "Bạn chưa có tài khoản?",
        "userlogin-joinproject": "Tham gia {{SITENAME}}",
-       "nologin": "Bạn chưa có tài khoản ở đây? '''$1'''.",
-       "nologinlink": "Mở tài khoản mới",
        "createaccount": "Mở tài khoản",
-       "gotaccount": "Đã mở tài khoản rồi? '''$1'''.",
-       "gotaccountlink": "Đăng nhập",
-       "userlogin-resetlink": "Quên mất thông tin đăng nhập?",
        "userlogin-resetpassword-link": "Quên mật khẩu?",
        "userlogin-helplink2": "Trợ giúp đăng nhập",
        "userlogin-loggedin": "Bạn đã đăng nhập với tên {{GENDER:$1}}$1.\nHãy sử dụng biểu mẫu ở dưới để đăng nhập với tài khoản người dùng khác.",
        "createaccountmail": "Sử dụng mật khẩu ngẫu nhiên tạm và gửi nó cho địa chỉ thư điện tử được chỉ định",
        "createaccountmail-help": "Có thể sử dụng để tạo tài khoản cho người khác mà không được biết mật khẩu.",
        "createacct-realname": "Tên thật (tùy chọn)",
-       "createaccountreason": "Lý do:",
        "createacct-reason": "Lý do",
        "createacct-reason-ph": "Nhập lý do tạo một tài khoản khác",
        "createacct-reason-help": "Thông điệp xuất hiện trong nhật trình tạo tài khoản",
        "rcfilters-filter-editsbyother-label": "Người khác",
        "rcfilters-filter-editsbyother-description": "Các sửa đổi của người khác.",
        "rcfilters-filtergroup-userExpLevel": "Trình độ (chỉ người dùng đã đăng ký)",
-       "rcfilters-filter-userExpLevel-newcomer-label": "Người mới đến",
-       "rcfilters-filter-userExpLevel-newcomer-description": "Chưa tới 10 sửa đổi và 4 ngày hoạt động.",
-       "rcfilters-filter-userExpLevel-learner-label": "Người đang tập",
-       "rcfilters-filter-userExpLevel-learner-description": "Nhiều ngày hoạt động và sửa đổi hơn “Người mới đến” mà ít hơn “Người có kinh nghiệm”.",
-       "rcfilters-filter-userExpLevel-experienced-label": "Người có kinh nghiệm",
-       "rcfilters-filter-userExpLevel-experienced-description": "Hơn 30 ngày hoạt động và 500 sửa đổi.",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Người mới đến",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Chưa tới 10 sửa đổi và 4 ngày hoạt động.",
+       "rcfilters-filter-user-experience-level-learner-label": "Người đang tập",
+       "rcfilters-filter-user-experience-level-learner-description": "Nhiều ngày hoạt động và sửa đổi hơn “Người mới đến” mà ít hơn “Người có kinh nghiệm”.",
+       "rcfilters-filter-user-experience-level-experienced-label": "Người có kinh nghiệm",
+       "rcfilters-filter-user-experience-level-experienced-description": "Hơn 30 ngày hoạt động và 500 sửa đổi.",
        "rcfilters-filtergroup-automated": "Đóng góp tự động",
        "rcfilters-filter-bots-label": "Bot",
        "rcfilters-filter-bots-description": "Các sửa đổi của công cụ tự động.",
        "hebrew-calendar-m6": "Adar",
        "hebrew-calendar-m6a": "Adar 1",
        "hebrew-calendar-m6b": "Adar 2",
-       "hebrew-calendar-m7": "Nisan",
+       "hebrew-calendar-m7": "Nisane",
        "hebrew-calendar-m8": "Iyar",
        "hebrew-calendar-m9": "Sivan",
        "hebrew-calendar-m10": "Tamuz",
        "logentry-tag-update-revision": "$1 {{GENDER:$2}}đã cập nhật thẻ của phiên bản $4 của trang $3 ({{PLURAL:$7}}đã thêm $6; {{PLURAL:$9}}loại bỏ $8)",
        "logentry-tag-update-logentry": "$1 {{GENDER:$2}}đã cập nhật thẻ của mục nhật trình $5 của trang $3 ({{PLURAL:$7}}đã thêm $6; {{PLURAL:$9}}loại bỏ $8)",
        "rightsnone": "(không có)",
-       "revdelete-summary": "tóm lược sửa đổi",
        "rightslogentry-temporary-group": "$1 (tạm thời cho đến $2)",
        "feedback-adding": "Đang thêm thông tin phản hồi vào trang…",
        "feedback-back": "Lùi",
index 0a467da..f03e693 100644 (file)
        "post-expand-template-argument-warning": "<strong>警告:</strong>本页面包含至少一个展开后过大的模板参数。这些参数会被忽略。",
        "post-expand-template-argument-category": "含有略过模板参数的页面",
        "parser-template-loop-warning": "检查到模板循环:[[$1]]",
+       "template-loop-category": "有模板循环的页面",
+       "template-loop-category-desc": "页面存在模板循环,就是递归进行自我调用的模板。",
        "parser-template-recursion-depth-warning": "模板递归深度越限($1)",
        "language-converter-depth-warning": "字词转换器深度越限($1)",
        "node-count-exceeded-category": "页面的节点数超出限制",
        "newimages-summary": "本特殊页面展示最后上传的文件。",
        "newimages-legend": "过滤",
        "newimages-label": "文件名(或它的一部份):",
+       "newimages-user": "IP地址或用户名",
        "newimages-showbots": "显示机器人上传",
        "newimages-hidepatrolled": "隐藏已巡查的上传",
        "noimages": "无可查看文件。",
        "restrictionsfield-label": "允许的IP段:",
        "restrictionsfield-help": "每行一个IP地址或CIDR段。要启用任何地址或地址段,可使用:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "修订版本$1",
-       "pageid": "页面ID$1"
+       "pageid": "页面ID$1",
+       "rawhtml-notallowed": "&lt;html&gt;标签不能在一般页面以外使用。"
 }
index f6cb76f..eda13db 100644 (file)
        "post-expand-template-argument-warning": "<strong>警告:</strong>此頁面有一個以上的模板參數過長。\n過長的參數會被直接忽略。",
        "post-expand-template-argument-category": "模板參數有部份被忽略的頁面",
        "parser-template-loop-warning": "偵測到模板迴圈:[[$1]]",
+       "template-loop-category": "有樣板迴圈的頁面",
+       "template-loop-category-desc": "頁面含有樣板迴圈,即會自己不斷呼叫自己樣板。",
        "parser-template-recursion-depth-warning": "超出模板遞迴深度限制 ($1)",
        "language-converter-depth-warning": "已超出語言轉換器深度限制 ($1)",
        "node-count-exceeded-category": "節點數量超出限制的頁面",
        "newimages-summary": "此特殊頁面中顯示最新上傳的檔案。",
        "newimages-legend": "搜尋",
        "newimages-label": "檔案名稱 (或部份檔名):",
+       "newimages-user": "IP 位址或使用者名稱",
        "newimages-showbots": "顯示由機器人上傳的檔案",
        "newimages-hidepatrolled": "隱藏己巡查上傳",
        "noimages": "無任何圖片。",
        "restrictionsfield-label": "允許的 IP 範圍:",
        "restrictionsfield-help": "一個 IP 位址或 CIDR 範圍一行,要開啟所有範圍可使用:<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "修訂 $1",
-       "pageid": "頁面 ID $1"
+       "pageid": "頁面 ID $1",
+       "rawhtml-notallowed": "&lt;html&gt; 標籤無法在一般頁面之外使用。"
 }
diff --git a/languages/messages/MessagesAtj.php b/languages/messages/MessagesAtj.php
new file mode 100644 (file)
index 0000000..69bcaa5
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+/** Atikamekw
+ *
+ * To improve a translation please visit https://translatewiki.net
+ *
+ * @ingroup Language
+ * @file
+ *
+ */
+
+$fallback = 'fr';
index 62dc36c..a8080c5 100644 (file)
@@ -36,6 +36,7 @@ define( 'DO_MAINTENANCE', RUN_MAINTENANCE_IF_MAIN ); // original name, harmless
 
 $maintClass = false;
 
+use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\Rdbms\LBFactory;
index 286fb58..60b8a7a 100644 (file)
@@ -28,6 +28,7 @@ require_once __DIR__ . '/Maintenance.php';
 require_once __DIR__ . '/../includes/export/DumpFilter.php';
 
 use Wikimedia\Rdbms\LoadBalancer;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * @ingroup Dump Maintenance
index 83ab35c..dbaf643 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
 
 require_once __DIR__ . '/Maintenance.php';
 
index 3088baa..feeeb65 100644 (file)
@@ -22,7 +22,7 @@
  * @author Timo Tijhof
  */
 
-use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
 
 require_once __DIR__ . '/Maintenance.php';
 
index 06fcbaf..67f7780 100644 (file)
@@ -21,6 +21,8 @@
  * @ingroup Maintenance
  */
 
+use Wikimedia\Rdbms\IDatabase;
+
 require_once __DIR__ . '/Maintenance.php';
 
 /**
index f8eedb3..b0a2b92 100644 (file)
@@ -25,6 +25,8 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * Maintenance script to run a database query in batches and wait for replica DBs.
  *
index 58472e9..b03620d 100644 (file)
@@ -25,6 +25,7 @@
 require_once __DIR__ . '/Maintenance.php';
 
 use Wikimedia\Rdbms\ResultWrapper;
+use Wikimedia\Rdbms\IDatabase;
 
 /**
  * Maintenance script that sends SQL queries from the specified file to the database.
index 2c22395..762c5e7 100644 (file)
@@ -11,7 +11,7 @@
     "eslint": "3.12.2",
     "eslint-config-wikimedia": "0.3.0",
     "grunt": "1.0.1",
-    "grunt-banana-checker": "0.5.0",
+    "grunt-banana-checker": "0.6.0",
     "grunt-contrib-copy": "1.0.0",
     "grunt-contrib-watch": "1.0.0",
     "grunt-eslint": "19.0.0",
index 631386a..ce52846 100644 (file)
@@ -1302,7 +1302,7 @@ return [
                'dependencies' => [
                        'mediawiki.ForeignStructuredUpload',
                        'mediawiki.Upload.BookletLayout',
-                       'mediawiki.widgets.CategorySelector',
+                       'mediawiki.widgets.CategoryMultiselectWidget',
                        'mediawiki.widgets.DateInputWidget',
                        'mediawiki.jqueryMsg',
                        'mediawiki.api.messages',
@@ -2357,9 +2357,15 @@ return [
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.widgets.CategorySelector' => [
+               'deprecated' => 'Use "mw.widgets.CategoryMultiselectWidget" instead. See T161285.',
+               'dependencies' => [
+                       'mediawiki.widgets.CategoryMultiselectWidget',
+               ],
+       ],
+       'mediawiki.widgets.CategoryMultiselectWidget' => [
                'scripts' => [
                        'resources/src/mediawiki.widgets/mw.widgets.CategoryCapsuleItemWidget.js',
-                       'resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js',
+                       'resources/src/mediawiki.widgets/mw.widgets.CategoryMultiselectWidget.js',
                ],
                'dependencies' => [
                        'oojs-ui-widgets',
@@ -2369,7 +2375,7 @@ return [
                ],
                'messages' => [
                        'red-link-title',
-                       'mw-widgets-categoryselector-add-category-placeholder'
+                       'mw-widgets-categoryselector-add-category-placeholder',
                ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
index a84374a..a0e53b3 100644 (file)
@@ -4,14 +4,19 @@
                        "Mogoeilor"
                ]
        },
+       "ooui-outline-control-move-down": "ڤا دڤۈن بوردن آیتم",
+       "ooui-outline-control-move-up": "ڤارو بردن آیتم",
+       "ooui-outline-control-remove": "ڤورداشتن آیتم",
        "ooui-toolbar-more": "بیشتر",
        "ooui-toolgroup-expand": "بیشتر",
        "ooui-toolgroup-collapse": "کمتر",
        "ooui-dialog-message-accept": "خۈڤإ",
        "ooui-dialog-message-reject": "أنجومشيڤ کردن",
+       "ooui-dialog-process-error": "یأ چي ايچو إشتوا إ",
        "ooui-dialog-process-retry": "ز نۉ تلاش کونين",
        "ooui-dialog-process-continue": "ديندا گرهڌن",
        "ooui-selectfile-button-select": "گولإڤورچين کردن جانیا",
+       "ooui-selectfile-not-supported": "گول ڤورچی کردن جانیا کونشتکاری نڤابیڌ",
        "ooui-selectfile-placeholder": "هيژ جانيایي گولإ ڤورچين نڤابيڌإ",
        "ooui-selectfile-dragdrop-placeholder": "جانيانأ ڤأنين ايچو"
 }
index a13441b..f390b56 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.0
+ * OOjs UI v0.20.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-03-15T17:06:24Z
+ * Date: 2017-03-30T20:34:37Z
  */
 ( function ( OO ) {
 
index 382c13b..624cc57 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.0
+ * OOjs UI v0.20.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-03-15T17:06:28Z
+ * Date: 2017-03-30T20:34:41Z
  */
 .oo-ui-element-hidden {
   display: none !important;
       -ms-user-select: none;
           user-select: none;
 }
+.oo-ui-buttonElement > .oo-ui-buttonElement-button::-moz-focus-inner {
+  border-color: transparent;
+  padding: 0;
+}
 .oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
 .oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
   display: none;
@@ -1130,9 +1134,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-menuSelectWidget-invisible {
   display: none;
 }
-.oo-ui-menuOptionWidget {
-  position: relative;
-}
 .oo-ui-menuOptionWidget .oo-ui-iconElement-icon {
   display: none;
 }
index c4fdf20..bff0f50 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.0
+ * OOjs UI v0.20.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-03-15T17:06:28Z
+ * Date: 2017-03-30T20:34:41Z
  */
 .oo-ui-element-hidden {
   display: none !important;
       -ms-user-select: none;
           user-select: none;
 }
+.oo-ui-buttonElement > .oo-ui-buttonElement-button::-moz-focus-inner {
+  border-color: transparent;
+  padding: 0;
+}
 .oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-iconElement-icon,
 .oo-ui-buttonElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
   display: none;
@@ -60,9 +64,6 @@
   border-radius: 2px;
   outline: 0;
 }
-.oo-ui-buttonElement > .oo-ui-buttonElement-button:focus::-moz-focus-inner {
-  border-color: transparent;
-}
 .oo-ui-buttonElement.oo-ui-iconElement > .oo-ui-buttonElement-button > .oo-ui-indicatorElement-indicator {
   margin-right: 0.25em;
   margin-left: 0.46875em;
@@ -670,7 +671,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
 .oo-ui-optionWidget {
   position: relative;
   display: block;
-  border: 0;
 }
 .oo-ui-optionWidget.oo-ui-widget-enabled {
   cursor: pointer;
@@ -1566,7 +1566,6 @@ body:not( :-moz-handler-blocked ) .oo-ui-fieldsetLayout {
   display: none;
 }
 .oo-ui-menuOptionWidget {
-  position: relative;
   padding: 0.5em 1em;
   -webkit-transition: background-color 100ms, color 100ms;
      -moz-transition: background-color 100ms, color 100ms;
index fe11d68..44b21ab 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.0
+ * OOjs UI v0.20.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-03-15T17:06:24Z
+ * Date: 2017-03-30T20:34:37Z
  */
 ( function ( OO ) {
 
@@ -90,7 +90,7 @@ OO.ui.isFocusableElement = function ( $element ) {
        // Check if the element is visible
        if ( !(
                // This is quicker than calling $element.is( ':visible' )
-               $.expr.filters.visible( element ) &&
+               $.expr.pseudos.visible( element ) &&
                // Check that all parents are visible
                !$element.parents().addBack().filter( function () {
                        return $.css( this, 'visibility' ) === 'hidden';
@@ -883,7 +883,7 @@ OO.ui.Element.static.getDocument = function ( obj ) {
                // Window
                obj.document ||
                // HTMLDocument
-               ( obj.nodeType === 9 && obj ) ||
+               ( obj.nodeType === Node.DOCUMENT_NODE && obj ) ||
                null;
 };
 
@@ -912,7 +912,7 @@ OO.ui.Element.static.getDir = function ( obj ) {
        if ( obj instanceof jQuery ) {
                obj = obj[ 0 ];
        }
-       isDoc = obj.nodeType === 9;
+       isDoc = obj.nodeType === Node.DOCUMENT_NODE;
        isWin = obj.document !== undefined;
        if ( isDoc || isWin ) {
                if ( isWin ) {
@@ -1140,17 +1140,18 @@ OO.ui.Element.static.getScrollLeft = ( function () {
 }() );
 
 /**
- * Get scrollable object parent
+ * Get the root scrollable element of given element's document.
  *
- * documentElement can't be used to get or set the scrollTop
- * property on Blink. Changing and testing its value lets us
- * use 'body' or 'documentElement' based on what is working.
+ * On Blink-based browsers (Chrome etc.), `document.documentElement` can't be used to get or set
+ * the scrollTop property; instead we have to use `document.body`. Changing and testing the value
+ * lets us use 'body' or 'documentElement' based on what is working.
  *
  * https://code.google.com/p/chromium/issues/detail?id=303131
  *
  * @static
- * @param {HTMLElement} el Element to find scrollable parent for
- * @return {HTMLElement} Scrollable parent
+ * @param {HTMLElement} el Element to find root scrollable parent for
+ * @return {HTMLElement} Scrollable parent, `document.body` or `document.documentElement`
+ *     depending on browser
  */
 OO.ui.Element.static.getRootScrollableElement = function ( el ) {
        var scrollTop, body;
@@ -1174,8 +1175,8 @@ OO.ui.Element.static.getRootScrollableElement = function ( el ) {
 /**
  * Get closest scrollable container.
  *
- * Traverses up until either a scrollable element or the root is reached, in which case the window
- * will be returned.
+ * Traverses up until either a scrollable element or the root is reached, in which case the root
+ * scrollable element will be returned (see #getRootScrollableElement).
  *
  * @static
  * @param {HTMLElement} el Element to find scrollable container for
@@ -1193,6 +1194,12 @@ OO.ui.Element.static.getClosestScrollableContainer = function ( el, dimension )
                props = [ 'overflow-' + dimension ];
        }
 
+       // Special case for the document root (which doesn't really have any scrollable container, since
+       // it is the ultimate scrollable container, but this is probably saner than null or exception)
+       if ( $( el ).is( 'html, body' ) ) {
+               return this.getRootScrollableElement( el );
+       }
+
        while ( $parent.length ) {
                if ( $parent[ 0 ] === this.getRootScrollableElement( el ) ) {
                        return $parent[ 0 ];
@@ -1211,7 +1218,8 @@ OO.ui.Element.static.getClosestScrollableContainer = function ( el, dimension )
                }
                $parent = $parent.parent();
        }
-       return this.getDocument( el ).body;
+       // The element is unattached... return something mostly sane
+       return this.getRootScrollableElement( el );
 };
 
 /**
@@ -2181,6 +2189,7 @@ OO.ui.mixin.ButtonElement.prototype.isActive = function () {
  * [1]: https://www.mediawiki.org/wiki/OOjs_UI/Elements/Groups
  *
  * @abstract
+ * @mixins OO.EmitterList
  * @class
  *
  * @constructor
@@ -2192,15 +2201,20 @@ OO.ui.mixin.GroupElement = function OoUiMixinGroupElement( config ) {
        // Configuration initialization
        config = config || {};
 
+       // Mixin constructors
+       OO.EmitterList.call( this, config );
+
        // Properties
        this.$group = null;
-       this.items = [];
-       this.aggregateItemEvents = {};
 
        // Initialization
        this.setGroupElement( config.$group || $( '<div>' ) );
 };
 
+/* Setup */
+
+OO.mixinClass( OO.ui.mixin.GroupElement, OO.EmitterList );
+
 /* Events */
 
 /**
@@ -2229,28 +2243,6 @@ OO.ui.mixin.GroupElement.prototype.setGroupElement = function ( $group ) {
        }
 };
 
-/**
- * Check if a group contains no items.
- *
- * @return {boolean} Group is empty
- */
-OO.ui.mixin.GroupElement.prototype.isEmpty = function () {
-       return !this.items.length;
-};
-
-/**
- * Get all items in the group.
- *
- * The method returns an array of item references (e.g., [button1, button2, button3]) and is useful
- * when synchronizing groups of items, or whenever the references are required (e.g., when removing items
- * from a group).
- *
- * @return {OO.ui.Element[]} An array of items.
- */
-OO.ui.mixin.GroupElement.prototype.getItems = function () {
-       return this.items.slice( 0 );
-};
-
 /**
  * Get an item by its data.
  *
@@ -2297,62 +2289,6 @@ OO.ui.mixin.GroupElement.prototype.getItemsFromData = function ( data ) {
        return items;
 };
 
-/**
- * Aggregate the events emitted by the group.
- *
- * When events are aggregated, the group will listen to all contained items for the event,
- * and then emit the event under a new name. The new event will contain an additional leading
- * parameter containing the item that emitted the original event. Other arguments emitted from
- * the original event are passed through.
- *
- * @param {Object.<string,string|null>} events An object keyed by the name of the event that should be
- *  aggregated  (e.g., ‘click’) and the value of the new name to use (e.g., ‘groupClick’).
- *  A `null` value will remove aggregated events.
-
- * @throws {Error} An error is thrown if aggregation already exists.
- */
-OO.ui.mixin.GroupElement.prototype.aggregate = function ( events ) {
-       var i, len, item, add, remove, itemEvent, groupEvent;
-
-       for ( itemEvent in events ) {
-               groupEvent = events[ itemEvent ];
-
-               // Remove existing aggregated event
-               if ( Object.prototype.hasOwnProperty.call( this.aggregateItemEvents, itemEvent ) ) {
-                       // Don't allow duplicate aggregations
-                       if ( groupEvent ) {
-                               throw new Error( 'Duplicate item event aggregation for ' + itemEvent );
-                       }
-                       // Remove event aggregation from existing items
-                       for ( i = 0, len = this.items.length; i < len; i++ ) {
-                               item = this.items[ i ];
-                               if ( item.connect && item.disconnect ) {
-                                       remove = {};
-                                       remove[ itemEvent ] = [ 'emit', this.aggregateItemEvents[ itemEvent ], item ];
-                                       item.disconnect( this, remove );
-                               }
-                       }
-                       // Prevent future items from aggregating event
-                       delete this.aggregateItemEvents[ itemEvent ];
-               }
-
-               // Add new aggregate event
-               if ( groupEvent ) {
-                       // Make future items aggregate event
-                       this.aggregateItemEvents[ itemEvent ] = groupEvent;
-                       // Add event aggregation to existing items
-                       for ( i = 0, len = this.items.length; i < len; i++ ) {
-                               item = this.items[ i ];
-                               if ( item.connect && item.disconnect ) {
-                                       add = {};
-                                       add[ itemEvent ] = [ 'emit', groupEvent, item ];
-                                       item.connect( this, add );
-                               }
-                       }
-               }
-       }
-};
-
 /**
  * Add items to the group.
  *
@@ -2364,46 +2300,54 @@ OO.ui.mixin.GroupElement.prototype.aggregate = function ( events ) {
  * @chainable
  */
 OO.ui.mixin.GroupElement.prototype.addItems = function ( items, index ) {
-       var i, len, item, itemEvent, events, currentIndex,
-               itemElements = [];
+       // Mixin method
+       OO.EmitterList.prototype.addItems.call( this, items, index );
 
-       for ( i = 0, len = items.length; i < len; i++ ) {
-               item = items[ i ];
+       this.emit( 'change', this.getItems() );
+       return this;
+};
 
-               // Check if item exists then remove it first, effectively "moving" it
-               currentIndex = this.items.indexOf( item );
-               if ( currentIndex >= 0 ) {
-                       this.removeItems( [ item ] );
-                       // Adjust index to compensate for removal
-                       if ( currentIndex < index ) {
-                               index--;
-                       }
-               }
-               // Add the item
-               if ( item.connect && item.disconnect && !$.isEmptyObject( this.aggregateItemEvents ) ) {
-                       events = {};
-                       for ( itemEvent in this.aggregateItemEvents ) {
-                               events[ itemEvent ] = [ 'emit', this.aggregateItemEvents[ itemEvent ], item ];
-                       }
-                       item.connect( this, events );
-               }
-               item.setElementGroup( this );
-               itemElements.push( item.$element.get( 0 ) );
-       }
+/**
+ * @inheritdoc
+ */
+OO.ui.mixin.GroupElement.prototype.moveItem = function ( items, newIndex ) {
+       // insertItemElements expects this.items to not have been modified yet, so call before the mixin
+       this.insertItemElements( items, newIndex );
+
+       // Mixin method
+       newIndex = OO.EmitterList.prototype.moveItem.call( this, items, newIndex );
+
+       return newIndex;
+};
+
+/**
+ * @inheritdoc
+ */
+OO.ui.mixin.GroupElement.prototype.insertItem = function ( item, index ) {
+       item.setElementGroup( this );
+       this.insertItemElements( item, index );
 
+       // Mixin method
+       index = OO.EmitterList.prototype.insertItem.call( this, item, index );
+
+       return index;
+};
+
+/**
+ * Insert elements into the group
+ *
+ * @private
+ * @param {OO.ui.Element} itemWidget Item to insert
+ * @param {number} index Insertion index
+ */
+OO.ui.mixin.GroupElement.prototype.insertItemElements = function ( itemWidget, index ) {
        if ( index === undefined || index < 0 || index >= this.items.length ) {
-               this.$group.append( itemElements );
-               this.items.push.apply( this.items, items );
+               this.$group.append( itemWidget.$element );
        } else if ( index === 0 ) {
-               this.$group.prepend( itemElements );
-               this.items.unshift.apply( this.items, items );
+               this.$group.prepend( itemWidget.$element );
        } else {
-               this.items[ index ].$element.before( itemElements );
-               this.items.splice.apply( this.items, [ index, 0 ].concat( items ) );
+               this.items[ index ].$element.before( itemWidget.$element );
        }
-
-       this.emit( 'change', this.getItems() );
-       return this;
 };
 
 /**
@@ -2416,26 +2360,21 @@ OO.ui.mixin.GroupElement.prototype.addItems = function ( items, index ) {
  * @chainable
  */
 OO.ui.mixin.GroupElement.prototype.removeItems = function ( items ) {
-       var i, len, item, index, events, itemEvent;
+       var i, len, item, index;
 
-       // Remove specific items
+       // Remove specific items elements
        for ( i = 0, len = items.length; i < len; i++ ) {
                item = items[ i ];
                index = this.items.indexOf( item );
                if ( index !== -1 ) {
-                       if ( item.connect && item.disconnect && !$.isEmptyObject( this.aggregateItemEvents ) ) {
-                               events = {};
-                               for ( itemEvent in this.aggregateItemEvents ) {
-                                       events[ itemEvent ] = [ 'emit', this.aggregateItemEvents[ itemEvent ], item ];
-                               }
-                               item.disconnect( this, events );
-                       }
                        item.setElementGroup( null );
-                       this.items.splice( index, 1 );
                        item.$element.detach();
                }
        }
 
+       // Mixin method
+       OO.EmitterList.prototype.removeItems.call( this, items );
+
        this.emit( 'change', this.getItems() );
        return this;
 };
@@ -2449,27 +2388,18 @@ OO.ui.mixin.GroupElement.prototype.removeItems = function ( items ) {
  * @chainable
  */
 OO.ui.mixin.GroupElement.prototype.clearItems = function () {
-       var i, len, item, remove, itemEvent;
+       var i, len;
 
-       // Remove all items
+       // Remove all item elements
        for ( i = 0, len = this.items.length; i < len; i++ ) {
-               item = this.items[ i ];
-               if (
-                       item.connect && item.disconnect &&
-                       !$.isEmptyObject( this.aggregateItemEvents )
-               ) {
-                       remove = {};
-                       if ( Object.prototype.hasOwnProperty.call( this.aggregateItemEvents, itemEvent ) ) {
-                               remove[ itemEvent ] = [ 'emit', this.aggregateItemEvents[ itemEvent ], item ];
-                       }
-                       item.disconnect( this, remove );
-               }
-               item.setElementGroup( null );
-               item.$element.detach();
+               this.items[ i ].setElementGroup( null );
+               this.items[ i ].$element.detach();
        }
 
+       // Mixin method
+       OO.EmitterList.prototype.clearItems.call( this );
+
        this.emit( 'change', this.getItems() );
-       this.items = [];
        return this;
 };
 
@@ -4303,6 +4233,20 @@ OO.ui.mixin.FloatableElement.prototype.position = function () {
                return this;
        }
 
+       if ( !(
+               // To continue, some things need to be true:
+               // The element must actually be in the DOM
+               this.isElementAttached() && (
+                       // The closest scrollable is the current window
+                       this.$floatableClosestScrollable[ 0 ] === this.getElementWindow() ||
+                       // OR is an element in the element's DOM
+                       $.contains( this.getElementDocument(), this.$floatableClosestScrollable[ 0 ] )
+               )
+       ) ) {
+               // Abort early if important parts of the widget are no longer attached to the DOM
+               return this;
+       }
+
        if ( this.hideWhenOutOfView && !this.isElementInViewport( this.$floatableContainer, this.$floatableClosestScrollable ) ) {
                this.$floatable.addClass( 'oo-ui-element-hidden' );
                return this;
@@ -4883,6 +4827,14 @@ OO.mixinClass( OO.ui.PopupWidget, OO.ui.mixin.LabelElement );
 OO.mixinClass( OO.ui.PopupWidget, OO.ui.mixin.ClippableElement );
 OO.mixinClass( OO.ui.PopupWidget, OO.ui.mixin.FloatableElement );
 
+/* Events */
+
+/**
+ * @event ready
+ *
+ * The popup is ready: it is visible and has been positioned and clipped.
+ */
+
 /* Methods */
 
 /**
@@ -5016,6 +4968,7 @@ OO.ui.PopupWidget.prototype.hasAnchor = function () {
  * Side-effects may include broken interface and exceptions being thrown. This wasn't always
  * strictly enforced, so currently it only generates a warning in the browser console.
  *
+ * @fires ready
  * @inheritdoc
  */
 OO.ui.PopupWidget.prototype.toggle = function ( show ) {
@@ -5046,6 +4999,7 @@ OO.ui.PopupWidget.prototype.toggle = function ( show ) {
                        }
                        this.updateDimensions();
                        this.toggleClipping( true );
+                       this.emit( 'ready' );
                } else {
                        this.toggleClipping( false );
                        if ( this.autoClose ) {
index b4a6392..8538b6e 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.0
+ * OOjs UI v0.20.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-03-15T17:06:24Z
+ * Date: 2017-03-30T20:34:37Z
  */
 ( function ( OO ) {
 
index 479e2a5..983bc69 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.0
+ * OOjs UI v0.20.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-03-15T17:06:28Z
+ * Date: 2017-03-30T20:34:41Z
  */
 .oo-ui-popupTool .oo-ui-popupWidget-popup,
 .oo-ui-popupTool .oo-ui-popupWidget-anchor {
index df77684..502b7b1 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.0
+ * OOjs UI v0.20.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-03-15T17:06:28Z
+ * Date: 2017-03-30T20:34:41Z
  */
 .oo-ui-tool.oo-ui-widget-enabled {
   -webkit-transition: background-color 100ms;
   height: 2.5em;
 }
 .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
-  width: 0.9375em;
-  height: 1.625em;
-  margin: 0.78125em 0.5em;
   top: 0;
   right: 0;
+  width: 0.9375em;
+  height: 100%;
+  margin: 0 0.5em;
   opacity: 0.3;
 }
 .oo-ui-toolbar-narrow .oo-ui-popupToolGroup-handle .oo-ui-indicatorElement-indicator {
index 7d09854..4cc0db1 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.0
+ * OOjs UI v0.20.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-03-15T17:06:24Z
+ * Date: 2017-03-30T20:34:37Z
  */
 ( function ( OO ) {
 
index 7f8389e..a9b31da 100644 (file)
@@ -1,22 +1,22 @@
 /*!
- * OOjs UI v0.20.0
+ * OOjs UI v0.20.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-03-15T17:06:28Z
+ * Date: 2017-03-30T20:34:41Z
  */
-.oo-ui-draggableElement-handle,
-.oo-ui-draggableElement-handle.oo-ui-widget {
+.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ),
+.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ).oo-ui-widget {
   cursor: move;
   cursor: url(images/grab.cur );
   cursor: -webkit-grab;
   cursor:    -moz-grab;
   cursor:         grab;
 }
-.oo-ui-draggableElement-handle:active {
+.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ):active {
   cursor: url(images/grabbing.cur );
   cursor: -webkit-grabbing;
   cursor:    -moz-grabbing;
index c79dc85..8438a3d 100644 (file)
@@ -1,22 +1,22 @@
 /*!
- * OOjs UI v0.20.0
+ * OOjs UI v0.20.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-03-15T17:06:28Z
+ * Date: 2017-03-30T20:34:41Z
  */
-.oo-ui-draggableElement-handle,
-.oo-ui-draggableElement-handle.oo-ui-widget {
+.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ),
+.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ).oo-ui-widget {
   cursor: move;
   cursor: url(images/grab.cur );
   cursor: -webkit-grab;
   cursor:    -moz-grab;
   cursor:         grab;
 }
-.oo-ui-draggableElement-handle:active {
+.oo-ui-draggableElement-handle:not( .oo-ui-draggableElement-undraggable ):active {
   cursor: url(images/grabbing.cur );
   cursor: -webkit-grabbing;
   cursor:    -moz-grabbing;
 }
 .oo-ui-buttonOptionWidget {
   display: inline-block;
-  padding: 0;
 }
 .oo-ui-buttonOptionWidget.oo-ui-buttonElement-active .oo-ui-buttonElement-button {
   cursor: default;
   display: inline-block;
   vertical-align: middle;
 }
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-selected,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-pressed,
-.oo-ui-buttonOptionWidget.oo-ui-optionWidget-highlighted {
-  background-color: transparent;
-}
 .oo-ui-toggleButtonWidget {
   margin-right: 0.5em;
 }
index c2e62fd..3482256 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.0
+ * OOjs UI v0.20.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-03-15T17:06:24Z
+ * Date: 2017-03-30T20:34:37Z
  */
 ( function ( OO ) {
 
@@ -24,6 +24,9 @@
  * @constructor
  * @param {Object} [config] Configuration options
  * @cfg {jQuery} [$handle] The part of the element which can be used for dragging, defaults to the whole element
+ * @cfg {boolean} [draggable] The items are draggable. This can change with #toggleDraggable
+ *  but the draggable state should be called from the DraggableGroupElement, which updates
+ *  the whole group
  */
 OO.ui.mixin.DraggableElement = function OoUiMixinDraggableElement( config ) {
        config = config || {};
@@ -32,6 +35,7 @@ OO.ui.mixin.DraggableElement = function OoUiMixinDraggableElement( config ) {
        this.index = null;
        this.$handle = config.$handle || this.$element;
        this.wasHandleUsed = null;
+       this.draggable = config.draggable === undefined ? true : !!config.draggable;
 
        // Initialize and events
        this.$element.addClass( 'oo-ui-draggableElement' )
@@ -81,6 +85,32 @@ OO.ui.mixin.DraggableElement.static.cancelButtonMouseDownEvents = false;
 
 /* Methods */
 
+/**
+ * Change the draggable state of this widget.
+ * This allows users to temporarily halt the dragging operations.
+ *
+ * @param {boolean} isDraggable Widget supports draggable operations
+ * @fires draggable
+ */
+OO.ui.mixin.DraggableElement.prototype.toggleDraggable = function ( isDraggable ) {
+       isDraggable = isDraggable !== undefined ? !!isDraggable : !this.draggable;
+
+       if ( this.draggable !== isDraggable ) {
+               this.draggable = isDraggable;
+
+               this.$element.toggleClass( 'oo-ui-draggableElement-undraggable', !this.draggable );
+       }
+};
+
+/**
+ * Check the draggable state of this widget
+ *
+ * @return {boolean} Widget supports draggable operations
+ */
+OO.ui.mixin.DraggableElement.prototype.isDraggable = function () {
+       return this.draggable;
+};
+
 /**
  * Respond to mousedown event.
  *
@@ -88,6 +118,10 @@ OO.ui.mixin.DraggableElement.static.cancelButtonMouseDownEvents = false;
  * @param {jQuery.Event} e Drag event
  */
 OO.ui.mixin.DraggableElement.prototype.onDragMouseDown = function ( e ) {
+       if ( !this.isDraggable() ) {
+               return;
+       }
+
        this.wasHandleUsed =
                // Optimization: if the handle is the whole element this is always true
                this.$handle[ 0 ] === this.$element[ 0 ] ||
@@ -107,7 +141,7 @@ OO.ui.mixin.DraggableElement.prototype.onDragStart = function ( e ) {
        var element = this,
                dataTransfer = e.originalEvent.dataTransfer;
 
-       if ( !this.wasHandleUsed ) {
+       if ( !this.wasHandleUsed || !this.isDraggable() ) {
                return false;
        }
 
@@ -208,6 +242,7 @@ OO.ui.mixin.DraggableElement.prototype.getIndex = function () {
  *  should match the layout of the items. Items displayed in a single row
  *  or in several rows should use horizontal orientation. The vertical orientation should only be
  *  used when the items are displayed in a single column. Defaults to 'vertical'
+ * @cfg {boolean} [draggable] The items are draggable. This can change with #toggleDraggable
  */
 OO.ui.mixin.DraggableGroupElement = function OoUiMixinDraggableGroupElement( config ) {
        // Configuration initialization
@@ -222,6 +257,7 @@ OO.ui.mixin.DraggableGroupElement = function OoUiMixinDraggableGroupElement( con
        this.itemKeys = {};
        this.dir = null;
        this.itemsOrder = null;
+       this.draggable = config.draggable === undefined ? true : !!config.draggable;
 
        // Events
        this.aggregate( {
@@ -260,15 +296,54 @@ OO.mixinClass( OO.ui.mixin.DraggableGroupElement, OO.ui.mixin.GroupElement );
  */
 
 /**
- * And item has been dropped at a new position.
+ * An item has been dropped at a new position.
  *
  * @event reorder
  * @param {OO.ui.mixin.DraggableElement} item Reordered item
  * @param {number} [newIndex] New index for the item
  */
 
+/**
+ * Draggable state of this widget has changed.
+ *
+ * @event draggable
+ * @param {boolean} [draggable] Widget is draggable
+ */
+
 /* Methods */
 
+/**
+ * Change the draggable state of this widget.
+ * This allows users to temporarily halt the dragging operations.
+ *
+ * @param {boolean} isDraggable Widget supports draggable operations
+ * @fires draggable
+ */
+OO.ui.mixin.DraggableGroupElement.prototype.toggleDraggable = function ( isDraggable ) {
+       isDraggable = isDraggable !== undefined ? !!isDraggable : !this.draggable;
+
+       if ( this.draggable !== isDraggable ) {
+               this.draggable = isDraggable;
+
+               // Tell the items their draggable state changed
+               this.getItems().forEach( function ( item ) {
+                       item.toggleDraggable( this.draggable );
+               }.bind( this ) );
+
+               // Emit event
+               this.emit( 'draggable', this.draggable );
+       }
+};
+
+/**
+ * Check the draggable state of this widget
+ *
+ * @return {boolean} Widget supports draggable operations
+ */
+OO.ui.mixin.DraggableGroupElement.prototype.isDraggable = function () {
+       return this.draggable;
+};
+
 /**
  * Respond to item drag start event
  *
@@ -276,6 +351,9 @@ OO.mixinClass( OO.ui.mixin.DraggableGroupElement, OO.ui.mixin.GroupElement );
  * @param {OO.ui.mixin.DraggableElement} item Dragged item
  */
 OO.ui.mixin.DraggableGroupElement.prototype.onItemDragStart = function ( item ) {
+       if ( !this.isDraggable() ) {
+               return;
+       }
        // Make a shallow copy of this.items so we can re-order it during previews
        // without affecting the original array.
        this.itemsOrder = this.items.slice();
index 17caa33..4842a46 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.0
+ * OOjs UI v0.20.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-03-15T17:06:28Z
+ * Date: 2017-03-30T20:34:41Z
  */
 .oo-ui-actionWidget.oo-ui-pendingElement-pending {
   background-image: /* @embed */ url(themes/apex/images/textures/pending.gif);
index 0530610..beca510 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.0
+ * OOjs UI v0.20.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-03-15T17:06:28Z
+ * Date: 2017-03-30T20:34:41Z
  */
 .oo-ui-window {
   background: transparent;
index ab78a4a..1cbec34 100644 (file)
@@ -1,12 +1,12 @@
 /*!
- * OOjs UI v0.20.0
+ * OOjs UI v0.20.2
  * https://www.mediawiki.org/wiki/OOjs_UI
  *
  * Copyright 2011–2017 OOjs UI Team and other contributors.
  * Released under the MIT license
  * http://oojs.mit-license.org
  *
- * Date: 2017-03-15T17:06:24Z
+ * Date: 2017-03-30T20:34:37Z
  */
 ( function ( OO ) {
 
@@ -1333,7 +1333,7 @@ OO.ui.WindowManager.prototype.openWindow = function ( win, data ) {
                                manager.toggleGlobalEvents( true );
                                manager.toggleAriaIsolation( true );
                        }
-                       manager.$returnFocusTo = data.$returnFocusTo || $( document.activeElement );
+                       manager.$returnFocusTo = data.$returnFocusTo !== undefined ? data.$returnFocusTo : $( document.activeElement );
                        manager.currentWindow = win;
                        manager.opening = opening;
                        manager.preparingToOpen = null;
index 892b8db..c3977eb 100644 (file)
@@ -2,17 +2,20 @@
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
        "images": {
+               "alert": { "file": "images/icons/alert.svg" },
                "bell": { "file": "images/icons/bell.svg" },
                "bellOn": { "file": {
                        "ltr": "images/icons/bellOn-ltr.svg",
                        "rtl": "images/icons/bellOn-rtl.svg"
                } },
+               "comment": { "file": "images/icons/comment.svg" },
                "eye": { "file": "images/icons/eye.svg" },
                "eyeClosed": { "file": "images/icons/eyeClosed.svg" },
                "message": { "file": {
                        "ltr": "images/icons/message-ltr.svg",
                        "rtl": "images/icons/message-rtl.svg"
                } },
+               "notice": { "file": "images/icons/notice.svg" },
                "signature": { "file": {
                        "ltr": "images/icons/signature-ltr.svg",
                        "rtl": "images/icons/signature-rtl.svg"
index 0cd901f..a9db33f 100644 (file)
                        "ltr": "images/icons/articleRedirect-ltr.svg",
                        "rtl": "images/icons/articleRedirect-rtl.svg"
                } },
+               "history": { "file": "images/icons/history.svg" },
+               "info": { "file": "images/icons/info.svg" },
                "journal": { "file": {
                        "ltr": "images/icons/journal-ltr.svg",
                        "rtl": "images/icons/journal-rtl.svg"
                } },
+               "tag": { "file": "images/icons/tag.svg" },
                "upload": { "file": {
                        "ltr": "images/icons/upload-ltr.svg",
                        "rtl": "images/icons/upload-rtl.svg"
-               } }
+               } },
+               "window": { "file": "images/icons/window.svg" }
        }
 }
index 5b6ac3c..64651fc 100644 (file)
@@ -1,14 +1,9 @@
 {
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
-       "variants": {
-               "invert": {
-                       "color": "#FFFFFF",
-                       "global": true
-               }
-       },
        "images": {
                "add": { "file": "images/icons/add.svg" },
+               "advanced": { "file": "images/icons/advanced.svg" },
                "bookmark": { "file": {
                        "ltr": "images/icons/bookmark-ltr.svg",
                        "rtl": "images/icons/bookmark-rtl.svg"
                        "ltr": "images/icons/browser-ltr.svg",
                        "rtl": "images/icons/browser-rtl.svg"
                } },
+               "cancel": { "file": "images/icons/cancel.svg" },
+               "check": { "file": "images/icons/check.svg" },
                "clear": { "file": "images/icons/clear.svg" },
                "clock": { "file": "images/icons/clock.svg" },
+               "close": { "file": "images/icons/close.svg" },
+               "ellipsis": { "file": "images/icons/ellipsis.svg" },
                "feedback": { "file": {
                        "ltr": "images/icons/feedback-ltr.svg",
                        "rtl": "images/icons/feedback-rtl.svg"
                        "rtl": "images/icons/funnel-rtl.svg"
                } },
                "heart": { "file": "images/icons/heart.svg" },
+               "help": { "file": {
+                       "ltr": "images/icons/help-ltr.svg",
+                       "rtl": "images/icons/help-rtl.svg",
+                       "lang": {
+                               "he,yi": "images/icons/help-ltr.svg"
+                       }
+               } },
                "key": { "file": {
                        "ltr": "images/icons/key-ltr.svg",
                        "rtl": "images/icons/key-rtl.svg"
                        "ltr": "images/icons/printer-ltr.svg",
                        "rtl": "images/icons/printer-rtl.svg"
                } },
+               "search": { "file": {
+                       "ltr": "images/icons/search-ltr.svg",
+                       "rtl": "images/icons/search-rtl.svg"
+                       }
+               },
+               "settings": { "file": "images/icons/settings.svg" },
                "subtract": { "file": "images/icons/subtract.svg" },
                "sun": { "file": {
                        "ltr": "images/icons/sun-ltr.svg",
diff --git a/resources/lib/oojs-ui/themes/apex/icons-layout.json b/resources/lib/oojs-ui/themes/apex/icons-layout.json
new file mode 100644 (file)
index 0000000..173b284
--- /dev/null
@@ -0,0 +1,25 @@
+{
+       "prefix": "oo-ui-icon",
+       "intro": "@import '../../../../src/styles/common';",
+       "images": {
+               "menu": { "file": "images/icons/menu.svg" },
+               "stripeFlow": { "file": {
+                       "ltr": "images/icons/stripeFlow-ltr.svg",
+                       "rtl": "images/icons/stripeFlow-rtl.svg"
+               } },
+               "stripeSideMenu": { "file": "images/icons/stripeSideMenu.svg" },
+               "stripeSummary": { "file": {
+                       "ltr": "images/icons/stripeSummary-ltr.svg",
+                       "rtl": "images/icons/stripeSummary-rtl.svg"
+               } },
+               "stripeToC": { "file": {
+                       "ltr": "images/icons/stripeToC-ltr.svg",
+                       "rtl": "images/icons/stripeToC-rtl.svg"
+               } },
+               "viewCompact": { "file": "images/icons/viewCompact.svg" },
+               "viewDetails": { "file": {
+                       "ltr": "images/icons/viewDetails-ltr.svg",
+                       "rtl": "images/icons/viewDetails-rtl.svg"
+               } }
+       }
+}
index 9aa1b80..7ab6eaa 100644 (file)
                } },
                "caretDown": { "file": "images/icons/caretDown.svg" },
                "caretUp": { "file": "images/icons/caretUp.svg" },
+               "collapse": { "file": "images/icons/collapse.svg" },
                "downTriangle": { "file": "images/icons/downTriangle.svg" },
+               "expand": { "file": "images/icons/expand.svg" },
                "move": { "file": "images/icons/move.svg" },
+               "next": { "file": {
+                       "ltr": "images/icons/move-ltr.svg",
+                       "rtl": "images/icons/move-rtl.svg"
+                       }
+               },
+               "previous": { "file": {
+                       "ltr": "images/icons/move-rtl.svg",
+                       "rtl": "images/icons/move-ltr.svg"
+                       }
+               },
                "upTriangle": { "file": "images/icons/upTriangle.svg" }
        }
 }
index f4a2dc9..c0ccb36 100644 (file)
@@ -2,49 +2,63 @@
        "prefix": "oo-ui-icon",
        "intro": "@import '../../../../src/styles/common';",
        "images": {
-               "add": { "file": "images/icons/add.svg", "deprecated": "Moved since v0.19.5, use from the 'interactive' pack instead." },
-               "advanced": { "file": "images/icons/advanced.svg" },
-               "alert": { "file": "images/icons/alert.svg" },
-               "cancel": { "file": "images/icons/cancel.svg" },
-               "check": { "file": "images/icons/check.svg" },
-               "circle": { "file": "images/icons/circle.svg" },
-               "close": { "file": "images/icons/close.svg" },
-               "code": { "file": "images/icons/code.svg" },
-               "collapse": { "file": "images/icons/collapse.svg" },
-               "comment": { "file": "images/icons/comment.svg" },
-               "ellipsis": { "file": "images/icons/ellipsis.svg" },
-               "expand": { "file": "images/icons/expand.svg" },
+               "add": { "file": "images/icons/add.svg", "deprecated": "Moved since v0.19.5, use from the 'interactions' pack instead." },
+               "advanced": { "file": "images/icons/advanced.svg", "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead." },
+               "alert": { "file": "images/icons/alert.svg", "deprecated": "Moved since v0.20.1, use from the 'alerts' pack instead." },
+               "cancel": { "file": "images/icons/cancel.svg", "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead." },
+               "check": { "file": "images/icons/check.svg", "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead." },
+               "circle": { "file": "images/icons/circle.svg", "deprecated": "Deprecated since v0.20.1, do not use." },
+               "close": { "file": "images/icons/close.svg", "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead." },
+               "code": { "file": "images/icons/code.svg", "deprecated": "Moved since v0.16.2, use from the 'editing-advanced' pack instead." },
+               "collapse": { "file": "images/icons/collapse.svg", "deprecated": "Moved since v0.20.1, use from the 'movement' pack instead." },
+               "comment": { "file": "images/icons/comment.svg", "deprecated": "Moved since v0.20.1, use from the 'alerts' pack instead." },
+               "ellipsis": { "file": "images/icons/ellipsis.svg", "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead." },
+               "expand": { "file": "images/icons/expand.svg", "deprecated": "Moved since v0.20.1, use from the 'movement' pack instead." },
                "help": { "file": {
                        "ltr": "images/icons/help-ltr.svg",
                        "rtl": "images/icons/help-rtl.svg",
                        "lang": {
                                "he,yi": "images/icons/help-ltr.svg"
-                       }
+                       },
+                       "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead."
                } },
-               "history": { "file": "images/icons/history.svg" },
-               "info": { "file": "images/icons/info.svg" },
-               "menu": { "file": "images/icons/menu.svg" },
+               "history": { "file": "images/icons/history.svg", "deprecated": "Moved since v0.20.1, use from the 'content' pack instead." },
+               "info": { "file": "images/icons/info.svg", "deprecated": "Moved since v0.20.1, use from the 'content' pack instead." },
+               "menu": { "file": "images/icons/menu.svg", "deprecated": "Moved since v0.20.1, use from the 'layout' pack instead." },
                "next": { "file": {
                        "ltr": "images/icons/move-ltr.svg",
                        "rtl": "images/icons/move-rtl.svg"
-               } },
-               "notice": { "file": "images/icons/notice.svg" },
+                       },
+                       "deprecated": "Moved since v0.20.1, use from the 'movement' pack instead."
+               },
+               "notice": { "file": "images/icons/notice.svg", "deprecated": "Moved since v0.20.1, use from the 'alerts' pack instead." },
                "previous": { "file": {
                        "ltr": "images/icons/move-rtl.svg",
                        "rtl": "images/icons/move-ltr.svg"
-               } },
+                       },
+                       "deprecated": "Moved since v0.20.1, use from the 'movement' pack instead."
+               },
                "redo": { "file": {
                        "ltr": "images/icons/arched-arrow-ltr.svg",
                        "rtl": "images/icons/arched-arrow-rtl.svg"
-               } },
-               "remove": { "file": "images/icons/trash.svg" },
-               "search": { "file": "images/icons/search.svg" },
-               "settings": { "file": "images/icons/settings.svg" },
-               "tag": { "file": "images/icons/tag.svg" },
+                       },
+                       "deprecated": "Moved since v0.16.2, use from the 'editing-core' pack instead."
+               },
+               "remove": { "file": "images/icons/trash.svg", "deprecated": "Replaced since v0.14.0, use 'trash' from the 'moderation' pack instead." },
+               "search": { "file": {
+                       "ltr": "images/icons/search-ltr.svg",
+                       "rtl": "images/icons/search-rtl.svg"
+                       },
+                       "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead."
+               },
+               "settings": { "file": "images/icons/settings.svg", "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead." },
+               "tag": { "file": "images/icons/tag.svg", "deprecated": "Moved since v0.20.1, use from the 'content' pack instead." },
                "undo": { "file": {
                        "ltr": "images/icons/arched-arrow-rtl.svg",
                        "rtl": "images/icons/arched-arrow-ltr.svg"
-               } },
-               "window": { "file": "images/icons/window.svg" }
+                       },
+                       "deprecated": "Moved since v0.16.2, use from the 'editing-core' pack instead."
+               },
+               "window": { "file": "images/icons/window.svg", "deprecated": "Moved since v0.20.1, use from the 'content' pack instead." }
        }
 }
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/add-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/add-invert.png
deleted file mode 100644 (file)
index 8deeddf..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/add-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/add-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/add-invert.svg
deleted file mode 100644 (file)
index a2d49a1..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <g id="add">
-        <path id="plus" d="M13 6h-2v5H6v2h5v5h2v-5h5v-2h-5z"/>
-    </g>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-ltr-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-ltr-invert.png
deleted file mode 100644 (file)
index 084cbc7..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-ltr-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-ltr-invert.svg
deleted file mode 100644 (file)
index 8098166..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M15 5H8c-1.1 0-2 .9-2 2v3h3v11l4-3 4 3V7c0-1.1-.9-2-2-2zM9 9H7V7c0-.6.4-1 1-1h1v3z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-rtl-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-rtl-invert.png
deleted file mode 100644 (file)
index 125fb74..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-rtl-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/bookmark-rtl-invert.svg
deleted file mode 100644 (file)
index bc3ef4e..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M8 5h7c1.1 0 2 .9 2 2v3h-3v11l-4-3-4 3V7c0-1.1.9-2 2-2zm6 4h2V7c0-.6-.4-1-1-1h-1v3z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr-invert.png
deleted file mode 100644 (file)
index 027df2d..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/browser-ltr-invert.svg
deleted file mode 100644 (file)
index 792b4aa..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M3 6v11c0 1.7 1.3 3 3 3h15V6H3zm2.5 1C6.3 7 7 7.7 7 8.5S6.3 10 5.5 10 4 9.3 4 8.5 4.7 7 5.5 7zM20 19H6c-1.1 0-2-.9-2-2v-6h16v8z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl-invert.png
deleted file mode 100644 (file)
index 51937b7..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/browser-rtl-invert.svg
deleted file mode 100644 (file)
index 079a62c..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M21 6v11c0 1.7-1.3 3-3 3H3V6h18zm-2.5 1c-.8 0-1.5.7-1.5 1.5s.7 1.5 1.5 1.5S20 9.3 20 8.5 19.3 7 18.5 7zM4 19h14c1.1 0 2-.9 2-2v-6H4v8z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/clear-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/clear-invert.png
deleted file mode 100644 (file)
index ec90ed9..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/clear-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/clear-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/clear-invert.svg
deleted file mode 100644 (file)
index 09df1d3..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <g id="clear">
-        <path id="circle-with-cross" d="M12 5c-4.4 0-8 3.6-8 8s3.6 8 8 8 8-3.6 8-8-3.6-8-8-8zm4 11l-1 1-3-3-3 3-1-1 3-3-3-3 1-1 3 3 3-3 1 1-3 3 3 3z"/>
-    </g>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/clock-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/clock-invert.png
deleted file mode 100644 (file)
index fdd3e51..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/clock-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/clock-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/clock-invert.svg
deleted file mode 100644 (file)
index c11e11e..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <g id="clock">
-        <path id="circle" d="M12 5a7 7 0 1 0 0 14 7 7 0 0 0 0-14zm0 1.25a5.75 5.75 0 0 1 0 11.5 5.75 5.75 0 0 1 0-11.5z"/>
-        <path id="hands" d="M15.605 14.08s-1.674-1.36-2.81-2.15c.504-1.683 1.194-4.605 1.194-4.605s-3.057 3.765-3.427 4.703c-.325.82 1.024 1.55 1.647 1.178 1.335.387 3.394.873 3.394.873z"/>
-    </g>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.png
deleted file mode 100644 (file)
index f49ebeb..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-ltr-invert.svg
deleted file mode 100644 (file)
index d32e478..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M8.202 15.834l.568 2.101c.198.765 1.06 1.22 1.8 1.016.698-.193 1.125-.983.926-1.747l-.38-1.37H20L17.229 5 4.155 12.652c-.427.762.088 2.748.823 3.182h3.224z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.png
deleted file mode 100644 (file)
index efba220..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/feedback-rtl-invert.svg
deleted file mode 100644 (file)
index 14be7ff..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M15.798 15.834l-.568 2.101c-.198.765-1.06 1.22-1.8 1.016-.698-.193-1.125-.983-.926-1.747l.38-1.37H4L6.771 5l13.074 7.652c.427.762-.088 2.748-.823 3.182h-3.224z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr-invert.png
deleted file mode 100644 (file)
index 2949648..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/funnel-ltr-invert.svg
deleted file mode 100644 (file)
index d533779..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M11 13L5 6h15l-6 7v7c-1.7 0-3-1.3-3-3v-4z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl-invert.png
deleted file mode 100644 (file)
index c0f155a..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/funnel-rtl-invert.svg
deleted file mode 100644 (file)
index f99e338..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M14 13l6-7H5l6 7v7c1.7 0 3-1.3 3-3v-4z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/heart-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/heart-invert.png
deleted file mode 100644 (file)
index 2070997..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/heart-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/heart-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/heart-invert.svg
deleted file mode 100644 (file)
index ab9e536..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M15 7c-2 0-3 2-3 2s-1-2-3-2c-2.5 0-4 2-4 4 0 4 5 5 7 8 2-3 7-4 7-8 0-2-1.5-4-4-4z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/key-ltr-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/key-ltr-invert.png
deleted file mode 100644 (file)
index 265da14..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/key-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/key-ltr-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/key-ltr-invert.svg
deleted file mode 100644 (file)
index 454f6a9..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M14.5 4C11.5 4 9 6.5 9 9.5c0 1 .3 1.9.7 2.8L4 18v2h4v-2h2v-2h2l1.2-1.2c.4.1.9.2 1.3.2 3 0 5.5-2.5 5.5-5.5S17.5 4 14.5 4zM16 9c-.8 0-1.5-.7-1.5-1.5S15.2 6 16 6s1.5.7 1.5 1.5S16.8 9 16 9z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/key-rtl-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/key-rtl-invert.png
deleted file mode 100644 (file)
index a5f2904..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/key-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/key-rtl-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/key-rtl-invert.svg
deleted file mode 100644 (file)
index 6b7fd63..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M9.5 4c3 0 5.5 2.5 5.5 5.5 0 1-.3 1.9-.7 2.8L20 18v2h-4v-2h-2v-2h-2l-1.2-1.2c-.4.1-.9.2-1.3.2-3 0-5.5-2.5-5.5-5.5S6.5 4 9.5 4zM8 9c.8 0 1.5-.7 1.5-1.5S8.8 6 8 6s-1.5.7-1.5 1.5S7.2 9 8 9z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr-invert.png
deleted file mode 100644 (file)
index d7d1a0b..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-ltr-invert.svg
deleted file mode 100644 (file)
index d137db6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M3 7v9c0 1.7 1.3 3 3 3h15V7H3zm8 2h2v2h-2V9zm0 3h2v2h-2v-2zM8 9h2v2H8V9zm0 3h2v2H8v-2zm-1 5H6c-.6 0-1-.4-1-1v-1h2v2zm0-3H5v-2h2v2zm0-3H5V9h2v2zm9 6H8v-2h8v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2zm3 6h-2v-2h2v2zm0-3h-2v-2h2v2zm0-3h-2V9h2v2z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl-invert.png
deleted file mode 100644 (file)
index 1b0275e..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/keyboard-rtl-invert.svg
deleted file mode 100644 (file)
index 792025b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M21 7v9c0 1.7-1.3 3-3 3H3V7h18zm-8 2h-2v2h2V9zm0 3h-2v2h2v-2zm3-3h-2v2h2V9zm0 3h-2v2h2v-2zm1 5h1c.6 0 1-.4 1-1v-1h-2v2zm0-3h2v-2h-2v2zm0-3h2V9h-2v2zm-9 6h8v-2H8v2zm0-3h2v-2H8v2zm0-3h2V9H8v2zm-3 6h2v-2H5v2zm0-3h2v-2H5v2zm0-3h2V9H5v2z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr-invert.png
deleted file mode 100644 (file)
index fb1bb0c..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/logOut-ltr-invert.svg
deleted file mode 100644 (file)
index 14f148a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M15 14v3l5-4.5L15 8v3H8c0 1.7 1.3 3 3 3h4zm-1-9H4v15h10v-2H6V7h8V5z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl-invert.png
deleted file mode 100644 (file)
index dcd2f15..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/logOut-rtl-invert.svg
deleted file mode 100644 (file)
index e3ce38b..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M9 14v3l-5-4.5L9 8v3h7c0 1.7-1.3 3-3 3H9zm1-9h10v15H10v-2h8V7h-8V5z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr-invert.png
deleted file mode 100644 (file)
index 5e432b0..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-ltr-invert.svg
deleted file mode 100644 (file)
index f7a92e0..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M12 5l2.5 2.5L11 11c-1.2 1.2-1.2 2.8 0 4l5.5-5.5L19 12V5h-7zm5 12H8c-.6 0-1-.4-1-1V7h3L8 5H5v11c0 1.7 1.3 3 3 3h11v-3l-2-2v3z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl-invert.png
deleted file mode 100644 (file)
index f9a742e..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/newWindow-rtl-invert.svg
deleted file mode 100644 (file)
index ef51a66..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M12 5L9.5 7.5 13 11c1.2 1.2 1.2 2.8 0 4L7.5 9.5 5 12V5h7zM7 17h9c.6 0 1-.4 1-1V7h-3l2-2h3v11c0 1.7-1.3 3-3 3H5v-3l2-2v3z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr-invert.png
deleted file mode 100644 (file)
index ca07bcc..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/printer-ltr-invert.svg
deleted file mode 100644 (file)
index 1442004..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M18 8h-1V4H7v4H3v6c0 1.7 1.3 3 3 3h1v3h10v-3h4v-6c0-1.7-1.3-3-3-3zM8 5h8v3H8V5zm8 14H8v-6h8v6z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl-invert.png
deleted file mode 100644 (file)
index 95ef54a..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/printer-rtl-invert.svg
deleted file mode 100644 (file)
index 0d1cd83..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M6 8h1V4h10v4h4v6c0 1.7-1.3 3-3 3h-1v3H7v-3H3v-6c0-1.7 1.3-3 3-3zm10-3H8v3h8V5zM8 19h8v-6H8v6z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/search-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/search-ltr.png
new file mode 100644 (file)
index 0000000..e8e99f8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/search-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/search-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/icons/search-ltr.svg
new file mode 100644 (file)
index 0000000..ebc654a
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="search">
+        <path id="magnifying-glass" d="M10.5 4a6.5 6.5 0 1 0 2.844 12.344L16 19c1.4 1.4 2.5 1.5 4 0l-4.438-4.438A6.426 6.426 0 0 0 17 10.5 6.5 6.5 0 0 0 10.5 4zm0 2a4.5 4.5 0 1 1 0 9 4.5 4.5 0 0 1 0-9z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/search-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/search-rtl.png
new file mode 100644 (file)
index 0000000..3ab96be
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/search-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/search-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/icons/search-rtl.svg
new file mode 100644 (file)
index 0000000..c51d4cb
--- /dev/null
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="search">
+        <path id="magnifying-glass" d="M13.5 4a6.5 6.5 0 1 1-2.844 12.344L8 19c-1.4 1.4-2.5 1.5-4 0l4.438-4.438A6.426 6.426 0 0 1 7 10.5 6.5 6.5 0 0 1 13.5 4zm0 2a4.5 4.5 0 1 0 0 9 4.5 4.5 0 0 0 0-9z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/search.png b/resources/lib/oojs-ui/themes/apex/images/icons/search.png
deleted file mode 100644 (file)
index 7b47539..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/search.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/search.svg b/resources/lib/oojs-ui/themes/apex/images/icons/search.svg
deleted file mode 100644 (file)
index 823ebf2..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <g id="search">
-        <path id="magnifying-glass" d="M18.87 18.375l-3.987-3.99-.286-.17a5.774 5.774 0 0 0 1.082-3.372C15.67 7.616 13.06 5 9.84 5A5.843 5.843 0 0 0 4 10.844a5.84 5.84 0 0 0 5.842 5.842c1.26 0 2.423-.403 3.377-1.08l.16.286 3.99 3.987c.32.31.91.24 1.33-.18.41-.42.49-1.01.17-1.33zM9.837 14.56a3.72 3.72 0 0 1-3.718-3.717c0-2.05 1.67-3.72 3.72-3.72s3.72 1.668 3.72 3.72a3.722 3.722 0 0 1-3.72 3.718z"/>
-    </g>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-ltr.png
new file mode 100644 (file)
index 0000000..5423b36
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-ltr.svg
new file mode 100644 (file)
index 0000000..2112bb2
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M4 9h12v2H4V9zm0 3h8v2H4v-2zm0-7h16v3H4V5zm16 14H4v-3h16v3z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-rtl.png
new file mode 100644 (file)
index 0000000..0ff3d7c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/icons/stripeFlow-rtl.svg
new file mode 100644 (file)
index 0000000..39790a9
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M20 9H8v2h12V9zm0 3h-8v2h8v-2zm0-7H4v3h16V5zM4 19h16v-3H4v3z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/stripeSideMenu.png b/resources/lib/oojs-ui/themes/apex/images/icons/stripeSideMenu.png
new file mode 100644 (file)
index 0000000..e031527
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/stripeSideMenu.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/stripeSideMenu.svg b/resources/lib/oojs-ui/themes/apex/images/icons/stripeSideMenu.svg
new file mode 100644 (file)
index 0000000..e63a7d5
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M20 19H4v-2h16v2zM20 15H4v-2h16v2zM20 11H4V9h16v2z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-ltr.png
new file mode 100644 (file)
index 0000000..ce15bd8
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-ltr.svg
new file mode 100644 (file)
index 0000000..767d6cd
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M20 11H4V9h16v2zM4 12h8v2H4v-2z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-rtl.png
new file mode 100644 (file)
index 0000000..82ca2bf
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/icons/stripeSummary-rtl.svg
new file mode 100644 (file)
index 0000000..4d16337
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M4 11h16V9H4v2zm16 1h-8v2h8v-2z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-ltr.png
new file mode 100644 (file)
index 0000000..b482d3e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-ltr.svg
new file mode 100644 (file)
index 0000000..d7c202e
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M17 13H4v-3h13v3zm-5 6H4v-3h8v3zM4 7V4h16v3H4z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-rtl.png
new file mode 100644 (file)
index 0000000..516bc2c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/icons/stripeToC-rtl.svg
new file mode 100644 (file)
index 0000000..0859be6
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M7 13h13v-3H7v3zm5 6h8v-3h-8v3zm8-12V4H4v3h16z"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/subtract-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/subtract-invert.png
deleted file mode 100644 (file)
index 4e58b70..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/subtract-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/subtract-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/subtract-invert.svg
deleted file mode 100644 (file)
index 9595ac6..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-       <path d="M18 13H6v-2h12"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr-invert.png
deleted file mode 100644 (file)
index 2bc944a..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/sun-ltr-invert.svg
deleted file mode 100644 (file)
index f533999..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M18.1 5.1c0 .3-.1.6-.3.9l-1.4 1.4-.9-.8 2.2-2.2c.3.1.4.4.4.7zm-.5 5.3h3.2c0 .3-.1.6-.4.9s-.5.4-.8.4h-2v-1.3zm-6.2-5V2.2c.3 0 .6.1.9.4s.4.5.4.8v2h-1.3zm6.4 11.7c-.3 0-.6-.1-.8-.3l-1.4-1.4.8-.8 2.2 2.2c-.2.2-.5.3-.8.3zM6.2 4.9c.3 0 .6.1.8.3l1.4 1.4-.8.9-2.2-2.3c.2-.2.5-.3.8-.3zm5.2 11.7h1.2v3.2c-.3 0-.6-.1-.9-.4s-.4-.5-.4-.8l.1-2zm-7-6.2h2v1.2H3.2c0-.3.1-.6.4-.9s.5-.3.8-.3zM6.2 16l1.4-1.4.8.8-2.2 2.2c-.2-.2-.3-.5-.3-.8s.1-.6.3-.8z"/>
-    <circle cx="12" cy="11" r="4"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl-invert.png
deleted file mode 100644 (file)
index 7ac54ff..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/sun-rtl-invert.svg
deleted file mode 100644 (file)
index 0e19566..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M5.9 5.1c0 .3.1.6.3.9l1.4 1.4.9-.8-2.2-2.2c-.3.1-.4.4-.4.7zm.5 5.3H3.2c0 .3.1.6.4.9.3.3.5.4.8.4h2v-1.3zm6.2-5V2.2c-.3 0-.6.1-.9.4-.3.3-.4.5-.4.8v2h1.3zM6.2 17.1c.3 0 .6-.1.8-.3l1.4-1.4-.8-.8-2.2 2.2c.2.2.5.3.8.3zM17.8 4.9c-.3 0-.6.1-.8.3l-1.4 1.4.8.9 2.2-2.3c-.2-.2-.5-.3-.8-.3zm-5.2 11.7h-1.2v3.2c.3 0 .6-.1.9-.4.3-.3.4-.5.4-.8l-.1-2zm7-6.2h-2v1.2h3.2c0-.3-.1-.6-.4-.9-.3-.3-.5-.3-.8-.3zM17.8 16l-1.4-1.4-.8.8 2.2 2.2c.2-.2.3-.5.3-.8 0-.3-.1-.6-.3-.8z"/>
-    <circle cx="12" cy="11" r="4" transform="matrix(-1 0 0 1 24 0)"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/viewCompact.png b/resources/lib/oojs-ui/themes/apex/images/icons/viewCompact.png
new file mode 100644 (file)
index 0000000..13fe420
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/viewCompact.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/viewCompact.svg b/resources/lib/oojs-ui/themes/apex/images/icons/viewCompact.svg
new file mode 100644 (file)
index 0000000..d96a2e3
--- /dev/null
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="viewCompact">
+        <circle cx="6" cy="6" r="2"/>
+        <circle cx="12" cy="6" r="2"/>
+        <circle cx="18" cy="6" r="2"/>
+        <circle cx="6" cy="12" r="2"/>
+        <circle cx="12" cy="12" r="2"/>
+        <circle cx="18" cy="12" r="2"/>
+        <circle cx="6" cy="18" r="2"/>
+        <circle cx="12" cy="18" r="2"/>
+        <circle cx="18" cy="18" r="2"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-ltr.png b/resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-ltr.png
new file mode 100644 (file)
index 0000000..4341f0e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-ltr.svg b/resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-ltr.svg
new file mode 100644 (file)
index 0000000..1a5092a
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="viewDetails">
+        <circle cx="5.5" cy="8.5" r="2.5"/>
+        <path d="M10 6h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
+        <circle cx="5.5" cy="16.5" r="2.5"/>
+        <path d="M10 14h12v1H10zm0 2h9v1h-9zm0 2h4v1h-4z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-rtl.png b/resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-rtl.png
new file mode 100644 (file)
index 0000000..338294c
Binary files /dev/null and b/resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-rtl.svg b/resources/lib/oojs-ui/themes/apex/images/icons/viewDetails-rtl.svg
new file mode 100644 (file)
index 0000000..f43b05f
--- /dev/null
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <g id="viewDetails">
+        <circle cx="18.5" cy="8.5" r="2.5"/>
+        <path d="M14 6H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+        <circle cx="18.5" cy="16.5" r="2.5"/>
+        <path d="M14 14H2v1h12zm0 2H5v1h9zm0 2h-4v1h4z"/>
+    </g>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr-invert.png
deleted file mode 100644 (file)
index 7018968..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-ltr-invert.svg
deleted file mode 100644 (file)
index a6d466a..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M13 14h5v1h-5v-1zm0 3h5v-1h-5v1zm0 1h5v1h-5v-1zm-1-5v3l-5 3 1-6-4-3 6-1 2-5s1.9 5 2 5l6 1-4 3h-4z"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl-invert.png b/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl-invert.png
deleted file mode 100644 (file)
index 28008b5..0000000
Binary files a/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl-invert.svg b/resources/lib/oojs-ui/themes/apex/images/icons/watchlist-rtl-invert.svg
deleted file mode 100644 (file)
index 61a2866..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#FFFFFF">
-    <path d="M11 14H6v1h5v-1zm0 3H6v-1h5v1zm0 1H6v1h5v-1zm1-5v3l5 3-1-6 4-3-6-1-2-5s-1.9 5-2 5l-6 1 4 3h4z"/>
-</g></svg>
index e6fa863..c169b56 100644 (file)
                }
        },
        "images": {
+               "alert": { "file": "images/icons/alert.svg", "variants": [ "warning" ] },
                "bell": { "file": "images/icons/bell.svg" },
                "bellOn": { "file": {
                        "ltr": "images/icons/bellOn-ltr.svg",
                        "rtl": "images/icons/bellOn-rtl.svg"
                } },
+               "comment": { "file": "images/icons/comment.svg" },
                "eye": { "file": "images/icons/eye.svg" },
                "eyeClosed": { "file": "images/icons/eyeClosed.svg" },
                "message": { "file": {
                        "ltr": "images/icons/message-ltr.svg",
                        "rtl": "images/icons/message-rtl.svg"
                } },
+               "notice": { "file": "images/icons/notice.svg" },
                "signature": { "file": {
                        "ltr": "images/icons/signature-ltr.svg",
                        "rtl": "images/icons/signature-rtl.svg"
index 80bbcaf..e952108 100644 (file)
@@ -62,6 +62,8 @@
                        "ltr": "images/icons/folderPlaceholder-ltr.svg",
                        "rtl": "images/icons/folderPlaceholder-rtl.svg"
                } },
+               "history": { "file": "images/icons/history.svg" },
+               "info": { "file": "images/icons/info.svg" },
                "journal": { "file": {
                        "ltr": "images/icons/journal-ltr.svg",
                        "rtl": "images/icons/journal-rtl.svg"
                        "ltr": "images/icons/newspaper-ltr.svg",
                        "rtl": "images/icons/newspaper-rtl.svg"
                } },
+               "tag": { "file": "images/icons/tag.svg", "variants": [ "destructive", "warning", "constructive" ] },
                "upload": { "file": {
                        "ltr": "images/icons/upload-ltr.svg",
                        "rtl": "images/icons/upload-rtl.svg"
-               } }
+               } },
+               "window": { "file": "images/icons/window.svg" }
        }
 }
index f693e3f..668173f 100644 (file)
@@ -23,6 +23,7 @@
        },
        "images": {
                "add": { "file": "images/icons/add.svg", "variants": [ "constructive", "progressive" ] },
+               "advanced": { "file": "images/icons/advanced.svg" },
                "bookmark": { "file": {
                        "ltr": "images/icons/bookmark-ltr.svg",
                        "rtl": "images/icons/bookmark-rtl.svg"
                        "ltr": "images/icons/browser-ltr.svg",
                        "rtl": "images/icons/browser-rtl.svg"
                } },
+               "cancel": { "file": "images/icons/cancel.svg", "variants": [ "destructive" ] },
+               "check": { "file": "images/icons/check.svg", "variants": [ "constructive", "progressive", "destructive" ] },
                "clear": { "file": "images/icons/clear.svg" },
                "clock": { "file": "images/icons/clock.svg" },
+               "close": { "file": "images/icons/close.svg" },
+               "ellipsis": { "file": "images/icons/ellipsis.svg" },
                "feedback": {
                        "file": {
                                "ltr": "images/icons/feedback-ltr.svg",
                        "rtl": "images/icons/funnel-rtl.svg"
                } },
                "heart": { "file": "images/icons/heart.svg" },
+               "help": { "file": {
+                       "ltr": "images/icons/help-ltr.svg",
+                       "rtl": "images/icons/help-rtl.svg",
+                       "lang": {
+                               "he,yi": "images/icons/help-ltr.svg"
+                       }
+               } },
                "key": { "file": {
                        "ltr": "images/icons/key-ltr.svg",
                        "rtl": "images/icons/key-rtl.svg"
                        "ltr": "images/icons/printer-ltr.svg",
                        "rtl": "images/icons/printer-rtl.svg"
                } },
+               "search": { "file": {
+                       "ltr": "images/icons/search-ltr.svg",
+                       "rtl": "images/icons/search-rtl.svg"
+                       }
+               },
+               "settings": { "file": "images/icons/settings.svg" },
                "subtract": { "file": "images/icons/subtract.svg" },
                "sun": { "file": {
                        "ltr": "images/icons/sun-ltr.svg",
index 6ff4a0e..f720a25 100644 (file)
@@ -22,6 +22,7 @@
                }
        },
        "images": {
+               "menu": { "file": "images/icons/menu.svg" },
                "stripeFlow": { "file": {
                        "ltr": "images/icons/stripeFlow-ltr.svg",
                        "rtl": "images/icons/stripeFlow-rtl.svg"
index 7098f23..58feb23 100644 (file)
                        "ltr": "images/icons/mapPinAdd-ltr.svg",
                        "rtl": "images/icons/mapPinAdd-rtl.svg"
                } },
+               "mapTrail": { "file": {
+                       "ltr": "images/icons/mapTrail-ltr.svg",
+                       "rtl": "images/icons/mapTrail-rtl.svg"
+               } },
                "wikitrail": { "file": {
-                       "ltr": "images/icons/wikitrail-ltr.svg",
-                       "rtl": "images/icons/wikitrail-rtl.svg"
-               } }
+                       "ltr": "images/icons/mapTrail-ltr.svg",
+                       "rtl": "images/icons/mapTrail-rtl.svg"
+               }, "deprecated": "Renamed to 'mapTrail' since v0.20.1."
+               }
        }
 }
index 059073f..0dc88e3 100644 (file)
                } },
                "caretDown": { "file": "images/icons/caretDown.svg" },
                "caretUp": { "file": "images/icons/caretUp.svg" },
+               "collapse": { "file": "images/icons/collapse.svg" },
                "downTriangle": { "file": "images/icons/downTriangle.svg" },
+               "expand": { "file": "images/icons/expand.svg" },
                "move": { "file": "images/icons/move.svg" },
+               "next": { "file": {
+                       "ltr": "images/icons/move-ltr.svg",
+                       "rtl": "images/icons/move-rtl.svg"
+                       }
+               },
+               "previous": { "file": {
+                       "ltr": "images/icons/move-rtl.svg",
+                       "rtl": "images/icons/move-ltr.svg"
+                       }
+               },
                "upTriangle": { "file": "images/icons/upTriangle.svg" }
        }
 }
index 60c05f3..958e7e3 100644 (file)
                }
        },
        "images": {
-               "add": { "file": "images/icons/add.svg", "variants": [ "constructive", "progressive" ], "deprecated": "Moved since v0.19.5, use from the 'interactive' pack instead." },
-               "advanced": { "file": "images/icons/advanced.svg" },
-               "alert": { "file": "images/icons/alert.svg", "variants": [ "warning" ] },
-               "cancel": { "file": "images/icons/cancel.svg", "variants": [ "destructive" ] },
-               "check": { "file": "images/icons/check.svg", "variants": [ "constructive", "progressive", "destructive" ] },
-               "circle": { "file": "images/icons/circle.svg", "variants": [ "constructive", "progressive" ] },
-               "close": { "file": "images/icons/close.svg" },
-               "code": { "file": "images/icons/code.svg" },
-               "collapse": { "file": "images/icons/collapse.svg" },
-               "comment": { "file": "images/icons/comment.svg" },
-               "ellipsis": { "file": "images/icons/ellipsis.svg" },
-               "expand": { "file": "images/icons/expand.svg" },
+               "add": { "file": "images/icons/add.svg", "variants": [ "constructive", "progressive" ], "deprecated": "Moved since v0.19.5, use from the 'interactions' pack instead." },
+               "advanced": { "file": "images/icons/advanced.svg", "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead." },
+               "alert": { "file": "images/icons/alert.svg", "variants": [ "warning" ], "deprecated": "Moved since v0.20.1, use from the 'alerts' pack instead." },
+               "cancel": { "file": "images/icons/cancel.svg", "variants": [ "destructive" ], "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead." },
+               "check": { "file": "images/icons/check.svg", "variants": [ "constructive", "progressive", "destructive" ], "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead." },
+       "circle": { "file": "images/icons/circle.svg", "variants": [ "constructive", "progressive" ], "deprecated": "Deprecated since v0.20.1, do not use." },
+               "close": { "file": "images/icons/close.svg", "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead." },
+               "code": { "file": "images/icons/code.svg", "deprecated": "Moved since v0.16.2, use from the 'editing-advanced' pack instead." },
+               "collapse": { "file": "images/icons/collapse.svg", "deprecated": "Moved since v0.20.1, use from the 'movement' pack instead." },
+               "comment": { "file": "images/icons/comment.svg", "deprecated": "Moved since v0.20.1, use from the 'alerts' pack instead." },
+               "ellipsis": { "file": "images/icons/ellipsis.svg", "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead." },
+               "expand": { "file": "images/icons/expand.svg", "deprecated": "Moved since v0.20.1, use from the 'movement' pack instead." },
                "help": { "file": {
                        "ltr": "images/icons/help-ltr.svg",
                        "rtl": "images/icons/help-rtl.svg",
                        "lang": {
                                "he,yi": "images/icons/help-ltr.svg"
-                       }
+                       },
+                       "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead."
                } },
-               "history": { "file": "images/icons/history.svg" },
-               "info": { "file": "images/icons/info.svg" },
-               "menu": { "file": "images/icons/menu.svg" },
+               "history": { "file": "images/icons/history.svg", "deprecated": "Moved since v0.20.1, use from the 'content' pack instead." },
+               "info": { "file": "images/icons/info.svg", "deprecated": "Moved since v0.20.1, use from the 'content' pack instead." },
+               "menu": { "file": "images/icons/menu.svg", "deprecated": "Moved since v0.20.1, use from the 'layout' pack instead." },
                "next": { "file": {
                        "ltr": "images/icons/move-ltr.svg",
                        "rtl": "images/icons/move-rtl.svg"
-               } },
-               "notice": { "file": "images/icons/notice.svg" },
+                       },
+                       "deprecated": "Moved since v0.20.1, use from the 'movement' pack instead."
+               },
+               "notice": { "file": "images/icons/notice.svg", "deprecated": "Moved since v0.20.1, use from the 'alerts' pack instead." },
                "previous": { "file": {
                        "ltr": "images/icons/move-rtl.svg",
                        "rtl": "images/icons/move-ltr.svg"
-               } },
+                       },
+                       "deprecated": "Moved since v0.20.1, use from the 'movement' pack instead."
+               },
                "redo": { "file": {
                        "ltr": "images/icons/arched-arrow-ltr.svg",
                        "rtl": "images/icons/arched-arrow-rtl.svg"
-               } },
-               "remove": { "file": "images/icons/trash.svg", "variants": [ "destructive" ] },
+                       },
+                       "deprecated": "Moved since v0.16.2, use from the 'editing-core' pack instead."
+               },
+               "remove": { "file": "images/icons/trash.svg", "variants": [ "destructive" ], "deprecated": "Replaced since v0.14.0, use 'trash' from the 'moderation' pack instead." },
                "search": { "file": {
                        "ltr": "images/icons/search-ltr.svg",
                        "rtl": "images/icons/search-rtl.svg"
-               } },
-               "settings": { "file": "images/icons/settings.svg" },
-               "tag": { "file": "images/icons/tag.svg", "variants": [ "destructive", "warning", "constructive" ] },
+                       },
+                       "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead."
+               },
+               "settings": { "file": "images/icons/settings.svg", "deprecated": "Moved since v0.20.1, use from the 'interactions' pack instead." },
+               "tag": { "file": "images/icons/tag.svg", "variants": [ "destructive", "warning", "constructive" ], "deprecated": "Moved since v0.20.1, use from the 'content' pack instead." },
                "undo": { "file": {
                        "ltr": "images/icons/arched-arrow-rtl.svg",
                        "rtl": "images/icons/arched-arrow-ltr.svg"
-               } },
-               "window": { "file": "images/icons/window.svg" }
+                       },
+                       "deprecated": "Moved since v0.16.2, use from the 'editing-core' pack instead."
+               },
+               "window": { "file": "images/icons/window.svg", "deprecated": "Moved since v0.20.1, use from the 'content' pack instead." }
        }
 }
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr-invert.png
new file mode 100644 (file)
index 0000000..075f84e
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr-invert.svg
new file mode 100644 (file)
index 0000000..17d3645
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
+    <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2L15 9zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6L1.7 5c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7C0 8.9 0 7.8.5 6.8zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5S5 18.4 5 16.5 6.6 13 8.5 13s3.5 1.6 3.5 3.5zM24 8l-1-1-1.5 1.5L20 7l-1 1 1.5 1.5L19 11l1 1 1.5-1.5L23 12l1-1-1.5-1.5z"/>
+    <circle cx="8" cy="5" r="2"/>
+</g></svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr-progressive.png
new file mode 100644 (file)
index 0000000..2b26e15
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr-progressive.svg
new file mode 100644 (file)
index 0000000..2b49b99
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
+    <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2L15 9zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6L1.7 5c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7C0 8.9 0 7.8.5 6.8zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5S5 18.4 5 16.5 6.6 13 8.5 13s3.5 1.6 3.5 3.5zM24 8l-1-1-1.5 1.5L20 7l-1 1 1.5 1.5L19 11l1 1 1.5-1.5L23 12l1-1-1.5-1.5z"/>
+    <circle cx="8" cy="5" r="2"/>
+</g></svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr.png
new file mode 100644 (file)
index 0000000..331fd59
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-ltr.svg
new file mode 100644 (file)
index 0000000..cb073b9
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2L15 9zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6L1.7 5c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7C0 8.9 0 7.8.5 6.8zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5S5 18.4 5 16.5 6.6 13 8.5 13s3.5 1.6 3.5 3.5zM24 8l-1-1-1.5 1.5L20 7l-1 1 1.5 1.5L19 11l1 1 1.5-1.5L23 12l1-1-1.5-1.5z"/>
+    <circle cx="8" cy="5" r="2"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl-invert.png
new file mode 100644 (file)
index 0000000..75c8dcf
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl-invert.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl-invert.svg
new file mode 100644 (file)
index 0000000..fbb9cab
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
+    <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5zM.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z"/>
+    <circle cx="8" cy="5" r="2" transform="matrix(-1 0 0 1 24.095 0)"/>
+</g></svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl-progressive.png
new file mode 100644 (file)
index 0000000..fc0b2d9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl-progressive.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl-progressive.svg
new file mode 100644 (file)
index 0000000..a2f62ff
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
+    <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5zM.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z"/>
+    <circle cx="8" cy="5" r="2" transform="matrix(-1 0 0 1 24.095 0)"/>
+</g></svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl.png
new file mode 100644 (file)
index 0000000..62f1fe9
Binary files /dev/null and b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl.png differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/mapTrail-rtl.svg
new file mode 100644 (file)
index 0000000..e8b1a08
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
+    <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5zM.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z"/>
+    <circle cx="8" cy="5" r="2" transform="matrix(-1 0 0 1 24.095 0)"/>
+</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.png
deleted file mode 100644 (file)
index 075f84e..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-invert.svg
deleted file mode 100644 (file)
index 17d3645..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2L15 9zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6L1.7 5c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7C0 8.9 0 7.8.5 6.8zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5S5 18.4 5 16.5 6.6 13 8.5 13s3.5 1.6 3.5 3.5zM24 8l-1-1-1.5 1.5L20 7l-1 1 1.5 1.5L19 11l1 1 1.5-1.5L23 12l1-1-1.5-1.5z"/>
-    <circle cx="8" cy="5" r="2"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-progressive.png
deleted file mode 100644 (file)
index 2b26e15..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-progressive.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr-progressive.svg
deleted file mode 100644 (file)
index 2b49b99..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2L15 9zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6L1.7 5c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7C0 8.9 0 7.8.5 6.8zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5S5 18.4 5 16.5 6.6 13 8.5 13s3.5 1.6 3.5 3.5zM24 8l-1-1-1.5 1.5L20 7l-1 1 1.5 1.5L19 11l1 1 1.5-1.5L23 12l1-1-1.5-1.5z"/>
-    <circle cx="8" cy="5" r="2"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png
deleted file mode 100644 (file)
index 331fd59..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-ltr.svg
deleted file mode 100644 (file)
index cb073b9..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M15 9l.7-1.8c.9.4 1.8.7 2.4.9l-.6 1.7v.2L15 9zm-4.3-1.9l.8-1.8c1.2.5 2.6 1.1 3 1.4l-.8 1.8-3-1.4zm-5.9-1c-.8 0-1.4.2-2 .6L1.7 5c.9-.6 1.9-.9 3.1-.9v2zm-4.3.7l1.8.8c-.3.7-.3 1.3-.1 1.8l-1.9.7C0 8.9 0 7.8.5 6.8zm4.2 5.4l-1.3 1.5c-1-1-1.7-1.6-2-2l1.5-1.3c.7.8 1.3 1.4 1.8 1.8zm7.3 4.3c0 1.9-1.6 3.5-3.5 3.5S5 18.4 5 16.5 6.6 13 8.5 13s3.5 1.6 3.5 3.5zM24 8l-1-1-1.5 1.5L20 7l-1 1 1.5 1.5L19 11l1 1 1.5-1.5L23 12l1-1-1.5-1.5z"/>
-    <circle cx="8" cy="5" r="2"/>
-</svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.png
deleted file mode 100644 (file)
index 75c8dcf..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-invert.svg
deleted file mode 100644 (file)
index fbb9cab..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#fff">
-    <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5zM.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z"/>
-    <circle cx="8" cy="5" r="2" transform="matrix(-1 0 0 1 24.095 0)"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-progressive.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-progressive.png
deleted file mode 100644 (file)
index fc0b2d9..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-progressive.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-progressive.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl-progressive.svg
deleted file mode 100644 (file)
index a2f62ff..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><g fill="#36c">
-    <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5zM.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z"/>
-    <circle cx="8" cy="5" r="2" transform="matrix(-1 0 0 1 24.095 0)"/>
-</g></svg>
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.png b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.png
deleted file mode 100644 (file)
index 62f1fe9..0000000
Binary files a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.png and /dev/null differ
diff --git a/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.svg b/resources/lib/oojs-ui/themes/mediawiki/images/icons/wikitrail-rtl.svg
deleted file mode 100644 (file)
index e8b1a08..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24">
-    <path d="M9.095 9l-.7-1.8c-.9.4-1.8.7-2.4.9l.6 1.7v.2l2.5-1zm4.3-1.9l-.8-1.8c-1.2.5-2.6 1.1-3 1.4l.8 1.8 3-1.4zm5.9-1c.8 0 1.4.2 2 .6l1.1-1.7c-.9-.6-1.9-.9-3.1-.9v2zm4.3.7l-1.8.8c.3.7.3 1.3.1 1.8l1.9.7c.3-1.2.3-2.3-.2-3.3zm-4.2 5.4l1.3 1.5c1-1 1.7-1.6 2-2l-1.5-1.3c-.7.8-1.3 1.4-1.8 1.8zm-7.3 4.3c0 1.9 1.6 3.5 3.5 3.5s3.5-1.6 3.5-3.5-1.6-3.5-3.5-3.5-3.5 1.6-3.5 3.5zM.095 8l1-1 1.5 1.5 1.5-1.5 1 1-1.5 1.5 1.5 1.5-1 1-1.5-1.5-1.5 1.5-1-1 1.5-1.5z"/>
-    <circle cx="8" cy="5" r="2" transform="matrix(-1 0 0 1 24.095 0)"/>
-</svg>
index 7c4dbb1..7b2d711 100644 (file)
@@ -459,4 +459,4 @@ html > body.rtl .mw-body ul#filetoc {
        display: block;
 }
 
-/* RTL specific CSS ends here **/
+/** RTL specific CSS ends here **/
index ff0c0e3..8d7a2a9 100644 (file)
@@ -322,6 +322,21 @@ a.new {
        color: #ba0000;
 }
 
+/* self links */
+a.mw-selflink {
+       color: inherit;
+       font-weight: bold;
+       text-decoration: inherit;
+}
+a.mw-selflink:hover {
+       cursor: inherit;
+       text-decoration: inherit;
+}
+a.mw-selflink:active,
+a.mw-selflink:visited {
+       color: inherit;
+}
+
 /* Plainlinks - this can be used to switch
  * off special external link styling */
 .plainlinks a.external {
index b3ed88c..67460ad 100644 (file)
@@ -10,7 +10,7 @@
  * - Add mw.libs.jpegmeta wrapper.
  */
 
-( function () {
+( function ( mw ) {
        /*
        Copyright (c) 2009 Ben Leslie
        
                return new JpegMeta.JpegFile( fileReaderResult, fileName );
        };
 
-}() );
+}( mediaWiki ) );
index a066d9e..221d2a5 100644 (file)
 
                                messageKey = details.message;
                                affectingItems = details.names;
-                       } else if ( this.isIncluded() ) {
+                       } else if ( this.isIncluded() && !this.isHighlighted() ) {
+                               // We only show the 'no effect' full-coverage message
+                               // if the item is also not highlighted. See T161273
                                superset = this.getSuperset();
                                // For this message we need to collect the affecting superset
                                affectingItems = this.getGroupModel().getSelectedItems( this )
                                        } );
 
                                messageKey = 'rcfilters-state-message-subset';
-                       } else if ( this.isFullyCovered() ) {
+                       } else if ( this.isFullyCovered() && !this.isHighlighted() ) {
                                affectingItems = this.getGroupModel().getSelectedItems( this )
                                        .map( function ( item ) {
                                                return mw.msg( 'quotation-marks', item.getLabel() );
index e334d5d..b5b768f 100644 (file)
         * @param {array|object|string} filters
         */
        mw.rcfilters.Controller.prototype.trackHighlight = function ( action, filters ) {
-               filters = $.type( filters ) === 'string' ? { name: filters } : filters;
-               filters = $.type( filters ) === 'object' ? [ filters ] : filters;
+               filters = typeof filters === 'string' ? { name: filters } : filters;
+               filters = !Array.isArray( filters ) ? [ filters ] : filters;
                mw.track(
                        'event.ChangesListHighlights',
                        {
index ec5b429..ee18979 100644 (file)
@@ -125,13 +125,17 @@ figure[typeof~='mw:Image/Frame'] {
 }
 
 figure[typeof~='mw:Image/Thumb'] > *:first-child > img,
-figure[typeof~='mw:Image/Frame'] > *:first-child > img,
-.mw-image-border > *:first-child > img {
+figure[typeof~='mw:Image/Frame'] > *:first-child > img {
        border: 1px solid #c8ccd1;
        margin: 3px;
        background: #fff;
 }
 
+/* Same as img.thumbborder in content.css */
+.mw-image-border > *:first-child > img {
+       border: 1px solid #eaecf0;
+}
+
 /* Hide the caption for frameless and plain floated images */
 figure[typeof~='mw:Image/Frameless'] > figcaption,
 figure[typeof~='mw:Image'] > figcaption {
index 0b0f912..d5e1c48 100644 (file)
@@ -148,7 +148,7 @@ to resemble a traditional dictionary definition */
        left: 0;
        text-align: center;
        color: #fff;
-       text-shadow: 0 0 10px rgba( 0, 0, 0, 0.4 ); /* improves legibility on white background*/
+       text-shadow: 0 0 10px rgba( 0, 0, 0, 0.4 ); /* improves legibility on white background */
        font-size: 0.8em;
        padding: 5px;
        background-color: rgba( 0, 0, 0, 0.5 );
@@ -183,7 +183,7 @@ to resemble a traditional dictionary definition */
 
        #mw-interwiki-results {
                width: 30%;
-               display: inline-block; /* used to align iw sidebar with the top of the main search results*/
+               display: inline-block; /* used to align iw sidebar with the top of the main search results */
                margin-left: 10%;
        }
        .searchresults .mw-search-createlink,
index 9da6c83..4a48f46 100644 (file)
@@ -29,7 +29,7 @@
        font-size: 0.8em;
 }
 
-/* Put some space under template's header, which may contain CAPTCHA HTML.*/
+/* Put some space under template's header, which may contain CAPTCHA HTML. */
 section.mw-form-header {
        margin-bottom: 10px;
 }
diff --git a/resources/src/mediawiki.widgets/mw.widgets.CategoryMultiselectWidget.js b/resources/src/mediawiki.widgets/mw.widgets.CategoryMultiselectWidget.js
new file mode 100644 (file)
index 0000000..ccc5c9d
--- /dev/null
@@ -0,0 +1,416 @@
+/*!
+ * MediaWiki Widgets - CategoryMultiselectWidget class.
+ *
+ * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
+ * @license The MIT License (MIT); see LICENSE.txt
+ */
+( function ( $, mw ) {
+       var NS_CATEGORY = mw.config.get( 'wgNamespaceIds' ).category;
+
+       /**
+        * Category selector widget. Displays an OO.ui.CapsuleMultiselectWidget
+        * and autocompletes with available categories.
+        *
+        *     mw.loader.using( 'mediawiki.widgets.CategoryMultiselectWidget', function () {
+        *       var selector = new mw.widgets.CategoryMultiselectWidget( {
+        *         searchTypes: [
+        *           mw.widgets.CategoryMultiselectWidget.SearchType.OpenSearch,
+        *           mw.widgets.CategoryMultiselectWidget.SearchType.InternalSearch
+        *         ]
+        *       } );
+        *
+        *       $( 'body' ).append( selector.$element );
+        *
+        *       selector.setSearchTypes( [ mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories ] );
+        *     } );
+        *
+        * @class mw.widgets.CategoryMultiselectWidget
+        * @uses mw.Api
+        * @extends OO.ui.CapsuleMultiselectWidget
+        * @mixins OO.ui.mixin.PendingElement
+        *
+        * @constructor
+        * @param {Object} [config] Configuration options
+        * @cfg {mw.Api} [api] Instance of mw.Api (or subclass thereof) to use for queries
+        * @cfg {number} [limit=10] Maximum number of results to load
+        * @cfg {mw.widgets.CategoryMultiselectWidget.SearchType[]} [searchTypes=[mw.widgets.CategoryMultiselectWidget.SearchType.OpenSearch]]
+        *   Default search API to use when searching.
+        */
+       mw.widgets.CategoryMultiselectWidget = function MWCategoryMultiselectWidget( config ) {
+               // Config initialization
+               config = $.extend( {
+                       limit: 10,
+                       searchTypes: [ mw.widgets.CategoryMultiselectWidget.SearchType.OpenSearch ]
+               }, config );
+               this.limit = config.limit;
+               this.searchTypes = config.searchTypes;
+               this.validateSearchTypes();
+
+               // Parent constructor
+               mw.widgets.CategoryMultiselectWidget.parent.call( this, $.extend( true, {}, config, {
+                       menu: {
+                               filterFromInput: false
+                       },
+                       placeholder: mw.msg( 'mw-widgets-categoryselector-add-category-placeholder' ),
+                       // This allows the user to both select non-existent categories, and prevents the selector from
+                       // being wiped from #onMenuItemsChange when we change the available options in the dropdown
+                       allowArbitrary: true
+               } ) );
+
+               // Mixin constructors
+               OO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$handle } ) );
+
+               // Event handler to call the autocomplete methods
+               this.$input.on( 'change input cut paste', OO.ui.debounce( this.updateMenuItems.bind( this ), 100 ) );
+
+               // Initialize
+               this.api = config.api || new mw.Api();
+               this.searchCache = {};
+       };
+
+       /* Setup */
+
+       OO.inheritClass( mw.widgets.CategoryMultiselectWidget, OO.ui.CapsuleMultiselectWidget );
+       OO.mixinClass( mw.widgets.CategoryMultiselectWidget, OO.ui.mixin.PendingElement );
+
+       /* Methods */
+
+       /**
+        * Gets new items based on the input by calling
+        * {@link #getNewMenuItems getNewItems} and updates the menu
+        * after removing duplicates based on the data value.
+        *
+        * @private
+        * @method
+        */
+       mw.widgets.CategoryMultiselectWidget.prototype.updateMenuItems = function () {
+               this.getMenu().clearItems();
+               this.getNewMenuItems( this.$input.val() ).then( function ( items ) {
+                       var existingItems, filteredItems,
+                               menu = this.getMenu();
+
+                       // Never show the menu if the input lost focus in the meantime
+                       if ( !this.$input.is( ':focus' ) ) {
+                               return;
+                       }
+
+                       // Array of strings of the data of OO.ui.MenuOptionsWidgets
+                       existingItems = menu.getItems().map( function ( item ) {
+                               return item.data;
+                       } );
+
+                       // Remove if items' data already exists
+                       filteredItems = items.filter( function ( item ) {
+                               return existingItems.indexOf( item ) === -1;
+                       } );
+
+                       // Map to an array of OO.ui.MenuOptionWidgets
+                       filteredItems = filteredItems.map( function ( item ) {
+                               return new OO.ui.MenuOptionWidget( {
+                                       data: item,
+                                       label: item
+                               } );
+                       } );
+
+                       menu.addItems( filteredItems ).toggle( true );
+               }.bind( this ) );
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.CategoryMultiselectWidget.prototype.clearInput = function () {
+               mw.widgets.CategoryMultiselectWidget.parent.prototype.clearInput.call( this );
+               // Abort all pending requests, we won't need their results
+               this.api.abort();
+       };
+
+       /**
+        * Searches for categories based on the input.
+        *
+        * @private
+        * @method
+        * @param {string} input The input used to prefix search categories
+        * @return {jQuery.Promise} Resolves with an array of categories
+        */
+       mw.widgets.CategoryMultiselectWidget.prototype.getNewMenuItems = function ( input ) {
+               var i,
+                       promises = [],
+                       deferred = $.Deferred();
+
+               if ( $.trim( input ) === '' ) {
+                       deferred.resolve( [] );
+                       return deferred.promise();
+               }
+
+               // Abort all pending requests, we won't need their results
+               this.api.abort();
+               for ( i = 0; i < this.searchTypes.length; i++ ) {
+                       promises.push( this.searchCategories( input, this.searchTypes[ i ] ) );
+               }
+
+               this.pushPending();
+
+               $.when.apply( $, promises ).done( function () {
+                       var categoryNames,
+                               allData = [],
+                               dataSets = Array.prototype.slice.apply( arguments );
+
+                       // Collect values from all results
+                       allData = allData.concat.apply( allData, dataSets );
+
+                       categoryNames = allData
+                               // Remove duplicates
+                               .filter( function ( value, index, self ) {
+                                       return self.indexOf( value ) === index;
+                               } )
+                               // Get Title objects
+                               .map( function ( name ) {
+                                       return mw.Title.newFromText( name );
+                               } )
+                               // Keep only titles from 'Category' namespace
+                               .filter( function ( title ) {
+                                       return title && title.getNamespaceId() === NS_CATEGORY;
+                               } )
+                               // Convert back to strings, strip 'Category:' prefix
+                               .map( function ( title ) {
+                                       return title.getMainText();
+                               } );
+
+                       deferred.resolve( categoryNames );
+
+               } ).always( this.popPending.bind( this ) );
+
+               return deferred.promise();
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.CategoryMultiselectWidget.prototype.createItemWidget = function ( data ) {
+               var title = mw.Title.makeTitle( NS_CATEGORY, data );
+               if ( !title ) {
+                       return null;
+               }
+               return new mw.widgets.CategoryCapsuleItemWidget( {
+                       apiUrl: this.api.apiUrl || undefined,
+                       title: title
+               } );
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.CategoryMultiselectWidget.prototype.getItemFromData = function ( data ) {
+               // This is a bit of a hack... We have to canonicalize the data in the same way that
+               // #createItemWidget and CategoryCapsuleItemWidget will do, otherwise we won't find duplicates.
+               var title = mw.Title.makeTitle( NS_CATEGORY, data );
+               if ( !title ) {
+                       return null;
+               }
+               return OO.ui.mixin.GroupElement.prototype.getItemFromData.call( this, title.getMainText() );
+       };
+
+       /**
+        * Validates the values in `this.searchType`.
+        *
+        * @private
+        * @return {boolean}
+        */
+       mw.widgets.CategoryMultiselectWidget.prototype.validateSearchTypes = function () {
+               var validSearchTypes = false,
+                       searchTypeEnumCount = Object.keys( mw.widgets.CategoryMultiselectWidget.SearchType ).length;
+
+               // Check if all values are in the SearchType enum
+               validSearchTypes = this.searchTypes.every( function ( searchType ) {
+                       return searchType > -1 && searchType < searchTypeEnumCount;
+               } );
+
+               if ( validSearchTypes === false ) {
+                       throw new Error( 'Unknown searchType in searchTypes' );
+               }
+
+               // If the searchTypes has mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories
+               // it can be the only search type.
+               if ( this.searchTypes.indexOf( mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories ) > -1 &&
+                       this.searchTypes.length > 1
+               ) {
+                       throw new Error( 'Can\'t have additional search types with mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories' );
+               }
+
+               // If the searchTypes has mw.widgets.CategoryMultiselectWidget.SearchType.ParentCategories
+               // it can be the only search type.
+               if ( this.searchTypes.indexOf( mw.widgets.CategoryMultiselectWidget.SearchType.ParentCategories ) > -1 &&
+                       this.searchTypes.length > 1
+               ) {
+                       throw new Error( 'Can\'t have additional search types with mw.widgets.CategoryMultiselectWidget.SearchType.ParentCategories' );
+               }
+
+               return true;
+       };
+
+       /**
+        * Sets and validates the value of `this.searchType`.
+        *
+        * @param {mw.widgets.CategoryMultiselectWidget.SearchType[]} searchTypes
+        */
+       mw.widgets.CategoryMultiselectWidget.prototype.setSearchTypes = function ( searchTypes ) {
+               this.searchTypes = searchTypes;
+               this.validateSearchTypes();
+       };
+
+       /**
+        * Searches categories based on input and searchType.
+        *
+        * @private
+        * @method
+        * @param {string} input The input used to prefix search categories
+        * @param {mw.widgets.CategoryMultiselectWidget.SearchType} searchType
+        * @return {jQuery.Promise} Resolves with an array of categories
+        */
+       mw.widgets.CategoryMultiselectWidget.prototype.searchCategories = function ( input, searchType ) {
+               var deferred = $.Deferred(),
+                       cacheKey = input + searchType.toString();
+
+               // Check cache
+               if ( this.searchCache[ cacheKey ] !== undefined ) {
+                       return this.searchCache[ cacheKey ];
+               }
+
+               switch ( searchType ) {
+                       case mw.widgets.CategoryMultiselectWidget.SearchType.OpenSearch:
+                               this.api.get( {
+                                       formatversion: 2,
+                                       action: 'opensearch',
+                                       namespace: NS_CATEGORY,
+                                       limit: this.limit,
+                                       search: input
+                               } ).done( function ( res ) {
+                                       var categories = res[ 1 ];
+                                       deferred.resolve( categories );
+                               } ).fail( deferred.reject.bind( deferred ) );
+                               break;
+
+                       case mw.widgets.CategoryMultiselectWidget.SearchType.InternalSearch:
+                               this.api.get( {
+                                       formatversion: 2,
+                                       action: 'query',
+                                       list: 'allpages',
+                                       apnamespace: NS_CATEGORY,
+                                       aplimit: this.limit,
+                                       apfrom: input,
+                                       apprefix: input
+                               } ).done( function ( res ) {
+                                       var categories = res.query.allpages.map( function ( page ) {
+                                               return page.title;
+                                       } );
+                                       deferred.resolve( categories );
+                               } ).fail( deferred.reject.bind( deferred ) );
+                               break;
+
+                       case mw.widgets.CategoryMultiselectWidget.SearchType.Exists:
+                               if ( input.indexOf( '|' ) > -1 ) {
+                                       deferred.resolve( [] );
+                                       break;
+                               }
+
+                               this.api.get( {
+                                       formatversion: 2,
+                                       action: 'query',
+                                       prop: 'info',
+                                       titles: 'Category:' + input
+                               } ).done( function ( res ) {
+                                       var categories = [];
+
+                                       $.each( res.query.pages, function ( index, page ) {
+                                               if ( !page.missing ) {
+                                                       categories.push( page.title );
+                                               }
+                                       } );
+
+                                       deferred.resolve( categories );
+                               } ).fail( deferred.reject.bind( deferred ) );
+                               break;
+
+                       case mw.widgets.CategoryMultiselectWidget.SearchType.SubCategories:
+                               if ( input.indexOf( '|' ) > -1 ) {
+                                       deferred.resolve( [] );
+                                       break;
+                               }
+
+                               this.api.get( {
+                                       formatversion: 2,
+                                       action: 'query',
+                                       list: 'categorymembers',
+                                       cmtype: 'subcat',
+                                       cmlimit: this.limit,
+                                       cmtitle: 'Category:' + input
+                               } ).done( function ( res ) {
+                                       var categories = res.query.categorymembers.map( function ( category ) {
+                                               return category.title;
+                                       } );
+                                       deferred.resolve( categories );
+                               } ).fail( deferred.reject.bind( deferred ) );
+                               break;
+
+                       case mw.widgets.CategoryMultiselectWidget.SearchType.ParentCategories:
+                               if ( input.indexOf( '|' ) > -1 ) {
+                                       deferred.resolve( [] );
+                                       break;
+                               }
+
+                               this.api.get( {
+                                       formatversion: 2,
+                                       action: 'query',
+                                       prop: 'categories',
+                                       cllimit: this.limit,
+                                       titles: 'Category:' + input
+                               } ).done( function ( res ) {
+                                       var categories = [];
+
+                                       $.each( res.query.pages, function ( index, page ) {
+                                               if ( !page.missing && $.isArray( page.categories ) ) {
+                                                       categories.push.apply( categories, page.categories.map( function ( category ) {
+                                                               return category.title;
+                                                       } ) );
+                                               }
+                                       } );
+
+                                       deferred.resolve( categories );
+                               } ).fail( deferred.reject.bind( deferred ) );
+                               break;
+
+                       default:
+                               throw new Error( 'Unknown searchType' );
+               }
+
+               // Cache the result
+               this.searchCache[ cacheKey ] = deferred.promise();
+
+               return deferred.promise();
+       };
+
+       /**
+        * @enum mw.widgets.CategoryMultiselectWidget.SearchType
+        * Types of search available.
+        */
+       mw.widgets.CategoryMultiselectWidget.SearchType = {
+               /** Search using action=opensearch */
+               OpenSearch: 0,
+
+               /** Search using action=query */
+               InternalSearch: 1,
+
+               /** Search for existing categories with the exact title */
+               Exists: 2,
+
+               /** Search only subcategories  */
+               SubCategories: 3,
+
+               /** Search only parent categories */
+               ParentCategories: 4
+       };
+
+       // For backwards compatibility. See T161285.
+       mw.widgets.CategorySelector = mw.widgets.CategoryMultiselectWidget;
+}( jQuery, mediaWiki ) );
diff --git a/resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js b/resources/src/mediawiki.widgets/mw.widgets.CategorySelector.js
deleted file mode 100644 (file)
index 422c048..0000000
+++ /dev/null
@@ -1,417 +0,0 @@
-/*!
- * MediaWiki Widgets - CategorySelector class.
- *
- * @copyright 2011-2015 MediaWiki Widgets Team and others; see AUTHORS.txt
- * @license The MIT License (MIT); see LICENSE.txt
- */
-( function ( $, mw ) {
-       var CSP,
-               NS_CATEGORY = mw.config.get( 'wgNamespaceIds' ).category;
-
-       /**
-        * Category selector widget. Displays an OO.ui.CapsuleMultiselectWidget
-        * and autocompletes with available categories.
-        *
-        *     mw.loader.using( 'mediawiki.widgets.CategorySelector', function () {
-        *       var selector = new mw.widgets.CategorySelector( {
-        *         searchTypes: [
-        *           mw.widgets.CategorySelector.SearchType.OpenSearch,
-        *           mw.widgets.CategorySelector.SearchType.InternalSearch
-        *         ]
-        *       } );
-        *
-        *       $( 'body' ).append( selector.$element );
-        *
-        *       selector.setSearchTypes( [ mw.widgets.CategorySelector.SearchType.SubCategories ] );
-        *     } );
-        *
-        * @class mw.widgets.CategorySelector
-        * @uses mw.Api
-        * @extends OO.ui.CapsuleMultiselectWidget
-        * @mixins OO.ui.mixin.PendingElement
-        *
-        * @constructor
-        * @param {Object} [config] Configuration options
-        * @cfg {mw.Api} [api] Instance of mw.Api (or subclass thereof) to use for queries
-        * @cfg {number} [limit=10] Maximum number of results to load
-        * @cfg {mw.widgets.CategorySelector.SearchType[]} [searchTypes=[mw.widgets.CategorySelector.SearchType.OpenSearch]]
-        *   Default search API to use when searching.
-        */
-       function CategorySelector( config ) {
-               // Config initialization
-               config = $.extend( {
-                       limit: 10,
-                       searchTypes: [ CategorySelector.SearchType.OpenSearch ]
-               }, config );
-               this.limit = config.limit;
-               this.searchTypes = config.searchTypes;
-               this.validateSearchTypes();
-
-               // Parent constructor
-               mw.widgets.CategorySelector.parent.call( this, $.extend( true, {}, config, {
-                       menu: {
-                               filterFromInput: false
-                       },
-                       placeholder: mw.msg( 'mw-widgets-categoryselector-add-category-placeholder' ),
-                       // This allows the user to both select non-existent categories, and prevents the selector from
-                       // being wiped from #onMenuItemsChange when we change the available options in the dropdown
-                       allowArbitrary: true
-               } ) );
-
-               // Mixin constructors
-               OO.ui.mixin.PendingElement.call( this, $.extend( {}, config, { $pending: this.$handle } ) );
-
-               // Event handler to call the autocomplete methods
-               this.$input.on( 'change input cut paste', OO.ui.debounce( this.updateMenuItems.bind( this ), 100 ) );
-
-               // Initialize
-               this.api = config.api || new mw.Api();
-               this.searchCache = {};
-       }
-
-       /* Setup */
-
-       OO.inheritClass( CategorySelector, OO.ui.CapsuleMultiselectWidget );
-       OO.mixinClass( CategorySelector, OO.ui.mixin.PendingElement );
-       CSP = CategorySelector.prototype;
-
-       /* Methods */
-
-       /**
-        * Gets new items based on the input by calling
-        * {@link #getNewMenuItems getNewItems} and updates the menu
-        * after removing duplicates based on the data value.
-        *
-        * @private
-        * @method
-        */
-       CSP.updateMenuItems = function () {
-               this.getMenu().clearItems();
-               this.getNewMenuItems( this.$input.val() ).then( function ( items ) {
-                       var existingItems, filteredItems,
-                               menu = this.getMenu();
-
-                       // Never show the menu if the input lost focus in the meantime
-                       if ( !this.$input.is( ':focus' ) ) {
-                               return;
-                       }
-
-                       // Array of strings of the data of OO.ui.MenuOptionsWidgets
-                       existingItems = menu.getItems().map( function ( item ) {
-                               return item.data;
-                       } );
-
-                       // Remove if items' data already exists
-                       filteredItems = items.filter( function ( item ) {
-                               return existingItems.indexOf( item ) === -1;
-                       } );
-
-                       // Map to an array of OO.ui.MenuOptionWidgets
-                       filteredItems = filteredItems.map( function ( item ) {
-                               return new OO.ui.MenuOptionWidget( {
-                                       data: item,
-                                       label: item
-                               } );
-                       } );
-
-                       menu.addItems( filteredItems ).toggle( true );
-               }.bind( this ) );
-       };
-
-       /**
-        * @inheritdoc
-        */
-       CSP.clearInput = function () {
-               CategorySelector.parent.prototype.clearInput.call( this );
-               // Abort all pending requests, we won't need their results
-               this.api.abort();
-       };
-
-       /**
-        * Searches for categories based on the input.
-        *
-        * @private
-        * @method
-        * @param {string} input The input used to prefix search categories
-        * @return {jQuery.Promise} Resolves with an array of categories
-        */
-       CSP.getNewMenuItems = function ( input ) {
-               var i,
-                       promises = [],
-                       deferred = $.Deferred();
-
-               if ( $.trim( input ) === '' ) {
-                       deferred.resolve( [] );
-                       return deferred.promise();
-               }
-
-               // Abort all pending requests, we won't need their results
-               this.api.abort();
-               for ( i = 0; i < this.searchTypes.length; i++ ) {
-                       promises.push( this.searchCategories( input, this.searchTypes[ i ] ) );
-               }
-
-               this.pushPending();
-
-               $.when.apply( $, promises ).done( function () {
-                       var categoryNames,
-                               allData = [],
-                               dataSets = Array.prototype.slice.apply( arguments );
-
-                       // Collect values from all results
-                       allData = allData.concat.apply( allData, dataSets );
-
-                       categoryNames = allData
-                               // Remove duplicates
-                               .filter( function ( value, index, self ) {
-                                       return self.indexOf( value ) === index;
-                               } )
-                               // Get Title objects
-                               .map( function ( name ) {
-                                       return mw.Title.newFromText( name );
-                               } )
-                               // Keep only titles from 'Category' namespace
-                               .filter( function ( title ) {
-                                       return title && title.getNamespaceId() === NS_CATEGORY;
-                               } )
-                               // Convert back to strings, strip 'Category:' prefix
-                               .map( function ( title ) {
-                                       return title.getMainText();
-                               } );
-
-                       deferred.resolve( categoryNames );
-
-               } ).always( this.popPending.bind( this ) );
-
-               return deferred.promise();
-       };
-
-       /**
-        * @inheritdoc
-        */
-       CSP.createItemWidget = function ( data ) {
-               var title = mw.Title.makeTitle( NS_CATEGORY, data );
-               if ( !title ) {
-                       return null;
-               }
-               return new mw.widgets.CategoryCapsuleItemWidget( {
-                       apiUrl: this.api.apiUrl || undefined,
-                       title: title
-               } );
-       };
-
-       /**
-        * @inheritdoc
-        */
-       CSP.getItemFromData = function ( data ) {
-               // This is a bit of a hack... We have to canonicalize the data in the same way that
-               // #createItemWidget and CategoryCapsuleItemWidget will do, otherwise we won't find duplicates.
-               var title = mw.Title.makeTitle( NS_CATEGORY, data );
-               if ( !title ) {
-                       return null;
-               }
-               return OO.ui.mixin.GroupElement.prototype.getItemFromData.call( this, title.getMainText() );
-       };
-
-       /**
-        * Validates the values in `this.searchType`.
-        *
-        * @private
-        * @return {boolean}
-        */
-       CSP.validateSearchTypes = function () {
-               var validSearchTypes = false,
-                       searchTypeEnumCount = Object.keys( CategorySelector.SearchType ).length;
-
-               // Check if all values are in the SearchType enum
-               validSearchTypes = this.searchTypes.every( function ( searchType ) {
-                       return searchType > -1 && searchType < searchTypeEnumCount;
-               } );
-
-               if ( validSearchTypes === false ) {
-                       throw new Error( 'Unknown searchType in searchTypes' );
-               }
-
-               // If the searchTypes has CategorySelector.SearchType.SubCategories
-               // it can be the only search type.
-               if ( this.searchTypes.indexOf( CategorySelector.SearchType.SubCategories ) > -1 &&
-                       this.searchTypes.length > 1
-               ) {
-                       throw new Error( 'Can\'t have additional search types with CategorySelector.SearchType.SubCategories' );
-               }
-
-               // If the searchTypes has CategorySelector.SearchType.ParentCategories
-               // it can be the only search type.
-               if ( this.searchTypes.indexOf( CategorySelector.SearchType.ParentCategories ) > -1 &&
-                       this.searchTypes.length > 1
-               ) {
-                       throw new Error( 'Can\'t have additional search types with CategorySelector.SearchType.ParentCategories' );
-               }
-
-               return true;
-       };
-
-       /**
-        * Sets and validates the value of `this.searchType`.
-        *
-        * @param {mw.widgets.CategorySelector.SearchType[]} searchTypes
-        */
-       CSP.setSearchTypes = function ( searchTypes ) {
-               this.searchTypes = searchTypes;
-               this.validateSearchTypes();
-       };
-
-       /**
-        * Searches categories based on input and searchType.
-        *
-        * @private
-        * @method
-        * @param {string} input The input used to prefix search categories
-        * @param {mw.widgets.CategorySelector.SearchType} searchType
-        * @return {jQuery.Promise} Resolves with an array of categories
-        */
-       CSP.searchCategories = function ( input, searchType ) {
-               var deferred = $.Deferred(),
-                       cacheKey = input + searchType.toString();
-
-               // Check cache
-               if ( this.searchCache[ cacheKey ] !== undefined ) {
-                       return this.searchCache[ cacheKey ];
-               }
-
-               switch ( searchType ) {
-                       case CategorySelector.SearchType.OpenSearch:
-                               this.api.get( {
-                                       formatversion: 2,
-                                       action: 'opensearch',
-                                       namespace: NS_CATEGORY,
-                                       limit: this.limit,
-                                       search: input
-                               } ).done( function ( res ) {
-                                       var categories = res[ 1 ];
-                                       deferred.resolve( categories );
-                               } ).fail( deferred.reject.bind( deferred ) );
-                               break;
-
-                       case CategorySelector.SearchType.InternalSearch:
-                               this.api.get( {
-                                       formatversion: 2,
-                                       action: 'query',
-                                       list: 'allpages',
-                                       apnamespace: NS_CATEGORY,
-                                       aplimit: this.limit,
-                                       apfrom: input,
-                                       apprefix: input
-                               } ).done( function ( res ) {
-                                       var categories = res.query.allpages.map( function ( page ) {
-                                               return page.title;
-                                       } );
-                                       deferred.resolve( categories );
-                               } ).fail( deferred.reject.bind( deferred ) );
-                               break;
-
-                       case CategorySelector.SearchType.Exists:
-                               if ( input.indexOf( '|' ) > -1 ) {
-                                       deferred.resolve( [] );
-                                       break;
-                               }
-
-                               this.api.get( {
-                                       formatversion: 2,
-                                       action: 'query',
-                                       prop: 'info',
-                                       titles: 'Category:' + input
-                               } ).done( function ( res ) {
-                                       var categories = [];
-
-                                       $.each( res.query.pages, function ( index, page ) {
-                                               if ( !page.missing ) {
-                                                       categories.push( page.title );
-                                               }
-                                       } );
-
-                                       deferred.resolve( categories );
-                               } ).fail( deferred.reject.bind( deferred ) );
-                               break;
-
-                       case CategorySelector.SearchType.SubCategories:
-                               if ( input.indexOf( '|' ) > -1 ) {
-                                       deferred.resolve( [] );
-                                       break;
-                               }
-
-                               this.api.get( {
-                                       formatversion: 2,
-                                       action: 'query',
-                                       list: 'categorymembers',
-                                       cmtype: 'subcat',
-                                       cmlimit: this.limit,
-                                       cmtitle: 'Category:' + input
-                               } ).done( function ( res ) {
-                                       var categories = res.query.categorymembers.map( function ( category ) {
-                                               return category.title;
-                                       } );
-                                       deferred.resolve( categories );
-                               } ).fail( deferred.reject.bind( deferred ) );
-                               break;
-
-                       case CategorySelector.SearchType.ParentCategories:
-                               if ( input.indexOf( '|' ) > -1 ) {
-                                       deferred.resolve( [] );
-                                       break;
-                               }
-
-                               this.api.get( {
-                                       formatversion: 2,
-                                       action: 'query',
-                                       prop: 'categories',
-                                       cllimit: this.limit,
-                                       titles: 'Category:' + input
-                               } ).done( function ( res ) {
-                                       var categories = [];
-
-                                       $.each( res.query.pages, function ( index, page ) {
-                                               if ( !page.missing && $.isArray( page.categories ) ) {
-                                                       categories.push.apply( categories, page.categories.map( function ( category ) {
-                                                               return category.title;
-                                                       } ) );
-                                               }
-                                       } );
-
-                                       deferred.resolve( categories );
-                               } ).fail( deferred.reject.bind( deferred ) );
-                               break;
-
-                       default:
-                               throw new Error( 'Unknown searchType' );
-               }
-
-               // Cache the result
-               this.searchCache[ cacheKey ] = deferred.promise();
-
-               return deferred.promise();
-       };
-
-       /**
-        * @enum mw.widgets.CategorySelector.SearchType
-        * Types of search available.
-        */
-       CategorySelector.SearchType = {
-               /** Search using action=opensearch */
-               OpenSearch: 0,
-
-               /** Search using action=query */
-               InternalSearch: 1,
-
-               /** Search for existing categories with the exact title */
-               Exists: 2,
-
-               /** Search only subcategories  */
-               SubCategories: 3,
-
-               /** Search only parent categories */
-               ParentCategories: 4
-       };
-
-       mw.widgets.CategorySelector = CategorySelector;
-}( jQuery, mediaWiki ) );
index f67ed3d..b0c9f91 100644 (file)
                }
        };
 
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.ComplexNamespaceInputWidget.prototype.setDisabled = function ( disabled ) {
+               mw.widgets.ComplexNamespaceInputWidget.parent.prototype.setDisabled.call( this, disabled );
+               this.namespace.setDisabled( disabled );
+
+               if ( this.invert ) {
+                       this.invert.setDisabled( disabled );
+               }
+
+               if ( this.associated ) {
+                       this.associated.setDisabled( disabled );
+               }
+       };
+
 }( jQuery, mediaWiki ) );
index 8f48ec3..030fbb0 100644 (file)
                this.title.restorePreInfuseState( state.title );
        };
 
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.ComplexTitleInputWidget.prototype.setDisabled = function ( disabled ) {
+               mw.widgets.ComplexTitleInputWidget.parent.prototype.setDisabled.call( this, disabled );
+               this.namespace.setDisabled( disabled );
+               this.title.setDisabled( disabled );
+       };
+
 }( jQuery, mediaWiki ) );
index 3583e5e..51508ab 100644 (file)
 
                if ( config.missing ) {
                        this.$label.addClass( 'new' );
+               } else if ( config.redirect ) {
+                       this.$label.addClass( 'mw-redirect' );
+               } else if ( config.disambiguation ) {
+                       this.$label.addClass( 'mw-disambig' );
                }
 
                if ( config.imageUrl ) {
index f2b6f5f..8c80cb8 100644 (file)
                return mw.ForeignStructuredUpload.BookletLayout.parent.prototype.initialize.call( this ).then(
                        function () {
                                return $.when(
-                                       // Point the CategorySelector to the right wiki
+                                       // Point the CategoryMultiselectWidget to the right wiki
                                        booklet.upload.getApi().then( function ( api ) {
                                                // If this is a ForeignApi, it will have a apiUrl, otherwise we don't need to do anything
                                                if ( api.apiUrl ) {
-                                                       // Can't reuse the same object, CategorySelector calls #abort on its mw.Api instance
+                                                       // Can't reuse the same object, CategoryMultiselectWidget calls #abort on its mw.Api instance
                                                        booklet.categoriesWidget.api = new mw.ForeignApi( api.apiUrl );
                                                }
                                                return $.Deferred().resolve();
                        multiline: true,
                        autosize: true
                } );
-               this.categoriesWidget = new mw.widgets.CategorySelector( {
+               this.categoriesWidget = new mw.widgets.CategoryMultiselectWidget( {
                        // Can't be done here because we don't know the target wiki yet... done in #initialize.
                        // api: new mw.ForeignApi( ... ),
                        $overlay: this.$overlay
index 78634f6..67e2ebb 100644 (file)
                 * This function returns the styleSheet object for convience (due to cross-browsers
                 * difference as to where it is located).
                 *
-                *     var sheet = mw.util.addCSS( '.foobar { display: none; }' );
+                *     var sheet = util.addCSS( '.foobar { display: none; }' );
                 *     $( foo ).click( function () {
                 *         // Toggle the sheet on and off
                 *         sheet.disabled = !sheet.disabled;
                 * (e.g. `document.getElementById( 'foobar' )`) or a jQuery-selector
                 * (e.g. `'#foobar'`) for that item.
                 *
-                *     mw.util.addPortletLink(
+                *     util.addPortletLink(
                 *         'p-tb', 'https://www.mediawiki.org/',
                 *         'mediawiki.org', 't-mworg', 'Go to mediawiki.org', 'm', '#t-print'
                 *     );
                 *
-                *     var node = mw.util.addPortletLink(
+                *     var node = util.addPortletLink(
                 *         'p-tb',
                 *         new mw.Title( 'Special:Example' ).getUrl(),
                 *         'Example'
        }, 'Use mw.notify instead.' );
 
        mw.util = util;
+       module.exports = util;
 
 }( mediaWiki, jQuery ) );
index 8aba831..bafb86a 100644 (file)
@@ -1,42 +1,44 @@
-/* global moment, mw */
+/* global mediaWiki, moment */
 
-// HACK: Overwrite moment's i18n with MediaWiki's for the current language so that
-// wgTranslateNumerals is respected.
-moment.updateLocale( moment.locale(), {
-       preparse: function ( s ) {
-               var i,
-                       table = mw.language.getDigitTransformTable();
-               if ( mw.config.get( 'wgTranslateNumerals' ) ) {
-                       for ( i = 0; i < 10; i++ ) {
-                               if ( table[ i ] !== undefined ) {
-                                       s = s.replace( new RegExp( mw.RegExp.escape( table[ i ] ), 'g' ), i );
+( function ( mw ) {
+       // HACK: Overwrite moment's i18n with MediaWiki's for the current language so that
+       // wgTranslateNumerals is respected.
+       moment.updateLocale( moment.locale(), {
+               preparse: function ( s ) {
+                       var i,
+                               table = mw.language.getDigitTransformTable();
+                       if ( mw.config.get( 'wgTranslateNumerals' ) ) {
+                               for ( i = 0; i < 10; i++ ) {
+                                       if ( table[ i ] !== undefined ) {
+                                               s = s.replace( new RegExp( mw.RegExp.escape( table[ i ] ), 'g' ), i );
+                                       }
                                }
                        }
-               }
-               // HACK: momentjs replaces commas in some languages, which is the only other use of preparse
-               // aside from digit transformation. We can only override preparse, not extend it, so we
-               // have to replicate the comma replacement functionality here.
-               if ( [ 'ar', 'ar-sa', 'fa' ].indexOf( mw.config.get( 'wgUserLanguage' ) ) !== -1 ) {
-                       s = s.replace( /،/g, ',' );
-               }
-               return s;
-       },
-       postformat: function ( s ) {
-               var i,
-                       table = mw.language.getDigitTransformTable();
-               if ( mw.config.get( 'wgTranslateNumerals' ) ) {
-                       for ( i = 0; i < 10; i++ ) {
-                               if ( table[ i ] !== undefined ) {
-                                       s = s.replace( new RegExp( i, 'g' ), table[ i ] );
+                       // HACK: momentjs replaces commas in some languages, which is the only other use of preparse
+                       // aside from digit transformation. We can only override preparse, not extend it, so we
+                       // have to replicate the comma replacement functionality here.
+                       if ( [ 'ar', 'ar-sa', 'fa' ].indexOf( mw.config.get( 'wgUserLanguage' ) ) !== -1 ) {
+                               s = s.replace( /،/g, ',' );
+                       }
+                       return s;
+               },
+               postformat: function ( s ) {
+                       var i,
+                               table = mw.language.getDigitTransformTable();
+                       if ( mw.config.get( 'wgTranslateNumerals' ) ) {
+                               for ( i = 0; i < 10; i++ ) {
+                                       if ( table[ i ] !== undefined ) {
+                                               s = s.replace( new RegExp( i, 'g' ), table[ i ] );
+                                       }
                                }
                        }
+                       // HACK: momentjs replaces commas in some languages, which is the only other use of postformat
+                       // aside from digit transformation. We can only override postformat, not extend it, so we
+                       // have to replicate the comma replacement functionality here.
+                       if ( [ 'ar', 'ar-sa', 'fa' ].indexOf( mw.config.get( 'wgUserLanguage' ) ) !== -1 ) {
+                               s = s.replace( /,/g, '،' );
+                       }
+                       return s;
                }
-               // HACK: momentjs replaces commas in some languages, which is the only other use of postformat
-               // aside from digit transformation. We can only override postformat, not extend it, so we
-               // have to replicate the comma replacement functionality here.
-               if ( [ 'ar', 'ar-sa', 'fa' ].indexOf( mw.config.get( 'wgUserLanguage' ) ) !== -1 ) {
-                       s = s.replace( /,/g, '،' );
-               }
-               return s;
-       }
-} );
+       } );
+}( mediaWiki ) );
index 5ce0b34..784c29c 100644 (file)
@@ -93,7 +93,7 @@ class DbTestPreviewer extends TestRecorder {
                                        $before = 'n';
                                } elseif ( $prevResults[$test] == 1 ) {
                                        $before = 'p';
-                               } else /* if ( $prevResults[$test] == 0 )*/ {
+                               } else /* if ( $prevResults[$test] == 0 ) */ {
                                        $before = 'f';
                                }
 
@@ -101,7 +101,7 @@ class DbTestPreviewer extends TestRecorder {
                                        $after = 'n';
                                } elseif ( $this->results[$test] == 1 ) {
                                        $after = 'p';
-                               } else /*if ( $this->results[$test] == 0 ) */ {
+                               } else /* if ( $this->results[$test] == 0 ) */ {
                                        $after = 'f';
                                }
 
index 04a2a8d..f68f595 100644 (file)
  * @ingroup Testing
  */
 
+use Wikimedia\Rdbms\IMaintainableDatabase;
+
 class DbTestRecorder extends TestRecorder {
        public $version;
+       /** @var Database */
        private $db;
 
-       public function __construct( IDatabase $db ) {
+       public function __construct( IMaintainableDatabase $db ) {
                $this->db = $db;
        }
 
index 35c2480..f100411 100644 (file)
@@ -25,6 +25,7 @@
  * @file
  * @ingroup Testing
  */
+use Wikimedia\Rdbms\IDatabase;
 use MediaWiki\MediaWikiServices;
 use Wikimedia\ScopedCallback;
 
index be6e3a8..7bf2ce2 100644 (file)
@@ -8015,10 +8015,10 @@ title=[[Bug462]]
 !! wikitext
 [[Bu&#103;462]] [[Bug462]]
 !! html/php
-<p><strong class="selflink">Bu&#103;462</strong> <strong class="selflink">Bug462</strong>
+<p><a class="mw-selflink selflink">Bu&#103;462</a> <a class="mw-selflink selflink">Bug462</a>
 </p>
 !! html/php+tidy
-<p><strong class="selflink">Bug462</strong> <strong class="selflink">Bug462</strong></p>
+<p><a class="mw-selflink selflink">Bug462</a> <a class="mw-selflink selflink">Bug462</a></p>
 !! html/parsoid
 <p><a rel="mw:WikiLink" href="./Bug462" title="Bug462">Bug462</a> <a rel="mw:WikiLink" href="./Bug462" title="Bug462">Bug462</a></p>
 !! end
@@ -8047,7 +8047,7 @@ title=[[0]]
 !! wikitext
 [[0]]
 !! html
-<p><strong class="selflink">0</strong>
+<p><a class="mw-selflink selflink">0</a>
 </p>
 !!end
 
@@ -8503,7 +8503,7 @@ parsoid=wt2html,wt2wt,html2html
 !! wikitext
 [[local:Main Page]]
 !! html/php
-<p><strong class="selflink">local:Main Page</strong>
+<p><a class="mw-selflink selflink">local:Main Page</a>
 </p>
 !! html/parsoid
 <p><a rel="mw:WikiLink" href="./Main_Page" title="Main Page">local:Main Page</a></p>
@@ -9962,9 +9962,10 @@ Magic Words LOCAL (UTC)
 Magic Word: {{FULLPAGENAME}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{FULLPAGENAME}}
-!! html
+!! html/*
 <p>User:Ævar Arnfjörð Bjarmason
 </p>
 !! end
@@ -9973,9 +9974,10 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{FULLPAGENAMEE}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{FULLPAGENAMEE}}
-!! html
+!! html/*
 <p>User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
 </p>
 !! end
@@ -9984,9 +9986,10 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{TALKSPACE}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{TALKSPACE}}
-!! html
+!! html/*
 <p>User talk
 </p>
 !! end
@@ -9995,9 +9998,10 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{TALKSPACE}}, same namespace
 !! options
 title=[[User talk:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{TALKSPACE}}
-!! html
+!! html/*
 <p>User talk
 </p>
 !! end
@@ -10006,9 +10010,10 @@ title=[[User talk:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{TALKSPACE}}, main namespace
 !! options
 title=[[Parser Test]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{TALKSPACE}}
-!! html
+!! html/*
 <p>Talk
 </p>
 !! end
@@ -10017,9 +10022,10 @@ title=[[Parser Test]]
 Magic Word: {{TALKSPACEE}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{TALKSPACEE}}
-!! html
+!! html/*
 <p>User_talk
 </p>
 !! end
@@ -10028,9 +10034,10 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{SUBJECTSPACE}}
 !! options
 title=[[User talk:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{SUBJECTSPACE}}
-!! html
+!! html/*
 <p>User
 </p>
 !! end
@@ -10039,9 +10046,10 @@ title=[[User talk:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{SUBJECTSPACE}}, same namespace
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{SUBJECTSPACE}}
-!! html
+!! html/*
 <p>User
 </p>
 !! end
@@ -10050,9 +10058,10 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{SUBJECTSPACE}}, main namespace
 !! options
 title=[[Parser Test]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{SUBJECTSPACE}}
-!! html
+!! html/*
 
 !! end
 
@@ -10060,9 +10069,10 @@ title=[[Parser Test]]
 Magic Word: {{SUBJECTSPACEE}}
 !! options
 title=[[User talk:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{SUBJECTSPACEE}}
-!! html
+!! html/*
 <p>User
 </p>
 !! end
@@ -10071,9 +10081,10 @@ title=[[User talk:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{NAMESPACE}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{NAMESPACE}}
-!! html
+!! html/*
 <p>User
 </p>
 !! end
@@ -10082,9 +10093,10 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{NAMESPACEE}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{NAMESPACEE}}
-!! html
+!! html/*
 <p>User
 </p>
 !! end
@@ -10093,9 +10105,10 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{NAMESPACENUMBER}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{NAMESPACENUMBER}}
-!! html
+!! html/*
 <p>2
 </p>
 !! end
@@ -10104,9 +10117,10 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{SUBPAGENAME}}
 !! options
 title=[[Ævar Arnfjörð Bjarmason/sub ö]] subpage
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{SUBPAGENAME}}
-!! html
+!! html/*
 <p>sub ö
 </p>
 !! end
@@ -10115,9 +10129,10 @@ title=[[Ævar Arnfjörð Bjarmason/sub ö]] subpage
 Magic Word: {{SUBPAGENAMEE}}
 !! options
 title=[[Ævar Arnfjörð Bjarmason/sub ö]] subpage
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{SUBPAGENAMEE}}
-!! html
+!! html/*
 <p>sub_%C3%B6
 </p>
 !! end
@@ -10126,9 +10141,10 @@ title=[[Ævar Arnfjörð Bjarmason/sub ö]] subpage
 Magic Word: {{ROOTPAGENAME}}
 !! options
 title=[[Ævar Arnfjörð Bjarmason/sub/sub2]] subpage
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{ROOTPAGENAME}}
-!! html
+!! html/*
 <p>Ævar Arnfjörð Bjarmason
 </p>
 !! end
@@ -10137,9 +10153,10 @@ title=[[Ævar Arnfjörð Bjarmason/sub/sub2]] subpage
 Magic Word: {{ROOTPAGENAMEE}}
 !! options
 title=[[Ævar Arnfjörð Bjarmason/sub/sub2]] subpage
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{ROOTPAGENAMEE}}
-!! html
+!! html/*
 <p>%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
 </p>
 !! end
@@ -10148,9 +10165,10 @@ title=[[Ævar Arnfjörð Bjarmason/sub/sub2]] subpage
 Magic Word: {{BASEPAGENAME}}
 !! options
 title=[[Ævar Arnfjörð Bjarmason/sub]] subpage
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{BASEPAGENAME}}
-!! html
+!! html/*
 <p>Ævar Arnfjörð Bjarmason
 </p>
 !! end
@@ -10159,9 +10177,10 @@ title=[[Ævar Arnfjörð Bjarmason/sub]] subpage
 Magic Word: {{BASEPAGENAMEE}}
 !! options
 title=[[Ævar Arnfjörð Bjarmason/sub]] subpage
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{BASEPAGENAMEE}}
-!! html
+!! html/*
 <p>%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
 </p>
 !! end
@@ -10170,9 +10189,10 @@ title=[[Ævar Arnfjörð Bjarmason/sub]] subpage
 Magic Word: {{TALKPAGENAME}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{TALKPAGENAME}}
-!! html
+!! html/*
 <p>User talk:Ævar Arnfjörð Bjarmason
 </p>
 !! end
@@ -10181,9 +10201,10 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{TALKPAGENAMEE}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{TALKPAGENAMEE}}
-!! html
+!! html/*
 <p>User_talk:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
 </p>
 !! end
@@ -10192,9 +10213,10 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{SUBJECTPAGENAME}}
 !! options
 title=[[User talk:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{SUBJECTPAGENAME}}
-!! html
+!! html/*
 <p>User:Ævar Arnfjörð Bjarmason
 </p>
 !! end
@@ -10203,18 +10225,21 @@ title=[[User talk:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{SUBJECTPAGENAMEE}}
 !! options
 title=[[User talk:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{SUBJECTPAGENAMEE}}
-!! html
+!! html/*
 <p>User:%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
 </p>
 !! end
 
 !! test
 Magic Word: {{NUMBEROFFILES}}
+!! options
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{NUMBEROFFILES}}
-!! html
+!! html/*
 <p>7
 </p>
 !! end
@@ -10223,9 +10248,10 @@ Magic Word: {{NUMBEROFFILES}}
 Magic Word: {{PAGENAME}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{PAGENAME}}
-!! html
+!! html/*
 <p>Ævar Arnfjörð Bjarmason
 </p>
 !! end
@@ -10234,6 +10260,7 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{PAGENAME}} with metacharacters
 !! options
 title=[['foo & bar = baz']]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 ''{{PAGENAME}}''
 !! html/php
@@ -10247,6 +10274,7 @@ title=[['foo & bar = baz']]
 Magic Word: {{PAGENAME}} with metacharacters (T28781)
 !! options
 title=[[*RFC 1234 http://example.com/]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{PAGENAME}}
 !! html/php
@@ -10260,9 +10288,10 @@ title=[[*RFC 1234 http://example.com/]]
 Magic Word: {{PAGENAMEE}}
 !! options
 title=[[User:Ævar Arnfjörð Bjarmason]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{PAGENAMEE}}
-!! html
+!! html/*
 <p>%C3%86var_Arnfj%C3%B6r%C3%B0_Bjarmason
 </p>
 !! end
@@ -10271,6 +10300,7 @@ title=[[User:Ævar Arnfjörð Bjarmason]]
 Magic Word: {{PAGENAMEE}} with metacharacters (T28781)
 !! options
 title=[[*RFC 1234 http://example.com/]]
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{PAGENAMEE}}
 !! html/php
@@ -10282,53 +10312,65 @@ title=[[*RFC 1234 http://example.com/]]
 
 !! test
 Magic Word: {{REVISIONID}}
+!! options
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{REVISIONID}}
-!! html
+!! html/*
 <p>1337
 </p>
 !! end
 
 !! test
 Magic Word: {{SCRIPTPATH}}
+!! options
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{SCRIPTPATH}}
-!! html
+!! html/*
 
 !! end
 
 !! test
 Magic Word: {{STYLEPATH}}
+!! options
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{STYLEPATH}}
-!! html
+!! html/*
 <p>/skins
 </p>
 !! end
 
 !! test
 Magic Word: {{SERVER}}
+!! options
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{SERVER}}
-!! html
+!! html/*
 <p><a rel="nofollow" class="external free" href="http://example.org">http://example.org</a>
 </p>
 !! end
 
 !! test
 Magic Word: {{SERVERNAME}}
+!! options
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{SERVERNAME}}
-!! html
+!! html/*
 <p>example.org
 </p>
 !! end
 
 !! test
 Magic Word: {{SITENAME}}
+!! options
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{SITENAME}}
-!! html
+!! html/*
 <p>MediaWiki
 </p>
 !! end
@@ -10337,18 +10379,21 @@ Magic Word: {{SITENAME}}
 Magic Word: {{PAGELANGUAGE}}
 !! options
 language=fr
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{PAGELANGUAGE}}
-!! html
+!! html/*
 <p>fr
 </p>
 !! end
 
 !! test
 Magic Word: {{PAGELANGUAGE}} on a page with no explicitly set language
+!! options
+parsoid={ "modes": ["wt2html","wt2wt"], "normalizePhp": true }
 !! wikitext
 {{PAGELANGUAGE}}
-!! html
+!! html/*
 <p>en
 </p>
 !! end
@@ -13745,7 +13790,7 @@ Manually-specified thumbnail image
 !! options
 thumbsize=220
 !! wikitext
-[[File:Foobar.jpg|thumb=Thumb.png|Title]]
+[[File:Foobar.jpg|thumbnail=Thumb.png|Title]]
 !! html/php
 <div class="thumb tright"><div class="thumbinner" style="width:137px;"><a href="/wiki/File:Foobar.jpg"><img alt="" src="http://example.com/images/e/ea/Thumb.png" width="135" height="135" class="thumbimage" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>Title</div></div></div>
 
@@ -19069,6 +19114,23 @@ title=[[Parser test]]
 !! end
 ### Note: Above tests excludes the "{{NUMBEROFADMINS}}" magic word because it generates a MySQL error when included.
 
+!! test
+Gallery with valid attributes
+!! wikitext
+<gallery type="123" summary="345">
+File:File:Foobar.jpg
+</gallery>
+!! html/php
+<ul class="gallery mw-gallery-traditional" type="123">
+               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+                       <div class="thumb" style="height: 150px;">File:Foobar.jpg</div>
+                       <div class="gallerytext">
+                       </div>
+               </div></li>
+</ul>
+
+!! end
+
 ## Parsoid thinks the "centre" here is a property, not a caption.
 !! test
 Gallery
@@ -19613,6 +19675,31 @@ File:Test.png
 </gallery>
 !! end
 
+!! test
+Gallery with class attribute
+!! options
+parsoid={
+  "nativeGallery": true
+}
+!! wikitext
+<gallery class="center">
+File:Foobar.jpg
+</gallery>
+!! html/php
+<ul class="gallery mw-gallery-traditional center">
+               <li class="gallerybox" style="width: 155px"><div style="width: 155px">
+                       <div class="thumb" style="width: 150px;"><div style="margin:68px auto;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" width="120" height="14" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/240px-Foobar.jpg 2x" /></a></div></div>
+                       <div class="gallerytext">
+                       </div>
+               </div></li>
+</ul>
+
+!! html/parsoid
+<ul class="gallery mw-gallery-traditional center" typeof="mw:Extension/gallery" about="#mwt2" data-mw='{"name":"gallery","attrs":{"class":"center"},"body":{}}'>
+<li class="gallerybox" style="width: 155px;"><div class="thumb" style="width: 150px; height: 150px;"><span style="display: inline-block; height: 100%; vertical-align: middle;"></span><span typeof="mw:Image" style="vertical-align: middle; display: inline-block;"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/120px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="14" width="120"/></a></span></div><div class="gallerytext"></div></li>
+</ul>
+!! end
+
 !! test
 HTML Hex character encoding (spells the word "JavaScript")
 !! options
@@ -20327,7 +20414,7 @@ title=[[Dunav]] language=sr
 !! wikitext
 Both [[Dunav]] and [[Дунав]] are names for this river.
 !! html
-<p>Both <strong class="selflink">Dunav</strong> and <strong class="selflink">Дунав</strong> are names for this river.
+<p>Both <a class="mw-selflink selflink">Dunav</a> and <a class="mw-selflink selflink">Дунав</a> are names for this river.
 </p>
 !!end
 
@@ -20344,7 +20431,7 @@ title=[[Duna]] language=sr
 !! wikitext
 [[Дуна]] is not a self-link while [[Duna]] and [[Dуна]] are still self-links.
 !! html
-<p><a href="/wiki/%D0%94%D1%83%D0%BD%D0%B0" title="Дуна">Дуна</a> is not a self-link while <strong class="selflink">Duna</strong> and <strong class="selflink">Dуна</strong> are still self-links.
+<p><a href="/wiki/%D0%94%D1%83%D0%BD%D0%B0" title="Дуна">Дуна</a> is not a self-link while <a class="mw-selflink selflink">Duna</a> and <a class="mw-selflink selflink">Dуна</a> are still self-links.
 </p>
 !! end
 
@@ -20355,7 +20442,7 @@ title=[[Duna]] language=sr
 !! wikitext
 [[Dуна]] is a self-link while [[Dunа#Foo]] and [[Dуна#Foo]] are not self-links.
 !! html
-<p><strong class="selflink">Dуна</strong> is a self-link while <a href="/wiki/%D0%94%D1%83%D0%BD%D0%B0" title="Дуна">Dunа#Foo</a> and <a href="/wiki/%D0%94%D1%83%D0%BD%D0%B0" title="Дуна">Dуна#Foo</a> are not self-links.
+<p><a class="mw-selflink selflink">Dуна</a> is a self-link while <a href="/wiki/%D0%94%D1%83%D0%BD%D0%B0" title="Дуна">Dunа#Foo</a> and <a href="/wiki/%D0%94%D1%83%D0%BD%D0%B0" title="Дуна">Dуна#Foo</a> are not self-links.
 </p>
 !! end
 
@@ -21793,7 +21880,7 @@ showindicators
 !! wikitext
 <indicator name=" "></indicator>
 <indicator></indicator>
-!! html
+!! html/php
 <p><span class="error"><strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.</span>
 <span class="error"><strong>Error:</strong> Page status indicators' <code>name</code> attribute must not be empty.</span>
 </p>
@@ -21806,7 +21893,7 @@ showindicators
 !! wikitext
 <indicator name="empty" />
 <indicator name="name"></indicator>
-!! html
+!! html/php
 empty=
 name=
 <p><br />
@@ -21833,7 +21920,7 @@ showindicators
 <indicator name="10">Two
 
 paragraphs</indicator>
-!! html
+!! html/php
 01=hello world
 02=<a href="/wiki/Main_Page" title="Main Page">Main Page</a>
 03=<img alt="Foobar.jpg" src="http://example.com/images/thumb/3/3a/Foobar.jpg/25px-Foobar.jpg" width="25" height="3" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/38px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/50px-Foobar.jpg 2x" />
@@ -22746,14 +22833,12 @@ parsoid={
 ## recognized as an extension tag w/o a native handler.
 !! test
 LST Sections: Newfangled approach
-!! options
-parsoid={ "suppressErrors": true }
 !! wikitext
 <section begin="2011-05-16" />
 <section end="2014-04-10 (MW 1.23wmf22)" />
 !! html/parsoid
-<p><span typeof="mw:Extension/section" about="#mwt1" data-parsoid='{"stx":"html","selfClose":true,"src":"&lt;section begin=\"2011-05-16\" />","tagWidths":[30,0]}'>&lt;section begin="2011-05-16" /></span>
-<span typeof="mw:Extension/section" about="#mwt2" data-parsoid='{"stx":"html","selfClose":true,"src":"&lt;section end=\"2014-04-10 (MW 1.23wmf22)\" />","tagWidths":[43,0]}'>&lt;section end="2014-04-10 (MW 1.23wmf22)" /></span></p>
+<p><span typeof="mw:Error mw:Extension/section" about="#mwt1" data-mw='{"name":"section","attrs":{"begin":"2011-05-16"},"body":null,"errors":[{"key":"mw-api-extexpand-error","message":"Could not expand extension source."}]}'>&lt;section begin="2011-05-16" /></span>
+<span typeof="mw:Error mw:Extension/section" about="#mwt2" data-mw='{"name":"section","attrs":{"end":"2014-04-10 (MW 1.23wmf22)"},"body":null,"errors":[{"key":"mw-api-extexpand-error","message":"Could not expand extension source."}]}'>&lt;section end="2014-04-10 (MW 1.23wmf22)" /></span></p>
 !! end
 
 #--------- Test stripping of empty nodes in template content ----------
@@ -23780,7 +23865,8 @@ Links 4. ExtLinks: Escapes needed
 parsoid=html2wt
 !! html/parsoid
 <p><a rel="mw:ExtLink" href="http://google.com">[google]</a>
-<a rel="mw:ExtLink" href="http://google.com">google]</a></p>
+<a rel="mw:ExtLink" href="http://google.com">google]</a>
+<a rel="mw:ExtLink" href="http://google.com">goog] le</a></p>
 <p>[http://google.com]</p>
 <p>[http://google.com google]</p>
 <p>[<a rel="mw:ExtLink" href="http://google.com">http://google.com</a>]</p>
@@ -23788,6 +23874,7 @@ parsoid=html2wt
 !! wikitext
 [http://google.com <nowiki>[google]</nowiki>]
 [http://google.com <nowiki>google]</nowiki>]
+[http://google.com <nowiki>goog] le</nowiki>]
 
 <nowiki>[http://google.com]</nowiki>
 
@@ -23799,6 +23886,7 @@ parsoid=html2wt
 !! html/php
 <p><a rel="nofollow" class="external text" href="http://google.com">[google]</a>
 <a rel="nofollow" class="external text" href="http://google.com">google]</a>
+<a rel="nofollow" class="external text" href="http://google.com">goog] le</a>
 </p><p>[http://google.com]
 </p><p>[http://google.com google]
 </p><p>[<a rel="nofollow" class="external free" href="http://google.com">http://google.com</a>]
@@ -24142,7 +24230,7 @@ parsoid=html2wt
 !! test
 4. No escaping needed
 !! options
-options=html2wt
+parsoid=html2wt
 !! html/parsoid
 <p>'<span><i>bar</i></span>'
 '<span><b>bar</b></span>'
@@ -24279,7 +24367,7 @@ parsoid=html2wt
 !! test
 4. Leading whitespace in indent-pre suppressing contexts should not be escaped
 !! options
-options=html2wt
+parsoid=html2wt
 !! html/parsoid
  <figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>caption</figcaption></figure>
 !! wikitext
@@ -26633,6 +26721,20 @@ parsoid= {
 # Tests spec'ing wikitext serialization norms |
 # --------------------------------------------
 
+!! test
+Serialize multi-line indent-pre starting with wikitext syntax
+!! options
+parsoid=html2wt
+!! html/parsoid
+<pre>* 1
+** 2
+* 3</pre>
+!! wikitext
+ * 1
+ ** 2
+ * 3
+!! end
+
 !! test
 1. Categories should always be serialized on their own line
 !! options
index 419ff00..bb7267a 100644 (file)
@@ -1768,51 +1768,6 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
                $this->assertEmpty( $errors, implode( "\n", $errors ) );
        }
 
-       /**
-        * @param array $matcher
-        * @param string $actual
-        * @param bool $isHtml
-        *
-        * @return bool
-        */
-       private static function tagMatch( $matcher, $actual, $isHtml = true ) {
-               $dom = PHPUnit_Util_XML::load( $actual, $isHtml );
-               $tags = PHPUnit_Util_XML::findNodes( $dom, $matcher, $isHtml );
-               return count( $tags ) > 0 && $tags[0] instanceof DOMNode;
-       }
-
-       /**
-        * Note: we are overriding this method to remove the deprecated error
-        * @see https://phabricator.wikimedia.org/T71505
-        * @see https://github.com/sebastianbergmann/phpunit/issues/1292
-        * @deprecated
-        *
-        * @param array $matcher
-        * @param string $actual
-        * @param string $message
-        * @param bool $isHtml
-        */
-       public static function assertTag( $matcher, $actual, $message = '', $isHtml = true ) {
-               // trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED);
-
-               self::assertTrue( self::tagMatch( $matcher, $actual, $isHtml ), $message );
-       }
-
-       /**
-        * @see MediaWikiTestCase::assertTag
-        * @deprecated
-        *
-        * @param array $matcher
-        * @param string $actual
-        * @param string $message
-        * @param bool $isHtml
-        */
-       public static function assertNotTag( $matcher, $actual, $message = '', $isHtml = true ) {
-               // trigger_error(__METHOD__ . ' is deprecated', E_USER_DEPRECATED);
-
-               self::assertFalse( self::tagMatch( $matcher, $actual, $isHtml ), $message );
-       }
-
        /**
         * Used as a marker to prevent wfResetOutputBuffers from breaking PHPUnit.
         * @return string
index e3713ab..9fe694d 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use MediaWiki\Session\SessionManager;
+
 class FauxRequestTest extends PHPUnit_Framework_TestCase {
        /**
         * @covers FauxRequest::__construct
@@ -17,6 +19,17 @@ class FauxRequestTest extends PHPUnit_Framework_TestCase {
                $req = new FauxRequest( [], false, 'x' );
        }
 
+       /**
+        * @covers FauxRequest::__construct
+        */
+       public function testConstructWithSession() {
+               $session = SessionManager::singleton()->getEmptySession( new FauxRequest( [] ) );
+               $this->assertInstanceOf(
+                       FauxRequest::class,
+                       new FauxRequest( [], false, $session )
+               );
+       }
+
        /**
         * @covers FauxRequest::getText
         */
index b7249e5..115a8cf 100644 (file)
@@ -41,6 +41,9 @@ class HtmlTest extends MediaWikiTestCase {
 
        /**
         * @covers Html::element
+        * @covers Html::rawElement
+        * @covers Html::openElement
+        * @covers Html::closeElement
         */
        public function testElementBasics() {
                $this->assertEquals(
@@ -302,6 +305,7 @@ class HtmlTest extends MediaWikiTestCase {
 
        /**
         * @covers Html::namespaceSelector
+        * @covers Html::namespaceSelectorOptions
         */
        public function testNamespaceSelector() {
                $this->assertEquals(
index 424218e..58087c1 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+use MediaWiki\MediaWikiServices;
 
 class MessageTest extends MediaWikiLangTestCase {
 
@@ -394,6 +395,22 @@ class MessageTest extends MediaWikiLangTestCase {
                $this->assertSame( 'example &amp;', $msg->escaped() );
        }
 
+       public function testRawHtmlInMsg() {
+               global $wgParserConf;
+               $this->setMwGlobals( 'wgRawHtml', true );
+               // We have to reset the core hook registration.
+               // to register the html hook
+               MessageCache::destroyInstance();
+               $this->setMwGlobals( 'wgParser',
+                       ObjectFactory::constructClassInstance( $wgParserConf['class'], [ $wgParserConf ] )
+               );
+
+               $msg = new RawMessage( '<html><script>alert("xss")</script></html>' );
+               $txt = '<span class="error">&lt;html&gt; tags cannot be' .
+                       ' used outside of normal pages.</span>';
+               $this->assertSame( $txt, $msg->parse() );
+       }
+
        /**
         * @covers Message::params
         * @covers Message::toString
index 5c0a5d9..922f7f1 100644 (file)
@@ -331,8 +331,6 @@ class ApiMainTest extends ApiTestCase {
        }
 
        public static function provideApiErrorFormatterCreation() {
-               global $wgContLang;
-
                return [
                        'Default (BC)' => [ [], [
                                'uselang' => 'ru',
@@ -382,9 +380,9 @@ class ApiMainTest extends ApiTestCase {
                        'uselang=content' => [
                                [ 'uselang' => 'content', 'errorformat' => 'plaintext' ],
                                [
-                                       'uselang' => $wgContLang->getCode(),
+                                       'uselang' => 'en',
                                        'class' => ApiErrorFormatter::class,
-                                       'lang' => $wgContLang->getCode(),
+                                       'lang' => 'en',
                                        'format' => 'plaintext',
                                        'usedb' => false,
                                ]
@@ -394,7 +392,7 @@ class ApiMainTest extends ApiTestCase {
                                [
                                        'uselang' => 'ru',
                                        'class' => ApiErrorFormatter::class,
-                                       'lang' => $wgContLang->getCode(),
+                                       'lang' => 'en',
                                        'format' => 'plaintext',
                                        'usedb' => false,
                                ]
index f57db11..f7be801 100644 (file)
@@ -1083,10 +1083,6 @@ class AuthManagerTest extends \MediaWikiTestCase {
        }
 
        public function provideAuthentication() {
-               $user = \User::newFromName( 'UTSysop' );
-               $id = $user->getId();
-               $name = $user->getName();
-
                $rememberReq = new RememberMeAuthenticationRequest;
                $rememberReq->action = AuthManager::ACTION_LOGIN;
 
@@ -1108,6 +1104,8 @@ class AuthManagerTest extends \MediaWikiTestCase {
                $restartResponse2->createRequest->action = AuthManager::ACTION_LOGIN;
                $restartResponse2->neededRequests = [ $rememberReq, $restartResponse2->createRequest ];
 
+               $userName = 'UTSysop';
+
                return [
                        'Failure in pre-auth' => [
                                StatusValue::newFatal( 'fail-from-pre' ),
@@ -1202,7 +1200,7 @@ class AuthManagerTest extends \MediaWikiTestCase {
                        'Secondary fail' => [
                                StatusValue::newGood(),
                                [
-                                       AuthenticationResponse::newPass( $name ),
+                                       AuthenticationResponse::newPass( $userName ),
                                ],
                                $tmp = [
                                        AuthenticationResponse::newFail( $this->message( 'fail-in-secondary' ) ),
@@ -1212,7 +1210,7 @@ class AuthManagerTest extends \MediaWikiTestCase {
                        'Secondary UI, then abstain' => [
                                StatusValue::newGood(),
                                [
-                                       AuthenticationResponse::newPass( $name ),
+                                       AuthenticationResponse::newPass( $userName ),
                                ],
                                [
                                        $tmp = AuthenticationResponse::newUI( [ $req ], $this->message( '...' ) ),
@@ -1220,19 +1218,19 @@ class AuthManagerTest extends \MediaWikiTestCase {
                                ],
                                [
                                        $tmp,
-                                       AuthenticationResponse::newPass( $name ),
+                                       AuthenticationResponse::newPass( $userName ),
                                ]
                        ],
                        'Secondary pass' => [
                                StatusValue::newGood(),
                                [
-                                       AuthenticationResponse::newPass( $name ),
+                                       AuthenticationResponse::newPass( $userName ),
                                ],
                                [
                                        AuthenticationResponse::newPass()
                                ],
                                [
-                                       AuthenticationResponse::newPass( $name ),
+                                       AuthenticationResponse::newPass( $userName ),
                                ]
                        ],
                ];
index d98311f..a30702f 100644 (file)
@@ -45,13 +45,6 @@ class ChangesListBooleanFilterGroupTest extends MediaWikiTestCase {
 
                $group = new ChangesListBooleanFilterGroup( $definition );
 
-               $specialPage = $this->getMockBuilder( 'ChangesListSpecialPage' )
-                       ->setConstructorArgs( [
-                               'ChangesListSpecialPage',
-                               '',
-                       ] )
-                       ->getMockForAbstractClass();
-
                $this->assertArrayEquals(
                        [
                                'name' => 'some-group',
@@ -91,7 +84,7 @@ class ChangesListBooleanFilterGroupTest extends MediaWikiTestCase {
                                ],
                        ],
 
-                       $group->getJsData( $specialPage ),
+                       $group->getJsData(),
                        /** ordered= */ false,
                        /** named= */ true
                );
index 2c0c22d..000f017 100644 (file)
@@ -108,13 +108,6 @@ class ChangesListBooleanFilterTest extends MediaWikiTestCase {
        }
 
        public function testIsFeatureAvailableOnStructuredUi() {
-               $specialPage = $this->getMockBuilder( 'ChangesListSpecialPage' )
-                       ->setConstructorArgs( [
-                                       'ChangesListSpecialPage',
-                                       '',
-                               ] )
-                       ->getMockForAbstractClass();
-
                $groupA = new ChangesListBooleanFilterGroup( [
                        'name' => 'groupA',
                        'priority' => 1,
@@ -133,7 +126,7 @@ class ChangesListBooleanFilterTest extends MediaWikiTestCase {
 
                $this->assertEquals(
                        true,
-                       $foo->isFeatureAvailableOnStructuredUi( $specialPage ),
+                       $foo->isFeatureAvailableOnStructuredUi(),
                        'Same filter appears on both'
                );
 
@@ -148,7 +141,7 @@ class ChangesListBooleanFilterTest extends MediaWikiTestCase {
 
                $this->assertEquals(
                        false,
-                       $bar->isFeatureAvailableOnStructuredUi( $specialPage ),
+                       $bar->isFeatureAvailableOnStructuredUi(),
                        'Only on unstructured UI'
                );
 
@@ -163,7 +156,7 @@ class ChangesListBooleanFilterTest extends MediaWikiTestCase {
 
                $this->assertEquals(
                        true,
-                       $baz->isFeatureAvailableOnStructuredUi( $specialPage ),
+                       $baz->isFeatureAvailableOnStructuredUi(),
                        'Legacy filter does not appear directly in new UI, but equivalent ' .
                                'does and is marked with isReplacedInStructuredUi'
                );
index 019e257..dc868a8 100644 (file)
@@ -73,12 +73,6 @@ class ChangesListStringOptionsFilterGroupTest extends MediaWikiTestCase {
                        [
                                'name' => 'foo',
                        ],
-                       [
-                               'name' => 'bar',
-                               'isAllowedCallable' => function () {
-                                       return false;
-                               },
-                       ],
                        [
                                'name' => 'baz',
                        ],
@@ -141,25 +135,7 @@ class ChangesListStringOptionsFilterGroupTest extends MediaWikiTestCase {
        }
 
        public function provideNoOpModifyQuery() {
-               $isAllowedFalse = [
-                       'isAllowedCallable' => function () {
-                               return false;
-                       },
-               ];
-
-               $allDisallowedFilters = [
-                       [
-                               'name' => 'disallowed1',
-                       ] + $isAllowedFalse,
-
-                       [
-                               'name' => 'disallowed2',
-                       ] + $isAllowedFalse,
-
-                       [
-                               'name' => 'disallowed3',
-                       ] + $isAllowedFalse,
-               ];
+               $noFilters = [];
 
                $normalFilters = [
                        [
@@ -172,9 +148,9 @@ class ChangesListStringOptionsFilterGroupTest extends MediaWikiTestCase {
 
                return [
                        [
-                               $allDisallowedFilters,
+                               $noFilters,
                                'disallowed1;disallowed3',
-                               'The queryCallable should not be called if no filters are allowed',
+                               'The queryCallable should not be called if there are no filters',
                        ],
 
                        [
@@ -254,8 +230,6 @@ class ChangesListStringOptionsFilterGroupTest extends MediaWikiTestCase {
 
                $group = new ChangesListStringOptionsFilterGroup( $definition );
 
-               $specialPage = $this->getSpecialPage();
-
                $this->assertArrayEquals(
                        [
                                'name' => 'some-group',
@@ -294,7 +268,7 @@ class ChangesListStringOptionsFilterGroupTest extends MediaWikiTestCase {
                                        'foo-description',
                                ],
                        ],
-                       $group->getJsData( $specialPage ),
+                       $group->getJsData(),
                        /** ordered= */ false,
                        /** named= */ true
                );
index 4ff1eb8..97b4c08 100644 (file)
@@ -141,103 +141,69 @@ class RCCacheEntryFactoryTest extends MediaWikiLangTestCase {
                $this->assertEquals( 'prev', $cacheEntry->lastlink, 'pref link for delete log or rev' );
        }
 
+       private function assertValidHTML( $actual ) {
+               // Throws if invalid
+               $doc = PHPUnit_Util_XML::load( $actual, /* isHtml */ true );
+       }
+
        private function assertUserLinks( $user, $cacheEntry ) {
-               $this->assertTag(
-                       [
-                               'tag' => 'a',
-                               'attributes' => [
-                                       'class' => 'new mw-userlink'
-                               ],
-                               'content' => $user
-                       ],
+               $this->assertValidHTML( $cacheEntry->userlink );
+               $this->assertRegExp(
+                       '#^<a .*class="new mw-userlink".*><bdi>' . $user . '</bdi></a>#',
                        $cacheEntry->userlink,
                        'verify user link'
                );
 
-               $this->assertTag(
-                       [
-                               'tag' => 'span',
-                               'attributes' => [
-                                       'class' => 'mw-usertoollinks'
-                               ],
-                               'child' => [
-                                       'tag' => 'a',
-                                       'content' => 'talk',
-                               ]
-                       ],
+               $this->assertValidHTML( $cacheEntry->usertalklink );
+               $this->assertRegExp(
+                       '#^ <span class="mw-usertoollinks">\(.*<a .+>talk</a>.*\)</span>#',
                        $cacheEntry->usertalklink,
                        'verify user talk link'
                );
 
-               $this->assertTag(
-                       [
-                               'tag' => 'span',
-                               'attributes' => [
-                                       'class' => 'mw-usertoollinks'
-                               ],
-                               'child' => [
-                                       'tag' => 'a',
-                                       'content' => 'contribs',
-                               ]
-                       ],
+               $this->assertValidHTML( $cacheEntry->usertalklink );
+               $this->assertRegExp(
+                       '#^ <span class="mw-usertoollinks">\(.*<a .+>contribs</a>.*\)</span>$#',
                        $cacheEntry->usertalklink,
                        'verify user tool links'
                );
        }
 
        private function assertDeleteLogLink( $cacheEntry ) {
-               $this->assertTag(
-                       [
-                               'tag' => 'a',
-                               'attributes' => [
-                                       'href' => '/wiki/Special:Log/delete',
-                                       'title' => 'Special:Log/delete'
-                               ],
-                               'content' => 'Deletion log'
-                       ],
+               $this->assertEquals(
+                       '(<a href="/wiki/Special:Log/delete" title="Special:Log/delete">Deletion log</a>)',
                        $cacheEntry->link,
                        'verify deletion log link'
                );
+
+               $this->assertValidHTML( $cacheEntry->link );
        }
 
        private function assertRevDel( $cacheEntry ) {
-               $this->assertTag(
-                       [
-                               'tag' => 'span',
-                               'attributes' => [
-                                       'class' => 'history-deleted'
-                               ],
-                               'content' => '(username removed)'
-                       ],
+               $this->assertEquals(
+                       ' <span class="history-deleted">(username removed)</span>',
                        $cacheEntry->userlink,
                        'verify user link for change with deleted revision and user'
                );
+               $this->assertValidHTML( $cacheEntry->userlink );
        }
 
        private function assertTitleLink( $title, $cacheEntry ) {
-               $this->assertTag(
-                       [
-                               'tag' => 'a',
-                               'attributes' => [
-                                       'href' => '/wiki/' . $title,
-                                       'title' => $title
-                               ],
-                               'content' => $title
-                       ],
+               $this->assertEquals(
+                       '<a href="/wiki/' . $title . '" title="' . $title . '">' . $title . '</a>',
                        $cacheEntry->link,
                        'verify title link'
                );
+               $this->assertValidHTML( $cacheEntry->link );
        }
 
        private function assertQueryLink( $content, $params, $link ) {
-               $this->assertTag(
-                       [
-                               'tag' => 'a',
-                               'content' => $content
-                       ],
+               $this->assertRegExp(
+                       "#^<a .+>$content</a>$#",
                        $link,
-                       'assert query link element'
+                       'verify query link element'
                );
+               $this->assertValidHTML( $link );
 
                foreach ( $params as $key => $value ) {
                        $this->assertRegExp( '/' . $key . '=' . $value . '/', $link, "verify $key link params" );
index 606a209..45791e2 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\Rdbms\IDatabase;
+
 /**
  * @group Database
  * @group Database
index 036baa8..3693a27 100644 (file)
@@ -66,6 +66,13 @@ class HttpTest extends MediaWikiTestCase {
         * @covers Http::getProxy
         */
        public function testGetProxy() {
+               $this->setMwGlobals( 'wgHTTPProxy', false );
+               $this->assertEquals(
+                       '',
+                       Http::getProxy(),
+                       'default setting'
+               );
+
                $this->setMwGlobals( 'wgHTTPProxy', 'proxy.domain.tld' );
                $this->assertEquals(
                        'proxy.domain.tld',
@@ -140,50 +147,56 @@ class HttpTest extends MediaWikiTestCase {
                ];
        }
 
+       public static function provideRelativeRedirects() {
+               return [
+                       [
+                               'location' => [ 'http://newsite/file.ext', '/newfile.ext' ],
+                               'final' => 'http://newsite/newfile.ext',
+                               'Relative file path Location: interpreted as full URL'
+                       ],
+                       [
+                               'location' => [ 'https://oldsite/file.ext' ],
+                               'final' => 'https://oldsite/file.ext',
+                               'Location to the HTTPS version of the site'
+                       ],
+                       [
+                               'location' => [
+                                       '/anotherfile.ext',
+                                       'http://anotherfile/hoster.ext',
+                                       'https://anotherfile/hoster.ext'
+                               ],
+                               'final' => 'https://anotherfile/hoster.ext',
+                               'Relative file path Location: should keep the latest host and scheme!'
+                       ],
+                       [
+                               'location' => [ '/anotherfile.ext' ],
+                               'final' => 'http://oldsite/anotherfile.ext',
+                               'Relative Location without domain '
+                       ],
+                       [
+                               'location' => null,
+                               'final' => 'http://oldsite/file.ext',
+                               'No Location (no redirect) '
+                       ],
+               ];
+       }
+
        /**
         * Warning:
         *
         * These tests are for code that makes use of an artifact of how CURL
         * handles header reporting on redirect pages, and will need to be
-        * rewritten when T31232 is taken care of (high-level handling of
-        * HTTP redirects).
+        * rewritten when T31232 is taken care of (high-level handling of HTTP redirects).
+        *
+        * @dataProvider provideRelativeRedirects
+        * @covers MWHttpRequest::getFinalUrl
         */
-       public function testRelativeRedirections() {
+       public function testRelativeRedirections( $location, $final, $message = null ) {
                $h = MWHttpRequestTester::factory( 'http://oldsite/file.ext', [], __METHOD__ );
-
-               # Forge a Location header
-               $h->setRespHeaders( 'location', [
-                               'http://newsite/file.ext',
-                               '/newfile.ext',
-                       ]
-               );
-               # Verify we correctly fix the Location
-               $this->assertEquals(
-                       'http://newsite/newfile.ext',
-                       $h->getFinalUrl(),
-                       "Relative file path Location: interpreted as full URL"
-               );
-
-               $h->setRespHeaders( 'location', [
-                               'https://oldsite/file.ext'
-                       ]
-               );
-               $this->assertEquals(
-                       'https://oldsite/file.ext',
-                       $h->getFinalUrl(),
-                       "Location to the HTTPS version of the site"
-               );
-
-               $h->setRespHeaders( 'location', [
-                               '/anotherfile.ext',
-                               'http://anotherfile/hoster.ext',
-                               'https://anotherfile/hoster.ext'
-                       ]
-               );
-               $this->assertEquals(
-                       'https://anotherfile/hoster.ext',
-                       $h->getFinalUrl( "Relative file path Location: should keep the latest host and scheme!" )
-               );
+               // Forge a Location header
+               $h->setRespHeaders( 'location', $location );
+               // Verify it correctly fixes the Location
+               $this->assertEquals( $final, $h->getFinalUrl(), $message );
        }
 
        /**
@@ -201,8 +214,6 @@ class HttpTest extends MediaWikiTestCase {
         * Extension API: 20140829
         *
         * Commented out constants that were removed in PHP 5.6.0
-        *
-        * @covers CurlHttpRequest::execute
         */
        public function provideCurlConstants() {
                return [
@@ -481,9 +492,8 @@ class HttpTest extends MediaWikiTestCase {
 
        /**
         * Added this test based on an issue experienced with HHVM 3.3.0-dev
-        * where it did not define a cURL constant.
+        * where it did not define a cURL constant. T72570
         *
-        * T72570
         * @dataProvider provideCurlConstants
         */
        public function testCurlConstants( $value ) {
index 2e5c0bb..42f08cc 100644 (file)
@@ -18,6 +18,81 @@ class CSSMinTest extends MediaWikiTestCase {
                ] );
        }
 
+       /**
+        * @dataProvider mimeTypeProvider
+        */
+       public function testGetMimeType( $fileContents, $fileExtension, $expected ) {
+               $fileName = wfTempDir() . DIRECTORY_SEPARATOR . uniqid( 'MW_PHPUnit_CSSMinTest_' ) . '.'
+                       . $fileExtension;
+               $this->addTmpFiles( $fileName );
+               file_put_contents( $fileName, $fileContents );
+               $this->assertSame( $expected, CSSMin::getMimeType( $fileName ) );
+       }
+
+       public function mimeTypeProvider() {
+               return [
+                       'JPEG with short extension' => [
+                               "\xFF\xD8\xFF",
+                               'jpg',
+                               'image/jpeg'
+                       ],
+                       'JPEG with long extension' => [
+                               "\xFF\xD8\xFF",
+                               'jpeg',
+                               'image/jpeg'
+                       ],
+                       'PNG' => [
+                               "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A",
+                               'png',
+                               'image/png'
+                       ],
+
+                       'PNG extension but JPEG content' => [
+                               "\xFF\xD8\xFF",
+                               'png',
+                               'image/png'
+                       ],
+                       'JPEG extension but PNG content' => [
+                               "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A",
+                               'jpg',
+                               'image/jpeg'
+                       ],
+                       'PNG extension but SVG content' => [
+                               '<?xml version="1.0"?><svg></svg>',
+                               'png',
+                               'image/png'
+                       ],
+                       'SVG extension but PNG content' => [
+                               "\x89\x50\x4E\x47\x0D\x0A\x1A\x0A",
+                               'svg',
+                               'image/svg+xml'
+                       ],
+
+                       'SVG with all headers' => [
+                               '<?xml version="1.0"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" '
+                               . '"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg></svg>',
+                               'svg',
+                               'image/svg+xml'
+                       ],
+                       'SVG with XML header only' => [
+                               '<?xml version="1.0"?><svg></svg>',
+                               'svg',
+                               'image/svg+xml'
+                       ],
+                       'SVG with DOCTYPE only' => [
+                               '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" '
+                               . '"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg></svg>',
+                               'svg',
+                               'image/svg+xml'
+                       ],
+                       'SVG without any header' => [
+                               '<svg></svg>',
+                               'svg',
+                               'image/svg+xml'
+                       ],
+               ];
+       }
+
        /**
         * @dataProvider provideMinifyCases
         * @covers CSSMin::minify
index f8dda6f..3e0a61e 100644 (file)
@@ -26,20 +26,24 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
        public function testClosureExpansionDisabled() {
                $obj = ObjectFactory::getObjectFromSpec( [
                        'class' => 'ObjectFactoryTestFixture',
-                       'args' => [ function() {
-                               return 'unwrapped';
-                       }, ],
+                       'args' => [
+                               function() {
+                                       return 'wrapped';
+                               },
+                               'unwrapped',
+                       ],
                        'calls' => [
                                'setter' => [ function() {
-                                       return 'unwrapped';
+                                       return 'wrapped';
                                }, ],
                        ],
                        'closure_expansion' => false,
                ] );
                $this->assertInstanceOf( 'Closure', $obj->args[0] );
-               $this->assertSame( 'unwrapped', $obj->args[0]() );
+               $this->assertSame( 'wrapped', $obj->args[0]() );
+               $this->assertSame( 'unwrapped', $obj->args[1] );
                $this->assertInstanceOf( 'Closure', $obj->setterArgs[0] );
-               $this->assertSame( 'unwrapped', $obj->setterArgs[0]() );
+               $this->assertSame( 'wrapped', $obj->setterArgs[0]() );
        }
 
        /**
@@ -49,20 +53,24 @@ class ObjectFactoryTest extends PHPUnit_Framework_TestCase {
        public function testClosureExpansionEnabled() {
                $obj = ObjectFactory::getObjectFromSpec( [
                        'class' => 'ObjectFactoryTestFixture',
-                       'args' => [ function() {
-                               return 'unwrapped';
-                       }, ],
+                       'args' => [
+                               function() {
+                                       return 'wrapped';
+                               },
+                               'unwrapped',
+                       ],
                        'calls' => [
                                'setter' => [ function() {
-                                       return 'unwrapped';
+                                       return 'wrapped';
                                }, ],
                        ],
                        'closure_expansion' => true,
                ] );
                $this->assertInternalType( 'string', $obj->args[0] );
-               $this->assertSame( 'unwrapped', $obj->args[0] );
+               $this->assertSame( 'wrapped', $obj->args[0] );
+               $this->assertSame( 'unwrapped', $obj->args[1] );
                $this->assertInternalType( 'string', $obj->setterArgs[0] );
-               $this->assertSame( 'unwrapped', $obj->setterArgs[0] );
+               $this->assertSame( 'wrapped', $obj->setterArgs[0] );
 
                $obj = ObjectFactory::getObjectFromSpec( [
                        'class' => 'ObjectFactoryTestFixture',
index c4db0cf..f44baeb 100644 (file)
@@ -5,6 +5,40 @@
  */
 class HashBagOStuffTest extends PHPUnit_Framework_TestCase {
 
+       /**
+        * @covers HashBagOStuff::__construct
+        */
+       public function testConstruct() {
+               $this->assertInstanceOf(
+                       HashBagOStuff::class,
+                       new HashBagOStuff()
+               );
+       }
+
+       /**
+        * @covers HashBagOStuff::__construct
+        * @expectedException InvalidArgumentException
+        */
+       public function testConstructBadZero() {
+               $cache = new HashBagOStuff( [ 'maxKeys' => 0 ] );
+       }
+
+       /**
+        * @covers HashBagOStuff::__construct
+        * @expectedException InvalidArgumentException
+        */
+       public function testConstructBadNeg() {
+               $cache = new HashBagOStuff( [ 'maxKeys' => -1 ] );
+       }
+
+       /**
+        * @covers HashBagOStuff::__construct
+        * @expectedException InvalidArgumentException
+        */
+       public function testConstructBadType() {
+               $cache = new HashBagOStuff( [ 'maxKeys' => 'x' ] );
+       }
+
        /**
         * @covers HashBagOStuff::delete
         */
@@ -56,7 +90,6 @@ class HashBagOStuffTest extends PHPUnit_Framework_TestCase {
        /**
         * Ensure maxKeys eviction prefers keeping new keys.
         *
-        * @covers HashBagOStuff::__construct
         * @covers HashBagOStuff::set
         */
        public function testEvictionAdd() {
@@ -76,7 +109,6 @@ class HashBagOStuffTest extends PHPUnit_Framework_TestCase {
         * Ensure maxKeys eviction prefers recently set keys
         * even if the keys pre-exist.
         *
-        * @covers HashBagOStuff::__construct
         * @covers HashBagOStuff::set
         */
        public function testEvictionSet() {
@@ -102,7 +134,6 @@ class HashBagOStuffTest extends PHPUnit_Framework_TestCase {
        /**
         * Ensure maxKeys eviction prefers recently retrieved keys (LRU).
         *
-        * @covers HashBagOStuff::__construct
         * @covers HashBagOStuff::doGet
         * @covers HashBagOStuff::hasKey
         */
diff --git a/tests/phpunit/includes/objectcache/ObjectCacheTest.php b/tests/phpunit/includes/objectcache/ObjectCacheTest.php
new file mode 100644 (file)
index 0000000..d132183
--- /dev/null
@@ -0,0 +1,82 @@
+<?php
+
+class ObjectCacheTest extends MediaWikiTestCase {
+
+       protected function setUp() {
+               // Parent calls ObjectCache::clear() among other things
+               parent::setUp();
+
+               $this->setCacheConfig();
+               $this->setMwGlobals( [
+                       'wgMainCacheType' => CACHE_NONE,
+                       'wgMessageCacheType' => CACHE_NONE,
+                       'wgParserCacheType' => CACHE_NONE,
+               ] );
+       }
+
+       private function setCacheConfig( $arr = [] ) {
+               $defaults = [
+                       CACHE_NONE => [ 'class' => 'EmptyBagOStuff' ],
+                       CACHE_DB => [ 'class' => 'SqlBagOStuff' ],
+                       CACHE_ANYTHING => [ 'factory' => 'ObjectCache::newAnything' ],
+                       // Mock ACCEL with 'hash' as being installed.
+                       // This makes tests deterministic regardless of APC.
+                       CACHE_ACCEL => [ 'class' => 'HashBagOStuff' ],
+                       'hash' => [ 'class' => 'HashBagOStuff' ],
+               ];
+               $this->setMwGlobals( 'wgObjectCaches', $arr + $defaults );
+       }
+
+       /** @covers ObjectCache::newAnything */
+       public function testNewAnythingNothing() {
+               $this->assertInstanceOf(
+                       SqlBagOStuff::class,
+                       ObjectCache::newAnything( [] ),
+                       'No available types. Fallback to DB'
+               );
+       }
+
+       /** @covers ObjectCache::newAnything */
+       public function testNewAnythingHash() {
+               $this->setMwGlobals( [
+                       'wgMainCacheType' => 'hash'
+               ] );
+
+               $this->assertInstanceOf(
+                       HashBagOStuff::class,
+                       ObjectCache::newAnything( [] ),
+                       'Use an available type (hash)'
+               );
+       }
+
+       /** @covers ObjectCache::newAnything */
+       public function testNewAnythingAccel() {
+               $this->setMwGlobals( [
+                       'wgMainCacheType' => CACHE_ACCEL
+               ] );
+
+               $this->assertInstanceOf(
+                       HashBagOStuff::class,
+                       ObjectCache::newAnything( [] ),
+                       'Use an available type (CACHE_ACCEL)'
+               );
+       }
+
+       /** @covers ObjectCache::newAnything */
+       public function txestNewAnythingNoAccel() {
+               $this->setMwGlobals( [
+                       'wgMainCacheType' => CACHE_ACCEL
+               ] );
+
+               $this->setCacheConfig( [
+                       // Mock APC not being installed (T160519, T147161)
+                       CACHE_ACCEL => [ 'class' => 'EmptyBagOStuff' ]
+               ] );
+
+               $this->assertInstanceOf(
+                       SqlBagOStuff::class,
+                       ObjectCache::newAnything( [] ),
+                       'Fallback to DB if available types fall back to Empty'
+               );
+       }
+}
index bf80845..29e1863 100644 (file)
@@ -44,6 +44,46 @@ class MessageBlobStoreTest extends PHPUnit_Framework_TestCase {
                return $module;
        }
 
+       /** @covers MessageBlobStore::setLogger */
+       public function testSetLogger() {
+               $blobStore = $this->makeBlobStore();
+               $this->assertSame( null, $blobStore->setLogger( new Psr\Log\NullLogger() ) );
+       }
+
+       /** @covers MessageBlobStore::getResourceLoader */
+       public function testGetResourceLoader() {
+               // Call protected method
+               $blobStore = TestingAccessWrapper::newFromObject( $this->makeBlobStore() );
+               $this->assertInstanceOf(
+                       ResourceLoader::class,
+                       $blobStore->getResourceLoader()
+               );
+       }
+
+       /** @covers MessageBlobStore::fetchMessage */
+       public function testFetchMessage() {
+               $module = $this->makeModule( [ 'mainpage' ] );
+               $rl = new ResourceLoader();
+               $rl->register( $module->getName(), $module );
+
+               $blobStore = $this->makeBlobStore( null, $rl );
+               $blob = $blobStore->getBlob( $module, 'en' );
+
+               $this->assertEquals( '{"mainpage":"Main Page"}', $blob, 'Generated blob' );
+       }
+
+       /** @covers MessageBlobStore::fetchMessage */
+       public function testFetchMessageFail() {
+               $module = $this->makeModule( [ 'i-dont-exist' ] );
+               $rl = new ResourceLoader();
+               $rl->register( $module->getName(), $module );
+
+               $blobStore = $this->makeBlobStore( null, $rl );
+               $blob = $blobStore->getBlob( $module, 'en' );
+
+               $this->assertEquals( '{"i-dont-exist":"\u29fci-dont-exist\u29fd"}', $blob, 'Generated blob' );
+       }
+
        public function testGetBlob() {
                $module = $this->makeModule( [ 'foo' ] );
                $rl = new ResourceLoader();
index 6751f4d..17861d8 100644 (file)
@@ -76,11 +76,11 @@ class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
                        'script' => "var a = 'this is';\n {\ninvalid"
                ] );
                $this->assertEquals(
-                       $module->getScript( $context ),
                        'mw.log.error(' .
                                '"JavaScript parse error: Parse error: Unexpected token; ' .
                                'token } expected in file \'input\' on line 3"' .
                        ');',
+                       $module->getScript( $context ),
                        'Replace invalid syntax with error logging'
                );
 
@@ -88,8 +88,8 @@ class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
                        'script' => "\n'valid';"
                ] );
                $this->assertEquals(
-                       $module->getScript( $context ),
                        "\n'valid';",
+                       $module->getScript( $context ),
                        'Leave valid scripts as-is'
                );
        }
@@ -120,13 +120,13 @@ class ResourceLoaderModuleTest extends ResourceLoaderTestCase {
                                '../skins/Example/images/quux.png',
                ];
                $this->assertEquals(
-                       $getRelativePaths->invoke( null, $raw ),
                        $canonical,
+                       $getRelativePaths->invoke( null, $raw ),
                        'Insert placeholders'
                );
                $this->assertEquals(
-                       $expandRelativePaths->invoke( null, $canonical ),
                        $raw,
+                       $expandRelativePaths->invoke( null, $canonical ),
                        'Substitute placeholders'
                );
        }
index 4048ffe..2d0d958 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 use MediaWiki\MediaWikiServices;
+use Wikimedia\Rdbms\IDatabase;
 
 class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
 
@@ -217,6 +218,113 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
                $this->assertEquals( $expected, $module->getTitleInfo( $context ), 'Title info' );
        }
 
+       /**
+        * @covers ResourceLoaderWikiModule::preloadTitleInfo
+        */
+       public function testGetPreloadedBadTitle() {
+               // Mock values
+               $pages = [
+                       // Covers else branch for invalid page name
+                       '[x]' => [ 'type' => 'styles' ],
+               ];
+               $titleInfo = [];
+
+               // Set up objects
+               $module = $this->getMockBuilder( 'TestResourceLoaderWikiModule' )
+                       ->setMethods( [ 'getPages' ] ) ->getMock();
+               $module->method( 'getPages' )->willReturn( $pages );
+               $module::$returnFetchTitleInfo = $titleInfo;
+               $rl = new EmptyResourceLoader();
+               $rl->register( 'testmodule', $module );
+               $context = new ResourceLoaderContext( $rl, new FauxRequest() );
+
+               // Act
+               TestResourceLoaderWikiModule::preloadTitleInfo(
+                       $context,
+                       wfGetDB( DB_REPLICA ),
+                       [ 'testmodule' ]
+               );
+
+               // Assert
+               $module = TestingAccessWrapper::newFromObject( $module );
+               $this->assertEquals( $titleInfo, $module->getTitleInfo( $context ), 'Title info' );
+       }
+
+       /**
+        * @covers ResourceLoaderWikiModule::preloadTitleInfo
+        */
+       public function testGetPreloadedTitleInfoEmpty() {
+               $context = new ResourceLoaderContext( new EmptyResourceLoader(), new FauxRequest() );
+               // Covers early return
+               $this->assertSame(
+                       null,
+                       ResourceLoaderWikiModule::preloadTitleInfo(
+                               $context,
+                               wfGetDB( DB_REPLICA ),
+                               []
+                       )
+               );
+       }
+
+       public static function provideGetContent() {
+               return [
+                       'Bad title' => [ null, '[x]' ],
+                       'Dead redirect' => [ null, [
+                               'text' => 'Dead redirect',
+                               'title' => 'Dead_redirect',
+                               'redirect' => 1,
+                       ] ],
+                       'Bad content model' => [ null, [
+                               'text' => 'MediaWiki:Wikitext',
+                               'ns' => NS_MEDIAWIKI,
+                               'title' => 'Wikitext',
+                       ] ],
+                       'No JS content found' => [ null, [
+                               'text' => 'MediaWiki:Script.js',
+                               'ns' => NS_MEDIAWIKI,
+                               'title' => 'Script.js',
+                       ] ],
+                       'No CSS content found' => [ null, [
+                               'text' => 'MediaWiki:Styles.css',
+                               'ns' => NS_MEDIAWIKI,
+                               'title' => 'Script.css',
+                       ] ],
+               ];
+       }
+
+       /**
+        * @covers ResourceLoaderWikiModule::getContent
+        * @dataProvider provideGetContent
+        */
+       public function testGetContent( $expected, $title ) {
+               $context = $this->getResourceLoaderContext( [], new EmptyResourceLoader );
+               $module = $this->getMockBuilder( 'ResourceLoaderWikiModule' )
+                       ->setMethods( [ 'getContentObj' ] ) ->getMock();
+               $module->expects( $this->any() )
+                       ->method( 'getContentObj' )->willReturn( null );
+
+               if ( is_array( $title ) ) {
+                       $title += [ 'ns' => NS_MAIN, 'id' => 1, 'len' => 1, 'redirect' => 0 ];
+                       $titleText = $title['text'];
+                       // Mock Title db access via LinkCache
+                       MediaWikiServices::getInstance()->getLinkCache()->addGoodLinkObj(
+                               $title['id'],
+                               new TitleValue( $title['ns'], $title['title'] ),
+                               $title['len'],
+                               $title['redirect']
+                       );
+               } else {
+                       $titleText = $title;
+               }
+
+               $module = TestingAccessWrapper::newFromObject( $module );
+               $this->assertEquals(
+                       $expected,
+                       $module->getContent( $titleText )
+               );
+
+       }
+
        /**
         * @covers ResourceLoaderWikiModule::getContent
         */
index 621d6a2..03e341a 100644 (file)
@@ -13,15 +13,42 @@ abstract class AbstractChangesListSpecialPageTestCase extends MediaWikiTestCase
         */
        protected $changesListSpecialPage;
 
+       protected $oldPatrollersGroup;
+
        protected function setUp() {
+               global $wgGroupPermissions;
+
                parent::setUp();
                $this->setMwGlobals( 'wgRCWatchCategoryMembership', true );
+
+               if ( isset( $wgGroupPermissions['patrollers'] ) ) {
+                       $this->oldPatrollersGroup = $wgGroupPermissions['patrollers'];
+               }
+
+               $wgGroupPermissions['patrollers'] = [
+                       'patrol' => true,
+               ];
+       }
+
+       protected function tearDown() {
+               global $wgGroupPermissions;
+
+               parent::tearDown();
+
+               if ( $this->oldPatrollersGroup !== null ) {
+                       $wgGroupPermissions['patrollers'] = $this->oldPatrollersGroup;
+               }
        }
 
        /**
         * @dataProvider provideParseParameters
         */
        public function testParseParameters( $params, $expected ) {
+               $context = $this->changesListSpecialPage->getContext();
+               $context = new DerivativeContext( $context );
+               $context->setUser( $this->getTestUser( [ 'patrollers' ] )->getUser() );
+               $this->changesListSpecialPage->setContext( $context );
+
                $this->changesListSpecialPage->registerFilters();
 
                $opts = new FormOptions();
index c292e97..e10a97f 100644 (file)
@@ -173,7 +173,7 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                $user = $this->getTestUser()->getUser();
                $this->assertConditions(
                        [ # expected
-                               "rc_user != '{$user->getId()}'",
+                               "rc_user_text != '{$user->getName()}'",
                        ],
                        [
                                'hidemyself' => 1,
@@ -199,7 +199,7 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                $user = $this->getTestUser()->getUser();
                $this->assertConditions(
                        [ # expected
-                               "rc_user = '{$user->getId()}'",
+                               "rc_user_text = '{$user->getName()}'",
                        ],
                        [
                                'hidebyothers' => 1,
@@ -225,8 +225,8 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
                $user = $this->getTestUser()->getUser();
                $this->assertConditions(
                        [ # expected
-                               "rc_user != '{$user->getId()}'",
-                               "rc_user = '{$user->getId()}'",
+                               "rc_user_text != '{$user->getName()}'",
+                               "rc_user_text = '{$user->getName()}'",
                        ],
                        [
                                'hidemyself' => 1,
index 067d159..d711bac 100644 (file)
@@ -40,39 +40,39 @@ class NaiveImportTitleFactoryTest extends MediaWikiTestCase {
                return [
                        [
                                new ForeignTitle( 0, '', 'MainNamespaceArticle' ),
-                               Title::newFromText( 'MainNamespaceArticle' )
+                               'MainNamespaceArticle'
                        ],
                        [
                                new ForeignTitle( null, '', 'MainNamespaceArticle' ),
-                               Title::newFromText( 'MainNamespaceArticle' )
+                               'MainNamespaceArticle'
                        ],
                        [
                                new ForeignTitle( 1, 'Discussion', 'Nice_talk' ),
-                               Title::newFromText( 'Talk:Nice_talk' )
+                               'Talk:Nice_talk'
                        ],
                        [
                                new ForeignTitle( 0, '', 'Bogus:Nice_talk' ),
-                               Title::newFromText( 'Bogus:Nice_talk' )
+                               'Bogus:Nice_talk'
                        ],
                        [
                                new ForeignTitle( 100, 'Bogus', 'Nice_talk' ),
-                               Title::newFromText( 'Bogus:Nice_talk' ) // not Portal:Nice_talk
+                               'Bogus:Nice_talk' // not Portal:Nice_talk
                        ],
                        [
                                new ForeignTitle( 1, 'Bogus', 'Nice_talk' ),
-                               Title::newFromText( 'Talk:Nice_talk' ) // not Bogus:Nice_talk
+                               'Talk:Nice_talk' // not Bogus:Nice_talk
                        ],
                        [
                                new ForeignTitle( 100, 'Portal', 'Nice_talk' ),
-                               Title::newFromText( 'Portal:Nice_talk' )
+                               'Portal:Nice_talk'
                        ],
                        [
                                new ForeignTitle( 724, 'Portal', 'Nice_talk' ),
-                               Title::newFromText( 'Portal:Nice_talk' )
+                               'Portal:Nice_talk'
                        ],
                        [
                                new ForeignTitle( 2, 'Portal', 'Nice_talk' ),
-                               Title::newFromText( 'User:Nice_talk' )
+                               'User:Nice_talk'
                        ],
                ];
        }
@@ -80,9 +80,10 @@ class NaiveImportTitleFactoryTest extends MediaWikiTestCase {
        /**
         * @dataProvider basicProvider
         */
-       public function testBasic( ForeignTitle $foreignTitle, Title $title ) {
+       public function testBasic( ForeignTitle $foreignTitle, $titleText ) {
                $factory = new NaiveImportTitleFactory();
                $testTitle = $factory->createTitleFromForeignTitle( $foreignTitle );
+               $title = Title::newFromText( $titleText );
 
                $this->assertTrue( $title->equals( $testTitle ) );
        }
index 01c47fd..9b6ac93 100644 (file)
@@ -40,27 +40,27 @@ class NamespaceImportTitleFactoryTest extends MediaWikiTestCase {
                        [
                                new ForeignTitle( 0, '', 'MainNamespaceArticle' ),
                                0,
-                               Title::newFromText( 'MainNamespaceArticle' )
+                               'MainNamespaceArticle'
                        ],
                        [
                                new ForeignTitle( 0, '', 'MainNamespaceArticle' ),
                                2,
-                               Title::newFromText( 'User:MainNamespaceArticle' )
+                               'User:MainNamespaceArticle'
                        ],
                        [
                                new ForeignTitle( 1, 'Discussion', 'Nice_talk' ),
                                0,
-                               Title::newFromText( 'Nice_talk' )
+                               'Nice_talk'
                        ],
                        [
                                new ForeignTitle( 0, '', 'Bogus:Nice_talk' ),
                                0,
-                               Title::newFromText( 'Bogus:Nice_talk' )
+                               'Bogus:Nice_talk'
                        ],
                        [
                                new ForeignTitle( 0, '', 'Bogus:Nice_talk' ),
                                2,
-                               Title::newFromText( 'User:Bogus:Nice_talk' )
+                               'User:Bogus:Nice_talk'
                        ],
                ];
        }
@@ -68,9 +68,10 @@ class NamespaceImportTitleFactoryTest extends MediaWikiTestCase {
        /**
         * @dataProvider basicProvider
         */
-       public function testBasic( ForeignTitle $foreignTitle, $ns, Title $title ) {
+       public function testBasic( ForeignTitle $foreignTitle, $ns, $titleText ) {
                $factory = new NamespaceImportTitleFactory( $ns );
                $testTitle = $factory->createTitleFromForeignTitle( $foreignTitle );
+               $title = Title::newFromText( $titleText );
 
                $this->assertTrue( $title->equals( $testTitle ) );
        }
index cbf306e..aeb9f0f 100644 (file)
@@ -1,7 +1,7 @@
 <?php
 
 class MockChangesListFilter extends ChangesListFilter {
-       public function displaysOnUnstructuredUi( ChangesListSpecialPage $specialPage ) {
+       public function displaysOnUnstructuredUi() {
                throw new MWException(
                        'Not implemented: If the test relies on this, put it one of the ' .
                        'subclasses\' tests (e.g. ChangesListBooleanFilterTest) ' .
index 01665e5..0e88740 100644 (file)
@@ -1,5 +1,5 @@
 ( function ( mw, $ ) {
-       var
+       var util = require( 'mediawiki.util' ),
                // Based on IPTest.php > testisIPv4
                IPV4_CASES = [
                        [ false, false, 'Boolean false is not an IP' ],
@@ -89,7 +89,7 @@
        } ) );
 
        QUnit.test( 'rawurlencode', function ( assert ) {
-               assert.equal( mw.util.rawurlencode( 'Test:A & B/Here' ), 'Test%3AA%20%26%20B%2FHere' );
+               assert.equal( util.rawurlencode( 'Test:A & B/Here' ), 'Test%3AA%20%26%20B%2FHere' );
        } );
 
        QUnit.test( 'escapeId', function ( assert ) {
                        'Test:A & B/Here': 'Test:A_.26_B.2FHere',
                        'A&B&amp;C&amp;amp;D&amp;amp;amp;E': 'A.26B.26amp.3BC.26amp.3Bamp.3BD.26amp.3Bamp.3Bamp.3BE'
                }, function ( input, output ) {
-                       assert.equal( mw.util.escapeId( input ), output );
+                       assert.equal( util.escapeId( input ), output );
                } );
        } );
 
        QUnit.test( 'wikiUrlencode', function ( assert ) {
-               assert.equal( mw.util.wikiUrlencode( 'Test:A & B/Here' ), 'Test:A_%26_B/Here' );
+               assert.equal( util.wikiUrlencode( 'Test:A & B/Here' ), 'Test:A_%26_B/Here' );
                // See also wfUrlencodeTest.php#provideURLS
                $.each( {
                        '+': '%2B',
                        '<>': '%3C%3E',
                        '\'': '%27'
                }, function ( input, output ) {
-                       assert.equal( mw.util.wikiUrlencode( input ), output );
+                       assert.equal( util.wikiUrlencode( input ), output );
                } );
        } );
 
                        wgPageName: 'Foobar'
                } );
 
-               href = mw.util.getUrl( 'Sandbox' );
+               href = util.getUrl( 'Sandbox' );
                assert.equal( href, '/wiki/Sandbox', 'simple title' );
 
-               href = mw.util.getUrl( 'Foo:Sandbox? 5+5=10! (test)/sub ' );
+               href = util.getUrl( 'Foo:Sandbox? 5+5=10! (test)/sub ' );
                assert.equal( href, '/wiki/Foo:Sandbox%3F_5%2B5%3D10!_(test)/sub_', 'complex title' );
 
                // T149767
-               href = mw.util.getUrl( 'My$$test$$$$$title' );
+               href = util.getUrl( 'My$$test$$$$$title' );
                assert.equal( href, '/wiki/My$$test$$$$$title', 'title with multiple consecutive dollar signs' );
 
-               href = mw.util.getUrl();
+               href = util.getUrl();
                assert.equal( href, '/wiki/Foobar', 'default title' );
 
-               href = mw.util.getUrl( null, { action: 'edit' } );
+               href = util.getUrl( null, { action: 'edit' } );
                assert.equal( href, '/w/index.php?title=Foobar&action=edit', 'default title with query string' );
 
-               href = mw.util.getUrl( 'Sandbox', { action: 'edit' } );
+               href = util.getUrl( 'Sandbox', { action: 'edit' } );
                assert.equal( href, '/w/index.php?title=Sandbox&action=edit', 'simple title with query string' );
 
                // Test fragments
-               href = mw.util.getUrl( 'Foo:Sandbox#Fragment', { action: 'edit' } );
+               href = util.getUrl( 'Foo:Sandbox#Fragment', { action: 'edit' } );
                assert.equal( href, '/w/index.php?title=Foo:Sandbox&action=edit#Fragment', 'namespaced title with query string and fragment' );
 
-               href = mw.util.getUrl( 'Sandbox#', { action: 'edit' } );
+               href = util.getUrl( 'Sandbox#', { action: 'edit' } );
                assert.equal( href, '/w/index.php?title=Sandbox&action=edit', 'title with query string and empty fragment' );
 
-               href = mw.util.getUrl( 'Sandbox', {} );
+               href = util.getUrl( 'Sandbox', {} );
                assert.equal( href, '/wiki/Sandbox', 'title with empty query string' );
 
-               href = mw.util.getUrl( '#Fragment' );
+               href = util.getUrl( '#Fragment' );
                assert.equal( href, '/wiki/#Fragment', 'empty title with fragment' );
 
-               href = mw.util.getUrl( '#Fragment', { action: 'edit' } );
+               href = util.getUrl( '#Fragment', { action: 'edit' } );
                assert.equal( href, '/w/index.php?action=edit#Fragment', 'epmty title with query string and fragment' );
 
-               href = mw.util.getUrl( 'Foo:Sandbox \xC4#Fragment \xC4', { action: 'edit' } );
+               href = util.getUrl( 'Foo:Sandbox \xC4#Fragment \xC4', { action: 'edit' } );
                assert.equal( href, '/w/index.php?title=Foo:Sandbox_%C3%84&action=edit#Fragment_.C3.84', 'title with query string, fragment, and special characters' );
 
-               href = mw.util.getUrl( 'Foo:%23#Fragment', { action: 'edit' } );
+               href = util.getUrl( 'Foo:%23#Fragment', { action: 'edit' } );
                assert.equal( href, '/w/index.php?title=Foo:%2523&action=edit#Fragment', 'title containing %23 (#), fragment, and a query string' );
 
-               href = mw.util.getUrl( '#+&=:;@$-_.!*/[]<>\'§', { action: 'edit' } );
+               href = util.getUrl( '#+&=:;@$-_.!*/[]<>\'§', { action: 'edit' } );
                assert.equal( href, '/w/index.php?action=edit#.2B.26.3D:.3B.40.24-_..21.2A.2F.5B.5D.3C.3E.27.C2.A7', 'fragment with various characters' );
        } );
 
                        wgScriptPath: '/w'
                } );
 
-               assert.equal( mw.util.wikiScript(), mw.config.get( 'wgScript' ),
+               assert.equal( util.wikiScript(), mw.config.get( 'wgScript' ),
                        'wikiScript() returns wgScript'
                );
-               assert.equal( mw.util.wikiScript( 'index' ), mw.config.get( 'wgScript' ),
+               assert.equal( util.wikiScript( 'index' ), mw.config.get( 'wgScript' ),
                        'wikiScript( index ) returns wgScript'
                );
-               assert.equal( mw.util.wikiScript( 'load' ), mw.config.get( 'wgLoadScript' ),
+               assert.equal( util.wikiScript( 'load' ), mw.config.get( 'wgLoadScript' ),
                        'wikiScript( load ) returns wgLoadScript'
                );
-               assert.equal( mw.util.wikiScript( 'api' ), '/w/api.php', 'API path' );
+               assert.equal( util.wikiScript( 'api' ), '/w/api.php', 'API path' );
        } );
 
        QUnit.test( 'addCSS', function ( assert ) {
                var $el, style;
                $el = $( '<div>' ).attr( 'id', 'mw-addcsstest' ).appendTo( '#qunit-fixture' );
 
-               style = mw.util.addCSS( '#mw-addcsstest { visibility: hidden; }' );
+               style = util.addCSS( '#mw-addcsstest { visibility: hidden; }' );
                assert.equal( typeof style, 'object', 'addCSS returned an object' );
                assert.strictEqual( style.disabled, false, 'property "disabled" is available and set to false' );
 
                var url;
 
                url = 'http://example.org/?foo=wrong&foo=right#&foo=bad';
-               assert.equal( mw.util.getParamValue( 'foo', url ), 'right', 'Use latest one, ignore hash' );
-               assert.strictEqual( mw.util.getParamValue( 'bar', url ), null, 'Return null when not found' );
+               assert.equal( util.getParamValue( 'foo', url ), 'right', 'Use latest one, ignore hash' );
+               assert.strictEqual( util.getParamValue( 'bar', url ), null, 'Return null when not found' );
 
                url = 'http://example.org/#&foo=bad';
-               assert.strictEqual( mw.util.getParamValue( 'foo', url ), null, 'Ignore hash if param is not in querystring but in hash (T29427)' );
+               assert.strictEqual( util.getParamValue( 'foo', url ), null, 'Ignore hash if param is not in querystring but in hash (T29427)' );
 
                url = 'example.org?' + $.param( { TEST: 'a b+c' } );
-               assert.strictEqual( mw.util.getParamValue( 'TEST', url ), 'a b+c', 'T32441: getParamValue must understand "+" encoding of space' );
+               assert.strictEqual( util.getParamValue( 'TEST', url ), 'a b+c', 'T32441: getParamValue must understand "+" encoding of space' );
 
                url = 'example.org?' + $.param( { TEST: 'a b+c d' } ); // check for sloppy code from r95332 :)
-               assert.strictEqual( mw.util.getParamValue( 'TEST', url ), 'a b+c d', 'T32441: getParamValue must understand "+" encoding of space (multiple spaces)' );
+               assert.strictEqual( util.getParamValue( 'TEST', url ), 'a b+c d', 'T32441: getParamValue must understand "+" encoding of space (multiple spaces)' );
        } );
 
        QUnit.test( '$content', function ( assert ) {
-               assert.ok( mw.util.$content instanceof jQuery, 'mw.util.$content instance of jQuery' );
-               assert.strictEqual( mw.util.$content.length, 1, 'mw.util.$content must have length of 1' );
+               assert.ok( util.$content instanceof jQuery, 'mw.util.$content instance of jQuery' );
+               assert.strictEqual( util.$content.length, 1, 'mw.util.$content must have length of 1' );
        } );
 
        /**
 
                $( '#qunit-fixture' ).append( pTestTb, pCustom, vectorTabs );
 
-               tbRL = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/ResourceLoader',
+               tbRL = util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/ResourceLoader',
                        'ResourceLoader', 't-rl', 'More info about ResourceLoader on MediaWiki.org ', 'l'
                );
 
                assert.ok( tbRL && tbRL.nodeType, 'addPortletLink returns a DOM Node' );
 
-               tbMW = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/',
+               tbMW = util.addPortletLink( 'p-test-tb', '//mediawiki.org/',
                        'MediaWiki.org', 't-mworg', 'Go to MediaWiki.org', 'm', tbRL );
                $tbMW = $( tbMW );
 
                assert.equal( $tbMW.closest( '.portlet' ).attr( 'id' ), 'p-test-tb', 'Link was inserted within correct portlet' );
                assert.strictEqual( $tbMW.next()[ 0 ], tbRL, 'Link is in the correct position (nextnode as Node object)' );
 
-               cuQuux = mw.util.addPortletLink( 'p-test-custom', '#', 'Quux', null, 'Example [shift-x]', 'q' );
+               cuQuux = util.addPortletLink( 'p-test-custom', '#', 'Quux', null, 'Example [shift-x]', 'q' );
                $cuQuux = $( cuQuux );
 
                assert.equal( $cuQuux.find( 'a' ).attr( 'title' ), 'Example [test-q]', 'Existing accesskey is stripped and updated' );
                        'addPortletLink did not add the item to all <ul> elements in the portlet (T37082)'
                );
 
-               tbRLDM = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
+               tbRLDM = util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
                        'Default modules', 't-rldm', 'List of all default modules ', 'd', '#t-rl' );
 
                assert.strictEqual( $( tbRLDM ).next()[ 0 ], tbRL, 'Link is in the correct position (CSS selector as nextnode)' );
 
-               caFoo = mw.util.addPortletLink( 'p-test-views', '#', 'Foo' );
+               caFoo = util.addPortletLink( 'p-test-views', '#', 'Foo' );
 
                assert.strictEqual( $tbMW.find( 'span' ).length, 0, 'No <span> element should be added for porlets without vectorTabs class.' );
                assert.strictEqual( $( caFoo ).find( 'span' ).length, 1, 'A <span> element should be added for porlets with vectorTabs class.' );
 
-               addedAfter = mw.util.addPortletLink( 'p-test-tb', '#', 'After foo', 'post-foo', 'After foo', null, $( tbRL ) );
+               addedAfter = util.addPortletLink( 'p-test-tb', '#', 'After foo', 'post-foo', 'After foo', null, $( tbRL ) );
                assert.strictEqual( $( addedAfter ).next()[ 0 ], tbRL, 'Link is in the correct position (jQuery object as nextnode)' );
 
                // test case - nonexistent id as next node
-               tbRLDMnonexistentid = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
+               tbRLDMnonexistentid = util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
                        'Default modules', 't-rldm-nonexistent', 'List of all default modules ', 'd', '#t-rl-nonexistent' );
 
                assert.equal( tbRLDMnonexistentid, $( '#p-test-tb li:last' )[ 0 ], 'Fallback to adding at the end (nextnode non-matching CSS selector)' );
 
                // test case - empty jquery object as next node
-               tbRLDMemptyjquery = mw.util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
+               tbRLDMemptyjquery = util.addPortletLink( 'p-test-tb', '//mediawiki.org/wiki/RL/DM',
                        'Default modules', 't-rldm-empty-jquery', 'List of all default modules ', 'd', $( '#t-rl-nonexistent' ) );
 
                assert.equal( tbRLDMemptyjquery, $( '#p-test-tb li:last' )[ 0 ], 'Fallback to adding at the end (nextnode as empty jQuery object)' );
        } );
 
        QUnit.test( 'validateEmail', function ( assert ) {
-               assert.strictEqual( mw.util.validateEmail( '' ), null, 'Should return null for empty string ' );
-               assert.strictEqual( mw.util.validateEmail( 'user@localhost' ), true, 'Return true for a valid e-mail address' );
+               assert.strictEqual( util.validateEmail( '' ), null, 'Should return null for empty string ' );
+               assert.strictEqual( util.validateEmail( 'user@localhost' ), true, 'Return true for a valid e-mail address' );
 
                // testEmailWithCommasAreInvalids
-               assert.strictEqual( mw.util.validateEmail( 'user,foo@example.org' ), false, 'Emails with commas are invalid' );
-               assert.strictEqual( mw.util.validateEmail( 'userfoo@ex,ample.org' ), false, 'Emails with commas are invalid' );
+               assert.strictEqual( util.validateEmail( 'user,foo@example.org' ), false, 'Emails with commas are invalid' );
+               assert.strictEqual( util.validateEmail( 'userfoo@ex,ample.org' ), false, 'Emails with commas are invalid' );
 
                // testEmailWithHyphens
-               assert.strictEqual( mw.util.validateEmail( 'user-foo@example.org' ), true, 'Emails may contain a hyphen' );
-               assert.strictEqual( mw.util.validateEmail( 'userfoo@ex-ample.org' ), true, 'Emails may contain a hyphen' );
+               assert.strictEqual( util.validateEmail( 'user-foo@example.org' ), true, 'Emails may contain a hyphen' );
+               assert.strictEqual( util.validateEmail( 'userfoo@ex-ample.org' ), true, 'Emails may contain a hyphen' );
        } );
 
        QUnit.test( 'isIPv6Address', function ( assert ) {
                $.each( IPV6_CASES, function ( i, ipCase ) {
-                       assert.strictEqual( mw.util.isIPv6Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
+                       assert.strictEqual( util.isIPv6Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
                } );
        } );
 
        QUnit.test( 'isIPv4Address', function ( assert ) {
                $.each( IPV4_CASES, function ( i, ipCase ) {
-                       assert.strictEqual( mw.util.isIPv4Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
+                       assert.strictEqual( util.isIPv4Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
                } );
        } );
 
        QUnit.test( 'isIPAddress', function ( assert ) {
                $.each( IPV4_CASES, function ( i, ipCase ) {
-                       assert.strictEqual( mw.util.isIPv4Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
+                       assert.strictEqual( util.isIPv4Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
                } );
 
                $.each( IPV6_CASES, function ( i, ipCase ) {
-                       assert.strictEqual( mw.util.isIPv6Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
+                       assert.strictEqual( util.isIPv6Address( ipCase[ 1 ] ), ipCase[ 0 ], ipCase[ 2 ] );
                } );
        } );
 }( mediaWiki, jQuery ) );
index 4491c8e..6049eb2 100644 (file)
@@ -1,5 +1,5 @@
-/* eslint no-undef: "error"*/
-/* eslint-env node*/
+/* eslint no-undef: "error" */
+/* eslint-env node */
 'use strict';
 var merge = require( 'deepmerge' ),
        wdioConf = require( './wdio.conf.js' );
index b5dc61a..f132899 100644 (file)
@@ -1,7 +1,7 @@
 /* eslint comma-dangle: 0 */
-/* eslint no-undef: "error"*/
+/* eslint no-undef: "error" */
 /* eslint no-console: 0 */
-/* eslint-env node*/
+/* eslint-env node */
 'use strict';
 
 const path = require( 'path' );